aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Selectionproof.v
diff options
context:
space:
mode:
authorxleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2014-07-23 08:54:56 +0000
committerxleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2014-07-23 08:54:56 +0000
commit2a0168fea37b68ad14e2cb60bf215111e49d4870 (patch)
tree2f59373790d8ce3a5df66ef7a692271cf0666c6c /backend/Selectionproof.v
parent00805153cf9b88aa07cc6694b17d93f5ba2e7de8 (diff)
downloadcompcert-kvx-2a0168fea37b68ad14e2cb60bf215111e49d4870.tar.gz
compcert-kvx-2a0168fea37b68ad14e2cb60bf215111e49d4870.zip
Merge of "newspilling" branch:
- Support single-precision floats as first-class values - Introduce chunks Many32, Many64 and types Tany32, Tany64 to support saving and restoring registers without knowing the exact types (int/single/float) of their contents, just their sizes. - Memory model: generalize the opaque encoding of pointers to apply to any value, not just pointers, if chunks Many32/Many64 are selected. - More properties of FP arithmetic proved. git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2537 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'backend/Selectionproof.v')
-rw-r--r--backend/Selectionproof.v15
1 files changed, 15 insertions, 0 deletions
diff --git a/backend/Selectionproof.v b/backend/Selectionproof.v
index 175b025c..55977b47 100644
--- a/backend/Selectionproof.v
+++ b/backend/Selectionproof.v
@@ -191,11 +191,18 @@ Proof.
apply eval_notint; auto.
apply eval_negf; auto.
apply eval_absf; auto.
+ apply eval_negfs; auto.
+ apply eval_absfs; auto.
apply eval_singleoffloat; auto.
+ apply eval_floatofsingle; auto.
eapply eval_intoffloat; eauto.
eapply eval_intuoffloat; eauto.
eapply eval_floatofint; eauto.
eapply eval_floatofintu; eauto.
+ eapply eval_intofsingle; eauto.
+ eapply eval_intuofsingle; eauto.
+ eapply eval_singleofint; eauto.
+ eapply eval_singleofintu; eauto.
eapply eval_negl; eauto.
eapply eval_notl; eauto.
eapply eval_intoflong; eauto.
@@ -205,6 +212,8 @@ Proof.
eapply eval_longuoffloat; eauto.
eapply eval_floatoflong; eauto.
eapply eval_floatoflongu; eauto.
+ eapply eval_longofsingle; eauto.
+ eapply eval_longuofsingle; eauto.
eapply eval_singleoflong; eauto.
eapply eval_singleoflongu; eauto.
Qed.
@@ -234,6 +243,10 @@ Proof.
apply eval_subf; auto.
apply eval_mulf; auto.
apply eval_divf; auto.
+ apply eval_addfs; auto.
+ apply eval_subfs; auto.
+ apply eval_mulfs; auto.
+ apply eval_divfs; auto.
eapply eval_addl; eauto.
eapply eval_subl; eauto.
eapply eval_mull; eauto.
@@ -250,6 +263,7 @@ Proof.
apply eval_comp; auto.
apply eval_compu; auto.
apply eval_compf; auto.
+ apply eval_compfs; auto.
exists v; split; auto. eapply eval_cmpl; eauto.
exists v; split; auto. eapply eval_cmplu; eauto.
Qed.
@@ -377,6 +391,7 @@ Proof.
destruct cst; simpl in *; inv H.
exists (Vint i); split; auto. econstructor. constructor. auto.
exists (Vfloat f); split; auto. econstructor. constructor. auto.
+ exists (Vsingle f); split; auto. econstructor. constructor. auto.
exists (Val.longofwords (Vint (Int64.hiword i)) (Vint (Int64.loword i))); split.
eapply eval_Eop. constructor. EvalOp. simpl; eauto. constructor. EvalOp. simpl; eauto. constructor. auto.
simpl. rewrite Int64.ofwords_recompose. auto.