31 #ifndef __ARCH_SPARC_PAGETABLE_HH__ 32 #define __ARCH_SPARC_PAGETABLE_HH__ 56 TteTag() : entry(0), populated(false) {}
57 TteTag(uint64_t
e) : entry(e), populated(true) {}
67 bool valid()
const { assert(populated);
return !
bits(entry,62,62); }
68 Addr va()
const { assert(populated);
return bits(entry,41,0); }
92 : entry(e), type(
t), populated(true)
94 populate(entry, type);
109 entry4u |=
mbits(entry,63,63);
110 entry4u |=
bits(entry,1,0) << 61;
111 entry4u |=
bits(entry,62,62) << 60;
112 entry4u |=
bits(entry,12,12) << 59;
113 entry4u |=
bits(entry,2,2) << 48;
114 entry4u |=
mbits(entry,39,13);
115 entry4u |=
bits(entry,61,61) << 6;;
116 entry4u |=
bits(entry,10,10) << 5;
117 entry4u |=
bits(entry,9,9) << 4;
118 entry4u |=
bits(entry,11,11) << 3;
119 entry4u |=
bits(entry,8,8) << 2;
120 entry4u |=
bits(entry,6,6) << 1;
130 static int pageSizes[6];
132 uint64_t
operator()()
const { assert(populated);
return entry4u; }
151 bool valid()
const {
return bits(entry4u,63,63) && populated; }
157 return bits(entry4u, 62,61) |
bits(entry4u, 48,48) << 2;
160 Addr size()
const { assert(_size() < 6);
return pageSizes[_size()]; }
162 bool ie()
const {
return bits(entry4u, 59,59); }
163 Addr pfn()
const { assert(populated);
return bits(entry4u,39,13); }
165 bool locked()
const { assert(populated);
return bits(entry4u,6,6); }
166 bool cv()
const { assert(populated);
return bits(entry4u,4,4); }
167 bool cp()
const { assert(populated);
return bits(entry4u,5,5); }
168 bool priv()
const { assert(populated);
return bits(entry4u,2,2); }
170 bool nofault()
const { assert(populated);
return bits(entry4u,60,60); }
179 return (paddr() & ~mask) | (vaddr &
mask);
194 if (real && !r2.
real)
196 if (!real && r2.
real)
199 if (!real && !r2.
real) {
219 return va == r2.
va &&
234 bool uncacheable,
bool read_only)
246 entry |=
mbits(paddr, 39, 13);
255 range.size = 8*(1<<10);
256 range.contextId = asn;
257 range.partitionId = 0;
277 range.
va = new_vaddr;
286 #endif // __ARCH_SPARC_PAGE_TABLE_HH__ Addr translate(Addr vaddr) const
#define panic(...)
This implements a cprintf based panic() function.
bool operator==(const TlbRange &r2) const
void updateVaddr(Addr new_vaddr)
void populate(uint64_t e, EntryType t=sun4u)
const PageTableEntry & operator=(const PageTableEntry &e)
uint64_t operator()() const
void serialize(const ThreadContext &tc, CheckpointOut &cp)
Thread context serialization helpers.
const PageTableEntry & operator=(uint64_t e)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
#define ULL(N)
uint64_t constant
std::ostream CheckpointOut
TlbEntry(Addr asn, Addr vaddr, Addr paddr, bool uncacheable, bool read_only)
PageTableEntry(uint64_t e, EntryType t=sun4u)
void unserialize(ThreadContext &tc, CheckpointIn &cp)
const TteTag & operator=(uint64_t e)
T mbits(T val, int first, int last)
Mask off the given bits in place like bits() but without shifting.
T bits(T val, int first, int last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it...
bool operator<(const Time &l, const Time &r)