mirror of
https://github.com/xemu-project/xemu.git
synced 2025-04-02 11:11:48 -04:00
lm32: fix exception handling
Global interrupt enable bit is already saved within the exception handler helper routine. Thus remove extra code in translation routines. Additionally, debug exceptions has always DEBA as base address. Signed-off-by: Michael Walle <michael@walle.cc> Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
This commit is contained in:
parent
4a043713b3
commit
ecbe1de823
2 changed files with 1 additions and 31 deletions
|
@ -76,11 +76,7 @@ void do_interrupt(CPUState *env)
|
|||
env->regs[R_BA] = env->pc;
|
||||
env->ie |= (env->ie & IE_IE) ? IE_BIE : 0;
|
||||
env->ie &= ~IE_IE;
|
||||
if (env->dc & DC_RE) {
|
||||
env->pc = env->deba + (env->exception_index * 32);
|
||||
} else {
|
||||
env->pc = env->eba + (env->exception_index * 32);
|
||||
}
|
||||
env->pc = env->deba + (env->exception_index * 32);
|
||||
log_cpu_state_mask(CPU_LOG_INT, env, 0);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -598,36 +598,10 @@ static void dec_scall(DisasContext *dc)
|
|||
t0 = tcg_temp_new();
|
||||
l1 = gen_new_label();
|
||||
|
||||
/* save IE.IE */
|
||||
tcg_gen_andi_tl(t0, cpu_ie, IE_IE);
|
||||
|
||||
/* IE.IE = 0 */
|
||||
tcg_gen_andi_tl(cpu_ie, cpu_ie, ~IE_IE);
|
||||
|
||||
if (dc->imm5 == 7) {
|
||||
/* IE.EIE = IE.IE */
|
||||
tcg_gen_ori_tl(cpu_ie, cpu_ie, IE_EIE);
|
||||
tcg_gen_brcondi_tl(TCG_COND_EQ, t0, IE_IE, l1);
|
||||
tcg_gen_andi_tl(cpu_ie, cpu_ie, ~IE_EIE);
|
||||
gen_set_label(l1);
|
||||
|
||||
/* gpr[ea] = PC */
|
||||
tcg_gen_movi_tl(cpu_R[R_EA], dc->pc);
|
||||
tcg_temp_free(t0);
|
||||
|
||||
tcg_gen_movi_tl(cpu_pc, dc->pc);
|
||||
t_gen_raise_exception(dc, EXCP_SYSTEMCALL);
|
||||
} else {
|
||||
/* IE.BIE = IE.IE */
|
||||
tcg_gen_ori_tl(cpu_ie, cpu_ie, IE_BIE);
|
||||
tcg_gen_brcondi_tl(TCG_COND_EQ, t0, IE_IE, l1);
|
||||
tcg_gen_andi_tl(cpu_ie, cpu_ie, ~IE_BIE);
|
||||
gen_set_label(l1);
|
||||
|
||||
/* gpr[ba] = PC */
|
||||
tcg_gen_movi_tl(cpu_R[R_BA], dc->pc);
|
||||
tcg_temp_free(t0);
|
||||
|
||||
tcg_gen_movi_tl(cpu_pc, dc->pc);
|
||||
t_gen_raise_exception(dc, EXCP_BREAKPOINT);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue