@samitouri / QOSamiQemu / commits / 3421486be8

disas/riscv: Handle c.lui 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-16-richard.henderson@linaro.org> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Richard Henderson committed Aug 12, 2026 at 15:31 UTC 3421486be8e9420eb357b878d867f47c9647c1c8
1 file changed +7 -5
disas/riscv.c
+7 -5
@@ -1902,9 +1902,9 @@ static const rv_opcode_data rvi_opcode_data[] = {
1902 { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi,
1903 rv_op_addi },
1904 { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi,
1905 - rv_op_addi, rv_op_addi, rvcd_imm_nz },
1905 + rv_op_addi, rv_op_addi },
1906 { "c.lui", rv_codec_ci_lui, rv_fmt_rd_uimm, NULL, rv_op_lui, rv_op_lui,
1907 - rv_op_lui, rvcd_imm_nz },
1907 + rv_op_lui },
1908 { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli,
1909 rv_op_srli, rv_op_srli, rvcd_imm_nz },
1910 { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai,
@@ -3032,9 +3032,11 @@ static void decode_inst_opcode(rv_decode *dec, rv_isa isa)
3032 break;
3033 }
3034 }
3035 - switch ((inst >> 7) & 0b11111) {
3036 - case 2: op = rv_op_c_addi16sp; break;
3037 - default: op = rv_op_c_lui; break;
3035 + if (inst & ((1 << 12) | (0x1f << 2))) {
3036 + switch ((inst >> 7) & 0b11111) {
3037 + case 2: op = rv_op_c_addi16sp; break;
3038 + default: op = rv_op_c_lui; break;
3039 + }
3040 }
3041 break;
3042 case 4: