From: Leif Lindholm <leif.lindholm@linaro.org>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: edk2-devel@lists.01.org, eugene@hp.com, lersek@redhat.com
Subject: Re: [PATCH 00/26] ARM assembler cleanup series
Date: Thu, 11 Aug 2016 11:18:22 +0100 [thread overview]
Message-ID: <20160811101822.GV31760@bivouac.eciton.net> (raw)
In-Reply-To: <1470842282-8415-1-git-send-email-ard.biesheuvel@linaro.org>
Nice bit of cleanup, thanks!
For the ones I haven't commented on already:
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
(And for the BeagleBoardPkg as well, unless Andrew objects.)
On Wed, Aug 10, 2016 at 05:17:36PM +0200, Ard Biesheuvel wrote:
> 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
>
next prev parent reply other threads:[~2016-08-11 10:18 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-10 15:17 [PATCH 00/26] ARM assembler cleanup series Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 01/26] ArmLib: remove ArmReplaceLiveTranslationEntry() implementation Ard Biesheuvel
2016-08-10 16:56 ` Leif Lindholm
2016-08-10 17:31 ` Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 02/26] ArmPkg: add missing ArmMmuLib resolution to ArmPkg.dsc Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 03/26] ArmPkg/AsmMacroIoLib: remove unused obsolete MMIO and other asm macros Ard Biesheuvel
2016-08-10 17:04 ` Leif Lindholm
2016-08-10 17:26 ` Ard Biesheuvel
2016-08-11 8:23 ` Leif Lindholm
2016-08-10 15:17 ` [PATCH 04/26] ArmPlatformPkg RVCT: drop dependency on GCC macro library Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 05/26] ArmPkg: introduce ASM_FUNC, MOV32/MOV64 and ADRL/LDRL macros Ard Biesheuvel
2016-08-10 18:26 ` Cohen, Eugene
2016-08-10 18:29 ` Ard Biesheuvel
2016-08-10 18:48 ` Cohen, Eugene
2016-08-10 15:17 ` [PATCH 06/26] ArmVirt/PrePi: make jump to CEntryPoint relative Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 07/26] ArmVirtPkg: clean up assembly source files Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 08/26] ArmPkg/ArmSmcLibNull: move to generic C implementation Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 09/26] ArmPkg/ArmCpuLib: switch to ASM_FUNC() asm macro Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 10/26] ArmPkg/ArmGicV3: " Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 11/26] ArmPkg/ArmHvcLib: " Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 12/26] ArmPkg/ArmLib: " Ard Biesheuvel
2016-08-10 19:00 ` Leif Lindholm
2016-08-10 15:17 ` [PATCH 13/26] ArmPkg/ArmMmuLib: " Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 14/26] ArmPkg/ArmSmcLib: " Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 15/26] ArmPkg/BaseMemoryLibSm: " Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 16/26] ArmPkg/BaseMemoryLibVstm: " Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 17/26] ArmPkg/CompilerIntrinsicsLib: " Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 18/26] ArmPkg/SemihostLib: " Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 19/26] BeagleBoardPkg: remove unused Sec.inf module Ard Biesheuvel
2016-08-11 8:34 ` Leif Lindholm
2016-08-10 15:17 ` [PATCH 20/26] BeagleBoardPkg: add missing ArmMmuLib resolution Ard Biesheuvel
2016-08-10 15:17 ` [PATCH 21/26] ArmPlatformPkg/ArmJunoLib: switch to ASM_FUNC() asm macro Ard Biesheuvel
2016-08-11 8:37 ` Leif Lindholm
2016-08-10 15:17 ` [PATCH 22/26] ArmPlatformPkg/PrePi: " Ard Biesheuvel
2016-08-11 8:38 ` Leif Lindholm
2016-08-31 4:33 ` Michael Zimmermann
2016-08-31 9:14 ` Ard Biesheuvel
2016-08-31 9:43 ` Michael Zimmermann
2016-08-31 9:45 ` Ard Biesheuvel
2016-08-31 9:47 ` Evan Lloyd
2016-08-31 9:52 ` Michael Zimmermann
2016-08-31 9:53 ` Ard Biesheuvel
2016-09-07 11:10 ` Ryan Harkin
2016-09-07 11:59 ` Ard Biesheuvel
2016-09-07 12:18 ` Ryan Harkin
2016-08-10 15:17 ` [PATCH 23/26] ArmPlatformPkg/PrePeiCore: " Ard Biesheuvel
2016-08-11 8:38 ` Leif Lindholm
2016-08-10 15:18 ` [PATCH 24/26] ArmPlatformPkg/ArmVExpressPkg: " Ard Biesheuvel
2016-08-11 8:39 ` Leif Lindholm
2016-08-10 15:18 ` [PATCH 25/26] ArmPlatformPkg/ArmPlatformLibNull: " Ard Biesheuvel
2016-08-11 8:39 ` Leif Lindholm
2016-08-10 15:18 ` [PATCH 26/26] ArmPlatformPkg/ArmPlatformStackLib: " Ard Biesheuvel
2016-08-11 8:42 ` Leif Lindholm
2016-08-11 10:18 ` Leif Lindholm [this message]
2016-08-11 11:27 ` [PATCH 00/26] ARM assembler cleanup series Ard Biesheuvel
2016-08-11 11:31 ` Ard Biesheuvel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160811101822.GV31760@bivouac.eciton.net \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox