From 734e71f428a4fdac5d82ae9c093911053356f6ff Mon Sep 17 00:00:00 2001 From: Oliver Smith-Denny Date: Tue, 6 Aug 2024 15:19:23 -0700 Subject: MdePkg: Move AsmMacroIoLib*.h from ArmPkg AsmMacroIoLib.h and AsmMacroIoLibV8.h are used by the CompilerIntrinsicsLib, which is moving to MdePkg. These functions provide standard definitions for ARM/AARCH64 assembly code, respectively, and so are moved to the arch directories in MdePkg to avoid MdePkg having a dependency on ArmPkg. Now that the files are in Arm/ and AArch64/ directories, the filenames are changed to AsmMacroLib.h as we can distinguish the architecture from the path. AsmMacroIoLib.inc is unused and so is removed. Continuous-integration-options: PatchCheck.ignore-multi-package Signed-off-by: Oliver Smith-Denny --- MdePkg/Include/AArch64/AsmMacroLib.h | 56 ++++++++++++++++++++++++++++++++++++ MdePkg/Include/Arm/AsmMacroLib.h | 38 ++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 MdePkg/Include/AArch64/AsmMacroLib.h create mode 100644 MdePkg/Include/Arm/AsmMacroLib.h (limited to 'MdePkg') diff --git a/MdePkg/Include/AArch64/AsmMacroLib.h b/MdePkg/Include/AArch64/AsmMacroLib.h new file mode 100644 index 0000000000..a5c8635840 --- /dev/null +++ b/MdePkg/Include/AArch64/AsmMacroLib.h @@ -0,0 +1,56 @@ +/** @file + Macros to work around lack of Clang support for LDR register, =expr + + Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
+ Portions copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.
+ Copyright (c) 2016, Linaro Ltd. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef ASM_MACRO_IO_LIBV8_H_ +#define ASM_MACRO_IO_LIBV8_H_ + +// CurrentEL : 0xC = EL3; 8 = EL2; 4 = EL1 +// This only selects between EL1 and EL2, else we die. +// Provide the Macro with a safe temp xreg to use. +#define EL1_OR_EL2(SAFE_XREG) \ + mrs SAFE_XREG, CurrentEL ;\ + cmp SAFE_XREG, #0x8 ;\ + b.gt . ;\ + b.eq 2f ;\ + cbnz SAFE_XREG, 1f ;\ + b . ;// We should never get here + +#define _ASM_FUNC(Name, Section) \ + .global Name ; \ + .section #Section, "ax" ; \ + .type Name, %function ; \ + Name: ; \ + AARCH64_BTI(c) + +#define _ASM_FUNC_ALIGN(Name, Section, Align) \ + .global Name ; \ + .section #Section, "ax" ; \ + .type Name, %function ; \ + .balign Align ; \ + Name: ; \ + AARCH64_BTI(c) + +#define ASM_FUNC(Name) _ASM_FUNC(ASM_PFX(Name), .text. ## Name) + +#define ASM_FUNC_ALIGN(Name, Align) \ + _ASM_FUNC_ALIGN(ASM_PFX(Name), .text. ## Name, Align) + +#define MOV32(Reg, Val) \ + movz Reg, (Val) >> 16, lsl #16 ; \ + movk Reg, (Val) & 0xffff + +#define MOV64(Reg, Val) \ + movz Reg, (Val) >> 48, lsl #48 ; \ + movk Reg, ((Val) >> 32) & 0xffff, lsl #32 ; \ + movk Reg, ((Val) >> 16) & 0xffff, lsl #16 ; \ + movk Reg, (Val) & 0xffff + +#endif // ASM_MACRO_IO_LIBV8_H_ diff --git a/MdePkg/Include/Arm/AsmMacroLib.h b/MdePkg/Include/Arm/AsmMacroLib.h new file mode 100644 index 0000000000..2493a15b7b --- /dev/null +++ b/MdePkg/Include/Arm/AsmMacroLib.h @@ -0,0 +1,38 @@ +/** @file + Macros to work around lack of Apple support for LDR register, =expr + + Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
+ Copyright (c) 2011-2012, ARM Ltd. All rights reserved.
+ Copyright (c) 2016, Linaro Ltd. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef ASM_MACRO_IO_LIB_H_ +#define ASM_MACRO_IO_LIB_H_ + +#define _ASM_FUNC(Name, Section) \ + .global Name ; \ + .section #Section, "ax" ; \ + .type Name, %function ; \ + .p2align 2 ; \ + Name: + +#define ASM_FUNC(Name) _ASM_FUNC(ASM_PFX(Name), .text. ## Name) + +#define MOV32(Reg, Val) \ + movw Reg, #(Val) & 0xffff ; \ + movt Reg, #(Val) >> 16 + +#define ADRL(Reg, Sym) \ + movw Reg, #:lower16:(Sym) - (. + 16) ; \ + movt Reg, #:upper16:(Sym) - (. + 12) ; \ + add Reg, Reg, pc + +#define LDRL(Reg, Sym) \ + movw Reg, #:lower16:(Sym) - (. + 16) ; \ + movt Reg, #:upper16:(Sym) - (. + 12) ; \ + ldr Reg, [pc, Reg] + +#endif // ASM_MACRO_IO_LIB_H_ -- cgit v1.2.3