[edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics

Gerd Hoffmann posted 3 patches 2 years, 2 months ago
Failed in applying to current master (apply log)
There is a newer version of this series
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%)
[edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by Gerd Hoffmann 2 years, 2 months ago
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



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87130): https://edk2.groups.io/g/devel/message/87130
Mute This Topic: https://groups.io/mt/89471210/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by Ard Biesheuvel 2 years, 2 months ago
On Tue, 1 Mar 2022 at 08:18, Gerd Hoffmann <kraxel@redhat.com> wrote:
>
> 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
>

For the series,

Acked-by: Ard Biesheuvel <ardb@kernel.org>

>  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
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87189): https://edk2.groups.io/g/devel/message/87189
Mute This Topic: https://groups.io/mt/89471210/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by Gerd Hoffmann 2 years, 1 month ago
On Tue, Mar 01, 2022 at 08:18:17AM +0100, Gerd Hoffmann wrote:
> 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.

Ping.  How go forward with this?  I've posted it as RFC because
I expected a more controversial discussion.  But seems everybody
agrees this is a step into the right direction.

So just merge this as-is?

Yes, it passed CI (https://github.com/tianocore/edk2/pull/2542).

take care,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87590): https://edk2.groups.io/g/devel/message/87590
Mute This Topic: https://groups.io/mt/89471210/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by Michael D Kinney 2 years, 1 month ago
Hi Gerd,

Thanks for working on this.  I raised this topic in the new TianoCore build and CI 
meeting yesterday because the intrinsic libs are closely tied to the toolchains
supported by TianoCore.

I agree with the concept of moving the compiler intrinsics to a library in the MdePkg.

+ Sean Brogan

Sean mentioned that he has some addition work on intrinsic libs for Visual Studio
toolchains.  It would be good to see if this set of changes is aligned with those
efforts.

I see a few items that might be good to clean up at some point
* fltused should go into its own file.  Not related to the strcmp() API
* I see size_t defined in multiple places using different mappings.  Would be good to 
  define that in a single location.

Best regards,

Mike


> -----Original Message-----
> From: Gerd Hoffmann <kraxel@redhat.com>
> Sent: Tuesday, March 15, 2022 5:23 AM
> To: devel@edk2.groups.io
> Cc: Lu, Xiaoyu1 <xiaoyu1.lu@intel.com>; Feng, Bob C <bob.c.feng@intel.com>; Rebecca Cran <rebecca@bsdio.com>; James
> Bottomley <jejb@linux.ibm.com>; Sami Mujawar <Sami.Mujawar@arm.com>; Justen, Jordan L <jordan.l.justen@intel.com>; Aktas,
> Erdem <erdemaktas@google.com>; Yao, Jiewen <jiewen.yao@intel.com>; Supreeth Venkatesh <supreeth.venkatesh@arm.com>; Boeuf,
> Sebastien <sebastien.boeuf@intel.com>; Gao, Zhichao <zhichao.gao@intel.com>; Liu, Zhiguang <zhiguang.liu@intel.com>; Maciej
> Rabeda <maciej.rabeda@linux.intel.com>; Ma, Maurice <maurice.ma@intel.com>; Andrew Fish <afish@apple.com>; Ard Biesheuvel
> <ardb+tianocore@kernel.org>; Tom Lendacky <thomas.lendacky@amd.com>; Peter Grehan <grehan@freebsd.org>; Sean Brogan
> <sean.brogan@microsoft.com>; Jiang, Guomin <guomin.jiang@intel.com>; Bret Barkelew <Bret.Barkelew@microsoft.com>; Chen,
> Christine <yuwei.chen@intel.com>; You, Benjamin <benjamin.you@intel.com>; Schaefer, Daniel <daniel.schaefer@hpe.com>; Gao,
> Liming <gaoliming@byosoft.com.cn>; Kinney, Michael D <michael.d.kinney@intel.com>; Xu, Wei6 <wei6.xu@intel.com>; Wang, Jian
> J <jian.j.wang@intel.com>; Wu, Jiaxin <jiaxin.wu@intel.com>; Fu, Siyuan <siyuan.fu@intel.com>; Dong, Guo
> <guo.dong@intel.com>; kilian_kegel@hotmail.com; Chang, Abner <abner.chang@hpe.com>; Oliver Steffen <osteffen@redhat.com>;
> Leif Lindholm <quic_llindhol@quicinc.com>; Brijesh Singh <brijesh.singh@amd.com>; Xu, Min M <min.m.xu@intel.com>; Ni, Ray
> <ray.ni@intel.com>; Alexei Fedorov <Alexei.Fedorov@arm.com>; Julien Grall <julien@xen.org>; Wang, Nickle
> <nickle.wang@hpe.com>; Pawel Polawski <ppolawsk@redhat.com>; Anthony Perard <anthony.perard@citrix.com>
> Subject: Re: [PATCH 0/3] [RFC] consolidate compiler intrinsics
> 
> On Tue, Mar 01, 2022 at 08:18:17AM +0100, Gerd Hoffmann wrote:
> > 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.
> 
> Ping.  How go forward with this?  I've posted it as RFC because
> I expected a more controversial discussion.  But seems everybody
> agrees this is a step into the right direction.
> 
> So just merge this as-is?
> 
> Yes, it passed CI (https://github.com/tianocore/edk2/pull/2542).
> 
> take care,
>   Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87602): https://edk2.groups.io/g/devel/message/87602
Mute This Topic: https://groups.io/mt/89471210/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by Gerd Hoffmann 2 years, 1 month ago
On Tue, Mar 15, 2022 at 03:27:58PM +0000, Michael D Kinney wrote:
> Hi Gerd,
> 
> Thanks for working on this.  I raised this topic in the new TianoCore build and CI 
> meeting yesterday because the intrinsic libs are closely tied to the toolchains
> supported by TianoCore.
> 
> I agree with the concept of moving the compiler intrinsics to a library in the MdePkg.
> 
> + Sean Brogan
> 
> Sean mentioned that he has some addition work on intrinsic libs for Visual Studio
> toolchains.  It would be good to see if this set of changes is aligned with those
> efforts.

