summaryrefslogtreecommitdiff
path: root/src/lem_interp/interp_lib.lem
diff options
context:
space:
mode:
Diffstat (limited to 'src/lem_interp/interp_lib.lem')
-rw-r--r--src/lem_interp/interp_lib.lem9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/lem_interp/interp_lib.lem b/src/lem_interp/interp_lib.lem
index 674991a5..c1267fc6 100644
--- a/src/lem_interp/interp_lib.lem
+++ b/src/lem_interp/interp_lib.lem
@@ -125,6 +125,14 @@ let is_one v =
| V_unknown -> v
end ;;
+let rec most_significant v =
+ retaint v
+ match detaint v with
+ | V_vector _ _ (v::vs) -> v
+ | V_vector_sparse _ _ _ _ _ -> most_significant (fill_in_sparse v)
+ | V_unknown -> V_unknown
+end;;
+
let lt_range (V_tuple[v1;v2]) =
let lr_helper v1 v2 = match (v1,v2) with
| (V_lit (L_aux (L_num l1) lr),V_lit (L_aux (L_num l2) ll)) ->
@@ -737,6 +745,7 @@ let library_functions direction = [
("gtu", compare_op_vec_unsigned (>));
("duplicate", duplicate direction);
("mask", mask direction);
+ ("most_significant", most_significant);
] ;;
let eval_external name v = match List.lookup name (library_functions IInc) with