aboutsummaryrefslogtreecommitdiff
path: root/riscv/mmu.cc
diff options
context:
space:
mode:
authorScott Johnson <scott.johnson@arilinc.com>2021-03-03 22:46:28 -0800
committerAndrew Waterman <aswaterman@gmail.com>2021-09-08 07:59:02 -0700
commit9ec2188a4478edbd2f84ee3b80b18db6f8b8648d (patch)
treeab2fa955ac14c33c2ec6cd049e9c4ffbb4a9a82c /riscv/mmu.cc
parent9cc6df31d7a4f56b190d2bc44ab74232a83cd341 (diff)
downloadspike-9ec2188a4478edbd2f84ee3b80b18db6f8b8648d.zip
spike-9ec2188a4478edbd2f84ee3b80b18db6f8b8648d.tar.gz
spike-9ec2188a4478edbd2f84ee3b80b18db6f8b8648d.tar.bz2
Convert vsstatus to csr_t family
Makes a mess out of the tracing though, because of how every toggle of the VBit swaps mstatus and vsstatus.
Diffstat (limited to 'riscv/mmu.cc')
-rw-r--r--riscv/mmu.cc6
1 files changed, 3 insertions, 3 deletions
diff --git a/riscv/mmu.cc b/riscv/mmu.cc
index efc3538..b935f41 100644
--- a/riscv/mmu.cc
+++ b/riscv/mmu.cc
@@ -267,7 +267,7 @@ reg_t mmu_t::s2xlate(reg_t gva, reg_t gpa, access_type type, access_type trap_ty
if (vm.levels == 0)
return gpa;
- reg_t arch_mstatus = proc->state.v ? proc->state.vsstatus : proc->state.mstatus;
+ reg_t arch_mstatus = proc->state.v ? proc->state.vsstatus->read() : proc->state.mstatus;
bool mxr = arch_mstatus & MSTATUS_MXR;
reg_t base = vm.ptbase;
@@ -347,8 +347,8 @@ reg_t mmu_t::walk(reg_t addr, access_type type, reg_t mode, bool virt, bool hlvx
return s2xlate(addr, addr & ((reg_t(2) << (proc->xlen-1))-1), type, type, virt, hlvx) & ~page_mask; // zero-extend from xlen
bool s_mode = mode == PRV_S;
- reg_t arch_vsstatus = proc->state.v ? proc->state.mstatus : proc->state.vsstatus;
- reg_t arch_mstatus = proc->state.v ? proc->state.vsstatus : proc->state.mstatus;
+ reg_t arch_vsstatus = proc->state.v ? proc->state.mstatus : proc->state.vsstatus->read();
+ reg_t arch_mstatus = proc->state.v ? proc->state.vsstatus->read() : proc->state.mstatus;
bool sum = (virt ? arch_vsstatus : arch_mstatus) & MSTATUS_SUM;
bool mxr = (arch_mstatus | (virt ? arch_vsstatus : 0)) & MSTATUS_MXR;