diff options
author | Scott Johnson <scott.johnson@arilinc.com> | 2022-07-13 09:48:23 -0700 |
---|---|---|
committer | Scott Johnson <scott.johnson@arilinc.com> | 2022-07-13 18:57:55 -0700 |
commit | f85b76edd00a529b3dbda88aee2802014c09de7d (patch) | |
tree | 3fa47183e03b255db2d1bd33107b1a5b0f15d7ec | |
parent | 85ab2228ddb802c33a967349d69b2d948846bd01 (diff) | |
download | riscv-isa-sim-f85b76edd00a529b3dbda88aee2802014c09de7d.zip riscv-isa-sim-f85b76edd00a529b3dbda88aee2802014c09de7d.tar.gz riscv-isa-sim-f85b76edd00a529b3dbda88aee2802014c09de7d.tar.bz2 |
Use rv32_low_csr_t for Smstateen CSRs
Otherwise they will have the same problem as #1044
-rw-r--r-- | riscv/processor.cc | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/riscv/processor.cc b/riscv/processor.cc index 28129ba..d431c68 100644 --- a/riscv/processor.cc +++ b/riscv/processor.cc @@ -405,15 +405,21 @@ void state_t::reset(processor_t* const proc, reg_t max_isa) const reg_t mstateen0_mask = hstateen0_mask; for (int i = 0; i < 4; i++) { const reg_t mstateen_mask = i == 0 ? mstateen0_mask : MSTATEEN_HSTATEEN; - csrmap[CSR_MSTATEEN0 + i] = mstateen[i] = std::make_shared<masked_csr_t>(proc, CSR_MSTATEEN0 + i, mstateen_mask, 0); + mstateen[i] = std::make_shared<masked_csr_t>(proc, CSR_MSTATEEN0 + i, mstateen_mask, 0); if (xlen == 32) { + csrmap[CSR_MSTATEEN0 + i] = std::make_shared<rv32_low_csr_t>(proc, CSR_MSTATEEN0 + i, mstateen[i]); csrmap[CSR_MSTATEEN0H + i] = std::make_shared<rv32_high_csr_t>(proc, CSR_MSTATEEN0H + i, mstateen[i]); + } else { + csrmap[CSR_MSTATEEN0 + i] = mstateen[i]; } const reg_t hstateen_mask = i == 0 ? hstateen0_mask : HSTATEEN_SSTATEEN; - csrmap[CSR_HSTATEEN0 + i] = hstateen[i] = std::make_shared<hstateen_csr_t>(proc, CSR_HSTATEEN0 + i, hstateen_mask, 0, i); + hstateen[i] = std::make_shared<hstateen_csr_t>(proc, CSR_HSTATEEN0 + i, hstateen_mask, 0, i); if (xlen == 32) { + csrmap[CSR_HSTATEEN0 + i] = std::make_shared<rv32_low_csr_t>(proc, CSR_HSTATEEN0 + i, hstateen[i]); csrmap[CSR_HSTATEEN0H + i] = std::make_shared<rv32_high_csr_t>(proc, CSR_HSTATEEN0H + i, hstateen[i]); + } else { + csrmap[CSR_HSTATEEN0 + i] = hstateen[i]; } const reg_t sstateen_mask = i == 0 ? sstateen0_mask : 0; |