summaryrefslogtreecommitdiff
path: root/mips/mips_insts.sail
diff options
context:
space:
mode:
Diffstat (limited to 'mips/mips_insts.sail')
-rw-r--r--mips/mips_insts.sail16
1 files changed, 12 insertions, 4 deletions
diff --git a/mips/mips_insts.sail b/mips/mips_insts.sail
index d4459fb1..5827369e 100644
--- a/mips/mips_insts.sail
+++ b/mips/mips_insts.sail
@@ -1325,8 +1325,8 @@ function clause execute (MFC0(rt, rd, sel, double)) = {
{
case (0b00000,0b000) -> (0x00000000 : [TLBProbe] : 0x0000000 : TLBIndex) (* 0, TLB Index *)
case (0b00001,0b000) -> EXTZ(TLBRandom) (* 1, TLB Random *)
- case (0b00010,0b000) -> EXTZ(TLBEntryLo0)(* 2, TLB EntryLo0 *)
- case (0b00011,0b000) -> EXTZ(TLBEntryLo1)(* 3, TLB EntryLo1 *)
+ case (0b00010,0b000) -> TLBEntryLo0 (* 2, TLB EntryLo0 *)
+ case (0b00011,0b000) -> TLBEntryLo1 (* 3, TLB EntryLo1 *)
case (0b00100,0b000) -> TLBContext (* 4, TLB Context *)
case (0b00101,0b000) -> EXTZ(TLBPageMask : 0x000) (* 5, TLB PageMask *)
case (0b00110,0b000) -> EXTZ(TLBWired) (* 6, TLB Wired *)
@@ -1400,8 +1400,8 @@ function clause execute (MTC0(rt, rd, sel, double)) = {
{
case (0b00000,0b000) -> TLBIndex := mask(reg_val) (* NB no write to TLBProbe *)
case (0b00001,0b000) -> () (* TLBRandom is read only *)
- case (0b00010,0b000) -> TLBEntryLo0 := mask(reg_val)
- case (0b00011,0b000) -> TLBEntryLo1 := mask(reg_val)
+ case (0b00010,0b000) -> TLBEntryLo0 := reg_val
+ case (0b00011,0b000) -> TLBEntryLo1 := reg_val
case (0b00100,0b000) -> (TLBContext.PTEBase) := (reg_val[63..23])
case (0b00100,0b010) -> CP0UserLocal := reg_val
case (0b00101,0b000) -> TLBPageMask := (reg_val[28..13])
@@ -1464,10 +1464,14 @@ function unit TLBWriteEntry((TLBIndexT) idx) = {
((TLBEntries[idx]).asid ) := TLBEntryHi.ASID;
((TLBEntries[idx]).g ) := ((TLBEntryLo0.G) & (TLBEntryLo1.G));
((TLBEntries[idx]).valid ) := bitone;
+ ((TLBEntries[idx]).caps0 ) := TLBEntryLo0.CapS;
+ ((TLBEntries[idx]).capl0 ) := TLBEntryLo0.CapL;
((TLBEntries[idx]).pfn0 ) := TLBEntryLo0.PFN;
((TLBEntries[idx]).c0 ) := TLBEntryLo0.C;
((TLBEntries[idx]).d0 ) := TLBEntryLo0.D;
((TLBEntries[idx]).v0 ) := TLBEntryLo0.V;
+ ((TLBEntries[idx]).caps1 ) := TLBEntryLo1.CapS;
+ ((TLBEntries[idx]).capl1 ) := TLBEntryLo1.CapL;
((TLBEntries[idx]).pfn1 ) := TLBEntryLo1.PFN;
((TLBEntries[idx]).c1 ) := TLBEntryLo1.C;
((TLBEntries[idx]).d1 ) := TLBEntryLo1.D;
@@ -1497,11 +1501,15 @@ function clause execute (TLBR) = {
TLBEntryHi.R := entry.r;
TLBEntryHi.VPN2 := entry.vpn2;
TLBEntryHi.ASID := entry.asid;
+ TLBEntryLo0.CapS:= entry.caps0;
+ TLBEntryLo0.CapL:= entry.capl0;
TLBEntryLo0.PFN := entry.pfn0;
TLBEntryLo0.C := entry.c0;
TLBEntryLo0.D := entry.d0;
TLBEntryLo0.V := entry.v0;
TLBEntryLo0.G := entry.g;
+ TLBEntryLo1.CapS:= entry.caps1;
+ TLBEntryLo1.CapL:= entry.capl1;
TLBEntryLo1.PFN := entry.pfn1;
TLBEntryLo1.C := entry.c1;
TLBEntryLo1.D := entry.d1;