From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=209.132.183.28; helo=mx1.redhat.com; envelope-from=lersek@redhat.com; receiver=edk2-devel@lists.01.org Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id DE14A2115F525 for ; Sat, 29 Sep 2018 15:23:28 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 69B2D3081252; Sat, 29 Sep 2018 22:23:28 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-26.ams2.redhat.com [10.36.116.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 26A843091373; Sat, 29 Sep 2018 22:23:26 +0000 (UTC) From: Laszlo Ersek To: edk2-devel-01 Cc: Liming Gao , Michael D Kinney Date: Sun, 30 Sep 2018 00:23:12 +0200 Message-Id: <20180929222312.32150-6-lersek@redhat.com> In-Reply-To: <20180929222312.32150-1-lersek@redhat.com> References: <20180929222312.32150-1-lersek@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Sat, 29 Sep 2018 22:23:28 +0000 (UTC) Subject: [PATCH 5/5] MdePkg/BaseSynchronizationLib GCC: simplify IA32 InternalSyncCompareExchange64() X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 29 Sep 2018 22:23:29 -0000 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 --- 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 44188e265af2..af39bdeb516c 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" -- 2.14.1.3.gb7cf6e02401b