aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2017-02-01 22:33:38 -0800
committerAndrew Waterman <andrew@sifive.com>2017-02-01 22:33:38 -0800
commitd392463e5c8e47cfa030eb4640585302f800207f (patch)
treebfb04a77aaaf79d35fd2d32729a55584f34eb23b
parente9e30598e08e4f162b523f9ef07f1510f3cfe0a6 (diff)
downloadspike-d392463e5c8e47cfa030eb4640585302f800207f.zip
spike-d392463e5c8e47cfa030eb4640585302f800207f.tar.gz
spike-d392463e5c8e47cfa030eb4640585302f800207f.tar.bz2
Set xPIE=1 on xRET
Resolves #88.
-rw-r--r--riscv/insns/mret.h2
-rw-r--r--riscv/insns/sret.h2
2 files changed, 2 insertions, 2 deletions
diff --git a/riscv/insns/mret.h b/riscv/insns/mret.h
index fa97b2c..f3c4414 100644
--- a/riscv/insns/mret.h
+++ b/riscv/insns/mret.h
@@ -3,7 +3,7 @@ set_pc_and_serialize(p->get_state()->mepc);
reg_t s = STATE.mstatus;
reg_t prev_prv = get_field(s, MSTATUS_MPP);
s = set_field(s, MSTATUS_UIE << prev_prv, get_field(s, MSTATUS_MPIE));
-s = set_field(s, MSTATUS_MPIE, 0);
+s = set_field(s, MSTATUS_MPIE, 1);
s = set_field(s, MSTATUS_MPP, PRV_U);
p->set_privilege(prev_prv);
p->set_csr(CSR_MSTATUS, s);
diff --git a/riscv/insns/sret.h b/riscv/insns/sret.h
index f5e89e4..b593198 100644
--- a/riscv/insns/sret.h
+++ b/riscv/insns/sret.h
@@ -3,7 +3,7 @@ set_pc_and_serialize(p->get_state()->sepc);
reg_t s = STATE.mstatus;
reg_t prev_prv = get_field(s, MSTATUS_SPP);
s = set_field(s, MSTATUS_UIE << prev_prv, get_field(s, MSTATUS_SPIE));
-s = set_field(s, MSTATUS_SPIE, 0);
+s = set_field(s, MSTATUS_SPIE, 1);
s = set_field(s, MSTATUS_SPP, PRV_U);
p->set_privilege(prev_prv);
p->set_csr(CSR_MSTATUS, s);