aboutsummaryrefslogtreecommitdiff
path: root/riscv/processor.cc
diff options
context:
space:
mode:
authorScott Johnson <scott.johnson@arilinc.com>2022-07-13 10:45:41 -0700
committerScott Johnson <scott.johnson@arilinc.com>2022-07-13 18:57:56 -0700
commit3688fd8302d1b7b8eea1dd8f6206ceab1bedfb2c (patch)
tree1a481ce817e2e5e2ecd4c9badb5cf2e1385bff00 /riscv/processor.cc
parentb21a28bce174f2d1ac3e8a424bc9b9b1f01251a6 (diff)
downloadspike-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.cc3
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);
}
}