mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-03-24 22:15:07 +00:00
m68k: fix exception stack frame for 68000
68000 CPUs do not save format in the exception stack frame. This patch adds feature checking to prevent format saving for 68000. m68k_ret() already includes this modification, this patch fixes the exception processing function too. Backports commit 000761dc0c97d70e7314db3e8f52783880325a22 from qemu
This commit is contained in:
parent
9517a002da
commit
fe353764e9
|
@ -280,22 +280,25 @@ static inline void do_stack_frame(CPUM68KState *env, uint32_t *sp,
|
||||||
uint16_t format, uint16_t sr,
|
uint16_t format, uint16_t sr,
|
||||||
uint32_t addr, uint32_t retaddr)
|
uint32_t addr, uint32_t retaddr)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(m68k_env_get_cpu(env));
|
if (m68k_feature(env, M68K_FEATURE_QUAD_MULDIV)) {
|
||||||
switch (format) {
|
/* all except 68000 */
|
||||||
case 4:
|
CPUState *cs = CPU(m68k_env_get_cpu(env));
|
||||||
*sp -= 4;
|
switch (format) {
|
||||||
cpu_stl_kernel(env, *sp, env->pc);
|
case 4:
|
||||||
*sp -= 4;
|
*sp -= 4;
|
||||||
cpu_stl_kernel(env, *sp, addr);
|
cpu_stl_kernel(env, *sp, env->pc);
|
||||||
break;
|
*sp -= 4;
|
||||||
case 3:
|
cpu_stl_kernel(env, *sp, addr);
|
||||||
case 2:
|
break;
|
||||||
*sp -= 4;
|
case 3:
|
||||||
cpu_stl_kernel(env, *sp, addr);
|
case 2:
|
||||||
break;
|
*sp -= 4;
|
||||||
|
cpu_stl_kernel(env, *sp, addr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*sp -= 2;
|
||||||
|
cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2));
|
||||||
}
|
}
|
||||||
*sp -= 2;
|
|
||||||
cpu_stw_kernel(env, *sp, (format << 12) + (cs->exception_index << 2));
|
|
||||||
*sp -= 4;
|
*sp -= 4;
|
||||||
cpu_stl_kernel(env, *sp, retaddr);
|
cpu_stl_kernel(env, *sp, retaddr);
|
||||||
*sp -= 2;
|
*sp -= 2;
|
||||||
|
|
Loading…
Reference in a new issue