aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2023-07-18 00:40:02 -0700
committerGitHub <noreply@github.com>2023-07-18 00:40:02 -0700
commit371353288e0c6a94713309c5400548f178648b7a (patch)
treeda75b6e689a0be31e398019c1256a8979deaf07a
parente85d2923a5e4fdd7d61cd0cc9f0685c97f451769 (diff)
parent93aad1d355d309ab785e61f66183d96b76dfccc1 (diff)
downloadriscv-isa-sim-371353288e0c6a94713309c5400548f178648b7a.zip
riscv-isa-sim-371353288e0c6a94713309c5400548f178648b7a.tar.gz
riscv-isa-sim-371353288e0c6a94713309c5400548f178648b7a.tar.bz2
Merge pull request #1419 from poemonsense/fix-fetch-order
mmu: fetch instruction bytes in ascending order
-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};