summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/arith.sail4
-rw-r--r--src/value.ml5
2 files changed, 7 insertions, 2 deletions
diff --git a/lib/arith.sail b/lib/arith.sail
index 8825ac2f..20231de1 100644
--- a/lib/arith.sail
+++ b/lib/arith.sail
@@ -94,7 +94,7 @@ val mod_int = {
lem: "integerMod",
c: "tmod_int",
coq: "Z.rem"
-} : (int, int) -> int
+} : (int, int) -> nat
overload operator % = {mod_int}
@@ -104,6 +104,6 @@ val abs_int = {
lem: "abs_int",
c: "abs_int",
coq: "Z.abs"
-} : (int, int) -> int
+} : int -> int
$endif
diff --git a/src/value.ml b/src/value.ml
index 729b3974..8f8e651a 100644
--- a/src/value.ml
+++ b/src/value.ml
@@ -331,6 +331,10 @@ let value_modulus = function
| [v1; v2] -> V_int (Sail_lib.modulus (coerce_int v1, coerce_int v2))
| _ -> failwith "value modulus"
+let value_abs_int = function
+ | [v] -> V_int (Big_int.abs (coerce_int v))
+ | _ -> failwith "value abs_int"
+
let value_add_vec_int = function
| [v1; v2] -> mk_vector (Sail_lib.add_vec_int (coerce_bv v1, coerce_int v2))
| _ -> failwith "value add_vec_int"
@@ -630,6 +634,7 @@ let primops =
("shl_int", value_shl_int);
("max_int", value_max_int);
("min_int", value_min_int);
+ ("abs_int", value_abs_int);
("add_vec_int", value_add_vec_int);
("sub_vec_int", value_sub_vec_int);
("add_vec", value_add_vec);