From: Richard Henderson <[email protected]> For rv64, pack with rs2 = 0 does not encode zext.h.
Cc: [email protected] Fixes: 02c1b569a15 ("disas/riscv: Add Zb[abcs] instructions") Reviewed-by: Alistair Francis <[email protected]> Signed-off-by: Richard Henderson <[email protected]> Message-ID: <[email protected]> Signed-off-by: Alistair Francis <[email protected]> (cherry picked from commit d4151cf2675124e26b3383ae06f7352a23f17399) Signed-off-by: Michael Tokarev <[email protected]> diff --git a/disas/riscv.c b/disas/riscv.c index 5cb9fdaa044..491896d4a09 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -3182,9 +3182,10 @@ static void decode_inst_opcode(rv_decode *dec, rv_isa isa) case 14: op = rv_op_rem; break; case 15: op = rv_op_remu; break; case 36: - switch ((inst >> 20) & 0b11111) { - case 0: op = rv_op_zext_h; break; - default: op = rv_op_pack; break; + if (isa == rv32 && !((inst >> 20) & 0b11111)) { + op = rv_op_zext_h; + } else { + op = rv_op_pack; } break; case 39: op = rv_op_packh; break; -- 2.47.3
