summaryrefslogtreecommitdiffstats
path: root/cpukit/score/cpu/powerpc/rtems
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-10-02 07:30:13 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-10-02 07:30:13 +0200
commit08317ef3ff739b5abce2cbc0fc8bc2d9eb310b99 (patch)
tree86cf3b8c000f0ef28f3c0894a4e3d3bf0038e64e /cpukit/score/cpu/powerpc/rtems
parentbsps/i386: Interrupt server support (diff)
downloadrtems-08317ef3ff739b5abce2cbc0fc8bc2d9eb310b99.tar.bz2
powerpc: Use wrtee for e6500 multilib
This reduces the code size.
Diffstat (limited to 'cpukit/score/cpu/powerpc/rtems')
-rw-r--r--cpukit/score/cpu/powerpc/rtems/powerpc/registers.h17
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 )