aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2019-04-01 12:20:11 +0200
committerCyril SIX <cyril.six@kalray.eu>2019-04-01 12:20:11 +0200
commit1036dcaa7a99870aa1859a9a1c683ad8f9b3b0d8 (patch)
tree7f31dc8f814d72ded2c36ac9be29d549e6f80ee8
parent3451ed469864c10b2fc5892d46dab08e57e68416 (diff)
downloadcompcert-kvx-1036dcaa7a99870aa1859a9a1c683ad8f9b3b0d8.tar.gz
compcert-kvx-1036dcaa7a99870aa1859a9a1c683ad8f9b3b0d8.zip
Using fixedd.rz in longofsingle instead of i64_dtos
-rw-r--r--mppa_k1c/SelectLong.vp5
-rw-r--r--mppa_k1c/SelectLongproof.v16
2 files changed, 13 insertions, 8 deletions
diff --git a/mppa_k1c/SelectLong.vp b/mppa_k1c/SelectLong.vp
index 0c3618d7..31112dca 100644
--- a/mppa_k1c/SelectLong.vp
+++ b/mppa_k1c/SelectLong.vp
@@ -364,10 +364,9 @@ Definition floatoflongu (e: expr) :=
if Archi.splitlong then SplitLong.floatoflongu e else
Eop Ofloatoflongu (e:::Enil).
-(* SplitLong.longofsingle splits the operation into (longoffloat (floatofsingle e)) *)
-Definition longofsingle (e: expr) := SplitLong.longofsingle e.
+Definition longofsingle (e: expr) := longoffloat (floatofsingle e).
-Definition longuofsingle (e: expr) := SplitLong.longuofsingle e.
+Definition longuofsingle (e: expr) := longuoffloat (floatofsingle e).
Definition singleoflong (e: expr) := SplitLong.singleoflong e.
diff --git a/mppa_k1c/SelectLongproof.v b/mppa_k1c/SelectLongproof.v
index 79187338..51b989d6 100644
--- a/mppa_k1c/SelectLongproof.v
+++ b/mppa_k1c/SelectLongproof.v
@@ -600,16 +600,22 @@ Qed.
Theorem eval_longofsingle: partial_unary_constructor_sound longofsingle Val.longofsingle.
Proof.
- unfold longofsingle; red; intros. (* destruct Archi.splitlong eqn:SL. *)
- eapply SplitLongproof.eval_longofsingle; eauto.
-(* TrivialExists. *)
+ unfold longofsingle; red; intros.
+ destruct x; simpl in H0; inv H0. destruct (Float32.to_long f) as [n|] eqn:EQ; simpl in H2; inv H2.
+ exploit eval_floatofsingle; eauto. intros (v & A & B). simpl in B. inv B.
+ apply Float32.to_long_double in EQ.
+ eapply eval_longoffloat; eauto. simpl.
+ change (Float.of_single f) with (Float32.to_double f); rewrite EQ; auto.
Qed.
Theorem eval_longuofsingle: partial_unary_constructor_sound longuofsingle Val.longuofsingle.
Proof.
unfold longuofsingle; red; intros. (* destruct Archi.splitlong eqn:SL. *)
- eapply SplitLongproof.eval_longuofsingle; eauto.
-(* TrivialExists. *)
+ destruct x; simpl in H0; inv H0. destruct (Float32.to_longu f) as [n|] eqn:EQ; simpl in H2; inv H2.
+ exploit eval_floatofsingle; eauto. intros (v & A & B). simpl in B. inv B.
+ apply Float32.to_longu_double in EQ.
+ eapply eval_longuoffloat; eauto. simpl.
+ change (Float.of_single f) with (Float32.to_double f); rewrite EQ; auto.
Qed.
Theorem eval_singleoflong: partial_unary_constructor_sound singleoflong Val.singleoflong.