aboutsummaryrefslogtreecommitdiff
path: root/riscv/mmu.h
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2022-10-06 14:31:07 -0700
committerAndrew Waterman <andrew@sifive.com>2022-10-06 19:30:40 -0700
commit14410156b2d796dad0e439b9535057f1e4c5a13c (patch)
tree7b5c3ec0cde00a43b26f876848393b90414d3233 /riscv/mmu.h
parent6311f7513aa150797f69ecac906978bb9e9fecbd (diff)
downloadspike-14410156b2d796dad0e439b9535057f1e4c5a13c.zip
spike-14410156b2d796dad0e439b9535057f1e4c5a13c.tar.gz
spike-14410156b2d796dad0e439b9535057f1e4c5a13c.tar.bz2
Move uncommon-case fetch functionality into fetch_slow_path
Diffstat (limited to 'riscv/mmu.h')
-rw-r--r--riscv/mmu.h18
1 files changed, 1 insertions, 17 deletions
diff --git a/riscv/mmu.h b/riscv/mmu.h
index 137b306..74c9a71 100644
--- a/riscv/mmu.h
+++ b/riscv/mmu.h
@@ -391,23 +391,7 @@ private:
reg_t vpn = addr >> PGSHIFT;
if (likely(tlb_insn_tag[vpn % TLB_ENTRIES] == vpn))
return tlb_data[vpn % TLB_ENTRIES];
- triggers::action_t action;
- auto match = proc->TM.memory_access_match(&action, triggers::OPERATION_EXECUTE, addr, false);
- if (match != triggers::MATCH_NONE) {
- throw triggers::matched_t(triggers::OPERATION_EXECUTE, addr, 0, action);
- }
- tlb_entry_t result;
- if (unlikely(tlb_insn_tag[vpn % TLB_ENTRIES] != (vpn | TLB_CHECK_TRIGGERS))) {
- result = fetch_slow_path(addr);
- } else {
- result = tlb_data[vpn % TLB_ENTRIES];
- }
- target_endian<uint16_t>* ptr = (target_endian<uint16_t>*)(result.host_offset + addr);
- match = proc->TM.memory_access_match(&action, triggers::OPERATION_EXECUTE, addr, true, from_target(*ptr));
- if (match != triggers::MATCH_NONE) {
- throw triggers::matched_t(triggers::OPERATION_EXECUTE, addr, from_target(*ptr), action);
- }
- return result;
+ return fetch_slow_path(addr);
}
inline const uint16_t* translate_insn_addr_to_host(reg_t addr) {