Having a single place where all compiler intrinsics are located should
simplify this kind of changes.

> I see a few items that might be good to clean up at some point
> * fltused should go into its own file.  Not related to the strcmp() API
> * I see size_t defined in multiple places using different mappings.  Would be good to 
>   define that in a single location.

Yes, sure.  Both are valid points.

I see this series as first step, consolidating the existing code in a
singe place with (almost) no actual code changes.  There surely will be
incremental improvements and cleanups later on.  I will need a few more
intrinsic functions when moving edk2 to openssl 3.0 for example.

take care,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87628): https://edk2.groups.io/g/devel/message/87628
Mute This Topic: https://groups.io/mt/89471210/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
回复: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by gaoliming 2 years, 1 month ago
Gerd:
  I suggest to submit the different BZs for those tasks. This patch set is
the first stage. Future enhancement can be added later.

  If no more comment for the first stage, this patch set can be merged
first.

Thanks
Liming
> -----邮件原件-----
> 发件人: Gerd Hoffmann <kraxel@redhat.com>
> 发送时间: 2022年3月16日 17:46
> 收件人: devel@edk2.groups.io; michael.d.kinney@intel.com
> 抄送: Sean Brogan <sean.brogan@microsoft.com>; Lu, Xiaoyu1
> <xiaoyu1.lu@intel.com>; Feng, Bob C <bob.c.feng@intel.com>; Rebecca Cran
> <rebecca@bsdio.com>; James Bottomley <jejb@linux.ibm.com>; Sami
> Mujawar <Sami.Mujawar@arm.com>; Justen, Jordan L
> <jordan.l.justen@intel.com>; Aktas, Erdem <erdemaktas@google.com>; Yao,
> Jiewen <jiewen.yao@intel.com>; Supreeth Venkatesh
> <supreeth.venkatesh@arm.com>; Boeuf, Sebastien
> <sebastien.boeuf@intel.com>; Gao, Zhichao <zhichao.gao@intel.com>; Liu,
> Zhiguang <zhiguang.liu@intel.com>; Maciej Rabeda
> <maciej.rabeda@linux.intel.com>; Ma, Maurice <maurice.ma@intel.com>;
> Andrew Fish <afish@apple.com>; Ard Biesheuvel
> <ardb+tianocore@kernel.org>; Tom Lendacky <thomas.lendacky@amd.com>;
> Peter Grehan <grehan@freebsd.org>; Jiang, Guomin
> <guomin.jiang@intel.com>; Bret Barkelew <Bret.Barkelew@microsoft.com>;
> Chen, Christine <yuwei.chen@intel.com>; You, Benjamin
> <benjamin.you@intel.com>; Schaefer, Daniel <daniel.schaefer@hpe.com>;
> Gao, Liming <gaoliming@byosoft.com.cn>; Xu, Wei6 <wei6.xu@intel.com>;
> Wang, Jian J <jian.j.wang@intel.com>; Wu, Jiaxin <jiaxin.wu@intel.com>;
Fu,
> Siyuan <siyuan.fu@intel.com>; Dong, Guo <guo.dong@intel.com>;
> kilian_kegel@hotmail.com; Chang, Abner <abner.chang@hpe.com>; Oliver
> Steffen <osteffen@redhat.com>; Leif Lindholm <quic_llindhol@quicinc.com>;
> Brijesh Singh <brijesh.singh@amd.com>; Xu, Min M <min.m.xu@intel.com>;
> Ni, Ray <ray.ni@intel.com>; Alexei Fedorov <Alexei.Fedorov@arm.com>;
> Julien Grall <julien@xen.org>; Wang, Nickle <nickle.wang@hpe.com>; Pawel
> Polawski <ppolawsk@redhat.com>; Anthony Perard
> <anthony.perard@citrix.com>
> 主题: Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
> 
> On Tue, Mar 15, 2022 at 03:27:58PM +0000, Michael D Kinney wrote:
> > Hi Gerd,
> >
> > Thanks for working on this.  I raised this topic in the new TianoCore
build
> and CI
> > meeting yesterday because the intrinsic libs are closely tied to the
> toolchains
> > supported by TianoCore.
> >
> > I agree with the concept of moving the compiler intrinsics to a library
in the
> MdePkg.
> >
> > + Sean Brogan
> >
> > Sean mentioned that he has some addition work on intrinsic libs for
Visual
> Studio
> > toolchains.  It would be good to see if this set of changes is aligned
with
> those
> > efforts.
> 
> Having a single place where all compiler intrinsics are located should
> simplify this kind of changes.
> 
> > I see a few items that might be good to clean up at some point
> > * fltused should go into its own file.  Not related to the strcmp() API
> > * I see size_t defined in multiple places using different mappings.
Would
> be good to
> >   define that in a single location.
> 
> Yes, sure.  Both are valid points.
> 
> I see this series as first step, consolidating the existing code in a
> singe place with (almost) no actual code changes.  There surely will be
> incremental improvements and cleanups later on.  I will need a few more
> intrinsic functions when moving edk2 to openssl 3.0 for example.
> 
> take care,
>   Gerd





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87720): https://edk2.groups.io/g/devel/message/87720
Mute This Topic: https://groups.io/mt/89859655/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by Pedro Falcato 2 years, 1 month ago
Hi,

