diff options
author | Andrew Waterman <andrew@sifive.com> | 2023-07-18 00:40:02 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-18 00:40:02 -0700 |
commit | 371353288e0c6a94713309c5400548f178648b7a (patch) | |
tree | da75b6e689a0be31e398019c1256a8979deaf07a | |
parent | e85d2923a5e4fdd7d61cd0cc9f0685c97f451769 (diff) | |
parent | 93aad1d355d309ab785e61f66183d96b76dfccc1 (diff) | |
download | riscv-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.h | 6 |
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}; |