diff options
author | YenHaoChen <howard25336284@gmail.com> | 2023-02-16 08:28:25 +0800 |
---|---|---|
committer | YenHaoChen <39526191+YenHaoChen@users.noreply.github.com> | 2024-05-21 09:51:44 +0800 |
commit | 4477cf59f7a939e91a2c216a723c9e6949785f81 (patch) | |
tree | b2df848463e9b999f65b1c458027fce9918c2909 | |
parent | c81d8e73daf1875d79a54f28f67df150fba0e44c (diff) | |
download | spike-4477cf59f7a939e91a2c216a723c9e6949785f81.zip spike-4477cf59f7a939e91a2c216a723c9e6949785f81.tar.gz spike-4477cf59f7a939e91a2c216a723c9e6949785f81.tar.bz2 |
triggers: remove mcontrol6.timing (implement suggested trigger timings)
-rw-r--r-- | riscv/triggers.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/riscv/triggers.cc b/riscv/triggers.cc index 5a2d18b..4957dd4 100644 --- a/riscv/triggers.cc +++ b/riscv/triggers.cc @@ -272,7 +272,6 @@ reg_t mcontrol6_t::tdata1_read(const processor_t * const proc) const noexcept { tdata1 = set_field(tdata1, CSR_MCONTROL6_VU, proc->extension_enabled('H') ? vu : 0); tdata1 = set_field(tdata1, CSR_MCONTROL6_HIT, hit); tdata1 = set_field(tdata1, CSR_MCONTROL6_SELECT, select); - tdata1 = set_field(tdata1, CSR_MCONTROL6_TIMING, timing); tdata1 = set_field(tdata1, CSR_MCONTROL6_ACTION, action); tdata1 = set_field(tdata1, CSR_MCONTROL6_CHAIN, chain); tdata1 = set_field(tdata1, CSR_MCONTROL6_MATCH, match); @@ -293,7 +292,6 @@ void mcontrol6_t::tdata1_write(processor_t * const proc, const reg_t val, const vu = get_field(val, CSR_MCONTROL6_VU); hit = get_field(val, CSR_MCONTROL6_HIT); select = get_field(val, CSR_MCONTROL6_SELECT); - timing = legalize_timing(val, CSR_MCONTROL6_TIMING, CSR_MCONTROL6_SELECT, CSR_MCONTROL6_EXECUTE, CSR_MCONTROL6_LOAD); action = legalize_action(val, CSR_MCONTROL6_ACTION, CSR_MCONTROL6_DMODE(xlen)); chain = allow_chain ? get_field(val, CSR_MCONTROL6_CHAIN) : 0; match = legalize_match(get_field(val, CSR_MCONTROL6_MATCH)); @@ -303,6 +301,11 @@ void mcontrol6_t::tdata1_write(processor_t * const proc, const reg_t val, const execute = get_field(val, CSR_MCONTROL6_EXECUTE); store = get_field(val, CSR_MCONTROL6_STORE); load = get_field(val, CSR_MCONTROL6_LOAD); + + /* GDB doesn't support setting triggers in a way that combines a data load trigger + * with an address trigger to trigger on a load of a value at a given address. + * The default timing legalization on mcontrol6 assumes no such trigger setting. */ + timing = legalize_timing(val, 0, CSR_MCONTROL6_SELECT, CSR_MCONTROL6_EXECUTE, CSR_MCONTROL6_LOAD); } std::optional<match_result_t> icount_t::detect_icount_fire(processor_t * const proc) noexcept |