arch-riscv: make uret,sret,mret SerializeAfter,NonSpeculative.
These instructions potentially change the privilege level, upon which the execution of other instructions depends. For that reason, we need to make *ret SerializeAfter and we also don't want to execute them speculatively. Change-Id: If3b5ba6ec3b4102d53c51cf723eba5d5da3eaa2f Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/25656 Tested-by: kokoro <noreply+kokoro@google.com> Tested-by: Gem5 Cloud Project GCB service account <345032938727@cloudbuild.gserviceaccount.com> Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Maintainer: Jason Lowe-Power <power.jg@gmail.com>
This commit is contained in:
@@ -1775,7 +1775,7 @@ decode QUADRANT default Unknown::unknown() {
|
||||
status.upie = 1;
|
||||
xc->setMiscReg(MISCREG_STATUS, status);
|
||||
NPC = xc->readMiscReg(MISCREG_UEPC);
|
||||
}}, IsReturn);
|
||||
}}, IsSerializeAfter, IsNonSpeculative, IsReturn);
|
||||
}
|
||||
0x8: decode RS2 {
|
||||
0x2: sret({{
|
||||
@@ -1796,7 +1796,7 @@ decode QUADRANT default Unknown::unknown() {
|
||||
xc->setMiscReg(MISCREG_STATUS, status);
|
||||
NPC = xc->readMiscReg(MISCREG_SEPC);
|
||||
}
|
||||
}}, IsReturn);
|
||||
}}, IsSerializeAfter, IsNonSpeculative, IsReturn);
|
||||
0x5: wfi({{
|
||||
STATUS status = xc->readMiscReg(MISCREG_STATUS);
|
||||
auto pm = (PrivilegeMode)xc->readMiscReg(
|
||||
@@ -1835,7 +1835,7 @@ decode QUADRANT default Unknown::unknown() {
|
||||
xc->setMiscReg(MISCREG_STATUS, status);
|
||||
NPC = xc->readMiscReg(MISCREG_MEPC);
|
||||
}
|
||||
}}, IsReturn);
|
||||
}}, IsSerializeAfter, IsNonSpeculative, IsReturn);
|
||||
}
|
||||
}
|
||||
format CSROp {
|
||||
|
||||
Reference in New Issue
Block a user