MdePkg/BaseSynchronizationLib GCC: simplify IA32 InternalSyncCompareExchange64()
The IA32 variant of InternalSyncCompareExchange64() is correct, but we can simplify it. We don't need to load the lower 32 bits of ExchangeValue into EBX in two steps (first into a general register, then into EBX); we can ask GCC to populate EBX like that itself. Cc: Liming Gao <liming.gao@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1208 Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Acked-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
@@ -193,14 +193,11 @@ InternalSyncCompareExchange64 (
|
||||
)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"push %%ebx \n\t"
|
||||
"movl %2,%%ebx \n\t"
|
||||
"lock \n\t"
|
||||
"cmpxchg8b (%1) \n\t"
|
||||
"pop %%ebx \n\t"
|
||||
: "+A" (CompareValue) // %0
|
||||
: "S" (Value), // %1
|
||||
"r" ((UINT32) ExchangeValue), // %2
|
||||
"b" ((UINT32) ExchangeValue), // %2
|
||||
"c" ((UINT32) (ExchangeValue >> 32)) // %3
|
||||
: "memory",
|
||||
"cc"
|
||||
|
Reference in New Issue
Block a user