mirror of https://gitee.com/openkylin/qemu.git
consistent update of ERL and EXL
(Dirk Behme) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2028 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
beac80cd43
commit
3e382bc84c
|
@ -332,7 +332,8 @@ void do_interrupt (CPUState *env)
|
|||
} else {
|
||||
env->CP0_ErrorEPC = env->PC;
|
||||
}
|
||||
env->hflags = MIPS_HFLAG_ERL;
|
||||
env->hflags |= MIPS_HFLAG_ERL;
|
||||
env->CP0_Status |= (1 << CP0St_ERL);
|
||||
pc = 0xBFC00000;
|
||||
break;
|
||||
case EXCP_MCHECK:
|
||||
|
@ -396,6 +397,7 @@ void do_interrupt (CPUState *env)
|
|||
pc = 0x80000000;
|
||||
}
|
||||
env->hflags |= MIPS_HFLAG_EXL;
|
||||
env->CP0_Status |= (1 << CP0St_EXL);
|
||||
pc += offset;
|
||||
env->CP0_Cause = (env->CP0_Cause & ~0x7C) | (cause << 2);
|
||||
if (env->hflags & MIPS_HFLAG_BMASK) {
|
||||
|
|
|
@ -1104,9 +1104,11 @@ void op_eret (void)
|
|||
if (env->hflags & MIPS_HFLAG_ERL) {
|
||||
env->PC = env->CP0_ErrorEPC;
|
||||
env->hflags &= ~MIPS_HFLAG_ERL;
|
||||
env->CP0_Status &= ~(1 << CP0St_ERL);
|
||||
} else {
|
||||
env->PC = env->CP0_EPC;
|
||||
env->hflags &= ~MIPS_HFLAG_EXL;
|
||||
env->CP0_Status &= ~(1 << CP0St_EXL);
|
||||
}
|
||||
env->CP0_LLAddr = 1;
|
||||
}
|
||||
|
|
|
@ -219,10 +219,6 @@ void do_mfc0 (int reg, int sel)
|
|||
T0 = env->CP0_Status;
|
||||
if (env->hflags & MIPS_HFLAG_UM)
|
||||
T0 |= (1 << CP0St_UM);
|
||||
if (env->hflags & MIPS_HFLAG_ERL)
|
||||
T0 |= (1 << CP0St_ERL);
|
||||
if (env->hflags & MIPS_HFLAG_EXL)
|
||||
T0 |= (1 << CP0St_EXL);
|
||||
rn = "Status";
|
||||
break;
|
||||
case 13:
|
||||
|
|
Loading…
Reference in New Issue