Something I've just noticed: edk2-libc also ships its own intrinsics (
https://github.com/tianocore/edk2-libc/blob/master/StdLib/LibC/CRT/Gcc.c)

I know edk2-libc is not part of the core edk2 repo but I think we should
keep this in mind when this patch set gets merged.

On Fri, Mar 18, 2022 at 1:27 AM gaoliming <gaoliming@byosoft.com.cn> wrote:

> Gerd:
>   I suggest to submit the different BZs for those tasks. This patch set is
> the first stage. Future enhancement can be added later.
>
>   If no more comment for the first stage, this patch set can be merged
> first.
>
> Thanks
> Liming
> > -----邮件原件-----
> > 发件人: Gerd Hoffmann <kraxel@redhat.com>
> > 发送时间: 2022年3月16日 17:46
> > 收件人: devel@edk2.groups.io; michael.d.kinney@intel.com
> > 抄送: Sean Brogan <sean.brogan@microsoft.com>; Lu, Xiaoyu1
> > <xiaoyu1.lu@intel.com>; Feng, Bob C <bob.c.feng@intel.com>; Rebecca Cran
> > <rebecca@bsdio.com>; James Bottomley <jejb@linux.ibm.com>; Sami
> > Mujawar <Sami.Mujawar@arm.com>; Justen, Jordan L
> > <jordan.l.justen@intel.com>; Aktas, Erdem <erdemaktas@google.com>; Yao,
> > Jiewen <jiewen.yao@intel.com>; Supreeth Venkatesh
> > <supreeth.venkatesh@arm.com>; Boeuf, Sebastien
> > <sebastien.boeuf@intel.com>; Gao, Zhichao <zhichao.gao@intel.com>; Liu,
> > Zhiguang <zhiguang.liu@intel.com>; Maciej Rabeda
> > <maciej.rabeda@linux.intel.com>; Ma, Maurice <maurice.ma@intel.com>;
> > Andrew Fish <afish@apple.com>; Ard Biesheuvel
> > <ardb+tianocore@kernel.org>; Tom Lendacky <thomas.lendacky@amd.com>;
> > Peter Grehan <grehan@freebsd.org>; Jiang, Guomin
> > <guomin.jiang@intel.com>; Bret Barkelew <Bret.Barkelew@microsoft.com>;
> > Chen, Christine <yuwei.chen@intel.com>; You, Benjamin
> > <benjamin.you@intel.com>; Schaefer, Daniel <daniel.schaefer@hpe.com>;
> > Gao, Liming <gaoliming@byosoft.com.cn>; Xu, Wei6 <wei6.xu@intel.com>;
> > Wang, Jian J <jian.j.wang@intel.com>; Wu, Jiaxin <jiaxin.wu@intel.com>;
> Fu,
> > Siyuan <siyuan.fu@intel.com>; Dong, Guo <guo.dong@intel.com>;
> > kilian_kegel@hotmail.com; Chang, Abner <abner.chang@hpe.com>; Oliver
> > Steffen <osteffen@redhat.com>; Leif Lindholm <quic_llindhol@quicinc.com
> >;
> > Brijesh Singh <brijesh.singh@amd.com>; Xu, Min M <min.m.xu@intel.com>;
> > Ni, Ray <ray.ni@intel.com>; Alexei Fedorov <Alexei.Fedorov@arm.com>;
> > Julien Grall <julien@xen.org>; Wang, Nickle <nickle.wang@hpe.com>; Pawel
> > Polawski <ppolawsk@redhat.com>; Anthony Perard
> > <anthony.perard@citrix.com>
> > 主题: Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
> >
> > On Tue, Mar 15, 2022 at 03:27:58PM +0000, Michael D Kinney wrote:
> > > Hi Gerd,
> > >
> > > Thanks for working on this.  I raised this topic in the new TianoCore
> build
> > and CI
> > > meeting yesterday because the intrinsic libs are closely tied to the
> > toolchains
> > > supported by TianoCore.
> > >
> > > I agree with the concept of moving the compiler intrinsics to a library
> in the
> > MdePkg.
> > >
> > > + Sean Brogan
> > >
> > > Sean mentioned that he has some addition work on intrinsic libs for
> Visual
> > Studio
> > > toolchains.  It would be good to see if this set of changes is aligned
> with
> > those
> > > efforts.
> >
> > Having a single place where all compiler intrinsics are located should
> > simplify this kind of changes.
> >
> > > I see a few items that might be good to clean up at some point
> > > * fltused should go into its own file.  Not related to the strcmp() API
> > > * I see size_t defined in multiple places using different mappings.
> Would
> > be good to
> > >   define that in a single location.
> >
> > Yes, sure.  Both are valid points.
> >
> > I see this series as first step, consolidating the existing code in a
> > singe place with (almost) no actual code changes.  There surely will be
> > incremental improvements and cleanups later on.  I will need a few more
> > intrinsic functions when moving edk2 to openssl 3.0 for example.
> >
> > take care,
> >   Gerd
>
>
>
>
>
> 
>
>
>

