From: wangyang <[email protected]>
Zicfilp adds MNPELP to mnstatus, and MNRET consumes it when restoring ELP.
Include the field in write_mnstatus() when Zicfilp is implemented.
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4222
Reviewed-by: Alistair Francis <[email protected]>
Signed-off-by: wangyang <[email protected]>
Message-ID: <[email protected]>
Signed-off-by: Alistair Francis <[email protected]>
---
target/riscv/tcg/csr.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/target/riscv/tcg/csr.c b/target/riscv/tcg/csr.c
index e6d25e5c4e74..242f5caa0d68 100644
--- a/target/riscv/tcg/csr.c
+++ b/target/riscv/tcg/csr.c
@@ -5766,6 +5766,10 @@ static RISCVException write_mnstatus(CPURISCVState *env,
int csrno,
mask |= MNSTATUS_MNPV;
}
+ if (env_archcpu(env)->cfg.ext_zicfilp) {
+ mask |= MNSTATUS_MNPELP;
+ }
+
/* mnstatus.mnie can only be cleared by hardware. */
env->mnstatus = (env->mnstatus & MNSTATUS_NMIE) | (val & mask);
return RISCV_EXCP_NONE;
--
2.55.0