As requested by Eugene, this series introduces a new ASM_FUNC preprocessor
macro that emits functions into separate sections, allowing the linker to
get rid of the code that ends up unused in the module.
Note that using a native GNU as macro turned out to be problematic, due
to our use of Trim, and the fact that not all versions of GNU as honour
the -I option, making both #include (preprocessor) and .include (GNU as)
unusable to include files with shared macro definitions.
Since we're making a clean spot, let's introduce some other utility macros
as well, and clean up the various assembler files to use it. In particular,
clean up various patterns involving LoadConstantToReg(), including the gem
LoadConstantToReg (_gPcd_FixedAtBuild_xxxx, rN)
ldr rN, [rN]
which performs two memory reads, including one that is subject to runtime
relocation, to load a compile time constant into a register. Note that this
is the definition of LoadConstantReg() we use for Clang, even on AARCH64:
// load _Reg with _Data
#define LoadConstantToReg(_Data, _Reg) \
ldr _Reg, 1f ; \
b 2f ; \
.align(8) ; \
1: \
.8byte (_Data) ; \
2:
Other changes involve constant folding, i.e.,
// Stack for the secondary core = Number of Cores - 1
- LoadConstantToReg (FixedPcdGet32(PcdCoreCount), x0)
- sub x0, x0, #1
- LoadConstantToReg (FixedPcdGet32(PcdCPUCoreSecondaryStackSize), x1)
- mul x1, x1, x0
+ MOV32 (x1, (FixedPcdGet32(PcdCoreCount) - 1) *
FixedPcdGet32(PcdCPUCoreSecondaryStackSize))
and
- LoadConstantToReg (FixedPcdGet64(PcdCPUCoresStackBase), r1)
- LoadConstantToReg (FixedPcdGet32(PcdCPUCorePrimaryStackSize), r2)
- add r1, r1, r2
+ MOV32 (r1, FixedPcdGet64(PcdCPUCoresStackBase) +
FixedPcdGet32(PcdCPUCorePrimaryStackSize))
(where r2 is dead after the add)
Code can be found here
https://git.linaro.org/people/ard.biesheuvel/uefi-next.git/shortlog/refs/heads/arm-asm-cleanup2
Ard Biesheuvel (26):
ArmLib: remove ArmReplaceLiveTranslationEntry() implementation
ArmPkg: add missing ArmMmuLib resolution to ArmPkg.dsc
ArmPkg/AsmMacroIoLib: remove unused obsolete MMIO and other asm macros
ArmPlatformPkg RVCT: drop dependency on GCC macro library
ArmPkg: introduce ASM_FUNC, MOV32/MOV64 and ADRL/LDRL macros
ArmVirt/PrePi: make jump to CEntryPoint relative
ArmVirtPkg: clean up assembly source files
ArmPkg/ArmSmcLibNull: move to generic C implementation
ArmPkg/ArmCpuLib: switch to ASM_FUNC() asm macro
ArmPkg/ArmGicV3: switch to ASM_FUNC() asm macro
ArmPkg/ArmHvcLib: switch to ASM_FUNC() asm macro
ArmPkg/ArmLib: switch to ASM_FUNC() asm macro
ArmPkg/ArmMmuLib: switch to ASM_FUNC() asm macro
ArmPkg/ArmSmcLib: switch to ASM_FUNC() asm macro
ArmPkg/BaseMemoryLibSm: switch to ASM_FUNC() asm macro
ArmPkg/BaseMemoryLibVstm: switch to ASM_FUNC() asm macro
ArmPkg/CompilerIntrinsicsLib: switch to ASM_FUNC() asm macro
ArmPkg/SemihostLib: switch to ASM_FUNC() asm macro
BeagleBoardPkg: remove unused Sec.inf module
BeagleBoardPkg: add missing ArmMmuLib resolution
ArmPlatformPkg/ArmJunoLib: switch to ASM_FUNC() asm macro
ArmPlatformPkg/PrePi: switch to ASM_FUNC() asm macro
ArmPlatformPkg/PrePeiCore: switch to ASM_FUNC() asm macro
ArmPlatformPkg/ArmVExpressPkg: switch to ASM_FUNC() asm macro
ArmPlatformPkg/ArmPlatformLibNull: switch to ASM_FUNC() asm macro
ArmPlatformPkg/ArmPlatformStackLib: switch to ASM_FUNC() asm macro
ArmPkg/ArmPkg.dsc
| 4 +
ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/AArch64/ArmCortexA5xHelper.S
| 9 +-
ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Helper.S
| 9 +-
ArmPkg/Drivers/ArmGic/GicV3/AArch64/ArmGicV3.S
| 28 +-
ArmPkg/Drivers/ArmGic/GicV3/Arm/ArmGicV3.S
| 28 +-
ArmPkg/Include/AsmMacroIoLib.h
| 232 ++--------------
ArmPkg/Include/AsmMacroIoLib.inc
| 54 ----
ArmPkg/Include/AsmMacroIoLibV8.h
| 20 +-
ArmPkg/Library/ArmHvcLib/AArch64/ArmHvc.S
| 9 +-
ArmPkg/Library/ArmHvcLib/Arm/ArmHvc.S
| 10 +-
ArmPkg/Library/ArmLib/AArch64/AArch64ArchTimerSupport.S
| 67 ++---
ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
| 181 +++----------
ArmPkg/Library/ArmLib/AArch64/ArmLibSupportV8.S
| 43 +--
ArmPkg/Library/ArmLib/ArmV7/ArmLibSupportV7.S
| 47 +---
ArmPkg/Library/ArmLib/ArmV7/ArmV7ArchTimerSupport.S
| 67 ++---
ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S
| 113 +++-----
ArmPkg/Library/ArmLib/Common/AArch64/ArmLibSupport.S
| 78 ++----
ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.S
| 89 ++----
ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.asm
| 4 +-
ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibReplaceEntry.S
| 4 +-
ArmPkg/Library/ArmSmcLib/AArch64/ArmSmc.S
| 7 +-
ArmPkg/Library/ArmSmcLib/Arm/ArmSmc.S
| 8 +-
ArmPkg/Library/ArmSmcLibNull/Arm/ArmSmcNull.S
| 20 --
ArmPkg/Library/ArmSmcLibNull/Arm/ArmSmcNull.asm
| 20 --
ArmPkg/Library/ArmSmcLibNull/{AArch64/ArmSmcNull.S => ArmSmcLibNull.c}
| 42 +--
ArmPkg/Library/ArmSmcLibNull/ArmSmcLibNull.inf
| 8 +-
ArmPkg/Library/BaseMemoryLibStm/Arm/CopyMem.S
| 8 +-
ArmPkg/Library/BaseMemoryLibStm/Arm/SetMem.S
| 7 +-
ArmPkg/Library/BaseMemoryLibVstm/Arm/CopyMem.S
| 8 +-
ArmPkg/Library/BaseMemoryLibVstm/Arm/SetMem.S
| 9 +-
ArmPkg/Library/CompilerIntrinsicsLib/AArch64/memcpy.S
| 10 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ashldi3.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ashrdi3.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/clzsi2.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ctzsi2.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/div.S
| 13 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/divdi3.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/divsi3.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ldivmod.S
| 7 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsl.S
| 7 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/llsr.S
| 8 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/lshrdi3.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/memmove.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/moddi3.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/modsi3.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/muldi3.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switch16.S
| 8 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switch32.S
| 8 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switch8.S
| 8 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/switchu8.S
| 9 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/ucmpdi2.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivdi3.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivmoddi4.S
| 7 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/udivsi3.S
| 7 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/umoddi3.S
| 6 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/umodsi3.S
| 6 +-
ArmPkg/Library/SemihostLib/AArch64/GccSemihost.S
| 7 +-
ArmPkg/Library/SemihostLib/Arm/GccSemihost.S
| 8 +-
ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/AArch64/ArmJunoHelper.S
| 37 +--
ArmPlatformPkg/ArmJunoPkg/Library/ArmJunoLib/Arm/ArmJunoHelper.S
| 36 +--
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.S
| 22 +-
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.asm
| 7 +-
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.S
| 28 +-
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.asm
| 8 +-
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/AArch64/RTSMHelper.S
| 38 +--
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.S
| 41 +--
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.asm
| 12 +-
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibCTA9x4/CTA9x4Boot.S
| 23 +-
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibCTA9x4/CTA9x4Boot.asm
| 5 +-
ArmPlatformPkg/Library/ArmPlatformLibNull/AArch64/ArmPlatformHelper.S
| 28 +-
ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.S
| 28 +-
ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.asm
| 10 +-
ArmPlatformPkg/Library/ArmPlatformStackLib/AArch64/ArmPlatformStackLib.S
| 35 +--
ArmPlatformPkg/Library/ArmPlatformStackLib/Arm/ArmPlatformStackLib.S
| 25 +-
ArmPlatformPkg/Library/ArmPlatformStackLib/Arm/ArmPlatformStackLib.asm
| 4 +-
ArmPlatformPkg/PrePeiCore/AArch64/Helper.S
| 11 +-
ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S
| 30 +--
ArmPlatformPkg/PrePeiCore/AArch64/SwitchStack.S
| 9 +-
ArmPlatformPkg/PrePeiCore/Arm/Exception.asm
| 2 -
ArmPlatformPkg/PrePeiCore/Arm/PrePeiCoreEntryPoint.S
| 30 +--
ArmPlatformPkg/PrePeiCore/Arm/PrePeiCoreEntryPoint.asm
| 14 +-
ArmPlatformPkg/PrePeiCore/Arm/SwitchStack.S
| 9 +-
ArmPlatformPkg/PrePi/AArch64/ModuleEntryPoint.S
| 49 ++--
ArmPlatformPkg/PrePi/Arm/ModuleEntryPoint.S
| 50 +---
ArmPlatformPkg/PrePi/Arm/ModuleEntryPoint.asm
| 27 +-
ArmVirtPkg/Library/ArmQemuRelocatablePlatformLib/AARCH64/RelocatableVirtHelper.S
| 36 +--
ArmVirtPkg/Library/ArmQemuRelocatablePlatformLib/ARM/RelocatableVirtHelper.S
| 50 ++--
ArmVirtPkg/Library/ArmVirtPlatformLib/AARCH64/VirtHelper.S
| 30 +--
ArmVirtPkg/Library/ArmVirtPlatformLib/ARM/VirtHelper.S
| 31 +--
ArmVirtPkg/Library/ArmVirtPlatformLib/ARM/VirtHelper.asm
| 10 +-
ArmVirtPkg/Library/ArmXenRelocatablePlatformLib/AARCH64/RelocatableVirtHelper.S
| 36 +--
ArmVirtPkg/Library/ArmXenRelocatablePlatformLib/ARM/RelocatableVirtHelper.S
| 47 ++--
ArmVirtPkg/PrePi/AArch64/ModuleEntryPoint.S
| 48 +---
ArmVirtPkg/PrePi/Arm/ModuleEntryPoint.S
| 73 ++---
BeagleBoardPkg/BeagleBoardPkg.dsc
| 1 +
BeagleBoardPkg/Sec/Arm/ModuleEntryPoint.S
| 85 ------
BeagleBoardPkg/Sec/Arm/ModuleEntryPoint.asm
| 89 ------
BeagleBoardPkg/Sec/Cache.c
| 79 ------
BeagleBoardPkg/Sec/Clock.c
| 70 -----
BeagleBoardPkg/Sec/LzmaDecompress.h
| 103 -------
BeagleBoardPkg/Sec/PadConfiguration.c
| 282 --------------------
BeagleBoardPkg/Sec/Sec.c
| 186 -------------
BeagleBoardPkg/Sec/Sec.inf
| 73 -----
103 files changed, 647 insertions(+), 2730 deletions(-)
delete mode 100644 ArmPkg/Library/ArmSmcLibNull/Arm/ArmSmcNull.S
delete mode 100644 ArmPkg/Library/ArmSmcLibNull/Arm/ArmSmcNull.asm
rename ArmPkg/Library/ArmSmcLibNull/{AArch64/ArmSmcNull.S => ArmSmcLibNull.c}
(73%)
delete mode 100644 BeagleBoardPkg/Sec/Arm/ModuleEntryPoint.S
delete mode 100644 BeagleBoardPkg/Sec/Arm/ModuleEntryPoint.asm
delete mode 100644 BeagleBoardPkg/Sec/Cache.c
delete mode 100644 BeagleBoardPkg/Sec/Clock.c
delete mode 100644 BeagleBoardPkg/Sec/LzmaDecompress.h
delete mode 100644 BeagleBoardPkg/Sec/PadConfiguration.c
delete mode 100644 BeagleBoardPkg/Sec/Sec.c
delete mode 100644 BeagleBoardPkg/Sec/Sec.inf
--
2.7.4
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel