aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@college-de-france.fr>2020-07-25 10:38:18 +0200
committerXavier Leroy <xavierleroy@users.noreply.github.com>2020-07-27 16:29:38 +0200
commit4cf2fc41657fac51d806c14fdf481c7047e39df3 (patch)
tree0b48bd146bb6032ae0048aa7aee0c8ecef234580
parent465f6b4120bb38d2ef2871de4972df92ee935ed6 (diff)
downloadcompcert-kvx-4cf2fc41657fac51d806c14fdf481c7047e39df3.tar.gz
compcert-kvx-4cf2fc41657fac51d806c14fdf481c7047e39df3.zip
Add support for __builtin_fabsf
-rw-r--r--backend/Selection.v2
-rw-r--r--backend/Selectionproof.v4
-rw-r--r--cfrontend/C2C.ml2
-rw-r--r--common/Builtins0.v5
4 files changed, 13 insertions, 0 deletions
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 _ _