summaryrefslogtreecommitdiff
path: root/disassembler/disassembler_riscv64.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2023-08-16 09:05:02 +0000
committer Vladimir Marko <vmarko@google.com> 2023-08-16 10:21:23 +0000
commit0296de460da0ba2009ab7620a4a1347b99488d81 (patch)
treedfb1cfb37c4618567174550c99109d0a852229f5 /disassembler/disassembler_riscv64.cc
parentc64421f323f548bd8bab07dd1ac922b1840f8842 (diff)
riscv64: Fix disassembly of SRAI/SRAIW.
Test: m dump-oat # Manually inspect the output. Bug: 283082089 Change-Id: Iab0330771f354e011f4fe0eb6b4373a6f613d4b0
Diffstat (limited to 'disassembler/disassembler_riscv64.cc')
-rw-r--r--disassembler/disassembler_riscv64.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/disassembler/disassembler_riscv64.cc b/disassembler/disassembler_riscv64.cc
index 18ca5bece3..cdb0390ce0 100644
--- a/disassembler/disassembler_riscv64.cc
+++ b/disassembler/disassembler_riscv64.cc
@@ -396,12 +396,12 @@ void DisassemblerRiscv64::Printer::Print32BinOpImm(uint32_t insn32) {
} else {
bool bad_high_bits = false;
if (funct3 == /*SLLI*/ 1u || funct3 == /*SRLI/SRAI*/ 5u) {
+ imm &= (narrow ? 0x1fu : 0x3fu);
uint32_t high_bits = insn32 & (narrow ? 0xfe000000u : 0xfc000000u);
if (high_bits == 0x40000000u && funct3 == /*SRAI*/ 5u) {
os_ << "srai";
} else {
os_ << ((funct3 == /*SRLI*/ 5u) ? "srli" : "slli");
- imm &= (narrow ? 0x1fu : 0x3fu);
bad_high_bits = (high_bits != 0u);
}
} else if (!narrow || funct3 == /*ADDI*/ 0u) {