-- 
Pedro Falcato


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87722): https://edk2.groups.io/g/devel/message/87722
Mute This Topic: https://groups.io/mt/89859980/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by Pedro Falcato 2 years, 1 month ago
Gerd,

Have you considered just pulling in LLVM's compiler-rt builtins? It
implements essentially everything we'll ever need for a GNU-like toolchain,
for all the architectures we support, and also has unit tests (
https://github.com/llvm/llvm-project/tree/main/compiler-rt/test/builtins/Unit
).

I think it would be a good idea considering it's guaranteed to be correct
and always implements whatever clang requires (and AFAIK clang always
requires what gcc requires).

Best regards,
Pedro

On Tue, Mar 15, 2022 at 12:23 PM Gerd Hoffmann <kraxel@redhat.com> wrote:

> On Tue, Mar 01, 2022 at 08:18:17AM +0100, Gerd Hoffmann wrote:
> > 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.
>
> Ping.  How go forward with this?  I've posted it as RFC because
> I expected a more controversial discussion.  But seems everybody
> agrees this is a step into the right direction.
>
> So just merge this as-is?
>
> Yes, it passed CI (https://github.com/tianocore/edk2/pull/2542).
>
> take care,
>   Gerd
>
>
>
> 
>
>
>

-- 
Pedro Falcato


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87603): https://edk2.groups.io/g/devel/message/87603
Mute This Topic: https://groups.io/mt/89471210/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by Gerd Hoffmann 2 years, 1 month ago
On Tue, Mar 15, 2022 at 05:08:55PM +0000, Pedro Falcato wrote:
> Gerd,
> 
> Have you considered just pulling in LLVM's compiler-rt builtins? It
> implements essentially everything we'll ever need for a GNU-like toolchain,
> for all the architectures we support, and also has unit tests (
> https://github.com/llvm/llvm-project/tree/main/compiler-rt/test/builtins/Unit
> ).
> 
> I think it would be a good idea considering it's guaranteed to be correct
> and always implements whatever clang requires (and AFAIK clang always
> requires what gcc requires).

This is beyond the scope of this patch series, I want have a single
intrinsics lib for everybody as first step.

Using llvm's intrinsics certainly is an option for future improvements,
assuming it is ok license-wise (edk2 is bsd, llvm compiler-rt is apache,
as far I know they are compatible).

