summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKathy Gray2016-02-04 13:11:41 +0000
committerKathy Gray2016-02-04 13:11:41 +0000
commit18df38a268b17d9a9b9b284efd8065951a702040 (patch)
treefbf1715261589ab359db2fd5955d7ed71e1e1f29
parent6a6ac097204ca9c7dffe6bd8bda2f970fac7876b (diff)
Add mod_s
-rw-r--r--src/lem_interp/interp_lib.lem2
-rw-r--r--src/type_internal.ml22
2 files changed, 24 insertions, 0 deletions
diff --git a/src/lem_interp/interp_lib.lem b/src/lem_interp/interp_lib.lem
index 03c59edf..d494ab12 100644
--- a/src/lem_interp/interp_lib.lem
+++ b/src/lem_interp/interp_lib.lem
@@ -688,6 +688,8 @@ let library_functions direction = [
("modulo", arith_op_no0 (mod));
("mod_vec", arith_op_vec_no0 hardware_mod "mod" Unsigned 1);
("mod_vec_range", arith_op_vec_range_no0 hardware_mod "mod" Unsigned 1);
+ ("mod_signed_vec", arith_op_vec_no0 hardware_mod "mod" Signed 1);
+ ("mod_signed_vec_range", arith_op_vec_range_no0 hardware_mod "mod" Signed 1);
("quot", arith_op_no0 hardware_quot);
("quot_signed", arith_op_no0 hardware_quot);
("quot_vec", arith_op_vec_no0 hardware_quot "quot" Unsigned 1);
diff --git a/src/type_internal.ml b/src/type_internal.ml
index 95c9c245..7ef085b9 100644
--- a/src/type_internal.ml
+++ b/src/type_internal.ml
@@ -1963,6 +1963,28 @@ let initial_typ_env =
mk_vector bit_t (Ovar "ord") (mk_nv "n") (mk_nv "m")])
(mk_vector bit_t (Ovar "ord") (mk_nv "n") (mk_nv "m")))),
(External (Some "mod_vec")),[],pure_e,pure_e,nob)]));
+ ("mod_s",
+ Overload(
+ Base(((mk_typ_params ["a";"b";"c"]),
+ (mk_pure_fun (mk_tup [{t=Tvar "a"};{t=Tvar "b"}]) {t=Tvar "c"})),
+ (External (Some "modulo")),[],pure_e,pure_e,nob),
+ true,
+ [Base(((mk_nat_params["n";"o";]),
+ (mk_pure_fun (mk_tup [mk_atom (mk_nv "n") ; mk_atom (mk_nv "o")])
+ (mk_range n_zero (mk_sub (mk_nv "o") n_one)))),
+ (External (Some "modulo")),
+ [GtEq(Specc(Parse_ast.Int("modulo",None)),Require,(mk_nv "o"),n_one)],pure_e,pure_e,nob);
+ Base(((mk_nat_params["n";"m";"o"])@(mk_ord_params["ord"]),
+ (mk_pure_fun (mk_tup [mk_vector bit_t (Ovar "ord") (mk_nv "n") (mk_nv "m");
+ mk_range n_one (mk_nv "o")])
+ (mk_vector bit_t (Ovar "ord") (mk_nv "n") (mk_nv "m")))),
+ (External (Some "mod_signed_vec_range")),
+ [GtEq(Specc(Parse_ast.Int("mod",None)),Require,(mk_nv "o"),n_one);],pure_e,pure_e,nob);
+ Base(((mk_nat_params["n";"m"])@(mk_ord_params["ord"]),
+ (mk_pure_fun (mk_tup [mk_vector bit_t (Ovar "ord") (mk_nv "n") (mk_nv "m");
+ mk_vector bit_t (Ovar "ord") (mk_nv "n") (mk_nv "m")])
+ (mk_vector bit_t (Ovar "ord") (mk_nv "n") (mk_nv "m")))),
+ (External (Some "mod_signed_vec")),[],pure_e,pure_e,nob)]));
("quot",
Overload(
Base(((mk_typ_params ["a";"b";"c"]),