X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ArmPkg%2FInclude%2FAsmMacroIoLibV8.h;h=db43d3b52e5a0ab80e509d48bef22110110f0685;hb=11cf25f030eb9b9a4541b35791c46d85709173f2;hp=a9f8491bc92270640f5e27e648032c19fc012b0d;hpb=ec613395d114ed6f7c13249a199d1e9cc0025326;p=mirror_edk2.git diff --git a/ArmPkg/Include/AsmMacroIoLibV8.h b/ArmPkg/Include/AsmMacroIoLibV8.h index a9f8491bc9..db43d3b52e 100644 --- a/ArmPkg/Include/AsmMacroIoLibV8.h +++ b/ArmPkg/Include/AsmMacroIoLibV8.h @@ -3,6 +3,7 @@ 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.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -24,52 +25,39 @@ #define EL1_OR_EL2(SAFE_XREG) \ mrs SAFE_XREG, CurrentEL ;\ cmp SAFE_XREG, #0x8 ;\ + b.gt . ;\ b.eq 2f ;\ - cmp SAFE_XREG, #0x4 ;\ - b.ne . ;// We should never get here -// EL1 code starts here + cbnz SAFE_XREG, 1f ;\ + b . ;// We should never get here + // CurrentEL : 0xC = EL3; 8 = EL2; 4 = EL1 // This only selects between EL1 and EL2 and EL3, else we die. // Provide the Macro with a safe temp xreg to use. #define EL1_OR_EL2_OR_EL3(SAFE_XREG) \ mrs SAFE_XREG, CurrentEL ;\ - cmp SAFE_XREG, #0xC ;\ - b.eq 3f ;\ cmp SAFE_XREG, #0x8 ;\ + b.gt 3f ;\ b.eq 2f ;\ - cmp SAFE_XREG, #0x4 ;\ - b.ne . ;// We should never get here -// EL1 code starts here -#if defined(__clang__) - -// load x0 with _Data -#define LoadConstant(_Data) \ - ldr x0, 1f ; \ - b 2f ; \ -.align(8) ; \ -1: \ - .8byte (_Data) ; \ -2: + cbnz SAFE_XREG, 1f ;\ + b . ;// We should never get here -// load _Reg with _Data -#define LoadConstantToReg(_Data, _Reg) \ - ldr _Reg, 1f ; \ - b 2f ; \ -.align(8) ; \ -1: \ - .8byte (_Data) ; \ -2: +#define _ASM_FUNC(Name, Section) \ + .global Name ; \ + .section #Section, "ax" ; \ + .type Name, %function ; \ + Name: -#elif defined (__GNUC__) +#define ASM_FUNC(Name) _ASM_FUNC(ASM_PFX(Name), .text. ## Name) -#define LoadConstant(Data) \ - ldr x0, =Data +#define MOV32(Reg, Val) \ + movz Reg, (Val) >> 16, lsl #16 ; \ + movk Reg, (Val) & 0xffff -#define LoadConstantToReg(Data, Reg) \ - ldr Reg, =Data - -#endif // __GNUC__ +#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 // __MACRO_IO_LIBV8_H__ -