The encoding of rev8 is different for rv32 and rv64.
Cc: [email protected]
Fixes: 02c1b569a15 ("disas/riscv: Add Zb[abcs] instructions")
Reviewed-by: Alistair Francis <[email protected]>
Signed-off-by: Richard Henderson <[email protected]>
---
disas/riscv.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/disas/riscv.c b/disas/riscv.c
index 5624e7f60a..787340e811 100644
--- a/disas/riscv.c
+++ b/disas/riscv.c
@@ -3292,8 +3292,16 @@ static const rv_opcode_data
*decode_inst_opcode(rv_decode *dec, rv_isa isa)
case 0b01100: op = rv_op_rori; break;
case 0b01101:
switch ((inst >> 20) & 0b1111111) {
- case 0b0011000: op = rv_op_rev8; break;
- case 0b0111000: op = rv_op_rev8; break;
+ case 0b0011000:
+ if (isa == rv32) {
+ op = rv_op_rev8;
+ }
+ break;
+ case 0b0111000:
+ if (isa == rv64) {
+ op = rv_op_rev8;
+ }
+ break;
case 0b0000111: op = rv_op_brev8; break;
}
break;
--
2.43.0