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.web09.6545.1654259206394170514 for ; Fri, 03 Jun 2022 05:26:46 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=dc5148Dc; 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=1654259205; 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=HmwVB5EEUVdqNn9ErlSwRzywEExmi3m/8MUuMu/06UI=; b=dc5148Dc3wFmy7lTMWJ0IvJs4rU+0GeUtwgrFF+JczwQDT9o5VKFP1mjtxKpTVtj1UhIMA dxkXXYbIM8YIBmHF0U/R8v1BCuvwQEsDGQoOVwsgP41sQFWo20n/eU4bJskj7zVaBEwI8S dFoq1/K7dBj5hGbWftZwfGK8m5rk/EM= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-600-axesZPTFPCef1I8YGyfPLw-1; Fri, 03 Jun 2022 08:26:44 -0400 X-MC-Unique: axesZPTFPCef1I8YGyfPLw-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8D4111C006C6; Fri, 3 Jun 2022 12:26:42 +0000 (UTC) Received: from sirius.home.kraxel.org (unknown [10.39.192.40]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6F0C5C15E72; Fri, 3 Jun 2022 12:26:40 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id EAA9818009C4; Fri, 3 Jun 2022 14:26:38 +0200 (CEST) From: "Gerd Hoffmann" To: devel@edk2.groups.io Cc: Jian J Wang , Jiaxin Wu , Sean Brogan , Anthony Perard , Leif Lindholm , Zhiguang Liu , Xiaoyu Lu , Pawel Polawski , Sami Mujawar , Maciej Rabeda , Bob Feng , Jiewen Yao , Andrew Fish , Bret Barkelew , Alexei Fedorov , Guo Dong , Gerd Hoffmann , kilian_kegel@hotmail.com, Maurice Ma , Siyuan Fu , Abner Chang , Zhichao Gao , Wei6 Xu , Supreeth Venkatesh , Julien Grall , Daniel Schaefer , Ard Biesheuvel , Guomin Jiang , Jordan Justen , Oliver Steffen , Sebastien Boeuf , Benjamin You , Min Xu , Ray Ni , Rebecca Cran , Nickle Wang , Michael D Kinney , Tom Lendacky , Sami Mujawar , Peter Grehan , Erdem Aktas , Brijesh Singh , James Bottomley , Yuwei Chen , Liming Gao Subject: [PATCH v4 0/9] consolidate compiler intrinsics Date: Fri, 3 Jun 2022 14:26:29 +0200 Message-Id: <20220603122638.1547060-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 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. v4 changes: - rebase to latest master, solve conflicts due to RVCT removal. - squash commit adding the SPDX tags. 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 (9): 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: 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/ldivmod.S | 0 .../CompilerIntrinsicsLib/Arm/ldivmod.asm | 0 .../Library/CompilerIntrinsicsLib/Arm/llsl.S | 0 .../Library/CompilerIntrinsicsLib/Arm/llsr.S | 0 .../CompilerIntrinsicsLib/Arm/llsr.asm | 0 .../CompilerIntrinsicsLib/Arm/lshrdi3.S | 0 .../CompilerIntrinsicsLib/Arm/memmove.S | 0 .../CompilerIntrinsicsLib/Arm/moddi3.S | 0 .../CompilerIntrinsicsLib/Arm/modsi3.S | 0 .../CompilerIntrinsicsLib/Arm/muldi3.S | 0 .../Library/CompilerIntrinsicsLib/Arm/mullu.S | 0 .../CompilerIntrinsicsLib/Arm/sourcery.S | 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/uwrite.S | 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 + 106 files changed, 1488 insertions(+), 271 deletions(-) delete mode 100644 CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf (64%) 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/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/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/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/sourcery.S (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/uwrite.S (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.36.1