mret
Machine Exception Return
This instruction is defined by:
Execution
-
Pruned, XLEN == 64
-
Original
if (mstatus.MPP != 2'b11) {
mstatus.MPRV = 0;
}
mstatus.MIE = mstatus.MPIE;
mstatus.MPIE = 1;
if (mstatus.MPP == 2'b00) {
set_mode(PrivilegeMode::U);
} else if (mstatus.MPP == 2'b01) {
set_mode(PrivilegeMode::S);
} else if (mstatus.MPP == 2'b11) {
set_mode(PrivilegeMode::M);
}
mstatus.MPP = 2'b00;
$pc = $bits(mepc);
if (mstatus.MPP != 2'b11) {
mstatus.MPRV = 0;
}
if (implemented?(ExtensionName::Smdbltrp)) {
if (xlen() == 64) {
mstatus.MDT = 1'b0;
} else {
mstatush.MDT = 1'b0;
}
}
mstatus.MIE = mstatus.MPIE;
mstatus.MPIE = 1;
if (mstatus.MPP == 2'b00) {
set_mode(PrivilegeMode::U);
} else if (mstatus.MPP == 2'b01) {
set_mode(PrivilegeMode::S);
} else if (mstatus.MPP == 2'b11) {
set_mode(PrivilegeMode::M);
}
mstatus.MPP = implemented?(ExtensionName::U) ? 2'b00 : 2'b11;
$pc = $bits(mepc);