Hi Gerd, additionally I would suggest once more to adjust the DLINK_FLAGS in tools_def.txt to hold CompilerNameINTRIN32/64.LIB as a search library as already introduced in https://edk2.groups.io/g/devel/message/86072?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3ACreated%2C%2Ckilian%2C20%2C2%2C0%2C87479913 (here is the entire thread https://edk2.groups.io/g/devel/message/86334?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3ACreated%2C%2Cposterid%3A2193857%2C20%2C2%2C0%2C87479913) In that case you don’t need to take the IntrinsicLibrary into the .INF file, because the intrinsic library is in the compiler’s library search path. That has annoyed UEFI developers world wide for more that a decade. With your solution can you compile + link the body of main() given below in a PEI driver on all targets? Really? Best regards, Kilian [cid:image001.png@01D82DFC.85319FA0] typedef unsigned long long uint64_t; // allow a C99-Standard definition to save ink typedef long long int64_t; // allow another C99-Standard definition to save ink typedef struct _BUFFER { char buffer[5869]; }BUFFER, *PBUFFER; int main(int argc, char** argv) { // // memset() http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf#page=345 // BUFFER buffer = { argc }; // sometimes invokes automatically a function called memset() // // memcpy() http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf#page=337 // PBUFFER pBuf = (void*)argv[1]; *pBuf = buffer; // sometimes invokes automatically a function called memcpy() // // shift operators http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf#page=96 // uint64_t ullshl = ((uint64_t)argc) << 3ULL; // << uint64_t ullshr = ((uint64_t)argc) >> 5ULL; // >> int64_t llshl = (( int64_t)argc) << 7LL; // << int64_t llshr = (( int64_t)argc) >> 11LL; // >> // // multiplicative operators http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf#page=94 // uint64_t ullmul = ((uint64_t)argc) * 13ULL; // * uint64_t ulldiv = ((uint64_t)argc) / 17ULL; // / uint64_t ullrem = ((uint64_t)argc) % 19ULL; // % int64_t llmul = (( int64_t)argc) * 23LL; // * int64_t lldiv = (( int64_t)argc) / 29LL; // / int64_t llrem = (( int64_t)argc) % 31LL; // % //// //// floating point intrinsics //// //volatile double dblmul = ((double)argc) * 37ULL; //volatile double dbldiv = ((double)argc) / 37ULL; //__builtin_trap(); //__debugbreak(); return (int)( ullshl + ullshr + ullmul + ulldiv + ullrem + llshl + llshr + llmul + lldiv + llrem + (uint64_t)pBuf); } From: Yao, Jiewen Sent: Wednesday, March 2, 2022 03:16 AM To: devel@edk2.groups.io; Gao, Liming; kraxel@redhat.com Cc: Lu, Xiaoyu1; Feng, Bob C; 'Rebecca Cran'; 'James Bottomley'; 'Sami Mujawar'; Justen, Jordan L; Aktas, Erdem; 'Supreeth Venkatesh'; Boeuf, Sebastien; Gao, Zhichao; Liu, Zhiguang; 'Maciej Rabeda'; Ma, Maurice; 'Andrew Fish'; 'Ard Biesheuvel'; 'Tom Lendacky'; 'Peter Grehan'; 'Sean Brogan'; Jiang, Guomin; 'Bret Barkelew'; Chen, Christine; You, Benjamin; Schaefer, Daniel; Kinney, Michael D; Xu, Wei6; Wang, Jian J; Wu, Jiaxin; Fu, Siyuan; Dong, Guo; kilian_kegel@hotmail.com; Chang, Abner; 'Oliver Steffen'; 'Leif Lindholm'; 'Brijesh Singh'; Xu, Min M; Ni, Ray; 'Alexei Fedorov'; 'Julien Grall'; Wang, Nickle; 'Pawel Polawski'; 'Anthony Perard' Subject: Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics Acked, for CryptoPkg/OvmfPkg/SecurityPkg/StandaloneMmPkg update. Thank you Yao, Jiewen > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of gaoliming > Sent: Wednesday, March 2, 2022 10:06 AM > To: devel@edk2.groups.io; kraxel@redhat.com > Cc: Lu, Xiaoyu1 ; Feng, Bob C ; > 'Rebecca Cran' ; 'James Bottomley' > ; 'Sami Mujawar' ; Justen, > Jordan L ; Aktas, Erdem > ; Yao, Jiewen ; 'Supreeth > Venkatesh' ; Boeuf, Sebastien > ; Gao, Zhichao ; Liu, > Zhiguang ; 'Maciej Rabeda' > ; Ma, Maurice ; > 'Andrew Fish' ; 'Ard Biesheuvel' > ; 'Tom Lendacky' ; > 'Peter Grehan' ; 'Sean Brogan' > ; Jiang, Guomin ; > 'Bret Barkelew' ; Chen, Christine > ; You, Benjamin ; Schaefer, > Daniel ; Kinney, Michael D > ; Xu, Wei6 ; Wang, Jian J > ; Wu, Jiaxin ; Fu, Siyuan > ; Dong, Guo ; > kilian_kegel@hotmail.com; Chang, Abner ; 'Oliver > Steffen' ; 'Leif Lindholm' ; > 'Brijesh Singh' ; Xu, Min M ; Ni, > Ray ; 'Alexei Fedorov' ; 'Julien > Grall' ; Wang, Nickle ; 'Pawel > Polawski' ; 'Anthony Perard' > > Subject: 回复: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics > > Gerd: > Thanks for your great work. This is a really good progress. I agree to add > CompilerIntrinsicsLib in MdePkg. > > I think we can add this CompilerIntrinsicsLib first to meet with current usage. It > can be extended in future. > > Thanks > Liming > > -----邮件原件----- > > 发件人: devel@edk2.groups.io 代表 Gerd > > Hoffmann > > 发送时间: 2022年3月1日 15:18 > > 收件人: devel@edk2.groups.io > > 抄送: Xiaoyu Lu ; Bob Feng ; > > Rebecca Cran ; James Bottomley > > ; Sami Mujawar ; Jordan > > Justen ; Erdem Aktas ; > > Jiewen Yao ; Supreeth Venkatesh > > ; Sebastien Boeuf > > ; Zhichao Gao ; > > Zhiguang Liu ; Maciej Rabeda > > ; Maurice Ma ; > > Andrew Fish ; Ard Biesheuvel > > ; Tom Lendacky ; > > Peter Grehan ; Sean Brogan > > ; Guomin Jiang ; > > Bret Barkelew ; Yuwei Chen > > ; Benjamin You ; Daniel > > Schaefer ; Liming Gao > > ; Michael D Kinney > > ; Wei6 Xu ; Jian J Wang > > ; Jiaxin Wu ; Siyuan Fu > > ; Gerd Hoffmann ; Sami Mujawar > > ; Guo Dong ; > > kilian_kegel@hotmail.com; Abner Chang ; Oliver > > Steffen ; Leif Lindholm ; > > Brijesh Singh ; Min Xu ; Ray > > Ni ; Alexei Fedorov ; Julien > > Grall ; Nickle Wang ; Pawel > > Polawski ; Anthony Perard > > > > 主题: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics > > > > 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. > > > > take care, > > Gerd > > > > Gerd Hoffmann (3): > > MdePkg: promote CompilerIntrinsicsLib from ArmPkg to MdePkg > > MdePkg/CompilerIntrinsicsLib: fix msft sources for x64 > > MdePkg/CompilerIntrinsicsLib: move ia32 intrinsics and strcmp > > > > 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/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 | 67 ---------------- > > .../CompilerIntrinsicsLib.inf | 15 +++- > > {ArmPkg => MdePkg}/Include/AsmMacroIoLib.h | 0 > > CryptoPkg/Library/IntrinsicLib/CopyMem.c | 47 ----------- > > .../Library/IntrinsicLib/MemoryIntrinsics.c | 74 ------------------ > > .../CompilerIntrinsicsLib}/Ia32/MathFtol.c | 0 > > .../Ia32/MathLShiftS64.c | 0 > > .../Ia32/MathRShiftU64.c | 0 > > .../Library/CompilerIntrinsicsLib/memcmp_ms.c | 2 +- > > .../Library/CompilerIntrinsicsLib/memcpy.c | 0 > > .../Library/CompilerIntrinsicsLib/memcpy_ms.c | 2 +- > > .../CompilerIntrinsicsLib/memmove_ms.c | 2 +- > > .../Library/CompilerIntrinsicsLib/memset.c | 0 > > .../Library/CompilerIntrinsicsLib/memset_ms.c | 2 +- > > 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 > > .../Ia32/MathRShiftU64.nasm | 0 > > MdePkg/MdePkg.ci.yaml | 1 + > > 93 files changed, 95 insertions(+), 254 deletions(-) > > delete mode 100644 CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf > > rename {ArmPkg => > > MdePkg}/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf (84%) > > rename {ArmPkg => MdePkg}/Include/AsmMacroIoLib.h (100%) > > delete mode 100644 CryptoPkg/Library/IntrinsicLib/CopyMem.c > > delete mode 100644 CryptoPkg/Library/IntrinsicLib/MemoryIntrinsics.c > > rename {CryptoPkg/Library/IntrinsicLib => > > MdePkg/Library/CompilerIntrinsicsLib}/Ia32/MathFtol.c (100%) > > rename {CryptoPkg/Library/IntrinsicLib => > > MdePkg/Library/CompilerIntrinsicsLib}/Ia32/MathLShiftS64.c (100%) > > rename {CryptoPkg/Library/IntrinsicLib => > > MdePkg/Library/CompilerIntrinsicsLib}/Ia32/MathRShiftU64.c (100%) > > 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 > > (89%) > > rename {ArmPkg => > > MdePkg}/Library/CompilerIntrinsicsLib/memmove_ms.c (90%) > > rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/memset.c > > (100%) > > rename {ArmPkg => MdePkg}/Library/CompilerIntrinsicsLib/memset_ms.c > > (89%) > > 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/MathRShiftU64.nasm (100%) > > > > -- > > 2.35.1 > > > > > > > > > > > > > > > > >