diff options
author | i2h2 <110197402+i2h2@users.noreply.github.com> | 2022-08-03 16:01:57 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-03 15:01:57 -0700 |
commit | 5672c4a41ad7a9af011d385962c175a5a6012fd9 (patch) | |
tree | 2b2268331e4bb8011f3578492d846568113ca990 /riscv/csrs.h | |
parent | 14cb6b2a6244e3a1511c4c169676a6e2bd6785ed (diff) | |
download | spike-5672c4a41ad7a9af011d385962c175a5a6012fd9.zip spike-5672c4a41ad7a9af011d385962c175a5a6012fd9.tar.gz spike-5672c4a41ad7a9af011d385962c175a5a6012fd9.tar.bz2 |
Add Sstc support. (#1057)
Diffstat (limited to 'riscv/csrs.h')
-rw-r--r-- | riscv/csrs.h | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/riscv/csrs.h b/riscv/csrs.h index c979942..acd889c 100644 --- a/riscv/csrs.h +++ b/riscv/csrs.h @@ -449,12 +449,13 @@ class masked_csr_t: public basic_csr_t { }; // henvcfg.pbmte is read_only 0 when menvcfg.pbmte = 0 +// henvcfg.stce is read_only 0 when menvcfg.stce = 0 class henvcfg_csr_t final: public masked_csr_t { public: henvcfg_csr_t(processor_t* const proc, const reg_t addr, const reg_t mask, const reg_t init, csr_t_p menvcfg); reg_t read() const noexcept override { - return (menvcfg->read() | ~MENVCFG_PBMTE) & masked_csr_t::read(); + return (menvcfg->read() | ~(MENVCFG_PBMTE | MENVCFG_STCE)) & masked_csr_t::read(); } virtual void verify_permissions(insn_t insn, bool write) const override; @@ -729,4 +730,18 @@ class senvcfg_csr_t final: public masked_csr_t { virtual void verify_permissions(insn_t insn, bool write) const override; }; +class stimecmp_csr_t: public basic_csr_t { + public: + stimecmp_csr_t(processor_t* const proc, const reg_t addr, const reg_t imask); + protected: + virtual bool unlogged_write(const reg_t val) noexcept override; + private: + reg_t intr_mask; +}; + +class virtualized_stimecmp_csr_t: public virtualized_csr_t { + public: + virtualized_stimecmp_csr_t(processor_t* const proc, csr_t_p orig, csr_t_p virt); + virtual void verify_permissions(insn_t insn, bool write) const override; +}; #endif |