From 3bb461072ccfb50b0befbc79ad8b49bfb68d4433 Mon Sep 17 00:00:00 2001 From: Nils Asmussen Date: Fri, 21 Feb 2020 13:51:11 +0100 Subject: [PATCH] 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 Tested-by: Gem5 Cloud Project GCB service account <345032938727@cloudbuild.gserviceaccount.com> Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- src/arch/riscv/isa/decoder.isa | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/arch/riscv/isa/decoder.isa b/src/arch/riscv/isa/decoder.isa index 9e65ecf5c..35d08ecb3 100644 --- a/src/arch/riscv/isa/decoder.isa +++ b/src/arch/riscv/isa/decoder.isa @@ -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 { -- 2.30.2