diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-01-04 16:22:18 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-01-07 15:07:41 +0100 |
commit | 8df0e91ab0f9a890b0ba9c3c2428c91cde09a0e8 (patch) | |
tree | 02f456157017ea8a06a1c3930a84907aa9bbb84d /cpukit/score/cpu/arm/rtems/score/armv4.h | |
parent | arm: Add and use default exception handler (diff) | |
download | rtems-8df0e91ab0f9a890b0ba9c3c2428c91cde09a0e8.tar.bz2 |
arm: Move inline functions
Diffstat (limited to 'cpukit/score/cpu/arm/rtems/score/armv4.h')
-rw-r--r-- | cpukit/score/cpu/arm/rtems/score/armv4.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/cpukit/score/cpu/arm/rtems/score/armv4.h b/cpukit/score/cpu/arm/rtems/score/armv4.h index 8c000f1150..98ac84666e 100644 --- a/cpukit/score/cpu/arm/rtems/score/armv4.h +++ b/cpukit/score/cpu/arm/rtems/score/armv4.h @@ -55,6 +55,40 @@ void _ARMV4_Exception_irq_default( void ); void _ARMV4_Exception_fiq_default( void ); +static inline uint32_t arm_status_irq_enable( void ) +{ + uint32_t arm_switch_reg; + uint32_t psr; + + RTEMS_COMPILER_MEMORY_BARRIER(); + + __asm__ volatile ( + ARM_SWITCH_TO_ARM + "mrs %[psr], cpsr\n" + "bic %[arm_switch_reg], %[psr], #0x80\n" + "msr cpsr, %[arm_switch_reg]\n" + ARM_SWITCH_BACK + : [arm_switch_reg] "=&r" (arm_switch_reg), [psr] "=&r" (psr) + ); + + return psr; +} + +static inline void arm_status_restore( uint32_t psr ) +{ + ARM_SWITCH_REGISTERS; + + __asm__ volatile ( + ARM_SWITCH_TO_ARM + "msr cpsr, %[psr]\n" + ARM_SWITCH_BACK + : ARM_SWITCH_OUTPUT + : [psr] "r" (psr) + ); + + RTEMS_COMPILER_MEMORY_BARRIER(); +} + #endif /* ARM_MULTILIB_ARCH_V4 */ #ifdef __cplusplus |