aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--riscv/csrs.cc4
-rw-r--r--riscv/csrs.h1
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 {