aboutsummaryrefslogtreecommitdiff
path: root/riscv/processor.h
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2022-03-15 10:04:46 -0700
committerTim Newsome <tim@sifive.com>2022-03-30 10:41:44 -0700
commit9e9f56166d4205aabfcef841951c292272e87801 (patch)
tree9754742b09e2b9080ccc186aa487fe93f534a8f4 /riscv/processor.h
parent08442c1aad70be858f177e277b02a340a22346ba (diff)
downloadriscv-isa-sim-9e9f56166d4205aabfcef841951c292272e87801.zip
riscv-isa-sim-9e9f56166d4205aabfcef841951c292272e87801.tar.gz
riscv-isa-sim-9e9f56166d4205aabfcef841951c292272e87801.tar.bz2
Move mcontrol_t and mcontrol_match_t into triggers
Diffstat (limited to 'riscv/processor.h')
-rw-r--r--riscv/processor.h43
1 files changed, 7 insertions, 36 deletions
diff --git a/riscv/processor.h b/riscv/processor.h
index 3e06d5b..d12ca93 100644
--- a/riscv/processor.h
+++ b/riscv/processor.h
@@ -56,35 +56,6 @@ typedef std::unordered_map<reg_t, freg_t> commit_log_reg_t;
// addr, value, size
typedef std::vector<std::tuple<reg_t, uint64_t, uint8_t>> commit_log_mem_t;
-typedef enum
-{
- MATCH_EQUAL = MCONTROL_MATCH_EQUAL,
- MATCH_NAPOT = MCONTROL_MATCH_NAPOT,
- MATCH_GE = MCONTROL_MATCH_GE,
- MATCH_LT = MCONTROL_MATCH_LT,
- MATCH_MASK_LOW = MCONTROL_MATCH_MASK_LOW,
- MATCH_MASK_HIGH = MCONTROL_MATCH_MASK_HIGH
-} mcontrol_match_t;
-
-typedef struct
-{
- uint8_t type;
- bool dmode;
- uint8_t maskmax;
- bool select;
- bool timing;
- triggers::action_t action;
- bool chain;
- mcontrol_match_t match;
- bool m;
- bool h;
- bool s;
- bool u;
- bool execute;
- bool store;
- bool load;
-} mcontrol_t;
-
enum VRM{
RNU = 0,
RNE,
@@ -203,7 +174,7 @@ struct state_t
csr_t_p dpc;
dcsr_csr_t_p dcsr;
csr_t_p tselect;
- mcontrol_t mcontrol[num_triggers];
+ triggers::mcontrol_t mcontrol[num_triggers];
tdata2_csr_t_p tdata2;
bool debug_mode;
@@ -384,33 +355,33 @@ public:
auto tdata2 = state.tdata2->read(i);
switch (state.mcontrol[i].match) {
- case MATCH_EQUAL:
+ case triggers::MATCH_EQUAL:
if (value != tdata2)
continue;
break;
- case MATCH_NAPOT:
+ case triggers::MATCH_NAPOT:
{
reg_t mask = ~((1 << (cto(tdata2)+1)) - 1);
if ((value & mask) != (tdata2 & mask))
continue;
}
break;
- case MATCH_GE:
+ case triggers::MATCH_GE:
if (value < tdata2)
continue;
break;
- case MATCH_LT:
+ case triggers::MATCH_LT:
if (value >= tdata2)
continue;
break;
- case MATCH_MASK_LOW:
+ case triggers::MATCH_MASK_LOW:
{
reg_t mask = tdata2 >> (xlen/2);
if ((value & mask) != (tdata2 & mask))
continue;
}
break;
- case MATCH_MASK_HIGH:
+ case triggers::MATCH_MASK_HIGH:
{
reg_t mask = tdata2 >> (xlen/2);
if (((value >> (xlen/2)) & mask) != (tdata2 & mask))