diff options
author | Tim Newsome <tim@sifive.com> | 2022-03-24 11:12:39 -0700 |
---|---|---|
committer | Tim Newsome <tim@sifive.com> | 2022-04-05 10:33:27 -0700 |
commit | f3d14f936965fb48a140ab010a9e1b0b2908bf2d (patch) | |
tree | 7ae78337dc6a12f25a378f32a8a49def1b633393 /riscv/mmu.h | |
parent | bd7ca31454507df073e66d4c9e1d32a062231fc2 (diff) | |
download | spike-f3d14f936965fb48a140ab010a9e1b0b2908bf2d.zip spike-f3d14f936965fb48a140ab010a9e1b0b2908bf2d.tar.gz spike-f3d14f936965fb48a140ab010a9e1b0b2908bf2d.tar.bz2 |
Move trigger match logic into triggers.cc
Diffstat (limited to 'riscv/mmu.h')
-rw-r--r-- | riscv/mmu.h | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/riscv/mmu.h b/riscv/mmu.h index 7faa266..0f009c6 100644 --- a/riscv/mmu.h +++ b/riscv/mmu.h @@ -457,9 +457,10 @@ private: } if (unlikely(tlb_insn_tag[vpn % TLB_ENTRIES] == (vpn | TLB_CHECK_TRIGGERS))) { target_endian<uint16_t>* ptr = (target_endian<uint16_t>*)(tlb_data[vpn % TLB_ENTRIES].host_offset + addr); - int match = proc->TM.memory_access_match(triggers::OPERATION_EXECUTE, addr, from_target(*ptr)); - if (match >= 0) { - throw triggers::matched_t(match, triggers::OPERATION_EXECUTE, addr, from_target(*ptr)); + triggers::action_t action; + auto match = proc->TM.memory_access_match(&action, triggers::OPERATION_EXECUTE, addr, from_target(*ptr)); + if (match != triggers::MATCH_NONE) { + throw triggers::matched_t(triggers::OPERATION_EXECUTE, addr, from_target(*ptr), action); } } return result; @@ -475,13 +476,14 @@ private: if (!proc) { return NULL; } - int match = proc->TM.memory_access_match(operation, address, data); - if (match == -1) + triggers::action_t action; + auto match = proc->TM.memory_access_match(&action, operation, address, data); + if (match == triggers::MATCH_NONE) return NULL; - if (proc->TM.triggers[match]->timing == 0) { - throw triggers::matched_t(match, operation, address, data); + if (match == triggers::MATCH_FIRE_BEFORE) { + throw triggers::matched_t(operation, address, data, action); } - return new triggers::matched_t(match, operation, address, data); + return new triggers::matched_t(operation, address, data, action); } reg_t pmp_homogeneous(reg_t addr, reg_t len); |