mirror of https://github.com/acidanthera/audk.git
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:
parent
e5d4e7500f
commit
3a0329bed2
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue