aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--target-mips/helper.c4
-rw-r--r--target-mips/op.c2
-rw-r--r--target-mips/op_helper.c4
3 files changed, 5 insertions, 5 deletions
diff --git a/target-mips/helper.c b/target-mips/helper.c
index 8325d48..9c8e4f6 100644
--- a/target-mips/helper.c
+++ b/target-mips/helper.c
@@ -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) {
diff --git a/target-mips/op.c b/target-mips/op.c
index bc7f819..4575517 100644
--- a/target-mips/op.c
+++ b/target-mips/op.c
@@ -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;
}
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index 37f2604..bf397c9 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -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: