diff --git a/src/arch/riscv/pagetable_walker.cc b/src/arch/riscv/pagetable_walker.cc index d3c390531c..8dadd96767 100644 --- a/src/arch/riscv/pagetable_walker.cc +++ b/src/arch/riscv/pagetable_walker.cc @@ -418,7 +418,7 @@ Walker::WalkerState::endWalk() void Walker::WalkerState::setupWalk(Addr vaddr) { - vaddr &= (static_cast(1) << VADDR_BITS) - 1; + vaddr = Addr(sext(vaddr)); Addr shift = PageShift + LEVEL_BITS * 2; Addr idx = (vaddr >> shift) & LEVEL_MASK; @@ -486,7 +486,7 @@ Walker::WalkerState::recvPacket(PacketPtr pkt) * well. */ Addr vaddr = req->getVaddr(); - vaddr &= (static_cast(1) << VADDR_BITS) - 1; + vaddr = Addr(sext(vaddr)); Addr paddr = walker->tlb->translateWithTLB(vaddr, satp.asid, mode); req->setPaddr(paddr); walker->pma->check(req); diff --git a/src/arch/riscv/tlb.cc b/src/arch/riscv/tlb.cc index a5e4107248..1ec848ee94 100644 --- a/src/arch/riscv/tlb.cc +++ b/src/arch/riscv/tlb.cc @@ -277,7 +277,7 @@ TLB::doTranslate(const RequestPtr &req, ThreadContext *tc, { delayed = false; - Addr vaddr = req->getVaddr() & ((static_cast(1) << VADDR_BITS) - 1); + Addr vaddr = Addr(sext(req->getVaddr())); SATP satp = tc->readMiscReg(MISCREG_SATP); TlbEntry *e = lookup(vaddr, satp.asid, mode, false);