29 #ifndef __ARCH_SPARC_PAGETABLE_HH__ 30 #define __ARCH_SPARC_PAGETABLE_HH__ 54 TteTag() : entry(0), populated(false) {}
55 TteTag(uint64_t
e) : entry(e), populated(true) {}
65 bool valid()
const { assert(populated);
return !
bits(entry,62,62); }
66 Addr va()
const { assert(populated);
return bits(entry,41,0); }
90 : entry(e), type(
t), populated(true)
92 populate(entry, type);
107 entry4u |=
mbits(entry,63,63);
108 entry4u |=
bits(entry,1,0) << 61;
109 entry4u |=
bits(entry,62,62) << 60;
110 entry4u |=
bits(entry,12,12) << 59;
111 entry4u |=
bits(entry,2,2) << 48;
112 entry4u |=
mbits(entry,39,13);
113 entry4u |=
bits(entry,61,61) << 6;;
114 entry4u |=
bits(entry,10,10) << 5;
115 entry4u |=
bits(entry,9,9) << 4;
116 entry4u |=
bits(entry,11,11) << 3;
117 entry4u |=
bits(entry,8,8) << 2;
118 entry4u |=
bits(entry,6,6) << 1;
128 static int pageSizes[6];
130 uint64_t
operator()()
const { assert(populated);
return entry4u; }
149 bool valid()
const {
return bits(entry4u,63,63) && populated; }
155 return bits(entry4u, 62,61) |
bits(entry4u, 48,48) << 2;
158 Addr size()
const { assert(_size() < 6);
return pageSizes[_size()]; }
160 bool ie()
const {
return bits(entry4u, 59,59); }
161 Addr pfn()
const { assert(populated);
return bits(entry4u,39,13); }
163 bool locked()
const { assert(populated);
return bits(entry4u,6,6); }
164 bool cv()
const { assert(populated);
return bits(entry4u,4,4); }
165 bool cp()
const { assert(populated);
return bits(entry4u,5,5); }
166 bool priv()
const { assert(populated);
return bits(entry4u,2,2); }
168 bool nofault()
const { assert(populated);
return bits(entry4u,60,60); }
177 return (paddr() & ~mask) | (vaddr &
mask);
192 if (real && !r2.
real)
194 if (!real && r2.
real)
197 if (!real && !r2.
real) {
217 return va == r2.
va &&
232 bool uncacheable,
bool read_only)
244 entry |=
mbits(paddr, 39, 13);
253 range.size = 8*(1<<10);
254 range.contextId = asn;
255 range.partitionId = 0;
275 range.
va = new_vaddr;
284 #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)