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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with
8 additions and
0 deletions
-
riscv/csrs.cc
-
riscv/csrs.h
|
|
|
@ -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) { |
|
|
|
} |
|
|
|
|
|
|
|
@ -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; |
|
|
|
}; |
|
|
|
|