take care,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87629): https://edk2.groups.io/g/devel/message/87629
Mute This Topic: https://groups.io/mt/89471210/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
回复: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by gaoliming 2 years, 2 months ago
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 <devel@edk2.groups.io> 代表 Gerd
> Hoffmann
> 发送时间: 2022年3月1日 15:18
> 收件人: devel@edk2.groups.io
> 抄送: Xiaoyu Lu <xiaoyu1.lu@intel.com>; Bob Feng <bob.c.feng@intel.com>;
> Rebecca Cran <rebecca@bsdio.com>; James Bottomley
> <jejb@linux.ibm.com>; Sami Mujawar <Sami.Mujawar@arm.com>; Jordan
> Justen <jordan.l.justen@intel.com>; Erdem Aktas <erdemaktas@google.com>;
> Jiewen Yao <jiewen.yao@intel.com>; Supreeth Venkatesh
> <supreeth.venkatesh@arm.com>; Sebastien Boeuf
> <sebastien.boeuf@intel.com>; Zhichao Gao <zhichao.gao@intel.com>;
> Zhiguang Liu <zhiguang.liu@intel.com>; Maciej Rabeda
> <maciej.rabeda@linux.intel.com>; Maurice Ma <maurice.ma@intel.com>;
> Andrew Fish <afish@apple.com>; Ard Biesheuvel
> <ardb+tianocore@kernel.org>; Tom Lendacky <thomas.lendacky@amd.com>;
> Peter Grehan <grehan@freebsd.org>; Sean Brogan
> <sean.brogan@microsoft.com>; Guomin Jiang <guomin.jiang@intel.com>;
> Bret Barkelew <Bret.Barkelew@microsoft.com>; Yuwei Chen
> <yuwei.chen@intel.com>; Benjamin You <benjamin.you@intel.com>; Daniel
> Schaefer <daniel.schaefer@hpe.com>; Liming Gao
> <gaoliming@byosoft.com.cn>; Michael D Kinney
> <michael.d.kinney@intel.com>; Wei6 Xu <wei6.xu@intel.com>; Jian J Wang
> <jian.j.wang@intel.com>; Jiaxin Wu <jiaxin.wu@intel.com>; Siyuan Fu
> <siyuan.fu@intel.com>; Gerd Hoffmann <kraxel@redhat.com>; Sami Mujawar
> <sami.mujawar@arm.com>; Guo Dong <guo.dong@intel.com>;
> kilian_kegel@hotmail.com; Abner Chang <abner.chang@hpe.com>; Oliver
> Steffen <osteffen@redhat.com>; Leif Lindholm <quic_llindhol@quicinc.com>;
> Brijesh Singh <brijesh.singh@amd.com>; Min Xu <min.m.xu@intel.com>; Ray
> Ni <ray.ni@intel.com>; Alexei Fedorov <Alexei.Fedorov@arm.com>; Julien
> Grall <julien@xen.org>; Nickle Wang <nickle.wang@hpe.com>; Pawel
> Polawski <ppolawsk@redhat.com>; Anthony Perard
> <anthony.perard@citrix.com>
> 主题: [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
> 
> 
> 
> 
> 





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87183): https://edk2.groups.io/g/devel/message/87183
Mute This Topic: https://groups.io/mt/89493176/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by Yao, Jiewen 2 years, 2 months ago
Acked, for CryptoPkg/OvmfPkg/SecurityPkg/StandaloneMmPkg update.

Thank you
Yao, Jiewen


