aboutsummaryrefslogtreecommitdiff
path: root/riscv/processor.h
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2022-03-15 10:41:21 -0700
committerTim Newsome <tim@sifive.com>2022-03-30 10:41:44 -0700
commit16ed520e8d35a0eaa56b708aa540400312acdc09 (patch)
tree967ea7845312a56a265e37c141d5ad5f2dc0b028 /riscv/processor.h
parentbeaf1601e065f1399c9e2b12c48bbb713a8c40c3 (diff)
downloadspike-16ed520e8d35a0eaa56b708aa540400312acdc09.zip
spike-16ed520e8d35a0eaa56b708aa540400312acdc09.tar.gz
spike-16ed520e8d35a0eaa56b708aa540400312acdc09.tar.bz2
Replace state.mcontrol with TM.triggers.
Created a new triggers::module_t to hold the structure. Also make sure mcontrol_t instances are properly initialized.
Diffstat (limited to 'riscv/processor.h')
-rw-r--r--riscv/processor.h22
1 files changed, 11 insertions, 11 deletions
diff --git a/riscv/processor.h b/riscv/processor.h
index 2136571..ba352fc 100644
--- a/riscv/processor.h
+++ b/riscv/processor.h
@@ -174,7 +174,6 @@ struct state_t
csr_t_p dpc;
dcsr_csr_t_p dcsr;
csr_t_p tselect;
- triggers::mcontrol_t mcontrol[num_triggers];
tdata2_csr_t_p tdata2;
bool debug_mode;
@@ -327,21 +326,21 @@ public:
for (unsigned int i = 0; i < state.num_triggers; i++) {
if (!chain_ok) {
- chain_ok |= !state.mcontrol[i].chain;
+ chain_ok |= !TM.triggers[i]->chain;
continue;
}
- if ((operation == triggers::OPERATION_EXECUTE && !state.mcontrol[i].execute) ||
- (operation == triggers::OPERATION_STORE && !state.mcontrol[i].store) ||
- (operation == triggers::OPERATION_LOAD && !state.mcontrol[i].load) ||
- (state.prv == PRV_M && !state.mcontrol[i].m) ||
- (state.prv == PRV_S && !state.mcontrol[i].s) ||
- (state.prv == PRV_U && !state.mcontrol[i].u)) {
+ if ((operation == triggers::OPERATION_EXECUTE && !TM.triggers[i]->execute) ||
+ (operation == triggers::OPERATION_STORE && !TM.triggers[i]->store) ||
+ (operation == triggers::OPERATION_LOAD && !TM.triggers[i]->load) ||
+ (state.prv == PRV_M && !TM.triggers[i]->m) ||
+ (state.prv == PRV_S && !TM.triggers[i]->s) ||
+ (state.prv == PRV_U && !TM.triggers[i]->u)) {
continue;
}
reg_t value;
- if (state.mcontrol[i].select) {
+ if (TM.triggers[i]->select) {
value = data;
} else {
value = address;
@@ -354,7 +353,7 @@ public:
}
auto tdata2 = state.tdata2->read(i);
- switch (state.mcontrol[i].match) {
+ switch (TM.triggers[i]->match) {
case triggers::mcontrol_t::MATCH_EQUAL:
if (value != tdata2)
continue;
@@ -390,7 +389,7 @@ public:
break;
}
- if (!state.mcontrol[i].chain) {
+ if (!TM.triggers[i]->chain) {
return i;
}
chain_ok = true;
@@ -541,6 +540,7 @@ public:
};
vectorUnit_t VU;
+ triggers::module_t TM;
};
#endif