This adds ARM and AARCH64 support to both BaseMemoryLib (generic C) and BaseMemoryLibOptDxe (accelerated). The former can be used anywhere, the latter only in places where the caches are guaranteed to be on, not only due to the unaligned accesses but also due to the fact that it uses DC ZVA instructions for clearing memory (AArch64 only).
Changes since v3: - added Liming's R-b - updated SetMem() to avoid unaligned strd (store pair) instructions, which require 32-bit alignment even in cases where ordinary loads and stores do tolerate unaligned accesses (#2) - fix Clang issue in NEON dialect (#3) Branch can be found here https://git.linaro.org/people/ard.biesheuvel/uefi-next.git/shortlog/refs/heads/arm64-basememorylib-v4 Changes since v2: - avoid open coded 64-bit shift (#1) - tweak SetMem implementation (#2) Ard Biesheuvel (3): MdePkg/BaseMemoryLib: widen aligned accesses to 32 or 64 bits MdePkg/BaseMemoryLibOptDxe: add accelerated ARM routines MdePkg/BaseMemoryLibOptDxe: add accelerated AARCH64 routines MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf | 2 +- MdePkg/Library/BaseMemoryLib/CopyMem.c | 112 +++++++- MdePkg/Library/BaseMemoryLib/SetMem.c | 40 ++- MdePkg/Library/BaseMemoryLibOptDxe/AArch64/CompareMem.S | 142 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/AArch64/CopyMem.S | 284 ++++++++++++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/AArch64/ScanMem.S | 161 +++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/AArch64/SetMem.S | 244 +++++++++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.S | 138 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.asm | 140 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.S | 172 ++++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.asm | 147 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMem.S | 146 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMem.asm | 147 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMemGeneric.c | 142 ++++++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.S | 75 ++++++ MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.asm | 81 ++++++ MdePkg/Library/BaseMemoryLibOptDxe/BaseMemoryLibOptDxe.inf | 37 ++- 17 files changed, 2182 insertions(+), 28 deletions(-) create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/AArch64/CompareMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/AArch64/CopyMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/AArch64/ScanMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/AArch64/SetMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/CompareMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/CopyMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMem.asm create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/ScanMemGeneric.c create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.S create mode 100644 MdePkg/Library/BaseMemoryLibOptDxe/Arm/SetMem.asm -- 2.7.4 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel