1 require_privilege(get_field(STATE
.mstatus
, MSTATUS_TSR
) ? PRV_M
: PRV_S
);
2 set_pc_and_serialize(p
->get_state()->sepc
);
3 reg_t s
= STATE
.mstatus
;
4 reg_t prev_prv
= get_field(s
, MSTATUS_SPP
);
5 s
= set_field(s
, MSTATUS_SIE
, get_field(s
, MSTATUS_SPIE
));
6 s
= set_field(s
, MSTATUS_SPIE
, 1);
7 s
= set_field(s
, MSTATUS_SPP
, PRV_U
);
8 p
->set_privilege(prev_prv
);
9 p
->set_csr(CSR_MSTATUS
, s
);