aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYinan Xu <xuyinan@ict.ac.cn>2023-07-18 10:57:29 +0800
committerYinan Xu <xuyinan@ict.ac.cn>2023-07-18 12:46:57 +0800
commit93aad1d355d309ab785e61f66183d96b76dfccc1 (patch)
treeda75b6e689a0be31e398019c1256a8979deaf07a
parente85d2923a5e4fdd7d61cd0cc9f0685c97f451769 (diff)
downloadriscv-isa-sim-93aad1d355d309ab785e61f66183d96b76dfccc1.zip
riscv-isa-sim-93aad1d355d309ab785e61f66183d96b76dfccc1.tar.gz
riscv-isa-sim-93aad1d355d309ab785e61f66183d96b76dfccc1.tar.bz2
mmu: fetch instruction bytes in ascending order
Fetching instruction bytes in descending order would result in wrong xtval update values.
-rw-r--r--riscv/mmu.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/riscv/mmu.h b/riscv/mmu.h
index 46c54ce..8c2bdbe 100644
--- a/riscv/mmu.h
+++ b/riscv/mmu.h
@@ -294,13 +294,13 @@ public:
} else if (length == 2) {
// entire instruction already fetched
} else if (length == 6) {
- insn |= (insn_bits_t)from_le(*(const uint16_t*)translate_insn_addr_to_host(addr + 4)) << 32;
insn |= (insn_bits_t)from_le(*(const uint16_t*)translate_insn_addr_to_host(addr + 2)) << 16;
+ insn |= (insn_bits_t)from_le(*(const uint16_t*)translate_insn_addr_to_host(addr + 4)) << 32;
} else {
static_assert(sizeof(insn_bits_t) == 8, "insn_bits_t must be uint64_t");
- insn |= (insn_bits_t)from_le(*(const uint16_t*)translate_insn_addr_to_host(addr + 6)) << 48;
- insn |= (insn_bits_t)from_le(*(const uint16_t*)translate_insn_addr_to_host(addr + 4)) << 32;
insn |= (insn_bits_t)from_le(*(const uint16_t*)translate_insn_addr_to_host(addr + 2)) << 16;
+ insn |= (insn_bits_t)from_le(*(const uint16_t*)translate_insn_addr_to_host(addr + 4)) << 32;
+ insn |= (insn_bits_t)from_le(*(const uint16_t*)translate_insn_addr_to_host(addr + 6)) << 48;
}
insn_fetch_t fetch = {proc->decode_insn(insn), insn};