aboutsummaryrefslogtreecommitdiffstats
path: root/os/nil/ports/e200/compilers/GCC
diff options
context:
space:
mode:
Diffstat (limited to 'os/nil/ports/e200/compilers/GCC')
-rw-r--r--os/nil/ports/e200/compilers/GCC/ivor.s18
1 files changed, 12 insertions, 6 deletions
diff --git a/os/nil/ports/e200/compilers/GCC/ivor.s b/os/nil/ports/e200/compilers/GCC/ivor.s
index 28d54962a..8bd687c0a 100644
--- a/os/nil/ports/e200/compilers/GCC/ivor.s
+++ b/os/nil/ports/e200/compilers/GCC/ivor.s
@@ -93,10 +93,13 @@ _IVOR10:
lis %r3, 0x0800 /* DIS bit mask. */
mtspr 336, %r3 /* TSR register. */
-#if PPC_USE_IRQ_PREEMPTION
- /* Allows preemption while executing the software handler.*/
- wrteei 1
+ /* Restoring pre-IRQ MSR register value.*/
+ mfSRR1 %r0
+#if !PPC_USE_IRQ_PREEMPTION
+ /* No preemption, keeping EE disabled.*/
+ se_bclri %r0, 16 /* EE = bit 16. */
#endif
+ mtMSR %r0
/* System tick handler invocation.*/
bl chSysTimerHandlerI
@@ -161,10 +164,13 @@ _IVOR4:
lwz %r3, 0(%r3)
mtCTR %r3 /* Software handler address. */
-#if PPC_USE_IRQ_PREEMPTION
- /* Allows preemption while executing the software handler.*/
- wrteei 1
+ /* Restoring pre-IRQ MSR register value.*/
+ mfSRR1 %r0
+#if !PPC_USE_IRQ_PREEMPTION
+ /* No preemption, keeping EE disabled.*/
+ se_bclri %r0, 16 /* EE = bit 16. */
#endif
+ mtMSR %r0
/* Exectes the software handler.*/
bctrl