@samitouri / QOSamiQemu / commits / d4151cf267

disas/riscv: Fix rv32 encoding of zext.h

For rv64, pack with rs2 = 0 does not encode zext.h. Cc: qemu-stable@nongnu.org Fixes: 02c1b569a15 ("disas/riscv: Add Zb[abcs] instructions") Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-ID: <20260812223142.349142-39-richard.henderson@linaro.org> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Richard Henderson committed Aug 12, 2026 at 15:31 UTC d4151cf2675124e26b3383ae06f7352a23f17399
1 file changed +4 -3
disas/riscv.c
+4 -3
@@ -3506,9 +3506,10 @@ static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa)
3506 case 14: op = rv_op_rem; break;
3507 case 15: op = rv_op_remu; break;
3508 case 36:
3509 - switch ((inst >> 20) & 0b11111) {
3510 - case 0: op = rv_op_zext_h; break;
3511 - default: op = rv_op_pack; break;
3509 + if (isa == rv32 && !((inst >> 20) & 0b11111)) {
3510 + op = rv_op_zext_h;
3511 + } else {
3512 + op = rv_op_pack;
3513 }
3514 break;
3515 case 39: op = rv_op_packh; break;