aboutsummaryrefslogtreecommitdiff
path: root/riscv/csrs.cc
diff options
context:
space:
mode:
authorYenHaoChen <howard25336284@gmail.com>2024-07-05 16:35:01 +0800
committerYenHaoChen <howard25336284@gmail.com>2024-07-06 03:30:41 +0800
commit6cc342bcfae27b398300acdaba2d27ee3ebeb2b1 (patch)
tree88b1c0c0119439afda96bda23f8594e00da2b72b /riscv/csrs.cc
parenteea20ae6a2c949079fbb5a8fa547a0f5a609cfc6 (diff)
downloadspike-6cc342bcfae27b398300acdaba2d27ee3ebeb2b1.zip
spike-6cc342bcfae27b398300acdaba2d27ee3ebeb2b1.tar.gz
spike-6cc342bcfae27b398300acdaba2d27ee3ebeb2b1.tar.bz2
pointer masking: Let menvcfg.PMM be WARL if with Smnpm
Diffstat (limited to 'riscv/csrs.cc')
-rw-r--r--riscv/csrs.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/riscv/csrs.cc b/riscv/csrs.cc
index e076bb5..7996082 100644
--- a/riscv/csrs.cc
+++ b/riscv/csrs.cc
@@ -975,7 +975,12 @@ envcfg_csr_t::envcfg_csr_t(processor_t* const proc, const reg_t addr, const reg_
bool envcfg_csr_t::unlogged_write(const reg_t val) noexcept {
const reg_t cbie_reserved = 2; // Reserved value of xenvcfg.CBIE
- const reg_t adjusted_val = get_field(val, MENVCFG_CBIE) != cbie_reserved ? val : set_field(val, MENVCFG_CBIE, 0);
+ reg_t adjusted_val = get_field(val, MENVCFG_CBIE) != cbie_reserved ? val : set_field(val, MENVCFG_CBIE, 0);
+
+ const reg_t pmm_reserved = 1; // Reserved value of xseccfg.PMM
+ const reg_t pmm = get_field(adjusted_val, MENVCFG_PMM);
+ adjusted_val = set_field(adjusted_val, MENVCFG_PMM, pmm != pmm_reserved ? pmm : 0);
+
return masked_csr_t::unlogged_write(adjusted_val);
}