Hi there,
taking a look at arch/x86/power/cpu_(32|64).c, I saw the 32.c one
using the following macros
#define savesegment(seg, value) \
asm("mov %%" #seg ",%0":"=r" (value) : : "memory")
#define loadsegment(seg, 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" \
".previous\n" \
_ASM_EXTABLE(1b,3b) \
: :"r" (value), "r" (0) : "memory")
saving and loading segment registers as in
savesegment(es, ctxt->es);
loadsegment(es, ctxt->es);
the code in cpu_64.c doesn't make use of such macros, doing the following:
saving:
asm volatile ("movw %%es, %0" : "=m" (ctxt->es));
loading:
asm volatile ("movw %0, %%es" :: "r" (ctxt->es));
So, my question is... what's the actual difference between both
versions? Aren't the macros suitable for the 64 version as well?