mirror of https://github.com/acidanthera/audk.git
ArmPkg/AsmMacroIoLib: Add support for ARM Compiler 6.00
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15554 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
ec17f0f56a
commit
5f1103bd1e
|
@ -1,5 +1,5 @@
|
||||||
/** @file
|
/** @file
|
||||||
Macros to work around lack of Apple support for LDR register, =expr
|
Macros to work around lack of Clang support for LDR register, =expr
|
||||||
|
|
||||||
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
||||||
Portions copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>
|
Portions copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>
|
||||||
|
@ -18,54 +18,6 @@
|
||||||
#ifndef __MACRO_IO_LIBV8_H__
|
#ifndef __MACRO_IO_LIBV8_H__
|
||||||
#define __MACRO_IO_LIBV8_H__
|
#define __MACRO_IO_LIBV8_H__
|
||||||
|
|
||||||
#if defined (__GNUC__)
|
|
||||||
|
|
||||||
#define MmioWrite32(Address, Data) \
|
|
||||||
ldr x1, =Address ; \
|
|
||||||
ldr w0, =Data ; \
|
|
||||||
str w0, [x1]
|
|
||||||
|
|
||||||
#define MmioOr32(Address, OrData) \
|
|
||||||
ldr x1, =Address ; \
|
|
||||||
ldr w2, =OrData ; \
|
|
||||||
ldr w0, [x1] ; \
|
|
||||||
orr w0, w0, w2 ; \
|
|
||||||
str w0, [x1]
|
|
||||||
|
|
||||||
#define MmioAnd32(Address, AndData) \
|
|
||||||
ldr x1, =Address ; \
|
|
||||||
ldr w2, =AndData ; \
|
|
||||||
ldr w0, [x1] ; \
|
|
||||||
and w0, w0, w2 ; \
|
|
||||||
str w0, [x1]
|
|
||||||
|
|
||||||
#define MmioAndThenOr32(Address, AndData, OrData) \
|
|
||||||
ldr x1, =Address ; \
|
|
||||||
ldr w0, [x1] ; \
|
|
||||||
ldr w2, =AndData ; \
|
|
||||||
and w0, w0, w2 ; \
|
|
||||||
ldr w2, =OrData ; \
|
|
||||||
orr w0, w0, w2 ; \
|
|
||||||
str w0, [x1]
|
|
||||||
|
|
||||||
#define MmioWriteFromReg32(Address, Reg) \
|
|
||||||
ldr x1, =Address ; \
|
|
||||||
str Reg, [x1]
|
|
||||||
|
|
||||||
#define MmioRead32(Address) \
|
|
||||||
ldr x1, =Address ; \
|
|
||||||
ldr w0, [x1]
|
|
||||||
|
|
||||||
#define MmioReadToReg32(Address, Reg) \
|
|
||||||
ldr x1, =Address ; \
|
|
||||||
ldr Reg, [x1]
|
|
||||||
|
|
||||||
#define LoadConstant(Data) \
|
|
||||||
ldr x0, =Data
|
|
||||||
|
|
||||||
#define LoadConstantToReg(Data, Reg) \
|
|
||||||
ldr Reg, =Data
|
|
||||||
|
|
||||||
#define SetPrimaryStack(StackTop, GlobalSize, Tmp, Tmp1) \
|
#define SetPrimaryStack(StackTop, GlobalSize, Tmp, Tmp1) \
|
||||||
ands Tmp, GlobalSize, #15 ; \
|
ands Tmp, GlobalSize, #15 ; \
|
||||||
mov Tmp1, #16 ; \
|
mov Tmp1, #16 ; \
|
||||||
|
@ -124,12 +76,35 @@ _InitializePrimaryStackEnd:
|
||||||
cmp SAFE_XREG, #0x4 ;\
|
cmp SAFE_XREG, #0x4 ;\
|
||||||
b.ne . ;// We should never get here
|
b.ne . ;// We should never get here
|
||||||
// EL1 code starts here
|
// EL1 code starts here
|
||||||
|
#if defined(__clang__)
|
||||||
|
|
||||||
#else
|
// load x0 with _Data
|
||||||
|
#define LoadConstant(_Data) \
|
||||||
|
ldr x0, 1f ; \
|
||||||
|
b 2f ; \
|
||||||
|
.align(8) ; \
|
||||||
|
1: \
|
||||||
|
.8byte (_Data) ; \
|
||||||
|
2:
|
||||||
|
|
||||||
#error RVCT AArch64 tool chain is not supported
|
// load _Reg with _Data
|
||||||
|
#define LoadConstantToReg(_Data, _Reg) \
|
||||||
|
ldr _Reg, 1f ; \
|
||||||
|
b 2f ; \
|
||||||
|
.align(8) ; \
|
||||||
|
1: \
|
||||||
|
.8byte (_Data) ; \
|
||||||
|
2:
|
||||||
|
|
||||||
#endif // __GNUC__
|
#elif defined (__GNUC__)
|
||||||
|
|
||||||
|
#define LoadConstant(Data) \
|
||||||
|
ldr x0, =Data
|
||||||
|
|
||||||
|
#define LoadConstantToReg(Data, Reg) \
|
||||||
|
ldr Reg, =Data
|
||||||
|
|
||||||
|
#endif // __GNUC__
|
||||||
|
|
||||||
#endif // __MACRO_IO_LIBV8_H__
|
#endif // __MACRO_IO_LIBV8_H__
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue