diff options
author | Scott Johnson <scott.johnson@arilinc.com> | 2022-07-13 10:45:41 -0700 |
---|---|---|
committer | Scott Johnson <scott.johnson@arilinc.com> | 2022-07-13 18:57:56 -0700 |
commit | 3688fd8302d1b7b8eea1dd8f6206ceab1bedfb2c (patch) | |
tree | 1a481ce817e2e5e2ecd4c9badb5cf2e1385bff00 /riscv/processor.cc | |
parent | b21a28bce174f2d1ac3e8a424bc9b9b1f01251a6 (diff) | |
download | spike-3688fd8302d1b7b8eea1dd8f6206ceab1bedfb2c.zip spike-3688fd8302d1b7b8eea1dd8f6206ceab1bedfb2c.tar.gz spike-3688fd8302d1b7b8eea1dd8f6206ceab1bedfb2c.tar.bz2 |
Properly log mstatush side effect updates
These have never been logged properly.
Diffstat (limited to 'riscv/processor.cc')
-rw-r--r-- | riscv/processor.cc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/riscv/processor.cc b/riscv/processor.cc index d431c68..8f77b47 100644 --- a/riscv/processor.cc +++ b/riscv/processor.cc @@ -193,7 +193,7 @@ void state_t::reset(processor_t* const proc, reg_t max_isa) if (xlen == 32) { csrmap[CSR_MSTATUS] = std::make_shared<rv32_low_csr_t>(proc, CSR_MSTATUS, mstatus); - csrmap[CSR_MSTATUSH] = std::make_shared<rv32_high_csr_t>(proc, CSR_MSTATUSH, mstatus); + csrmap[CSR_MSTATUSH] = mstatush = std::make_shared<rv32_high_csr_t>(proc, CSR_MSTATUSH, mstatus); } else { csrmap[CSR_MSTATUS] = mstatus; } @@ -824,6 +824,7 @@ void processor_t::take_trap(trap_t& t, reg_t epc) s = set_field(s, MSTATUS_MPV, curr_virt); s = set_field(s, MSTATUS_GVA, t.has_gva()); state.mstatus->write(s); + if (state.mstatush) state.mstatush->write(s >> 32); // log mstatush change set_privilege(PRV_M); } } |