diff options
author | Ryan Buchner <ryan.buchner@arilinc.com> | 2022-05-07 22:25:00 -0700 |
---|---|---|
committer | Ryan Buchner <ryan.buchner@arilinc.com> | 2022-05-11 10:19:04 -0700 |
commit | ea70a9359daf5780b815b68aa9cdc7b2a71d2f8c (patch) | |
tree | fc2d2cc92d1b97ff1bda89cf94451fe9fa6c3c79 | |
parent | fc35f34fd0f5307354cc25ae8018cda62f834e25 (diff) | |
download | riscv-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.cc | 12 |
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; |