From 1036dcaa7a99870aa1859a9a1c683ad8f9b3b0d8 Mon Sep 17 00:00:00 2001 From: Cyril SIX Date: Mon, 1 Apr 2019 12:20:11 +0200 Subject: Using fixedd.rz in longofsingle instead of i64_dtos --- mppa_k1c/SelectLong.vp | 5 ++--- mppa_k1c/SelectLongproof.v | 16 +++++++++++----- 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. -- cgit