aboutsummaryrefslogtreecommitdiff
path: root/riscv/triggers.cc
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2022-03-16 10:07:46 -0700
committerTim Newsome <tim@sifive.com>2022-03-30 10:41:45 -0700
commit9bd1f818aee132ca6434e0ecaf168821024b1adc (patch)
tree87813263336274e0478c9344a299f64055cafe38 /riscv/triggers.cc
parent59f594a756ab68ec3f9010f5cc9f138be227f6ef (diff)
downloadspike-9bd1f818aee132ca6434e0ecaf168821024b1adc.zip
spike-9bd1f818aee132ca6434e0ecaf168821024b1adc.tar.gz
spike-9bd1f818aee132ca6434e0ecaf168821024b1adc.tar.bz2
Move tdata1 read logic into triggers.cc.
Diffstat (limited to 'riscv/triggers.cc')
-rw-r--r--riscv/triggers.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/riscv/triggers.cc b/riscv/triggers.cc
index fd295f7..7fb5e8c 100644
--- a/riscv/triggers.cc
+++ b/riscv/triggers.cc
@@ -1,3 +1,4 @@
+#include "processor.h"
#include "triggers.h"
namespace triggers {
@@ -9,6 +10,27 @@ mcontrol_t::mcontrol_t() :
{
}
+reg_t mcontrol_t::tdata1_read(const processor_t *proc) const noexcept {
+ reg_t v = 0;
+ auto xlen = proc->get_xlen();
+ v = set_field(v, MCONTROL_TYPE(xlen), type);
+ v = set_field(v, MCONTROL_DMODE(xlen), dmode);
+ v = set_field(v, MCONTROL_MASKMAX(xlen), maskmax);
+ v = set_field(v, MCONTROL_SELECT, select);
+ v = set_field(v, MCONTROL_TIMING, timing);
+ v = set_field(v, MCONTROL_ACTION, action);
+ v = set_field(v, MCONTROL_CHAIN, chain);
+ v = set_field(v, MCONTROL_MATCH, match);
+ v = set_field(v, MCONTROL_M, m);
+ v = set_field(v, MCONTROL_H, h);
+ v = set_field(v, MCONTROL_S, s);
+ v = set_field(v, MCONTROL_U, u);
+ v = set_field(v, MCONTROL_EXECUTE, execute);
+ v = set_field(v, MCONTROL_STORE, store);
+ v = set_field(v, MCONTROL_LOAD, load);
+ return v;
+}
+
module_t::module_t(unsigned count) : triggers(count) {
for (unsigned i = 0; i < count; i++) {
triggers[i] = new mcontrol_t();