summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Norton2016-05-13 17:06:50 +0100
committerRobert Norton2016-05-13 17:06:50 +0100
commit4bd42c3b77cc37e12ab74332849fe6941f981021 (patch)
treee2533bd04a04a5c425dc4901849d8e9822963b1e
parentbb8bee18b67ba87a875d648d166aa474794d5123 (diff)
implement config registers.
-rw-r--r--cheri/cheri_prelude.sail1
-rw-r--r--mips/mips_insts.sail38
-rw-r--r--mips/mips_wrappers.sail2
3 files changed, 35 insertions, 6 deletions
diff --git a/cheri/cheri_prelude.sail b/cheri/cheri_prelude.sail
index 0cb2a1f3..fd2e195d 100644
--- a/cheri/cheri_prelude.sail
+++ b/cheri/cheri_prelude.sail
@@ -119,6 +119,7 @@ let (CapStruct) null_cap = {
let (nat) max_otype = 0xffffff
def Nat cap_size_t = 32 (* cap size in bytes *)
let ([:cap_size_t:]) cap_size = 32
+let have_cp2 = true
function CapStruct capRegToCapStruct((CapReg) capReg) =
{
diff --git a/mips/mips_insts.sail b/mips/mips_insts.sail
index ba0dc258..a265bd13 100644
--- a/mips/mips_insts.sail
+++ b/mips/mips_insts.sail
@@ -1344,13 +1344,39 @@ function clause execute (MFC0(rt, rd, sel, double)) = {
case (0b01111,0b111) -> 0 (* 15, sel 7: CHERI thread ID *)
case (0b10000,0b000) -> EXTZ(0b1 (* M *) (* 16, sel 0: Config0 *)
: 0b000000000000000 (* Impl *)
- : 0b1 (* BE *)
- : 0b10 (* AT *)
- : 0b000 (* AR *)
- : 0b000 (* MT no MMU *)
- : 0b0000 (* zero *)
+ : 0b1 (* BE *)
+ : 0b10 (* AT *)
+ : 0b000 (* AR *)
+ : 0b000 (* MT no MMU *)
+ : 0b0000 (* zero *)
: 0b000) (* K0 TODO should be writable*)
- case (0b10000,0b001) -> 0 (* 16, sel 1: Config1 *)
+ case (0b10000,0b001) -> EXTZ( (* 16, sel 1: Config1 *)
+ 0b1 (* M *)
+ : 0b000000 (* MMU size-1 *)
+ : 0b000 (* IS icache sets *)
+ : 0b000 (* IL icache lines *)
+ : 0b000 (* IA icache assoc. *)
+ : 0b000 (* DS dcache sets *)
+ : 0b000 (* DL dcache lines *)
+ : 0b000 (* DA dcache assoc. *)
+ : [have_cp2] (* C2 CP2 presence *)
+ : 0b0 (* MD MDMX implemented *)
+ : 0b0 (* PC performance counters *)
+ : 0b0 (* WR watch registers *)
+ : 0b0 (* CA 16e code compression *)
+ : 0b0 (* EP EJTAG *)
+ : 0b0) (* FP FPU present *)
+ case (0b10000,0b010) -> EXTZ( (* 16, sel 2: Config2 *)
+ 0b1 (* M *)
+ : 0b000 (* TU L3 control *)
+ : 0b0000 (* TS L3 sets *)
+ : 0b0000 (* TL L3 lines *)
+ : 0b0000 (* TA L3 assoc. *)
+ : 0b0000 (* SU L2 control *)
+ : 0b0000 (* SS L2 sets *)
+ : 0b0000 (* SL L2 lines *)
+ : 0b0000) (* SA L2 assoc. *)
+ case (0b10000,0b011) -> 0x0000000000002000 (* 16, sel 3: Config3 zero except for bit 13 == ulri *)
case (0b10001,0b000) -> CP0LLAddr (* 17, sel 0: LLAddr *)
case (0b10010,0b000) -> 0 (* 18, WatchLo *)
case (0b10011,0b000) -> 0 (* 19, WatchHi *)
diff --git a/mips/mips_wrappers.sail b/mips/mips_wrappers.sail
index 7d9e73e6..08ce944b 100644
--- a/mips/mips_wrappers.sail
+++ b/mips/mips_wrappers.sail
@@ -13,6 +13,8 @@ function (bit[64]) TranslateAddress ((bit[64]) vAddr, (MemAccessType) accessType
TLBTranslate(vAddr, accessType)
}
+let have_cp2 = false
+
function unit SignalException ((Exception) ex) = SignalExceptionMIPS(ex)
function unit ERETHook() = ()