> -----Original Message-----
> From: devel@edk2.groups.io <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 <xiaoyu1.lu@intel.com>; Feng, Bob C <bob.c.feng@intel.com>;
> 'Rebecca Cran' <rebecca@bsdio.com>; 'James Bottomley'
> <jejb@linux.ibm.com>; 'Sami Mujawar' <Sami.Mujawar@arm.com>; Justen,
> Jordan L <jordan.l.justen@intel.com>; Aktas, Erdem
> <erdemaktas@google.com>; Yao, Jiewen <jiewen.yao@intel.com>; 'Supreeth
> Venkatesh' <supreeth.venkatesh@arm.com>; Boeuf, Sebastien
> <sebastien.boeuf@intel.com>; Gao, Zhichao <zhichao.gao@intel.com>; Liu,
> Zhiguang <zhiguang.liu@intel.com>; 'Maciej Rabeda'
> <maciej.rabeda@linux.intel.com>; Ma, Maurice <maurice.ma@intel.com>;
> 'Andrew Fish' <afish@apple.com>; 'Ard Biesheuvel'
> <ardb+tianocore@kernel.org>; 'Tom Lendacky' <thomas.lendacky@amd.com>;
> 'Peter Grehan' <grehan@freebsd.org>; 'Sean Brogan'
> <sean.brogan@microsoft.com>; Jiang, Guomin <guomin.jiang@intel.com>;
> 'Bret Barkelew' <Bret.Barkelew@microsoft.com>; Chen, Christine
> <yuwei.chen@intel.com>; You, Benjamin <benjamin.you@intel.com>; Schaefer,
> Daniel <daniel.schaefer@hpe.com>; Kinney, Michael D
> <michael.d.kinney@intel.com>; Xu, Wei6 <wei6.xu@intel.com>; Wang, Jian J
> <jian.j.wang@intel.com>; Wu, Jiaxin <jiaxin.wu@intel.com>; Fu, Siyuan
> <siyuan.fu@intel.com>; Dong, Guo <guo.dong@intel.com>;
> kilian_kegel@hotmail.com; Chang, Abner <abner.chang@hpe.com>; 'Oliver
> Steffen' <osteffen@redhat.com>; 'Leif Lindholm' <quic_llindhol@quicinc.com>;
> 'Brijesh Singh' <brijesh.singh@amd.com>; Xu, Min M <min.m.xu@intel.com>; Ni,
> Ray <ray.ni@intel.com>; 'Alexei Fedorov' <Alexei.Fedorov@arm.com>; 'Julien
> Grall' <julien@xen.org>; Wang, Nickle <nickle.wang@hpe.com>; 'Pawel
> Polawski' <ppolawsk@redhat.com>; 'Anthony Perard'
> <anthony.perard@citrix.com>
> 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 <devel@edk2.groups.io> 代表 Gerd
> > Hoffmann
> > 发送时间: 2022年3月1日 15:18
> > 收件人: devel@edk2.groups.io
> > 抄送: Xiaoyu Lu <xiaoyu1.lu@intel.com>; Bob Feng <bob.c.feng@intel.com>;
> > Rebecca Cran <rebecca@bsdio.com>; James Bottomley
> > <jejb@linux.ibm.com>; Sami Mujawar <Sami.Mujawar@arm.com>; Jordan
> > Justen <jordan.l.justen@intel.com>; Erdem Aktas <erdemaktas@google.com>;
> > Jiewen Yao <jiewen.yao@intel.com>; Supreeth Venkatesh
> > <supreeth.venkatesh@arm.com>; Sebastien Boeuf
> > <sebastien.boeuf@intel.com>; Zhichao Gao <zhichao.gao@intel.com>;
> > Zhiguang Liu <zhiguang.liu@intel.com>; Maciej Rabeda
> > <maciej.rabeda@linux.intel.com>; Maurice Ma <maurice.ma@intel.com>;
> > Andrew Fish <afish@apple.com>; Ard Biesheuvel
> > <ardb+tianocore@kernel.org>; Tom Lendacky <thomas.lendacky@amd.com>;
> > Peter Grehan <grehan@freebsd.org>; Sean Brogan
> > <sean.brogan@microsoft.com>; Guomin Jiang <guomin.jiang@intel.com>;
> > Bret Barkelew <Bret.Barkelew@microsoft.com>; Yuwei Chen
> > <yuwei.chen@intel.com>; Benjamin You <benjamin.you@intel.com>; Daniel
> > Schaefer <daniel.schaefer@hpe.com>; Liming Gao
> > <gaoliming@byosoft.com.cn>; Michael D Kinney
> > <michael.d.kinney@intel.com>; Wei6 Xu <wei6.xu@intel.com>; Jian J Wang
> > <jian.j.wang@intel.com>; Jiaxin Wu <jiaxin.wu@intel.com>; Siyuan Fu
> > <siyuan.fu@intel.com>; Gerd Hoffmann <kraxel@redhat.com>; Sami Mujawar
> > <sami.mujawar@arm.com>; Guo Dong <guo.dong@intel.com>;
> > kilian_kegel@hotmail.com; Abner Chang <abner.chang@hpe.com>; Oliver
> > Steffen <osteffen@redhat.com>; Leif Lindholm <quic_llindhol@quicinc.com>;
> > Brijesh Singh <brijesh.singh@amd.com>; Min Xu <min.m.xu@intel.com>; Ray
> > Ni <ray.ni@intel.com>; Alexei Fedorov <Alexei.Fedorov@arm.com>; Julien
> > Grall <julien@xen.org>; Nickle Wang <nickle.wang@hpe.com>; Pawel
> > Polawski <ppolawsk@redhat.com>; Anthony Perard
> > <anthony.perard@citrix.com>
> > 主题: [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
> >
> >
> >
> >
> >
> 
> 
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87187): https://edk2.groups.io/g/devel/message/87187
Mute This Topic: https://groups.io/mt/89493375/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by Kilian Kegel 2 years, 2 months ago
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<mailto:jiewen.yao@intel.com>
Sent: Wednesday, March 2, 2022 03:16 AM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; Gao, Liming<mailto:gaoliming@byosoft.com.cn>; kraxel@redhat.com<mailto:kraxel@redhat.com>
Cc: Lu, Xiaoyu1<mailto:xiaoyu1.lu@intel.com>; Feng, Bob C<mailto:bob.c.feng@intel.com>; 'Rebecca Cran'<mailto:rebecca@bsdio.com>; 'James Bottomley'<mailto:jejb@linux.ibm.com>; 'Sami Mujawar'<mailto:Sami.Mujawar@arm.com>; Justen, Jordan L<mailto:jordan.l.justen@intel.com>; Aktas, Erdem<mailto:erdemaktas@google.com>; 'Supreeth Venkatesh'<mailto:supreeth.venkatesh@arm.com>; Boeuf, Sebastien<mailto:sebastien.boeuf@intel.com>; Gao, Zhichao<mailto:zhichao.gao@intel.com>; Liu, Zhiguang<mailto:zhiguang.liu@intel.com>; 'Maciej Rabeda'<mailto:maciej.rabeda@linux.intel.com>; Ma, Maurice<mailto:maurice.ma@intel.com>; 'Andrew Fish'<mailto:afish@apple.com>; 'Ard Biesheuvel'<mailto:ardb+tianocore@kernel.org>; 'Tom Lendacky'<mailto:thomas.lendacky@amd.com>; 'Peter Grehan'<mailto:grehan@freebsd.org>; 'Sean Brogan'<mailto:sean.brogan@microsoft.com>; Jiang, Guomin<mailto:guomin.jiang@intel.com>; 'Bret Barkelew'<mailto:Bret.Barkelew@microsoft.com>; Chen, Christine<mailto:yuwei.chen@intel.com>; You, Benjamin<mailto:benjamin.you@intel.com>; Schaefer, Daniel<mailto:daniel.schaefer@hpe.com>; Kinney, Michael D<mailto:michael.d.kinney@intel.com>; Xu, Wei6<mailto:wei6.xu@intel.com>; Wang, Jian J<mailto:jian.j.wang@intel.com>; Wu, Jiaxin<mailto:jiaxin.wu@intel.com>; Fu, Siyuan<mailto:siyuan.fu@intel.com>; Dong, Guo<mailto:guo.dong@intel.com>; kilian_kegel@hotmail.com<mailto:kilian_kegel@hotmail.com>; Chang, Abner<mailto:abner.chang@hpe.com>; 'Oliver Steffen'<mailto:osteffen@redhat.com>; 'Leif Lindholm'<mailto:quic_llindhol@quicinc.com>; 'Brijesh Singh'<mailto:brijesh.singh@amd.com>; Xu, Min M<mailto:min.m.xu@intel.com>; Ni, Ray<mailto:ray.ni@intel.com>; 'Alexei Fedorov'<mailto:Alexei.Fedorov@arm.com>; 'Julien Grall'<mailto:julien@xen.org>; Wang, Nickle<mailto:nickle.wang@hpe.com>; 'Pawel Polawski'<mailto:ppolawsk@redhat.com>; 'Anthony Perard'<mailto:anthony.perard@citrix.com>
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 <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 <xiaoyu1.lu@intel.com>; Feng, Bob C <bob.c.feng@intel.com>;
> 'Rebecca Cran' <rebecca@bsdio.com>; 'James Bottomley'
> <jejb@linux.ibm.com>; 'Sami Mujawar' <Sami.Mujawar@arm.com>; Justen,
> Jordan L <jordan.l.justen@intel.com>; Aktas, Erdem
> <erdemaktas@google.com>; Yao, Jiewen <jiewen.yao@intel.com>; 'Supreeth
> Venkatesh' <supreeth.venkatesh@arm.com>; Boeuf, Sebastien
> <sebastien.boeuf@intel.com>; Gao, Zhichao <zhichao.gao@intel.com>; Liu,
> Zhiguang <zhiguang.liu@intel.com>; 'Maciej Rabeda'
> <maciej.rabeda@linux.intel.com>; Ma, Maurice <maurice.ma@intel.com>;
> 'Andrew Fish' <afish@apple.com>; 'Ard Biesheuvel'
> <ardb+tianocore@kernel.org>; 'Tom Lendacky' <thomas.lendacky@amd.com>;
> 'Peter Grehan' <grehan@freebsd.org>; 'Sean Brogan'
> <sean.brogan@microsoft.com>; Jiang, Guomin <guomin.jiang@intel.com>;
> 'Bret Barkelew' <Bret.Barkelew@microsoft.com>; Chen, Christine
> <yuwei.chen@intel.com>; You, Benjamin <benjamin.you@intel.com>; Schaefer,
> Daniel <daniel.schaefer@hpe.com>; Kinney, Michael D
> <michael.d.kinney@intel.com>; Xu, Wei6 <wei6.xu@intel.com>; Wang, Jian J
> <jian.j.wang@intel.com>; Wu, Jiaxin <jiaxin.wu@intel.com>; Fu, Siyuan
> <siyuan.fu@intel.com>; Dong, Guo <guo.dong@intel.com>;
> kilian_kegel@hotmail.com; Chang, Abner <abner.chang@hpe.com>; 'Oliver
> Steffen' <osteffen@redhat.com>; 'Leif Lindholm' <quic_llindhol@quicinc.com>;
> 'Brijesh Singh' <brijesh.singh@amd.com>; Xu, Min M <min.m.xu@intel.com>; Ni,
> Ray <ray.ni@intel.com>; 'Alexei Fedorov' <Alexei.Fedorov@arm.com>; 'Julien
> Grall' <julien@xen.org>; Wang, Nickle <nickle.wang@hpe.com>; 'Pawel
> Polawski' <ppolawsk@redhat.com>; 'Anthony Perard'
> <anthony.perard@citrix.com>
> 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 <devel@edk2.groups.io> 代表 Gerd
> > Hoffmann
> > 发送时间: 2022年3月1日 15:18
> > 收件人: devel@edk2.groups.io
> > 抄送: Xiaoyu Lu <xiaoyu1.lu@intel.com>; Bob Feng <bob.c.feng@intel.com>;
> > Rebecca Cran <rebecca@bsdio.com>; James Bottomley
> > <jejb@linux.ibm.com>; Sami Mujawar <Sami.Mujawar@arm.com>; Jordan
> > Justen <jordan.l.justen@intel.com>; Erdem Aktas <erdemaktas@google.com>;
> > Jiewen Yao <jiewen.yao@intel.com>; Supreeth Venkatesh
> > <supreeth.venkatesh@arm.com>; Sebastien Boeuf
> > <sebastien.boeuf@intel.com>; Zhichao Gao <zhichao.gao@intel.com>;
> > Zhiguang Liu <zhiguang.liu@intel.com>; Maciej Rabeda
> > <maciej.rabeda@linux.intel.com>; Maurice Ma <maurice.ma@intel.com>;
> > Andrew Fish <afish@apple.com>; Ard Biesheuvel
> > <ardb+tianocore@kernel.org>; Tom Lendacky <thomas.lendacky@amd.com>;
> > Peter Grehan <grehan@freebsd.org>; Sean Brogan
> > <sean.brogan@microsoft.com>; Guomin Jiang <guomin.jiang@intel.com>;
> > Bret Barkelew <Bret.Barkelew@microsoft.com>; Yuwei Chen
> > <yuwei.chen@intel.com>; Benjamin You <benjamin.you@intel.com>; Daniel
> > Schaefer <daniel.schaefer@hpe.com>; Liming Gao
> > <gaoliming@byosoft.com.cn>; Michael D Kinney
> > <michael.d.kinney@intel.com>; Wei6 Xu <wei6.xu@intel.com>; Jian J Wang
> > <jian.j.wang@intel.com>; Jiaxin Wu <jiaxin.wu@intel.com>; Siyuan Fu
> > <siyuan.fu@intel.com>; Gerd Hoffmann <kraxel@redhat.com>; Sami Mujawar
> > <sami.mujawar@arm.com>; Guo Dong <guo.dong@intel.com>;
> > kilian_kegel@hotmail.com; Abner Chang <abner.chang@hpe.com>; Oliver
> > Steffen <osteffen@redhat.com>; Leif Lindholm <quic_llindhol@quicinc.com>;
> > Brijesh Singh <brijesh.singh@amd.com>; Min Xu <min.m.xu@intel.com>; Ray
> > Ni <ray.ni@intel.com>; Alexei Fedorov <Alexei.Fedorov@arm.com>; Julien
> > Grall <julien@xen.org>; Nickle Wang <nickle.wang@hpe.com>; Pawel
> > Polawski <ppolawsk@redhat.com>; Anthony Perard
> > <anthony.perard@citrix.com>
> > 主题: [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
> >
> >
> >
> >
> >
>
>
>
>
>
>
>








-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87196): https://edk2.groups.io/g/devel/message/87196
Mute This Topic: https://groups.io/mt/89493375/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH 0/3] [RFC] consolidate compiler intrinsics
Posted by Gerd Hoffmann 2 years, 2 months ago
On Wed, Mar 02, 2022 at 08:39:28AM +0000, Kilian Kegel wrote:
> 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.

Having to add the IntrinsicLibrary to the .inf file is annoying indeed.

Just using the compiler intrinsics doesn't work in all cases though,
so I see no way around providing our own intrinsics library.

> With your solution can you compile + link the body of main() given below in a PEI driver on all targets?
> Really?

Nope.  These patches simply move the existing intrinsics from ArmPkg and
CryptoPkg as starting point.  They are known to be incomplete.

I expect we'll add more functions as needed in the future.

We can surely debate if and how we can use the compiler's intrinsic
library instead our own implementation for the cases where it works.

Having a core intrinsics lib should actually make that kind changes
easier,  There will be one central place where you can tweak which
intrinsic functions are provided by edk2, so coordinating that with
DLINK_FLAGS updates should be easier than today.

take care,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87217): https://edk2.groups.io/g/devel/message/87217
Mute This Topic: https://groups.io/mt/89493375/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-