target/m68k: Raise the TRAPn exception with the correct pc
Rather than adjust the PC in all of the consumers, raise the exception with the correct PC in the first place. Reviewed-by: Laurent Vivier <laurent@vivier.eu> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20220602013401.303699-2-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
abc098351e
commit
79e1d527e1
@ -56,7 +56,6 @@ void cpu_loop(CPUM68KState *env)
|
||||
{
|
||||
abi_long ret;
|
||||
n = env->dregs[0];
|
||||
env->pc += 2;
|
||||
ret = do_syscall(env,
|
||||
n,
|
||||
env->dregs[1],
|
||||
|
@ -217,11 +217,6 @@ static void cf_interrupt_all(CPUM68KState *env, int is_hw)
|
||||
cpu_loop_exit(cs);
|
||||
return;
|
||||
}
|
||||
if (cs->exception_index >= EXCP_TRAP0
|
||||
&& cs->exception_index <= EXCP_TRAP15) {
|
||||
/* Move the PC after the trap instruction. */
|
||||
retaddr += 2;
|
||||
}
|
||||
}
|
||||
|
||||
vector = cs->exception_index << 2;
|
||||
@ -304,10 +299,6 @@ static void m68k_interrupt_all(CPUM68KState *env, int is_hw)
|
||||
/* Return from an exception. */
|
||||
m68k_rte(env);
|
||||
return;
|
||||
case EXCP_TRAP0 ... EXCP_TRAP15:
|
||||
/* Move the PC after the trap instruction. */
|
||||
retaddr += 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4860,7 +4860,7 @@ DISAS_INSN(wdebug)
|
||||
|
||||
DISAS_INSN(trap)
|
||||
{
|
||||
gen_exception(s, s->base.pc_next, EXCP_TRAP0 + (insn & 0xf));
|
||||
gen_exception(s, s->pc, EXCP_TRAP0 + (insn & 0xf));
|
||||
}
|
||||
|
||||
static void gen_load_fcr(DisasContext *s, TCGv res, int reg)
|
||||
|
Loading…
Reference in New Issue
Block a user