Fix clobbered registers on MRC/MCR/MRS/MSR C wrappers

Previously the compiler could've optimized stores/reads to be placed outside of critical sections, etc
This commit is contained in:
Wolfvak 2019-04-25 10:01:34 -03:00 committed by d0k3
parent a6734af45d
commit 08b53f71e1

View File

@ -75,19 +75,19 @@
#define ARM_MCR(cp, op1, reg, crn, crm, op2) asm_v( \
"MCR " #cp ", " #op1 ", %[R], " #crn ", " #crm ", " #op2 "\n\t" \
:: [R] "r"(reg))
:: [R] "r"(reg) : "memory","cc")
#define ARM_MRC(cp, op1, reg, crn, crm, op2) asm_v( \
"MRC " #cp ", " #op1 ", %[R], " #crn ", " #crm ", " #op2 "\n\t" \
: [R] "=r"(reg))
: [R] "=r"(reg) :: "memory","cc")
#define ARM_MSR(cp, reg) asm_v( \
"MSR " #cp ", %[R]\n\t" \
:: [R] "r"(reg))
:: [R] "r"(reg) : "memory","cc")
#define ARM_MRS(reg, cp) asm_v( \
"MRS %[R], " #cp "\n\t" \
: [R] "=r"(reg))
: [R] "=r"(reg) :: "memory","cc")
#ifdef ARM11
#define ARM_CPS(m) asm_v("CPS " #m)