diff options
author | YenHaoChen <howard25336284@gmail.com> | 2024-08-18 10:07:45 +0800 |
---|---|---|
committer | YenHaoChen <howard25336284@gmail.com> | 2024-08-18 10:07:45 +0800 |
commit | 0648ab40fc0742a8dbdbfbf82d71bbe0a3385317 (patch) | |
tree | 3fbcf337ed33f8663ae282178f0368fddaab0275 | |
parent | 38330930daa2d5887d8f163661a18bf6e5378be8 (diff) | |
download | riscv-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.cc | 3 |
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}; } |