diff options
author | YenHaoChen <howard25336284@gmail.com> | 2022-12-18 19:50:58 +0800 |
---|---|---|
committer | YenHaoChen <howard25336284@gmail.com> | 2022-12-21 13:29:19 +0800 |
commit | c0fddfd661244fb0a41baf5aaffa19ae4c4d0ef3 (patch) | |
tree | 847a01fe40e78cc31cc58999ce6acfe0ebffb5e6 | |
parent | 72daa815a21bf8557cebc6f3f98c17381c43833b (diff) | |
download | riscv-isa-sim-c0fddfd661244fb0a41baf5aaffa19ae4c4d0ef3.zip riscv-isa-sim-c0fddfd661244fb0a41baf5aaffa19ae4c4d0ef3.tar.gz riscv-isa-sim-c0fddfd661244fb0a41baf5aaffa19ae4c4d0ef3.tar.bz2 |
triggers: refactor: extract mcontrol_common_t from mcontrol_t
-rw-r--r-- | riscv/triggers.cc | 4 | ||||
-rw-r--r-- | riscv/triggers.h | 12 |
2 files changed, 10 insertions, 6 deletions
diff --git a/riscv/triggers.cc b/riscv/triggers.cc index e71670e..5a65024 100644 --- a/riscv/triggers.cc +++ b/riscv/triggers.cc @@ -172,7 +172,7 @@ void mcontrol_t::tdata1_write(processor_t * const proc, const reg_t val, const b timing = 0; } -bool mcontrol_t::simple_match(unsigned xlen, reg_t value) const { +bool mcontrol_common_t::simple_match(unsigned xlen, reg_t value) const { switch (match) { case triggers::mcontrol_t::MATCH_EQUAL: return value == tdata2; @@ -199,7 +199,7 @@ bool mcontrol_t::simple_match(unsigned xlen, reg_t value) const { assert(0); } -std::optional<match_result_t> mcontrol_t::detect_memory_access_match(processor_t * const proc, operation_t operation, reg_t address, std::optional<reg_t> data) noexcept { +std::optional<match_result_t> mcontrol_common_t::detect_memory_access_match(processor_t * const proc, operation_t operation, reg_t address, std::optional<reg_t> data) noexcept { if ((operation == triggers::OPERATION_EXECUTE && !execute) || (operation == triggers::OPERATION_STORE && !store) || (operation == triggers::OPERATION_LOAD && !load) || diff --git a/riscv/triggers.h b/riscv/triggers.h index b2a86f4..0ab4110 100644 --- a/riscv/triggers.h +++ b/riscv/triggers.h @@ -178,7 +178,7 @@ private: action_t action; }; -class mcontrol_t : public trigger_t { +class mcontrol_common_t : public trigger_t { public: typedef enum { @@ -190,9 +190,6 @@ public: MATCH_MASK_HIGH = MCONTROL_MATCH_MASK_HIGH } match_t; - virtual reg_t tdata1_read(const processor_t * const proc) const noexcept override; - virtual void tdata1_write(processor_t * const proc, const reg_t val, const bool allow_chain) noexcept override; - virtual bool get_dmode() const override { return dmode; } virtual bool get_chain() const override { return chain; } virtual bool get_execute() const override { return execute; } @@ -206,6 +203,7 @@ public: private: bool simple_match(unsigned xlen, reg_t value) const; +protected: bool dmode = false; action_t action = ACTION_DEBUG_EXCEPTION; bool hit = false; @@ -218,6 +216,12 @@ private: bool load = false; }; +class mcontrol_t : public mcontrol_common_t { +public: + virtual reg_t tdata1_read(const processor_t * const proc) const noexcept override; + virtual void tdata1_write(processor_t * const proc, const reg_t val, const bool allow_chain) noexcept override; +}; + class module_t { public: module_t(unsigned count); |