summaryrefslogtreecommitdiff
path: root/risc-v/riscv_extras_embed_sequential.lem
diff options
context:
space:
mode:
authorRobert Norton2017-08-08 14:11:57 +0100
committerRobert Norton2017-08-08 14:12:25 +0100
commitad0d53e799c0a3dcb2548a42554d5dcae7de5a01 (patch)
treee442098ea9def6f9a097767dd05708837d870762 /risc-v/riscv_extras_embed_sequential.lem
parentbe571f711102cd6659257e5ee1de3b708ebee6ab (diff)
work on integrating risc-v model with rmem (incomplete).
Diffstat (limited to 'risc-v/riscv_extras_embed_sequential.lem')
-rw-r--r--risc-v/riscv_extras_embed_sequential.lem34
1 files changed, 34 insertions, 0 deletions
diff --git a/risc-v/riscv_extras_embed_sequential.lem b/risc-v/riscv_extras_embed_sequential.lem
new file mode 100644
index 00000000..7fb62161
--- /dev/null
+++ b/risc-v/riscv_extras_embed_sequential.lem
@@ -0,0 +1,34 @@
+open import Pervasives
+open import Pervasives_extra
+open import Sail_impl_base
+open import Sail_values
+open import State
+
+val MEMr : (vector bitU * integer) -> M (vector bitU)
+val MEMr_reserve : (vector bitU * integer) -> M (vector bitU)
+
+let MEMr (addr,size) = read_mem false Read_plain addr size
+let MEMr_reserve (addr,size) = read_mem false Read_reserve addr size
+
+val MEMea : (vector bitU * integer) -> M unit
+val MEMea_conditional : (vector bitU * integer) -> M unit
+
+let MEMea (addr,size) = write_mem_ea Write_plain addr size
+let MEMea_conditional (addr,size) = write_mem_ea Write_conditional addr size
+
+
+val MEMval : (vector bitU * integer * vector bitU) -> M unit
+val MEMval_conditional : (vector bitU * integer * vector bitU) -> M bitU
+
+let MEMval (_,_,v) = write_mem_val v >>= fun _ -> return ()
+let MEMval_conditional (_,_,v) = write_mem_val v >>= fun b -> return (if b then B1 else B0)
+
+val MEM_sync : unit -> M unit
+
+let MEM_sync () = barrier Barrier_MIPS_SYNC
+
+
+let duplicate (bit,len) =
+ let bits = repeat [bit] len in
+ let start = len - 1 in
+ Vector bits start false