From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.groups.io with SMTP id smtpd.web10.8485.1651227629787532066 for ; Fri, 29 Apr 2022 03:20:30 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=GTCM1qMQ; spf=pass (domain: redhat.com, ip: 170.10.133.124, mailfrom: kraxel@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1651227629; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=YsghMmCBGKgJJymq6F270tW+YwoB1mVkkLGqntFFqEs=; b=GTCM1qMQVQgpIExAE6PfzdN/kkzLwZ9Q+cFrMg3cvpSnIDFaudc8lJ4N9rC4bUjw3jSMd3 Lzi8FRdK16rvmz3qnkvwpXxa7thKDcbrTq3CjOl06BPqxq8Hu6xDilZbsVsZCCY5bYgLTy +DiVXv1z4BlJyPEjDhydlUvGDJxvBP4= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-642-J1grYeyyM_6vgzmHKRihMQ-1; Fri, 29 Apr 2022 06:20:24 -0400 X-MC-Unique: J1grYeyyM_6vgzmHKRihMQ-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id E5887811E83; Fri, 29 Apr 2022 10:20:21 +0000 (UTC) Received: from sirius.home.kraxel.org (unknown [10.39.192.13]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3E76E40D1B99; Fri, 29 Apr 2022 10:20:21 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id E434718000B4; Fri, 29 Apr 2022 12:20:19 +0200 (CEST) From: "Gerd Hoffmann" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Erdem Aktas , Maciej Rabeda , Abner Chang , Peter Grehan , Gerd Hoffmann , Yuwei Chen , Jiaxin Wu , Siyuan Fu , Sean Brogan , Anthony Perard , Benjamin You , Guomin Jiang , Leif Lindholm , Rebecca Cran , Wei6 Xu , Nickle Wang , Xiaoyu Lu , Zhichao Gao , kilian_kegel@hotmail.com, Liming Gao , Jordan Justen , Sami Mujawar , Andrew Fish , Sami Mujawar , Oliver Steffen , Alexei Fedorov , Guo Dong , Brijesh Singh , Jian J Wang , Supreeth Venkatesh , Min Xu , Bret Barkelew , Maurice Ma , Pawel Polawski , Daniel Schaefer , Bob Feng , James Bottomley , Jiewen Yao , Ray Ni , Julien Grall , Michael D Kinney , Sebastien Boeuf , Zhiguang Liu , Tom Lendacky Subject: [PATCH v3 00/10] consolidate compiler intrinsics Date: Fri, 29 Apr 2022 12:20:09 +0200 Message-Id: <20220429102019.1375348-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit This is an attept to start cleaning up the messy compiler intrinsics situation. Today we don't have a core intrinsics library, resulting in everybody creating their own. ArmPkg has one, CryptoPkg has one. I'm sure there are many more. This doesn't make sense. Given we can't avoid compiler intrinsics (as proven by the existence of those libraries) we should better have them as core library so we have to maintain a single version only. Given we already have BaseIoLibIntrinsic in MdePkg we can place the compiler intrinsics there too. This little patch series does just that: It moves over the existing ArmPkg intrinsics, fixes them to build on non-arm too, and adds additional bits from the CryptoPkg intrinsics. v3 changes: - rebase to latest master, solve conflicts. v2 changes: - rebase to latest master. - add review tags - add patch moving size_t to header file (patch #3). - add patches copying over more intrinsics from edk2-libc repo (patches #5 -> #10). Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3649 take care, Gerd Gerd Hoffmann (10): MdePkg: promote CompilerIntrinsicsLib from ArmPkg to MdePkg MdePkg/CompilerIntrinsicsLib: fix msft sources for x64 MdePkg/CompilerIntrinsicsLib: move size_t typedef to header file MdePkg/CompilerIntrinsicsLib: move ia32 intrinsics and strcmp MdePkg/CompilerIntrinsicsLib: copy over intrinsics from edk2-libc repo MdePkg/CompilerIntrinsicsLib: add SPDX License tags MdePkg/CompilerIntrinsicsLib: drop include from Gcc.c MdePkg/CompilerIntrinsicsLib: drop debug logging from Gcc.c MdePkg/CompilerIntrinsicsLib: remove duplicate functions from Gcc.c MdePkg/CompilerIntrinsicsLib: add new sources to CompilerIntrinsicsLib.inf ArmVirtPkg/ArmVirt.dsc.inc | 4 +- .../UnitTestFrameworkPkgTarget.dsc.inc | 2 +- ArmPkg/ArmPkg.dsc | 3 +- .../ArmCrashDumpDxe/ArmCrashDumpDxe.dsc | 2 +- ArmPlatformPkg/ArmPlatformPkg.dsc | 2 +- CryptoPkg/CryptoPkg.dsc | 5 +- DynamicTablesPkg/DynamicTablesPkg.dsc | 2 +- EmbeddedPkg/EmbeddedPkg.dsc | 2 +- EmulatorPkg/EmulatorPkg.dsc | 2 +- FatPkg/FatPkg.dsc | 2 +- FmpDevicePkg/FmpDevicePkg.dsc | 4 +- MdeModulePkg/MdeModulePkg.dsc | 2 +- MdePkg/MdePkg.dsc | 1 + NetworkPkg/NetworkPkg.dsc | 4 +- OvmfPkg/AmdSev/AmdSevX64.dsc | 2 +- OvmfPkg/Bhyve/BhyveX64.dsc | 2 +- OvmfPkg/CloudHv/CloudHvX64.dsc | 2 +- OvmfPkg/IntelTdx/IntelTdxX64.dsc | 2 +- OvmfPkg/Microvm/MicrovmX64.dsc | 2 +- OvmfPkg/OvmfPkgIa32.dsc | 2 +- OvmfPkg/OvmfPkgIa32X64.dsc | 2 +- OvmfPkg/OvmfPkgX64.dsc | 2 +- OvmfPkg/OvmfXen.dsc | 2 +- RedfishPkg/RedfishPkg.dsc | 2 +- SecurityPkg/SecurityPkg.dsc | 12 +- ShellPkg/ShellPkg.dsc | 2 +- SignedCapsulePkg/SignedCapsulePkg.dsc | 14 +- StandaloneMmPkg/StandaloneMmPkg.dsc | 2 +- UefiPayloadPkg/UefiPayloadPkg.dsc | 2 +- .../Library/IntrinsicLib/IntrinsicLib.inf | 69 ------ .../CompilerIntrinsicsLib.inf | 33 ++- {ArmPkg => MdePkg}/Include/AsmMacroIoLib.h | 0 .../Library/CompilerIntrinsicsLib/types_ms.h | 14 ++ CryptoPkg/Library/IntrinsicLib/CopyMem.c | 47 ---- .../Library/IntrinsicLib/MemoryIntrinsics.c | 74 ------ .../Library/CompilerIntrinsicsLib/Ia32/Gcc.c | 215 ++++++++++++++++++ .../CompilerIntrinsicsLib}/Ia32/MathFtol.c | 0 .../Ia32/MathLShiftS64.c | 0 .../Ia32/MathRShiftU64.c | 0 .../CompilerIntrinsicsLib/Ia32/lldiv.c | 100 ++++++++ .../CompilerIntrinsicsLib/Ia32/lldvrm.c | 104 +++++++++ .../CompilerIntrinsicsLib/Ia32/llmul.c | 84 +++++++ .../CompilerIntrinsicsLib/Ia32/llrem.c | 97 ++++++++ .../CompilerIntrinsicsLib/Ia32/llshl.c | 10 +- .../CompilerIntrinsicsLib/Ia32/llshr.c | 63 +++++ .../CompilerIntrinsicsLib/Ia32/ulldiv.c | 91 ++++++++ .../CompilerIntrinsicsLib/Ia32/ulldvrm.c | 104 +++++++++ .../CompilerIntrinsicsLib/Ia32/ullrem.c | 97 ++++++++ .../CompilerIntrinsicsLib/Ia32/ullshr.c | 10 +- .../Library/CompilerIntrinsicsLib/memcmp_ms.c | 2 +- .../Library/CompilerIntrinsicsLib/memcpy.c | 0 .../Library/CompilerIntrinsicsLib/memcpy_ms.c | 6 +- .../CompilerIntrinsicsLib/memmove_ms.c | 6 +- .../Library/CompilerIntrinsicsLib/memset.c | 0 .../Library/CompilerIntrinsicsLib/memset_ms.c | 6 +- MdePkg/Library/CompilerIntrinsicsLib/strcmp.c | 33 +++ ArmPkg/ArmPkg.ci.yaml | 1 - .../DEBUG_XCODE31/CompilerIntrinsicsLib.lib | Bin 36072 -> 36072 bytes .../DEBUG_XCODE32/CompilerIntrinsicsLib.lib | Bin 36072 -> 36072 bytes .../Library/IntrinsicLib/BaseIntrinsicLib.uni | 16 -- .../CompilerIntrinsicsLib/AArch64/Atomics.S | 0 .../CompilerIntrinsicsLib/Arm/ashldi3.S | 0 .../CompilerIntrinsicsLib/Arm/ashrdi3.S | 0 .../CompilerIntrinsicsLib/Arm/clzsi2.S | 0 .../CompilerIntrinsicsLib/Arm/ctzsi2.S | 0 .../Library/CompilerIntrinsicsLib/Arm/div.S | 0 .../Library/CompilerIntrinsicsLib/Arm/div.asm | 0 .../CompilerIntrinsicsLib/Arm/divdi3.S | 0 .../CompilerIntrinsicsLib/Arm/divsi3.S | 0 .../Library/CompilerIntrinsicsLib/Arm/lasr.S | 0 .../CompilerIntrinsicsLib/Arm/lasr.asm | 0 .../CompilerIntrinsicsLib/Arm/ldivmod.S | 0 .../CompilerIntrinsicsLib/Arm/ldivmod.asm | 0 .../Library/CompilerIntrinsicsLib/Arm/llsl.S | 0 .../CompilerIntrinsicsLib/Arm/llsl.asm | 0 .../Library/CompilerIntrinsicsLib/Arm/llsr.S | 0 .../CompilerIntrinsicsLib/Arm/llsr.asm | 0 .../CompilerIntrinsicsLib/Arm/lshrdi3.S | 0 .../CompilerIntrinsicsLib/Arm/memmove.S | 0 .../CompilerIntrinsicsLib/Arm/memmove.asm | 0 .../CompilerIntrinsicsLib/Arm/moddi3.S | 0 .../CompilerIntrinsicsLib/Arm/modsi3.S | 0 .../CompilerIntrinsicsLib/Arm/muldi3.S | 0 .../Library/CompilerIntrinsicsLib/Arm/mullu.S | 0 .../CompilerIntrinsicsLib/Arm/mullu.asm | 0 .../CompilerIntrinsicsLib/Arm/sourcery.S | 0 .../CompilerIntrinsicsLib/Arm/switch.asm | 0 .../CompilerIntrinsicsLib/Arm/switch16.S | 0 .../CompilerIntrinsicsLib/Arm/switch32.S | 0 .../CompilerIntrinsicsLib/Arm/switch8.S | 0 .../CompilerIntrinsicsLib/Arm/switchu8.S | 0 .../CompilerIntrinsicsLib/Arm/ucmpdi2.S | 0 .../CompilerIntrinsicsLib/Arm/udivdi3.S | 0 .../CompilerIntrinsicsLib/Arm/udivmoddi4.S | 0 .../CompilerIntrinsicsLib/Arm/udivsi3.S | 0 .../Library/CompilerIntrinsicsLib/Arm/uldiv.S | 0 .../CompilerIntrinsicsLib/Arm/uldiv.asm | 0 .../CompilerIntrinsicsLib/Arm/umoddi3.S | 0 .../CompilerIntrinsicsLib/Arm/umodsi3.S | 0 .../Library/CompilerIntrinsicsLib/Arm/uread.S | 0 .../CompilerIntrinsicsLib/Arm/uread.asm | 0 .../CompilerIntrinsicsLib/Arm/uwrite.S | 0 .../CompilerIntrinsicsLib/Arm/uwrite.asm | 0 .../Ia32/MathLShiftS64.nasm | 0 .../CompilerIntrinsicsLib}/Ia32/MathLlmul.asm | 0 .../CompilerIntrinsicsLib}/Ia32/MathLlshr.asm | 0 .../Ia32/MathRShiftU64.nasm | 0 .../CompilerIntrinsicsLib/Ia32/ashrdi3.S | 68 ++++++ .../CompilerIntrinsicsLib/Ia32/mulll.S | 79 +++++++ .../CompilerIntrinsicsLib/Ia32/shldi3.S | 64 ++++++ .../CompilerIntrinsicsLib/Ia32/udivdi3.S | 85 +++++++ .../CompilerIntrinsicsLib/Ia32/umoddi3.S | 91 ++++++++ MdePkg/MdePkg.ci.yaml | 1 + 113 files changed, 1488 insertions(+), 271 deletions(-) delete mode 100644 CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf (68%) rename {ArmPkg => MdePkg}/Include/AsmMacroIoLib.h (100%) create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/types_ms.h delete mode 100644 CryptoPkg/Library/IntrinsicLib/CopyMem.c delete mode 100644 CryptoPkg/Library/IntrinsicLib/MemoryIntrinsics.c create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/Gcc.c rename {CryptoPkg/Library/IntrinsicLib => MdePkg/Library/CompilerIntrinsicsLib}/Ia32/MathFtol.c (100%) copy {CryptoPkg/Library/IntrinsicLib => MdePkg/Library/CompilerIntrinsicsLib}/Ia32/MathLShiftS64.c (100%) copy {CryptoPkg/Library/IntrinsicLib => MdePkg/Library/CompilerIntrinsicsLib}/Ia32/MathRShiftU64.c (100%) create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/lldiv.c create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/lldvrm.c create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/llmul.c create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/llrem.c rename CryptoPkg/Library/IntrinsicLib/Ia32/MathLShiftS64.c => MdePkg/Library/CompilerIntrinsicsLib/Ia32/llshl.c (61%) create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/llshr.c create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/ulldiv.c create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/ulldvrm.c create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/ullrem.c rename CryptoPkg/Library/IntrinsicLib/Ia32/MathRShiftU64.c => MdePkg/Library/CompilerIntrinsicsLib/Ia32/ullshr.c (62%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/memcmp_ms.c (89%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/memcpy.c (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/memcpy_ms.c (82%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/memmove_ms.c (83%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/memset.c (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/memset_ms.c (80%) create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/strcmp.c delete mode 100644 CryptoPkg/Library/IntrinsicLib/BaseIntrinsicLib.uni rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/AArch64/Atomics.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/ashldi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/ashrdi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/clzsi2.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/ctzsi2.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/div.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/div.asm (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/divdi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/divsi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/lasr.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/lasr.asm (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/ldivmod.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/ldivmod.asm (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/llsl.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/llsl.asm (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/llsr.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/llsr.asm (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/lshrdi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/memmove.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/memmove.asm (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/moddi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/modsi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/muldi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/mullu.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/mullu.asm (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/sourcery.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/switch.asm (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/switch16.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/switch32.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/switch8.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/switchu8.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/ucmpdi2.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/udivdi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/udivmoddi4.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/udivsi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/uldiv.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/uldiv.asm (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/umoddi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/umodsi3.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/uread.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/uread.asm (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/uwrite.S (100%) rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/Arm/uwrite.asm (100%) rename {CryptoPkg/Library/IntrinsicLib => MdePkg/Library/CompilerIntrinsicsLib}/Ia32/MathLShiftS64.nasm (100%) rename {CryptoPkg/Library/IntrinsicLib => MdePkg/Library/CompilerIntrinsicsLib}/Ia32/MathLlmul.asm (100%) rename {CryptoPkg/Library/IntrinsicLib => MdePkg/Library/CompilerIntrinsicsLib}/Ia32/MathLlshr.asm (100%) rename {CryptoPkg/Library/IntrinsicLib => MdePkg/Library/CompilerIntrinsicsLib}/Ia32/MathRShiftU64.nasm (100%) create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/ashrdi3.S create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/mulll.S create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/shldi3.S create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/udivdi3.S create mode 100644 MdePkg/Library/CompilerIntrinsicsLib/Ia32/umoddi3.S -- 2.35.1