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:
Michael Walle 2011-04-13 00:29:33 +02:00 committed by Edgar E. Iglesias
parent 4a043713b3
commit ecbe1de823
2 changed files with 1 additions and 31 deletions

View File

@ -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:

View File

@ -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);
}