41,45c41,45
< struct VAddr
< {
< static const int ImplBits = 43;
< static const Addr ImplMask = (ULL(1) << ImplBits) - 1;
< static const Addr UnImplMask = ~ImplMask;
---
> struct VAddr
> {
> static const int ImplBits = 43;
> static const Addr ImplMask = (ULL(1) << ImplBits) - 1;
> static const Addr UnImplMask = ~ImplMask;
47,50c47
< VAddr(Addr a) : addr(a) {}
< Addr addr;
< operator Addr() const { return addr; }
< const VAddr &operator=(Addr a) { addr = a; return *this; }
---
> Addr addr;
52,54c49,51
< Addr vpn() const { return (addr & ImplMask) >> PageShift; }
< Addr page() const { return addr & PageMask; }
< Addr offset() const { return addr & PageOffset; }
---
> VAddr(Addr a) : addr(a) {}
> operator Addr() const { return addr; }
> const VAddr &operator=(Addr a) { addr = a; return *this; }
56,62c53,55
< Addr level3() const
< { return PteAddr(addr >> PageShift); }
< Addr level2() const
< { return PteAddr(addr >> NPtePageShift + PageShift); }
< Addr level1() const
< { return PteAddr(addr >> 2 * NPtePageShift + PageShift); }
< };
---
> Addr vpn() const { return (addr & ImplMask) >> PageShift; }
> Addr page() const { return addr & PageMask; }
> Addr offset() const { return addr & PageOffset; }
64,71c57,63
< struct PageTableEntry
< {
< PageTableEntry(uint64_t e) : entry(e) {}
< uint64_t entry;
< operator uint64_t() const { return entry; }
< const PageTableEntry &operator=(uint64_t e) { entry = e; return *this; }
< const PageTableEntry &operator=(const PageTableEntry &e)
< { entry = e.entry; return *this; }
---
> Addr level3() const
> { return PteAddr(addr >> PageShift); }
> Addr level2() const
> { return PteAddr(addr >> NPtePageShift + PageShift); }
> Addr level1() const
> { return PteAddr(addr >> 2 * NPtePageShift + PageShift); }
> };
73,87c65,72
< Addr _pfn() const { return (entry >> 32) & 0xffffffff; }
< Addr _sw() const { return (entry >> 16) & 0xffff; }
< int _rsv0() const { return (entry >> 14) & 0x3; }
< bool _uwe() const { return (entry >> 13) & 0x1; }
< bool _kwe() const { return (entry >> 12) & 0x1; }
< int _rsv1() const { return (entry >> 10) & 0x3; }
< bool _ure() const { return (entry >> 9) & 0x1; }
< bool _kre() const { return (entry >> 8) & 0x1; }
< bool _nomb() const { return (entry >> 7) & 0x1; }
< int _gh() const { return (entry >> 5) & 0x3; }
< bool _asm_() const { return (entry >> 4) & 0x1; }
< bool _foe() const { return (entry >> 3) & 0x1; }
< bool _fow() const { return (entry >> 2) & 0x1; }
< bool _for() const { return (entry >> 1) & 0x1; }
< bool valid() const { return (entry >> 0) & 0x1; }
---
> struct PageTableEntry
> {
> PageTableEntry(uint64_t e) : entry(e) {}
> uint64_t entry;
> operator uint64_t() const { return entry; }
> const PageTableEntry &operator=(uint64_t e) { entry = e; return *this; }
> const PageTableEntry &operator=(const PageTableEntry &e)
> { entry = e.entry; return *this; }
89,90c74,88
< Addr paddr() const { return _pfn() << PageShift; }
< };
---
> Addr _pfn() const { return (entry >> 32) & 0xffffffff; }
> Addr _sw() const { return (entry >> 16) & 0xffff; }
> int _rsv0() const { return (entry >> 14) & 0x3; }
> bool _uwe() const { return (entry >> 13) & 0x1; }
> bool _kwe() const { return (entry >> 12) & 0x1; }
> int _rsv1() const { return (entry >> 10) & 0x3; }
> bool _ure() const { return (entry >> 9) & 0x1; }
> bool _kre() const { return (entry >> 8) & 0x1; }
> bool _nomb() const { return (entry >> 7) & 0x1; }
> int _gh() const { return (entry >> 5) & 0x3; }
> bool _asm_() const { return (entry >> 4) & 0x1; }
> bool _foe() const { return (entry >> 3) & 0x1; }
> bool _fow() const { return (entry >> 2) & 0x1; }
> bool _for() const { return (entry >> 1) & 0x1; }
> bool valid() const { return (entry >> 0) & 0x1; }
92,111c90,91
< // ITB/DTB table entry
< struct TlbEntry
< {
< //Construct an entry that maps to physical address addr.
< TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr)
< {
< VAddr vaddr(_vaddr);
< VAddr paddr(_paddr);
< tag = vaddr.vpn();
< ppn = paddr.vpn();
< xre = 15;
< xwe = 15;
< asn = _asn;
< asma = false;
< fonr = false;
< fonw = false;
< valid = true;
< }
< TlbEntry()
< {}
---
> Addr paddr() const { return _pfn() << PageShift; }
> };
113,121c93,104
< Addr tag; // virtual page number tag
< Addr ppn; // physical page number
< uint8_t xre; // read permissions - VMEM_PERM_* mask
< uint8_t xwe; // write permissions - VMEM_PERM_* mask
< uint8_t asn; // address space number
< bool asma; // address space match
< bool fonr; // fault on read
< bool fonw; // fault on write
< bool valid; // valid page table entry
---
> // ITB/DTB table entry
> struct TlbEntry
> {
> Addr tag; // virtual page number tag
> Addr ppn; // physical page number
> uint8_t xre; // read permissions - VMEM_PERM_* mask
> uint8_t xwe; // write permissions - VMEM_PERM_* mask
> uint8_t asn; // address space number
> bool asma; // address space match
> bool fonr; // fault on read
> bool fonw; // fault on write
> bool valid; // valid page table entry
123,126d105
< Addr pageStart()
< {
< return ppn << PageShift;
< }
128,130c107,121
< void serialize(std::ostream &os);
< void unserialize(Checkpoint *cp, const std::string &section);
< };
---
> //Construct an entry that maps to physical address addr.
> TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr)
> {
> VAddr vaddr(_vaddr);
> VAddr paddr(_paddr);
> tag = vaddr.vpn();
> ppn = paddr.vpn();
> xre = 15;
> xwe = 15;
> asn = _asn;
> asma = false;
> fonr = false;
> fonw = false;
> valid = true;
> }
131a123,133
> TlbEntry()
> {}
>
> Addr
> pageStart()
> {
> return ppn << PageShift;
> }
>
> void serialize(std::ostream &os);
> void unserialize(Checkpoint *cp, const std::string &section);
132a135,137
>
> } // namespace AlphaISA
>