summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Norton2018-03-02 13:42:22 +0000
committerRobert Norton2018-03-02 13:44:11 +0000
commitbfb7331e0d1df763e51c59016f9d42e1ff7f90c5 (patch)
treeca4fb6518f9e8472b493d6e0a7b27209f5a89296
parent38ea40a8c9764fa6600141f5ec13d4b5c81d80b7 (diff)
add a cp2_next_pc function to update cheri state in fde loop and a stub version for mips.
-rw-r--r--cheri/cheri_prelude_common.sail9
-rw-r--r--mips_new_tc/main.sail3
-rw-r--r--mips_new_tc/mips_prelude.sail1
-rw-r--r--mips_new_tc/mips_wrappers.sail1
4 files changed, 13 insertions, 1 deletions
diff --git a/cheri/cheri_prelude_common.sail b/cheri/cheri_prelude_common.sail
index c11bfc8d..02a6d408 100644
--- a/cheri/cheri_prelude_common.sail
+++ b/cheri/cheri_prelude_common.sail
@@ -391,6 +391,15 @@ function init_cp2_state () = {
}
}
+function cp2_next_pc () = {
+ PCC = nextPCC;
+ if inBranchDelay then {
+ nextPCC = delayedPCC;
+ } else {
+ inCCallDelay = 0b0;
+ };
+}
+
val capToString : CapStruct -> string
function capToString cap =
concat_str(" t:",
diff --git a/mips_new_tc/main.sail b/mips_new_tc/main.sail
index 71beb582..ee77f4dc 100644
--- a/mips_new_tc/main.sail
+++ b/mips_new_tc/main.sail
@@ -8,7 +8,8 @@ function fetch_and_execute () = {
inBranchDelay = branchPending;
branchPending = 0b0;
nextPC = if inBranchDelay then delayedPC else PC + 4;
-
+ cp2_next_pc();
+
print_bits("PC: ", PC);
try {
let pc_pa = TranslatePC(PC);
diff --git a/mips_new_tc/mips_prelude.sail b/mips_new_tc/mips_prelude.sail
index d1302c52..9927d20e 100644
--- a/mips_new_tc/mips_prelude.sail
+++ b/mips_new_tc/mips_prelude.sail
@@ -615,4 +615,5 @@ function init_cp0_state () : unit -> unit = {
}
val init_cp2_state : unit -> unit effect {wreg}
+val cp2_next_pc: unit -> unit effect {rreg, wreg}
val dump_cp2_state : unit -> unit effect {rreg} \ No newline at end of file
diff --git a/mips_new_tc/mips_wrappers.sail b/mips_new_tc/mips_wrappers.sail
index bbb99e17..2e67a880 100644
--- a/mips_new_tc/mips_wrappers.sail
+++ b/mips_new_tc/mips_wrappers.sail
@@ -82,4 +82,5 @@ val ERETHook : unit -> unit
function ERETHook() = ()
function init_cp2_state () = skip_wreg()
+function cp2_next_pc() = {skip_wreg(); skip_rreg()}
function dump_cp2_state () = skip_rreg()