diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-10-02 07:30:13 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-10-02 07:30:13 +0200 |
commit | 08317ef3ff739b5abce2cbc0fc8bc2d9eb310b99 (patch) | |
tree | 86cf3b8c000f0ef28f3c0894a4e3d3bf0038e64e /cpukit/score/cpu/powerpc/rtems/powerpc/registers.h | |
parent | bsps/i386: Interrupt server support (diff) | |
download | rtems-08317ef3ff739b5abce2cbc0fc8bc2d9eb310b99.tar.bz2 |
powerpc: Use wrtee for e6500 multilib
This reduces the code size.
Diffstat (limited to '')
-rw-r--r-- | cpukit/score/cpu/powerpc/rtems/powerpc/registers.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/cpukit/score/cpu/powerpc/rtems/powerpc/registers.h b/cpukit/score/cpu/powerpc/rtems/powerpc/registers.h index 5502120d53..c982e460fd 100644 --- a/cpukit/score/cpu/powerpc/rtems/powerpc/registers.h +++ b/cpukit/score/cpu/powerpc/rtems/powerpc/registers.h @@ -620,6 +620,14 @@ static inline uint32_t ppc_interrupt_get_disable_mask( void ) static inline uint32_t ppc_interrupt_disable( void ) { uint32_t level; + +#if defined(__PPC_CPU_E6500__) + __asm__ volatile ( + "mfmsr %0;" + "wrteei 0" + : "=r" (level) + ); +#else uint32_t mask; __asm__ volatile ( @@ -630,17 +638,26 @@ static inline uint32_t ppc_interrupt_disable( void ) "mtmsr %1" : "=r" (level), "=r" (mask) ); +#endif return level; } static inline void ppc_interrupt_enable( uint32_t level ) { +#if defined(__PPC_CPU_E6500__) + __asm__ volatile ( + "wrtee %0" + : + : "r" (level) + ); +#else __asm__ volatile ( "mtmsr %0" : : "r" (level) ); +#endif } static inline void ppc_interrupt_flash( uint32_t level ) |