x86: Optimize loadsegment()
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>
This commit is contained in:
Родитель
3c93ca00ee
Коммит
79b0379cee
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче