From 3a0329bed2a2c7d1ba45bd2376a2320141ef2bec Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Sat, 29 Sep 2018 23:13:47 +0200 Subject: [PATCH] MdePkg/BaseSynchronizationLib GCC: simplify IA32 InternalSyncCompareExchange64() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Cc: Michael D Kinney Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1208 Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek Reviewed-by: Philippe Mathieu-Daudé Acked-by: Michael D Kinney Reviewed-by: Liming Gao --- MdePkg/Library/BaseSynchronizationLib/Ia32/GccInline.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/MdePkg/Library/BaseSynchronizationLib/Ia32/GccInline.c b/MdePkg/Library/BaseSynchronizationLib/Ia32/GccInline.c index 44188e265a..af39bdeb51 100644 --- a/MdePkg/Library/BaseSynchronizationLib/Ia32/GccInline.c +++ b/MdePkg/Library/BaseSynchronizationLib/Ia32/GccInline.c @@ -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"