Skip to content

Commit 4f2e472

Browse files
committed
update
1 parent e7fd2e8 commit 4f2e472

File tree

2 files changed

+8
-18
lines changed

2 files changed

+8
-18
lines changed

riscv/insns/mret.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,10 @@ if (ZICFILP_xLPE(prev_virt, prev_prv)) {
1515
s = set_field(s, MSTATUS_MPELP, elp_t::NO_LP_EXPECTED);
1616

1717
s = set_field(s, MSTATUS_MDT, 0);
18-
if (prev_prv == PRV_U || prev_virt) {
18+
if (prev_prv == PRV_U || prev_virt)
1919
s = set_field(s, MSTATUS_SDT, 0);
20-
}
21-
if (prev_virt && prev_prv == PRV_U) {
22-
reg_t vs = STATE.vsstatus->read();
23-
vs = set_field(vs, SSTATUS_SDT, 0);
24-
STATE.vsstatus->write(vs);
25-
}
20+
if (prev_virt && prev_prv == PRV_U)
21+
STATE.vsstatus->write(STATE.vsstatus->read() & ~SSTATUS_SDT);
2622

2723
STATE.mstatus->write(s);
2824
if (STATE.mstatush) STATE.mstatush->write(s >> 32); // log mstatush change

riscv/insns/sret.h

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,11 @@ if (ZICFILP_xLPE(prev_virt, prev_prv)) {
2828
}
2929

3030
if (STATE.prv == PRV_M) {
31-
reg_t m = STATE.mstatus->read();
32-
m = set_field(m, MSTATUS_MDT, 0);
33-
if (prev_prv == PRV_U || prev_virt) {
34-
s = set_field(s, MSTATUS_SDT, 0);
35-
}
36-
STATE.mstatus->write(m);
37-
if (prev_virt && prev_prv == PRV_U) {
38-
reg_t vs = STATE.vsstatus->read();
39-
vs = set_field(vs, SSTATUS_SDT, 0);
40-
STATE.vsstatus->write(vs);
41-
}
31+
STATE.mstatus->write(STATE.mstatus->read() & ~MSTATUS_MDT);
32+
if (prev_prv == PRV_U || prev_virt)
33+
STATE.mstatus->write(STATE.mstatus->read() & ~MSTATUS_SDT);
34+
if (prev_virt && prev_prv == PRV_U)
35+
STATE.vsstatus->write(STATE.vsstatus->read() & ~SSTATUS_SDT);
4236
}
4337

4438
s = set_field(s, SSTATUS_SPELP, elp_t::NO_LP_EXPECTED);

0 commit comments

Comments
 (0)