Re: [PATCH 37/56] disas/riscv: Use rv_codec_illegal for pseudos
Alistair <[email protected]>
| Newsgroups | org.nongnu.qemu-riscv,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
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 */