aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYenHaoChen <howard25336284@gmail.com>2022-12-18 19:50:58 +0800
committerYenHaoChen <howard25336284@gmail.com>2022-12-21 13:29:19 +0800
commitc0fddfd661244fb0a41baf5aaffa19ae4c4d0ef3 (patch)
tree847a01fe40e78cc31cc58999ce6acfe0ebffb5e6
parent72daa815a21bf8557cebc6f3f98c17381c43833b (diff)
downloadriscv-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.cc4
-rw-r--r--riscv/triggers.h12
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);