All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.