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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
3 additions and
3 deletions
-
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}; |
|
|
|
|