@samitouri / QOSamiQemu / commits / bf9281b1b0

disas/riscv: Tidy decode of c.mop.n

Merge nested if's. Reuse operand_cmop_imm for zicfiss decode. Return pointers directly. Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-ID: <20260812223142.349142-50-richard.henderson@linaro.org> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Richard Henderson committed Aug 12, 2026 at 15:31 UTC bf9281b1b0cddda53f00ce28082bb6e7b0d86034
1 file changed +9 -10
disas/riscv.c
+9 -10
@@ -1027,18 +1027,17 @@ static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
1027 break;
1028 case 2: op = rv_op_c_li; break;
1029 case 3:
1030 - if (dec->cfg && dec->cfg->ext_zcmop) {
1031 - if ((((inst >> 2) & 0b111111) == 0b100000) &&
1032 - (((inst >> 11) & 0b11) == 0b0)) {
1033 - unsigned int cmop_code = 0;
1034 - cmop_code = ((inst >> 8) & 0b111);
1035 - op = rv_op_c_mop;
1036 - if (dec->cfg->ext_zicfiss) {
1037 - op = (cmop_code == 0) ? rv_op_c_sspush : op;
1038 - op = (cmop_code == 2) ? rv_op_c_sspopchk : op;
1030 + if (dec->cfg
1031 + && dec->cfg->ext_zcmop
1032 + && ((inst >> 2) & 0b111111) == 0b100000
1033 + && ((inst >> 11) & 0b11) == 0) {
1034 + if (dec->cfg->ext_zicfiss) {
1035 + switch (operand_cmop_imm(inst)) {
1036 + case 1: return &rvi_opcode_data[rv_op_c_sspush];
1037 + case 5: return &rvi_opcode_data[rv_op_c_sspopchk];
1038 }
1040 - break;
1039 }
1040 + return &rvi_opcode_data[rv_op_c_mop];
1041 }
1042 if (inst & ((1 << 12) | (0x1f << 2))) {
1043 switch ((inst >> 7) & 0b11111) {