From: Max Chou Date: Wed, 18 Sep 2024 17:14:07 +0000 (+0800) Subject: target/riscv: rvv: Replace VSTART_CHECK_EARLY_EXIT in vext_ldst_us X-Git-Tag: v9.2.0-rc0~8^2~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2f077842f2b356a086f70e54c831be53c6f0e101;p=thirdparty%2Fqemu.git target/riscv: rvv: Replace VSTART_CHECK_EARLY_EXIT in vext_ldst_us 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 Reviewed-by: Daniel Henrique Barboza Message-ID: <20240918171412.150107-3-max.chou@sifive.com> Signed-off-by: Alistair Francis --- diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c index ccb32e6122b..93cac23a135 100644 --- a/target/riscv/vector_helper.c +++ b/target/riscv/vector_helper.c @@ -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) {