Browse Source

Merge pull request #1640 from YenHaoChen/pr-henvcfg

Ignore writes to henvcfg fields (PBMTE, STCE, and ADUE) when read-only 0
pull/1648/head
Andrew Waterman 2 years ago
committed by GitHub
parent
commit
4196bc8faf
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 5
      riscv/csrs.cc
  2. 3
      riscv/csrs.h

5
riscv/csrs.cc

@ -1549,6 +1549,11 @@ void henvcfg_csr_t::verify_permissions(insn_t insn, bool write) const {
masked_csr_t::verify_permissions(insn, write);
}
bool henvcfg_csr_t::unlogged_write(const reg_t val) noexcept {
const reg_t mask = menvcfg->read() | ~(MENVCFG_PBMTE | MENVCFG_STCE | MENVCFG_ADUE);
return envcfg_csr_t::unlogged_write((masked_csr_t::read() & ~mask) | (val & mask));
}
stimecmp_csr_t::stimecmp_csr_t(processor_t* const proc, const reg_t addr, const reg_t imask):
basic_csr_t(proc, addr, 0), intr_mask(imask) {
}

3
riscv/csrs.h

@ -490,6 +490,9 @@ class henvcfg_csr_t final: public envcfg_csr_t {
virtual void verify_permissions(insn_t insn, bool write) const override;
protected:
virtual bool unlogged_write(const reg_t val) noexcept override;
private:
csr_t_p menvcfg;
};

Loading…
Cancel
Save