env->pc = ldl_kernel(sp + 4);
sp |= (fmt >> 28) & 3;
env->sr = fmt & 0xffff;
+ m68k_switch_sp(env);
env->aregs[7] = sp + 8;
}
}
}
- /* TODO: Implement USP. */
- sp = env->aregs[7];
-
vector = env->exception_index << 2;
fmt |= 0x40000000;
fmt |= vector << 16;
fmt |= env->sr;
+ env->sr |= SR_S;
+ if (is_hw) {
+ env->sr = (env->sr & ~SR_I) | (env->pending_level << SR_I_SHIFT);
+ env->sr &= ~SR_M;
+ }
+ m68k_switch_sp(env);
+
+ sp = env->aregs[7];
+
/* ??? This could cause MMU faults. */
sp &= ~3;
sp -= 4;
sp -= 4;
stl_kernel(sp, fmt);
env->aregs[7] = sp;
- env->sr |= SR_S;
- if (is_hw) {
- env->sr = (env->sr & ~SR_I) | (env->pending_level << SR_I_SHIFT);
- env->sr &= ~SR_M;
- }
/* Jump to vector. */
env->pc = ldl_kernel(env->vbr + vector);
}