diff options
-rw-r--r-- | riscv/csrs.cc | 4 | ||||
-rw-r--r-- | riscv/csrs.h | 1 |
2 files changed, 2 insertions, 3 deletions
diff --git a/riscv/csrs.cc b/riscv/csrs.cc index 18956ff..3a929ff 100644 --- a/riscv/csrs.cc +++ b/riscv/csrs.cc @@ -500,7 +500,7 @@ rv32_high_csr_t::rv32_high_csr_t(processor_t* const proc, const reg_t addr, csr_ } reg_t rv32_high_csr_t::read() const noexcept { - return (orig->read() >> 32) & mask; + return (orig->read() >> 32) & 0xffffffffU; } void rv32_high_csr_t::verify_permissions(insn_t insn, bool write) const { @@ -508,7 +508,7 @@ void rv32_high_csr_t::verify_permissions(insn_t insn, bool write) const { } bool rv32_high_csr_t::unlogged_write(const reg_t val) noexcept { - return orig->unlogged_write((orig->written_value() & ~(mask << 32)) | ((val & mask) << 32)); + return orig->unlogged_write((orig->written_value() << 32 >> 32) | ((val & 0xffffffffU) << 32)); } // implement class sstatus_csr_t diff --git a/riscv/csrs.h b/riscv/csrs.h index 7b1f87c..3998d79 100644 --- a/riscv/csrs.h +++ b/riscv/csrs.h @@ -258,7 +258,6 @@ class rv32_high_csr_t: public csr_t { virtual bool unlogged_write(const reg_t val) noexcept override; private: csr_t_p orig; - const reg_t mask = -1; }; class sstatus_proxy_csr_t final: public base_status_csr_t { |