summaryrefslogtreecommitdiff
path: root/src/arch/mips/isa/decoder.isa
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/mips/isa/decoder.isa')
-rw-r--r--src/arch/mips/isa/decoder.isa18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/arch/mips/isa/decoder.isa b/src/arch/mips/isa/decoder.isa
index a349f1a05..9a059822e 100644
--- a/src/arch/mips/isa/decoder.isa
+++ b/src/arch/mips/isa/decoder.isa
@@ -737,7 +737,8 @@ decode OPCODE_HI default Unknown::unknown() {
format CP0TLB {
0x01: tlbr({{
MipsISA::PTE *PTEntry =
- xc->tcBase()->getITBPtr()->
+ dynamic_cast<MipsISA::TLB *>(
+ xc->tcBase()->getITBPtr())->
getEntry(Index & 0x7FFFFFFF);
if (PTEntry == NULL) {
fatal("Invalid PTE Entry received on "
@@ -817,7 +818,8 @@ decode OPCODE_HI default Unknown::unknown() {
newEntry.OffsetMask =
(1 << newEntry.AddrShiftAmount) - 1;
- MipsISA::TLB *Ptr = xc->tcBase()->getITBPtr();
+ auto ptr = dynamic_cast<MipsISA::TLB *>(
+ xc->tcBase()->getITBPtr());
Config3Reg config3 = Config3;
PageGrainReg pageGrain = PageGrain;
int SP = 0;
@@ -825,7 +827,7 @@ decode OPCODE_HI default Unknown::unknown() {
bits(pageGrain, pageGrain.esp) == 1) {
SP = 1;
}
- Ptr->insertAt(newEntry, Index & 0x7FFFFFFF, SP);
+ ptr->insertAt(newEntry, Index & 0x7FFFFFFF, SP);
}});
0x06: tlbwr({{
//Create PTE
@@ -882,7 +884,8 @@ decode OPCODE_HI default Unknown::unknown() {
newEntry.OffsetMask =
(1 << newEntry.AddrShiftAmount) - 1;
- MipsISA::TLB *Ptr = xc->tcBase()->getITBPtr();
+ auto ptr = dynamic_cast<MipsISA::TLB *>(
+ xc->tcBase()->getITBPtr());
Config3Reg config3 = Config3;
PageGrainReg pageGrain = PageGrain;
int SP = 0;
@@ -890,7 +893,7 @@ decode OPCODE_HI default Unknown::unknown() {
bits(pageGrain, pageGrain.esp) == 1) {
SP = 1;
}
- Ptr->insertAt(newEntry, Random, SP);
+ ptr->insertAt(newEntry, Random, SP);
}});
0x08: tlbp({{
@@ -905,8 +908,9 @@ decode OPCODE_HI default Unknown::unknown() {
// Mask off lower 2 bits
vpn = ((EntryHi >> 11) & 0xFFFFFFFC);
}
- tlbIndex = xc->tcBase()->getITBPtr()->
- probeEntry(vpn, entryHi.asid);
+ tlbIndex = dynamic_cast<MipsISA::TLB *>(
+ xc->tcBase()->getITBPtr())->
+ probeEntry(vpn, entryHi.asid);
// Check TLB for entry matching EntryHi
if (tlbIndex != -1) {
Index = tlbIndex;