aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYenHaoChen <howard25336284@gmail.com>2024-08-18 10:07:45 +0800
committerYenHaoChen <howard25336284@gmail.com>2024-08-18 10:07:45 +0800
commit0648ab40fc0742a8dbdbfbf82d71bbe0a3385317 (patch)
tree3fbcf337ed33f8663ae282178f0368fddaab0275
parent38330930daa2d5887d8f163661a18bf6e5378be8 (diff)
downloadriscv-isa-sim-0648ab40fc0742a8dbdbfbf82d71bbe0a3385317.zip
riscv-isa-sim-0648ab40fc0742a8dbdbfbf82d71bbe0a3385317.tar.gz
riscv-isa-sim-0648ab40fc0742a8dbdbfbf82d71bbe0a3385317.tar.bz2
pointer masking: refactor: Use xlen to avoid sketchy, hardcoded number 64
-rw-r--r--riscv/mmu.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/riscv/mmu.cc b/riscv/mmu.cc
index 62e8402..5d34541 100644
--- a/riscv/mmu.cc
+++ b/riscv/mmu.cc
@@ -654,10 +654,11 @@ mem_access_info_t mmu_t::generate_access_info(reg_t addr, access_type type, xlat
virt = true;
mode = get_field(proc->state.hstatus->read(), HSTATUS_SPVP);
}
+ auto xlen = proc->get_const_xlen();
reg_t pmlen = get_pmlen(virt, mode, xlate_flags);
reg_t satp = proc->state.satp->readvirt(virt);
bool is_physical_addr = mode == PRV_M || get_field(satp, SATP64_MODE) == SATP_MODE_OFF;
- transformed_addr = is_physical_addr ? zext(addr, 64 - pmlen) : sext(addr, 64 - pmlen);
+ transformed_addr = is_physical_addr ? zext(addr, xlen - pmlen) : sext(addr, xlen - pmlen);
}
return {addr, transformed_addr, mode, virt, xlate_flags, type};
}