From 8dc7935d45f35067e991d8ef6bf0f32626b73910 Mon Sep 17 00:00:00 2001
From: Allan Blanchard <allan.blanchard@cea.fr>
Date: Mon, 2 Mar 2020 14:06:42 +0100
Subject: [PATCH] [wp] Supports sqrt/f

---
 src/plugins/wp/Cfloat.ml | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/plugins/wp/Cfloat.ml b/src/plugins/wp/Cfloat.ml
index 9cd459232e2..39c437ff77f 100644
--- a/src/plugins/wp/Cfloat.ml
+++ b/src/plugins/wp/Cfloat.ml
@@ -57,6 +57,7 @@ let fq64 = extern_f ~library ~result:t64 ~link:(link "to_f64") "q64"
 let f_model ft = extern_f ~library ~result:(ftau ft) "model_%a" pp_suffix ft
 let f_delta ft = extern_f ~library ~result:(ftau ft) "delta_%a" pp_suffix ft
 let f_epsilon ft = extern_f ~library ~result:(ftau ft) "epsilon_%a" pp_suffix ft
+let f_sqrt ft = extern_f ~library ~result:(ftau ft) "sqrt_%a" pp_suffix ft
 
 (* -------------------------------------------------------------------------- *)
 (* --- Model Setting                                                      --- *)
@@ -385,12 +386,20 @@ let () = Context.register
 (* --- Models                                                             --- *)
 (* -------------------------------------------------------------------------- *)
 
+let register_c_acsl_builtin name lfun ft =
+  let name = match ft with
+    | Float32 -> name ^ "f"
+    | Float64 -> name
+  in
+  LogicBuiltins.add_builtin name [F ft] (lfun ft)
+
 let () =
   let open LogicBuiltins in
   let register_builtin ft =
     add_builtin "\\model" [F ft] (f_model ft) ;
     add_builtin "\\delta" [F ft] (f_delta ft) ;
     add_builtin "\\epsilon" [F ft] (f_epsilon ft) ;
+    register_c_acsl_builtin "sqrt" f_sqrt ft
   in
   register_builtin Float32 ;
   register_builtin Float64
-- 
GitLab