@@ -90,8 +90,8 @@ static void do_rte(void)
env->pc = ldl_kernel(sp + 4);
sp |= (fmt >> 28) & 3;
env->sr = fmt & 0xffff;
- m68k_switch_sp(env);
env->aregs[7] = sp + 8;
+ m68k_switch_sp(env);
}
static void do_interrupt_all(int is_hw)
@@ -134,10 +134,7 @@ static void do_interrupt_all(int is_hw)
vector = env->exception_index << 2;
- sp = env->aregs[7];
-
fmt |= 0x40000000;
- fmt |= (sp & 3) << 28;
fmt |= vector << 16;
fmt |= env->sr;
@@ -147,6 +144,8 @@ static void do_interrupt_all(int is_hw)
env->sr &= ~SR_M;
}
m68k_switch_sp(env);
+ sp = env->aregs[7];
+ fmt |= (sp & 3) << 28;
/* ??? This could cause MMU faults. */
sp &= ~3;