@samitouri / QOSamiQemu / commits / dd595103db

disas/riscv: enable `mnret` disassembly

The translator has supported mnret since commit 3157a553ec6b9a ("target/riscv: Add Smrnmi mnret instruction"), but the disassembler still renders it as illegal. Add it unguarded, since the encoding does not overlap any other extension. Signed-off-by: imaginos <imaginos32@gmail.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20260614141315.17320-1-imaginos32@gmail.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

imaginos committed Jun 14, 2026 at 16:12 UTC dd595103dbe27ed6f44382fb4d4bb4b5e88d90a5
1 file changed +7
disas/riscv.c
+7
@@ -989,6 +989,7 @@ typedef enum {
989 rv_op_cbo_clean = 957,
990 rv_op_cbo_flush = 958,
991 rv_op_cbo_zero = 959,
992 + rv_op_mnret = 960,
993 } rv_op;
994
995 /* register names */
@@ -2263,6 +2264,7 @@ const rv_opcode_data rvi_opcode_data[] = {
2264 { "cbo.clean", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 },
2265 { "cbo.flush", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 },
2266 { "cbo.zero", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 },
2267 + { "mnret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
2268 };
2269
2270 /* CSR names */
@@ -4077,6 +4079,11 @@ static void decode_inst_opcode(rv_decode *dec, rv_isa isa)
4079 case 64: op = rv_op_mret; break;
4080 }
4081 break;
4082 + case 1792:
4083 + switch ((inst >> 15) & 0b1111111111) {
4084 + case 64: op = rv_op_mnret; break;
4085 + }
4086 + break;
4087 case 1952:
4088 switch ((inst >> 15) & 0b1111111111) {
4089 case 576: op = rv_op_dret; break;