Skip to content

Commit

Permalink
x86: Optimize loadsegment()
Browse files Browse the repository at this point in the history
Zero the input register in the exception handler instead of
using an extra register to pass in a zero value.

Signed-off-by: Brian Gerst <brgerst@gmail.com>
LKML-Reference: <1259176706-5908-1-git-send-email-brgerst@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Brian Gerst authored and Ingo Molnar committed Nov 26, 2009
1 parent 3c93ca0 commit 79b0379
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions arch/x86/include/asm/system.h
Original file line number Diff line number Diff line change
Expand Up @@ -156,18 +156,19 @@ extern void native_load_gs_index(unsigned);
* segment if something goes wrong..
*/
#define loadsegment(seg, value) \
do { \
unsigned short __val = value; \
asm volatile("\n" \
"1:\t" \
"movl %k0,%%" #seg "\n" \
"2:\n" \
".section .fixup,\"ax\"\n" \
"3:\t" \
"movl %k1, %%" #seg "\n\t" \
"jmp 2b\n" \
"2:\t" \
"xorl %k0,%k0\n\t" \
"jmp 1b\n" \
".previous\n" \
_ASM_EXTABLE(1b,3b) \
: :"r" (value), "r" (0) : "memory")

_ASM_EXTABLE(1b, 2b) \
: "+r" (__val) : : "memory"); \
} while (0)

/*
* Save a segment register away
Expand Down

0 comments on commit 79b0379

Please sign in to comment.