summaryrefslogtreecommitdiff
path: root/aarch64/mono/_slice.sail
diff options
context:
space:
mode:
authorBrian Campbell2018-02-16 15:57:27 +0000
committerBrian Campbell2018-02-16 15:58:21 +0000
commitd864aa242ac00ecee08d6d2792a0803ba5450d86 (patch)
tree8a7ee43bff6dc10cc3a48cac871ddbe78b74bf97 /aarch64/mono/_slice.sail
parent00ca0aa4dce0abdcba574ce907e9a8a62d9d2255 (diff)
Add alternative definitions of aarch64 functions for monomorphisation
Diffstat (limited to 'aarch64/mono/_slice.sail')
-rw-r--r--aarch64/mono/_slice.sail35
1 files changed, 35 insertions, 0 deletions
diff --git a/aarch64/mono/_slice.sail b/aarch64/mono/_slice.sail
new file mode 100644
index 00000000..2bac9f8c
--- /dev/null
+++ b/aarch64/mono/_slice.sail
@@ -0,0 +1,35 @@
+val IsZero_slice : forall 'n, 'n >= 0.
+ (bits('n), int, int) -> bool effect {escape}
+
+function IsZero_slice (xs, i, 'l) = {
+ assert(constraint('l >= 0));
+ IsZero(xs & slice_mask(i, l))
+}
+
+val IsOnes_slice : forall 'n, 'n >= 0.
+ (bits('n), int, int) -> bool effect {escape}
+
+function IsOnes_slice (xs, i, 'l) = {
+ assert(constraint('l >= 0));
+ let m : bits('n) = slice_mask(i,l) in
+ (xs & m) == m
+}
+
+val ZeroExtend_slice_append : forall 'n 'm 'o, 'n >= 0 & 'm >= 0 & 'o >= 0.
+ (bits('n), int, int, bits('m)) -> bits('o) effect {escape}
+
+function ZeroExtend_slice_append (xs, i, 'l, ys) = {
+ assert(constraint('l >= 0));
+ let xs = xs & slice_mask(i,l) in
+ let xs : bits('o) = ZeroExtend(xs >> i) << 'm in
+ let ys : bits('o) = ZeroExtend(ys) in
+ xs | ys
+}
+
+val IsZero_slice2 : forall 'n, 'n >= 0.
+ (bits('n), int, int) -> bool effect {escape}
+
+function IsZero_slice2 (xs, i, 'l) = {
+ assert(constraint('l >= 0));
+ IsZero(xs & slice_mask(i, l))
+}