target/riscv: rvv: Replace VSTART_CHECK_EARLY_EXIT in vext_ldst_us
authorMax Chou <max.chou@sifive.com>
Wed, 18 Sep 2024 17:14:07 +0000 (01:14 +0800)
committerAlistair Francis <alistair.francis@wdc.com>
Wed, 6 Nov 2024 22:22:48 +0000 (08:22 +1000)
Because the real vl (evl) of vext_ldst_us may be different (e.g.
vlm.v/vsm.v/etc.), so the VSTART_CHECK_EARLY_EXIT checking function
should be replaced by checking evl in vext_ldst_us.

Signed-off-by: Max Chou <max.chou@sifive.com>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Message-ID: <20240918171412.150107-3-max.chou@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
target/riscv/vector_helper.c

index ccb32e6122babc67fe97521c023bec3d7c3e0f6b..93cac23a135705ffebc31fc8213d02c6c63810d6 100644 (file)
@@ -277,7 +277,10 @@ vext_ldst_us(void *vd, target_ulong base, CPURISCVState *env, uint32_t desc,
     uint32_t max_elems = vext_max_elems(desc, log2_esz);
     uint32_t esz = 1 << log2_esz;
 
-    VSTART_CHECK_EARLY_EXIT(env);
+    if (env->vstart >= evl) {
+        env->vstart = 0;
+        return;
+    }
 
     /* load bytes from guest memory */
     for (i = env->vstart; i < evl; env->vstart = ++i) {