On Sun, 2026-08-09 at 15:35 -0700, Richard Henderson wrote:
> The codec is never used, since we arrive into pseudos
> from a decoding of another opcode.
> Assert that rv_codec_illegal is never decoded.
> Use rv_codec_none for rv_op_illegal.
> 
> Signed-off-by: Richard Henderson <[email protected]>

Reviewed-by: Alistair Francis <[email protected]>

Alistair

> ---
>  disas/riscv.c | 68 +++++++++++++++++++++++++------------------------
> --
>  1 file changed, 34 insertions(+), 34 deletions(-)
> 
> diff --git a/disas/riscv.c b/disas/riscv.c
> index 37f6440831..fc821355fe 100644
> --- a/disas/riscv.c
> +++ b/disas/riscv.c
> @@ -1599,7 +1599,7 @@ static uint32_t operand_lpl(rv_inst inst)
>  /* instruction metadata */
>  
>  static const rv_opcode_data rvi_opcode_data[] = {
> -    { "illegal", rv_codec_illegal, rv_fmt_none },
> +    { "illegal", rv_codec_none, rv_fmt_none },
>      { "lui", rv_codec_u, rv_fmt_rd_uimm },
>      { "auipc", rv_codec_u, rv_fmt_rd_uoffset },
>      { "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal },
> @@ -1872,38 +1872,38 @@ static const rv_opcode_data rvi_opcode_data[]
> = {
>      { "c.sq", rv_codec_cs_sq, NULL, DECOMP(rv_op_sq) },
>      { "c.lqsp", rv_codec_ci_lqsp, NULL, DECOMP(rv_op_lq) },
>      { "c.sqsp", rv_codec_css_sqsp, NULL, DECOMP(rv_op_sq) },
> -    { "nop", rv_codec_i, rv_fmt_none },
> -    { "mv", rv_codec_i, rv_fmt_rd_rs1, rvcp_mv },
> -    { "not", rv_codec_i, rv_fmt_rd_rs1 },
> -    { "neg", rv_codec_r, rv_fmt_rd_rs2 },
> -    { "negw", rv_codec_r, rv_fmt_rd_rs2 },
> -    { "sext.w", rv_codec_i, rv_fmt_rd_rs1 },
> -    { "seqz", rv_codec_i, rv_fmt_rd_rs1 },
> -    { "snez", rv_codec_r, rv_fmt_rd_rs2 },
> -    { "sltz", rv_codec_r, rv_fmt_rd_rs1 },
> -    { "sgtz", rv_codec_r, rv_fmt_rd_rs2 },
> -    { "fmv.s", rv_codec_r, rv_fmt_frd_frs1 },
> -    { "fabs.s", rv_codec_r, rv_fmt_frd_frs1 },
> -    { "fneg.s", rv_codec_r, rv_fmt_frd_frs1 },
> -    { "fmv.d", rv_codec_r, rv_fmt_frd_frs1 },
> -    { "fabs.d", rv_codec_r, rv_fmt_frd_frs1 },
> -    { "fneg.d", rv_codec_r, rv_fmt_frd_frs1 },
> -    { "fmv.q", rv_codec_r, rv_fmt_frd_frs1 },
> -    { "fabs.q", rv_codec_r, rv_fmt_frd_frs1 },
> -    { "fneg.q", rv_codec_r, rv_fmt_frd_frs1 },
> -    { "beqz", rv_codec_sb, rv_fmt_rs1_offset },
> -    { "bnez", rv_codec_sb, rv_fmt_rs1_offset },
> -    { "blez", rv_codec_sb, rv_fmt_rs2_offset },
> -    { "bgez", rv_codec_sb, rv_fmt_rs1_offset },
> -    { "bltz", rv_codec_sb, rv_fmt_rs1_offset },
> -    { "bgtz", rv_codec_sb, rv_fmt_rs2_offset },
> -    { "jal", rv_codec_none, rv_fmt_offset }, /* rv_op_jal_ra */
> -    { "jalr", rv_codec_none, rv_fmt_rs1 }, /* rv_op_jalr_ra */
> +    { "nop", rv_codec_illegal, rv_fmt_none },
> +    { "mv", rv_codec_illegal, rv_fmt_rd_rs1, rvcp_mv },
> +    { "not", rv_codec_illegal, rv_fmt_rd_rs1 },
> +    { "neg", rv_codec_illegal, rv_fmt_rd_rs2 },
> +    { "negw", rv_codec_illegal, rv_fmt_rd_rs2 },
> +    { "sext.w", rv_codec_illegal, rv_fmt_rd_rs1 },
> +    { "seqz", rv_codec_illegal, rv_fmt_rd_rs1 },
> +    { "snez", rv_codec_illegal, rv_fmt_rd_rs2 },
> +    { "sltz", rv_codec_illegal, rv_fmt_rd_rs1 },
> +    { "sgtz", rv_codec_illegal, rv_fmt_rd_rs2 },
> +    { "fmv.s", rv_codec_illegal, rv_fmt_frd_frs1 },
> +    { "fabs.s", rv_codec_illegal, rv_fmt_frd_frs1 },
> +    { "fneg.s", rv_codec_illegal, rv_fmt_frd_frs1 },
> +    { "fmv.d", rv_codec_illegal, rv_fmt_frd_frs1 },
> +    { "fabs.d", rv_codec_illegal, rv_fmt_frd_frs1 },
> +    { "fneg.d", rv_codec_illegal, rv_fmt_frd_frs1 },
> +    { "fmv.q", rv_codec_illegal, rv_fmt_frd_frs1 },
> +    { "fabs.q", rv_codec_illegal, rv_fmt_frd_frs1 },
> +    { "fneg.q", rv_codec_illegal, rv_fmt_frd_frs1 },
> +    { "beqz", rv_codec_illegal, rv_fmt_rs1_offset },
> +    { "bnez", rv_codec_illegal, rv_fmt_rs1_offset },
> +    { "blez", rv_codec_illegal, rv_fmt_rs2_offset },
> +    { "bgez", rv_codec_illegal, rv_fmt_rs1_offset },
> +    { "bltz", rv_codec_illegal, rv_fmt_rs1_offset },
> +    { "bgtz", rv_codec_illegal, rv_fmt_rs2_offset },
> +    { "jal", rv_codec_illegal, rv_fmt_offset }, /* rv_op_jal_ra */
> +    { "jalr", rv_codec_illegal, rv_fmt_rs1 }, /* rv_op_jalr_ra */
>      { },
>      { },
> -    { "j", rv_codec_uj, rv_fmt_offset },
> -    { "ret", rv_codec_i, rv_fmt_none },
> -    { "jr", rv_codec_i, rv_fmt_rs1, rvcp_jr },
> +    { "j", rv_codec_illegal, rv_fmt_offset },
> +    { "ret", rv_codec_illegal, rv_fmt_none },
> +    { "jr", rv_codec_illegal, rv_fmt_rs1, rvcp_jr },
>      { "rdcycle", rv_codec_i_csr, rv_fmt_rd },
>      { "rdtime", rv_codec_i_csr, rv_fmt_rd },
>      { "rdinstret", rv_codec_i_csr, rv_fmt_rd },
> @@ -4551,8 +4551,6 @@ static void decode_inst_operands(rv_decode
> *dec, rv_isa isa,
>      rv_inst inst = dec->inst;
>  
>      switch (op->codec) {
> -    case rv_codec_illegal:
> -        break;
>      case rv_codec_none:
>          dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero;
>          dec->imm = 0;
> @@ -4946,7 +4944,9 @@ static void decode_inst_operands(rv_decode
> *dec, rv_isa isa,
>          dec->rs1 = dec->rs2 = operand_crs1(inst);
>          dec->imm = 0;
>          break;
> -    };
> +    default:
> +        g_assert_not_reached();
> +    }
>  }
>  
>  /* check constraint */

Reply via email to