[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <ce0170d90903150716t14033a9dr3b3bf028933dde7c@mail.gmail.com>
Date: Sun, 15 Mar 2009 11:16:24 -0300
From: Sergio Luis <eeeesti@...il.com>
To: Ingo Molnar <mingo@...e.hu>, "Rafael J. Wysocki" <rjw@...k.pl>,
Pavel Machek <pavel@...e.cz>,
Linux-kernel Mailing List <linux-kernel@...r.kernel.org>
Subject: x86: asm doubt
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?
Thanks,
Sergio.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists