aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Buchner <ryan.buchner@arilinc.com>2022-05-07 22:25:00 -0700
committerRyan Buchner <ryan.buchner@arilinc.com>2022-05-11 10:19:04 -0700
commitea70a9359daf5780b815b68aa9cdc7b2a71d2f8c (patch)
treefc2d2cc92d1b97ff1bda89cf94451fe9fa6c3c79
parentfc35f34fd0f5307354cc25ae8018cda62f834e25 (diff)
downloadriscv-isa-sim-ea70a9359daf5780b815b68aa9cdc7b2a71d2f8c.zip
riscv-isa-sim-ea70a9359daf5780b815b68aa9cdc7b2a71d2f8c.tar.gz
riscv-isa-sim-ea70a9359daf5780b815b68aa9cdc7b2a71d2f8c.tar.bz2
Add PBMTE bit to menvcfg and henvcfg mask values
Also make PBMTE set on reset for backward compatibility. Since before Spike proceeded as if these bits were set if the extension was enabled.
-rw-r--r--riscv/processor.cc12
1 files changed, 8 insertions, 4 deletions
diff --git a/riscv/processor.cc b/riscv/processor.cc
index 72f2d47..661058c 100644
--- a/riscv/processor.cc
+++ b/riscv/processor.cc
@@ -380,14 +380,18 @@ void state_t::reset(processor_t* const proc, reg_t max_isa)
csrmap[CSR_MVENDORID] = std::make_shared<const_csr_t>(proc, CSR_MVENDORID, 0);
csrmap[CSR_MHARTID] = std::make_shared<const_csr_t>(proc, CSR_MHARTID, proc->get_id());
const reg_t menvcfg_mask = (proc->extension_enabled(EXT_ZICBOM) ? MENVCFG_CBCFE | MENVCFG_CBIE : 0) |
- (proc->extension_enabled(EXT_ZICBOZ) ? MENVCFG_CBZE : 0);
- csrmap[CSR_MENVCFG] = menvcfg = std::make_shared<masked_csr_t>(proc, CSR_MENVCFG, menvcfg_mask, 0);
+ (proc->extension_enabled(EXT_ZICBOZ) ? MENVCFG_CBZE : 0) |
+ (proc->extension_enabled(EXT_SVPBMT) ? MENVCFG_PBMTE : 0);
+ const reg_t menvcfg_init = (proc->extension_enabled(EXT_SVPBMT) ? MENVCFG_PBMTE : 0);
+ csrmap[CSR_MENVCFG] = menvcfg = std::make_shared<masked_csr_t>(proc, CSR_MENVCFG, menvcfg_mask, menvcfg_init);
const reg_t senvcfg_mask = (proc->extension_enabled(EXT_ZICBOM) ? SENVCFG_CBCFE | SENVCFG_CBIE : 0) |
(proc->extension_enabled(EXT_ZICBOZ) ? SENVCFG_CBZE : 0);
csrmap[CSR_SENVCFG] = senvcfg = std::make_shared<masked_csr_t>(proc, CSR_SENVCFG, senvcfg_mask, 0);
const reg_t henvcfg_mask = (proc->extension_enabled(EXT_ZICBOM) ? HENVCFG_CBCFE | HENVCFG_CBIE : 0) |
- (proc->extension_enabled(EXT_ZICBOZ) ? HENVCFG_CBZE : 0);
- csrmap[CSR_HENVCFG] = henvcfg = std::make_shared<henvcfg_csr_t>(proc, CSR_HENVCFG, henvcfg_mask, 0, menvcfg);
+ (proc->extension_enabled(EXT_ZICBOZ) ? HENVCFG_CBZE : 0) |
+ (proc->extension_enabled(EXT_SVPBMT) ? HENVCFG_PBMTE : 0);
+ const reg_t henvcfg_init = (proc->extension_enabled(EXT_SVPBMT) ? HENVCFG_PBMTE : 0);
+ csrmap[CSR_HENVCFG] = henvcfg = std::make_shared<henvcfg_csr_t>(proc, CSR_HENVCFG, henvcfg_mask, henvcfg_init, menvcfg);
serialized = false;