Browse Source

Set xPIE=1 on xRET

Resolves #88.
pull/51/merge
Andrew Waterman 10 years ago
parent
commit
d392463e5c
  1. 2
      riscv/insns/mret.h
  2. 2
      riscv/insns/sret.h

2
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);

2
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);

Loading…
Cancel
Save