[arch][arm64] Fix ARM64_READ_SYSREG and ARM64_WRITE_SYSREG to work if the register argument is a macro.

Change-Id: Ibcf2438901a0c6fa8fb704ba684fbd0720579c1e
This commit is contained in:
Arve Hjønnevåg
2014-12-05 18:10:24 -08:00
parent 93c70ef1f3
commit 5a25f43b90

View File

@@ -31,16 +31,19 @@ __BEGIN_CDECLS
#define DSB __asm__ volatile("dsb sy" ::: "memory")
#define ISB __asm__ volatile("isb" ::: "memory")
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define ARM64_READ_SYSREG(reg) \
({ \
uint64_t _val; \
__asm__ volatile("mrs %0," #reg : "=r" (_val)); \
__asm__ volatile("mrs %0," TOSTRING(reg) : "=r" (_val)); \
_val; \
})
#define ARM64_WRITE_SYSREG(reg, val) \
({ \
__asm__ volatile("msr " #reg ", %0" :: "r" (val)); \
__asm__ volatile("msr " TOSTRING(reg) ", %0" :: "r" (val)); \
ISB; \
})