summaryrefslogtreecommitdiffstats
path: root/cpukit/score/cpu/arm/cpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/cpu/arm/cpu.c')
-rw-r--r--cpukit/score/cpu/arm/cpu.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/cpukit/score/cpu/arm/cpu.c b/cpukit/score/cpu/arm/cpu.c
index a44cff59bb..53b42c3748 100644
--- a/cpukit/score/cpu/arm/cpu.c
+++ b/cpukit/score/cpu/arm/cpu.c
@@ -56,31 +56,31 @@ void _CPU_Context_Initialize(
void _CPU_ISR_Set_level( uint32_t level )
{
- uint32_t reg;
+ uint32_t arm_switch_reg;
asm volatile (
- THUMB_TO_ARM
- "mrs %0, cpsr\n"
- "bic %0, %0, #" _CPU_ISR_LEVEL_STRINGOF( CPU_MODES_INTERRUPT_MASK ) "\n"
- "orr %0, %0, %1\n"
+ ARM_SWITCH_TO_ARM
+ "mrs %[arm_switch_reg], cpsr\n"
+ "bic %[arm_switch_reg], #" _CPU_ISR_LEVEL_STRINGOF( CPU_MODES_INTERRUPT_MASK ) "\n"
+ "orr %[arm_switch_reg], %[level]\n"
"msr cpsr, %0\n"
- ARM_TO_THUMB
- : "=r" (reg)
- : "r" (level)
+ ARM_SWITCH_BACK
+ : [arm_switch_reg] "=&r" (arm_switch_reg)
+ : [level] "r" (level)
);
}
uint32_t _CPU_ISR_Get_level( void )
{
- uint32_t reg;
+ ARM_SWITCH_REGISTERS;
uint32_t level;
asm volatile (
- THUMB_TO_ARM
- "mrs %0, cpsr\n"
- "and %1, %0, #" _CPU_ISR_LEVEL_STRINGOF( CPU_MODES_INTERRUPT_MASK ) "\n"
- ARM_TO_THUMB
- : "=r" (reg), "=r" (level)
+ ARM_SWITCH_TO_ARM
+ "mrs %[level], cpsr\n"
+ "and %[level], #" _CPU_ISR_LEVEL_STRINGOF( CPU_MODES_INTERRUPT_MASK ) "\n"
+ ARM_SWITCH_BACK
+ : [level] "=&r" (level) ARM_SWITCH_ADDITIONAL_OUTPUT
);
return level;