aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYenHaoChen <howard25336284@gmail.com>2022-12-30 11:22:20 +0800
committerYenHaoChen <howard25336284@gmail.com>2023-01-04 08:07:52 +0800
commit007199efdce2b52650fac5822e2dd2351a0a16b9 (patch)
tree692bc95b2915bcd89b4bb0aa54633a9d8fb57684
parent85f7869bf58a4d9b3d4a09f9f312c2deb7b3c81a (diff)
downloadspike-007199efdce2b52650fac5822e2dd2351a0a16b9.zip
spike-007199efdce2b52650fac5822e2dd2351a0a16b9.tar.gz
spike-007199efdce2b52650fac5822e2dd2351a0a16b9.tar.bz2
triggers: refactor: add bool itrigger_t::simple_match()
-rw-r--r--riscv/triggers.cc7
-rw-r--r--riscv/triggers.h1
2 files changed, 7 insertions, 1 deletions
diff --git a/riscv/triggers.cc b/riscv/triggers.cc
index 0ff36e8..60e9ea2 100644
--- a/riscv/triggers.cc
+++ b/riscv/triggers.cc
@@ -319,13 +319,18 @@ std::optional<match_result_t> itrigger_t::detect_trap_match(processor_t * const
bool interrupt = (t.cause() & ((reg_t)1 << (xlen - 1))) != 0;
reg_t bit = t.cause() & ~((reg_t)1 << (xlen - 1));
assert(bit < xlen);
- if (interrupt && ((bit == 0 && nmi) || ((tdata2 >> bit) & 1))) { // Assume NMI's exception code is 0
+ if (simple_match(interrupt, bit)) {
hit = true;
return match_result_t(TIMING_AFTER, action);
}
return std::nullopt;
}
+bool itrigger_t::simple_match(bool interrupt, reg_t bit) const
+{
+ return interrupt && ((bit == 0 && nmi) || ((tdata2 >> bit) & 1)); // Assume NMI's exception code is 0
+}
+
reg_t etrigger_t::tdata1_read(const processor_t * const proc) const noexcept
{
auto xlen = proc->get_xlen();
diff --git a/riscv/triggers.h b/riscv/triggers.h
index 62d6db8..555ac13 100644
--- a/riscv/triggers.h
+++ b/riscv/triggers.h
@@ -156,6 +156,7 @@ public:
virtual std::optional<match_result_t> detect_trap_match(processor_t * const proc, const trap_t& t) noexcept override;
private:
+ bool simple_match(bool interrupt, reg_t bit) const;
bool dmode;
bool hit;
bool nmi;