aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2024-10-16 16:57:15 +0000
committerRichard Henderson <richard.henderson@linaro.org>2024-10-22 11:57:25 -0700
commitbe46e0bf142d75c1978801d5d2c2394e7dfa304d (patch)
tree150ac1f6f054013e113340b5ea095f770d00a557
parenta7cfd751fb269de4a93bf1658cb13911c7ac77cc (diff)
downloadqemu-be46e0bf142d75c1978801d5d2c2394e7dfa304d.zip
qemu-be46e0bf142d75c1978801d5d2c2394e7dfa304d.tar.gz
qemu-be46e0bf142d75c1978801d5d2c2394e7dfa304d.tar.bz2
disas/riscv: Fix vsetivli disassembly
The first immediate field is unsigned, whereas operand_vimm extracts a signed value. There is no need to mask the result with 'u'; just print the immediate with 'i'. Fixes: 07f4964d178 ("disas/riscv.c: rvv: Add disas support for vector instructions") Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-rw-r--r--disas/riscv.c2
-rw-r--r--disas/riscv.h2
2 files changed, 2 insertions, 2 deletions
diff --git a/disas/riscv.c b/disas/riscv.c
index 5965574..fc0331b 100644
--- a/disas/riscv.c
+++ b/disas/riscv.c
@@ -4808,7 +4808,7 @@ static void decode_inst_operands(rv_decode *dec, rv_isa isa)
break;
case rv_codec_vsetivli:
dec->rd = operand_rd(inst);
- dec->imm = operand_vimm(inst);
+ dec->imm = extract32(inst, 15, 5);
dec->vzimm = operand_vzimm10(inst);
break;
case rv_codec_zcb_lb:
diff --git a/disas/riscv.h b/disas/riscv.h
index 16a08e4..0d1f89c 100644
--- a/disas/riscv.h
+++ b/disas/riscv.h
@@ -290,7 +290,7 @@ enum {
#define rv_fmt_fd_vs2 "O\t3,F"
#define rv_fmt_vd_vm "O\tDm"
#define rv_fmt_vsetvli "O\t0,1,v"
-#define rv_fmt_vsetivli "O\t0,u,v"
+#define rv_fmt_vsetivli "O\t0,i,v"
#define rv_fmt_rs1_rs2_zce_ldst "O\t2,i(1)"
#define rv_fmt_push_rlist "O\tx,-i"
#define rv_fmt_pop_rlist "O\tx,i"