qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] target/riscv: fix C extension disabling on misa write
@ 2025-02-20 16:31 Vladimir Isaev
  2025-02-20 17:59 ` Daniel Henrique Barboza
  2025-02-20 18:49 ` Richard Henderson
  0 siblings, 2 replies; 5+ messages in thread
From: Vladimir Isaev @ 2025-02-20 16:31 UTC (permalink / raw)
  To: qemu-devel
  Cc: qemu-riscv, palmer, alistair.francis, bmeng.cn, liwei1518,
	dbarboza, zhiwei_liu, mjc, Vladimir Isaev

According to spec:
Writing misa may increase IALIGN, e.g., by disabling the "C" extension. If an instruction that would
write misa increases IALIGN, and the subsequent instruction’s address is not IALIGN-bit aligned, the
write to misa is suppressed, leaving misa unchanged.

So we should suppress disabling "C" if it is already enabled and
next instruction is not aligned to 4.

Fixes: f18637cd611c ("RISC-V: Add misa runtime write support")
Signed-off-by: Vladimir Isaev <vladimir.isaev@syntacore.com>
---
 target/riscv/csr.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/target/riscv/csr.c b/target/riscv/csr.c
index afb7544f0780..32f9b7b16f6f 100644
--- a/target/riscv/csr.c
+++ b/target/riscv/csr.c
@@ -2067,11 +2067,12 @@ static RISCVException write_misa(CPURISCVState *env, int csrno,
     val &= env->misa_ext_mask;
 
     /*
-     * Suppress 'C' if next instruction is not aligned
+     * Disabling 'C' increases IALIGN to 32. If subsequent instruction's address
+     * is not 32-bit aligned, write to misa is suppressed.
      * TODO: this should check next_pc
      */
-    if ((val & RVC) && (GETPC() & ~3) != 0) {
-        val &= ~RVC;
+    if (!(val & RVC) && (env->misa_ext & RVC) && (GETPC() & 0x3)) {
+        return RISCV_EXCP_NONE;
     }
 
     /* Disable RVG if any of its dependencies are disabled */
-- 
2.47.2




^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-02-21  9:14 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-20 16:31 [PATCH] target/riscv: fix C extension disabling on misa write Vladimir Isaev
2025-02-20 17:59 ` Daniel Henrique Barboza
2025-02-21  7:58   ` Vladimir Isaev
2025-02-21  9:13     ` Daniel Henrique Barboza
2025-02-20 18:49 ` Richard Henderson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).