@samitouri / QOSamiQemu / commits / 4de89e9a82

disas/riscv: Handle c.slli imm != 0 during decode

Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-ID: <20260812223142.349142-18-richard.henderson@linaro.org> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Richard Henderson committed Aug 12, 2026 at 15:31 UTC 4de89e9a82fcf8e87a53895bbc01bc0434c92793
1 file changed +4 -2
disas/riscv.c
+4 -2
@@ -1930,7 +1930,7 @@ static const rv_opcode_data rvi_opcode_data[] = {
1930 { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_bne, rv_op_bne,
1931 rv_op_bne },
1932 { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli,
1933 - rv_op_slli, rv_op_slli, rvcd_imm_nz },
1933 + rv_op_slli, rv_op_slli },
1934 { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, NULL, rv_op_fld,
1935 rv_op_fld, rv_op_fld },
1936 { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lw,
@@ -3085,7 +3085,9 @@ static void decode_inst_opcode(rv_decode *dec, rv_isa isa)
3085 case 2:
3086 switch ((inst >> 13) & 0b111) {
3087 case 0:
3088 - op = rv_op_c_slli;
3088 + if (isa != rv32 || (inst & 0x1000) == 0) {
3089 + op = rv_op_c_slli; /* or unspecified HINT */
3090 + }
3091 break;
3092 case 1:
3093 if (isa == rv128) {