summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBrian Campbell2020-07-02 16:20:50 +0100
committerBrian Campbell2020-07-02 16:21:03 +0100
commit7d815832a9410a3975c6ec8438556916eab493eb (patch)
tree1fa75d0756b62e687c7f9059f08b15a3cefb9ffd /lib
parentdf8429663a598d75853195d6552dda0e279e711f (diff)
Define extz/s_vec in Sail for non-prover backends
Diffstat (limited to 'lib')
-rw-r--r--lib/mono_rewrites.sail10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/mono_rewrites.sail b/lib/mono_rewrites.sail
index 0702b374..1e7fe58f 100644
--- a/lib/mono_rewrites.sail
+++ b/lib/mono_rewrites.sail
@@ -8,9 +8,15 @@ $include <vector_dec.sail>
/* External definitions not in the usual asl prelude */
-val extzv = "extz_vec" : forall 'n 'm. (implicit('m), bitvector('n, dec)) -> bitvector('m, dec) effect pure
+val extzv = {lem: "extz_vec", coq: "extz_vec"} : forall 'n 'm, 'm >= 0. (implicit('m), bitvector('n, dec)) -> bitvector('m, dec) effect pure
+function extzv(m, v) = {
+ if m < 'n then truncate(v, m) else sail_zero_extend(v, m)
+}
-val extsv = "exts_vec" : forall 'n 'm. (implicit('m), bitvector('n, dec)) -> bitvector('m, dec) effect pure
+val extsv = {lem: "exts_vec", coq: "exts_vec"} : forall 'n 'm, 'm >= 0. (implicit('m), bitvector('n, dec)) -> bitvector('m, dec) effect pure
+function extsv(m, v) = {
+ if m < 'n then truncate(v, m) else sail_sign_extend(v, m)
+}
/* This is generated internally to deal with case splits which reveal the size
of a bitvector */