From 4cf2fc41657fac51d806c14fdf481c7047e39df3 Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Sat, 25 Jul 2020 10:38:18 +0200 Subject: Add support for __builtin_fabsf --- backend/Selection.v | 2 ++ backend/Selectionproof.v | 4 ++++ cfrontend/C2C.ml | 2 ++ common/Builtins0.v | 5 +++++ 4 files changed, 13 insertions(+) diff --git a/backend/Selection.v b/backend/Selection.v index 480b09a2..a5bef9ae 100644 --- a/backend/Selection.v +++ b/backend/Selection.v @@ -248,6 +248,8 @@ Function sel_known_builtin (bf: builtin_function) (args: exprlist) := Some (sel_select ty a1 a2 a3) | BI_standard BI_fabs, a1 ::: Enil => Some (SelectOp.absf a1) + | BI_standard BI_fabsf, a1 ::: Enil => + Some (SelectOp.absfs a1) | _, _ => None end. diff --git a/backend/Selectionproof.v b/backend/Selectionproof.v index a66bcf81..987926aa 100644 --- a/backend/Selectionproof.v +++ b/backend/Selectionproof.v @@ -394,6 +394,10 @@ Proof. inv ARGS; try discriminate. inv H0; try discriminate. inv SEL. simpl in SEM; inv SEM. apply eval_absf; auto. ++ (* fabsf *) + inv ARGS; try discriminate. inv H0; try discriminate. + inv SEL. + simpl in SEM; inv SEM. apply eval_absfs; auto. - eapply eval_platform_builtin; eauto. Qed. diff --git a/cfrontend/C2C.ml b/cfrontend/C2C.ml index 7f796fe3..75eeaf21 100644 --- a/cfrontend/C2C.ml +++ b/cfrontend/C2C.ml @@ -183,6 +183,8 @@ let builtins_generic = { (* Floating-point absolute value *) "__builtin_fabs", (TFloat(FDouble, []), [TFloat(FDouble, [])], false); + "__builtin_fabsf", + (TFloat(FFloat, []), [TFloat(FFloat, [])], false); (* Float arithmetic *) "__builtin_fsqrt", (TFloat(FDouble, []), [TFloat(FDouble, [])], false); diff --git a/common/Builtins0.v b/common/Builtins0.v index 8da98314..4afe6f1a 100644 --- a/common/Builtins0.v +++ b/common/Builtins0.v @@ -332,6 +332,7 @@ End LOOKUP. Inductive standard_builtin : Type := | BI_select (t: typ) | BI_fabs + | BI_fabsf | BI_fsqrt | BI_negl | BI_addl @@ -364,6 +365,7 @@ Definition standard_builtin_table : list (string * standard_builtin) := :: ("__builtin_sel", BI_select Tfloat) :: ("__builtin_sel", BI_select Tsingle) :: ("__builtin_fabs", BI_fabs) + :: ("__builtin_fabsf", BI_fabsf) :: ("__builtin_fsqrt", BI_fsqrt) :: ("__builtin_negl", BI_negl) :: ("__builtin_addl", BI_addl) @@ -396,6 +398,8 @@ Definition standard_builtin_sig (b: standard_builtin) : signature := mksignature (Tint :: t :: t :: nil) t cc_default | BI_fabs | BI_fsqrt => mksignature (Tfloat :: nil) Tfloat cc_default + | BI_fabsf => + mksignature (Tsingle :: nil) Tsingle cc_default | BI_negl => mksignature (Tlong :: nil) Tlong cc_default | BI_addl | BI_subl | BI_i64_umulh| BI_i64_smulh @@ -428,6 +432,7 @@ Program Definition standard_builtin_sem (b: standard_builtin) : builtin_sem (sig | _ => None end) _ _ | BI_fabs => mkbuiltin_n1t Tfloat Tfloat Float.abs + | BI_fabsf => mkbuiltin_n1t Tsingle Tsingle Float32.abs | BI_fsqrt => mkbuiltin_n1t Tfloat Tfloat Float.sqrt | BI_negl => mkbuiltin_n1t Tlong Tlong Int64.neg | BI_addl => mkbuiltin_v2t Tlong Val.addl _ _ -- cgit