Browse Source

Merge pull request #1419 from poemonsense/fix-fetch-order

mmu: fetch instruction bytes in ascending order
pull/1422/head
Andrew Waterman 3 years ago
committed by GitHub
parent
commit
371353288e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      riscv/mmu.h

6
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};

Loading…
Cancel
Save