50 auto tlb =
dynamic_cast<TLB *
>(tc->getITBPtr());
59 auto tlb =
dynamic_cast<TLB *
>(tc->getDTBPtr());
134 retval |=
ipr[idx] &
ULL(0xffffffff00000000);
154 retval |= ((uint64_t)entry.
ppn & ULL(0x7ffffff)) << 32;
155 retval |= ((uint64_t)entry.
xre & ULL(0xf)) << 8;
156 retval |= ((uint64_t)entry.
xwe & ULL(0xf)) << 12;
157 retval |= ((uint64_t)entry.
fonr & ULL(0x1)) << 1;
158 retval |= ((uint64_t)entry.
fonw & ULL(0x1))<< 2;
159 retval |= ((uint64_t)entry.
asma & ULL(0x1)) << 4;
160 retval |= ((uint64_t)entry.
asn & ULL(0x7f)) << 57;
174 panic(
"Tried to read write only register %d\n", idx);
179 panic(
"Tried to read from invalid ipr %d\n", idx);
230 assert(
ipr[idx] == 0);
261 ipr[idx] = val & 0xf;
266 ipr[idx] = val & 0x1f;
283 ipr[idx] = val & 0x18;
288 ipr[idx] = val & 0x18;
298 ipr[idx] = val & 0x7fff0;
302 ipr[idx] = val &
ULL(0xffffff0300);
307 ipr[idx] = val &
ULL(0xffffffffc0000000);
311 ipr[idx] = val & 0x1ffb;
316 ipr[idx] = val & 0x3f;
320 ipr[idx] = val & 0x7f0;
324 ipr[idx] = val &
ULL(0xfe00000000000000);
339 panic(
"Tried to write read only ipr %d\n", idx);
375 panic(
"PTE GH field != 0");
399 panic(
"PTE GH field != 0");
441 panic(
"Tried to write to invalid ipr %d\n", idx);
#define panic(...)
This implements a cprintf based panic() function.
int DTB_ASN_ASN(uint64_t reg)
void copyIprs(ThreadContext *src, ThreadContext *dest)
int DTB_PTE_FONR(uint64_t reg)
int ITB_PTE_GH(uint64_t reg)
int DTB_PTE_XRE(uint64_t reg)
int ITB_PTE_XRE(uint64_t reg)
InternalProcReg readIpr(int idx, ThreadContext *tc)
virtual ::Kernel::Statistics * getKernelStats()=0
virtual void setMiscRegNoEffect(RegIndex misc_reg, RegVal val)=0
bool ITB_PTE_ASMA(uint64_t reg)
InternalProcReg ipr[NumInternalProcRegs]
Addr ITB_PTE_PPN(uint64_t reg)
bool ITB_PTE_FONR(uint64_t reg)
int DTB_PTE_ASMA(uint64_t reg)
bool ITB_PTE_FONW(uint64_t reg)
virtual BaseCPU * getCpuPtr()=0
TlbEntry & index(bool advance=true)
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Addr DTB_PTE_PPN(uint64_t reg)
void setIpr(int idx, InternalProcReg val, ThreadContext *tc)
void flushAll() override
Remove all entries from the TLB.
int DTB_PTE_FONW(uint64_t reg)
Cycles curCycle() const
Determine the current cycle, corresponding to a tick aligned to a clock edge.
#define ULL(N)
uint64_t constant
void flushAddr(Addr addr, uint8_t asn)
void initIPRs(ThreadContext *tc, int cpuId)
int ITB_ASN_ASN(uint64_t reg)
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
void insert(Addr vaddr, TlbEntry &entry)
int DTB_PTE_GH(uint64_t reg)
int DTB_PTE_XWE(uint64_t reg)
std::vector< Info * > stats