From 595dd4745cd0aa2ba4fd32f9ff7fca8454ab52e4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Thu, 26 Mar 2020 18:33:40 +0100
Subject: [PATCH] [eval] support for float builtins

---
 src/plugins/value/legacy/eval_terms.ml | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/plugins/value/legacy/eval_terms.ml b/src/plugins/value/legacy/eval_terms.ml
index 995160e3482..0ae0bdbcced 100644
--- a/src/plugins/value/legacy/eval_terms.ml
+++ b/src/plugins/value/legacy/eval_terms.ml
@@ -720,6 +720,16 @@ let known_logic_funs = [
   "\\sign", ACSL;
   "\\min", ACSL;
   "\\max", ACSL;
+  "\\neg_float",ACSL;
+  "\\add_float",ACSL;
+  "\\sub_float",ACSL;
+  "\\mul_float",ACSL;
+  "\\div_float",ACSL;
+  "\\neg_double",ACSL;
+  "\\add_double",ACSL;
+  "\\sub_double",ACSL;
+  "\\mul_double",ACSL;
+  "\\div_double",ACSL;
 ]
 let known_predicates = [
   "\\warning", ACSL;
@@ -1354,11 +1364,13 @@ and eval_known_logic_function ~alarm_mode env li labels args =
     eval_logic_charchr builtin
       { env with e_cur = lbl } s.eover c.eover s.ldeps c.ldeps
 
-  | ("atan2" | "atan2f" | "fmod" | "fmodf" | "pow" | "powf"),
+  | ( "atan2" | "atan2f" | "fmod" | "fmodf" | "pow" | "powf"
+    | "\\add_float" | "\\sub_float" | "\\mul_float" | "\\div_float"
+    | "\\add_double" | "\\sub_double" | "\\mul_double" | "\\div_double" ),
     _, _, [arg1; arg2] ->
     eval_float_builtin_arity2 ~alarm_mode env lvi.lv_name arg1 arg2
 
-  | ("sqrt" | "sqrtf"),_,_, [arg] ->
+  | ( "sqrt" | "sqrtf" | "\\neg_float" | "\\neg_double" ),_,_, [arg] ->
     eval_float_builtin_arity1 ~alarm_mode env lvi.lv_name arg
 
   | "\\sign", _, _, [arg] ->
@@ -1410,6 +1422,14 @@ and eval_float_builtin_arity2  ~alarm_mode env name arg1 arg2 =
     | "fmodf" ->  Fval.fmod  Fval.Single
     | "pow" ->    Fval.pow   Fval.Double
     | "powf" ->   Fval.pow   Fval.Single
+    | "\\add_float" -> Fval.add Fval.Single
+    | "\\sub_float" -> Fval.sub Fval.Single
+    | "\\mul_float" -> Fval.mul Fval.Single
+    | "\\div_float" -> Fval.div Fval.Single
+    | "\\add_double" -> Fval.add Fval.Double
+    | "\\sub_double" -> Fval.sub Fval.Double
+    | "\\mul_double" -> Fval.mul Fval.Double
+    | "\\div_double" -> Fval.div Fval.Double
     | _ -> assert false
   in
   let r1 = eval_term ~alarm_mode env arg1 in
@@ -1432,6 +1452,7 @@ and eval_float_builtin_arity1  ~alarm_mode env name arg =
   let fcaml = match name with
     | "sqrt" ->   Fval.sqrt  Fval.Double
     | "sqrtf" ->  Fval.sqrt  Fval.Single
+    | "\\neg_float" | "\\neg_double" ->  Fval.neg
     | _ -> assert false
   in
   let r = eval_term ~alarm_mode env arg in
-- 
GitLab