diff options
author | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-03-22 09:51:56 +0100 |
---|---|---|
committer | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-03-22 09:51:56 +0100 |
commit | 5281141d38a492eea3e080e087b91a314b0be020 (patch) | |
tree | c27e1da95d37abc1a14839c0bfb26fd2dd102077 /arm | |
parent | 1fd8a013a4fa57fcfa6c9e295638871153e596ee (diff) | |
download | compcert-kvx-5281141d38a492eea3e080e087b91a314b0be020.tar.gz compcert-kvx-5281141d38a492eea3e080e087b91a314b0be020.zip |
ARM repasse
Diffstat (limited to 'arm')
-rw-r--r-- | arm/SelectLong.vp | 2 | ||||
-rw-r--r-- | arm/SelectLongproof.v | 1 | ||||
-rw-r--r-- | arm/SelectOp.vp | 8 | ||||
-rw-r--r-- | arm/SelectOpproof.v | 28 |
4 files changed, 36 insertions, 3 deletions
diff --git a/arm/SelectLong.vp b/arm/SelectLong.vp index cc7a38f6..b4cdd0e3 100644 --- a/arm/SelectLong.vp +++ b/arm/SelectLong.vp @@ -16,6 +16,6 @@ Require Import Coqlib. Require Import Compopts. Require Import AST Integers Floats. Require Import Op CminorSel. -Require Import SelectOp SplitLong. +Require Import OpHelpers SelectOp SplitLong. (** This file is empty because we use the default implementation provided in [SplitLong]. *) diff --git a/arm/SelectLongproof.v b/arm/SelectLongproof.v index a82c082c..a65a38d4 100644 --- a/arm/SelectLongproof.v +++ b/arm/SelectLongproof.v @@ -16,6 +16,7 @@ Require Import String Coqlib Maps Integers Floats Errors. Require Archi. Require Import AST Values Memory Globalenvs Events. Require Import Cminor Op CminorSel. +Require Import OpHelpers OpHelpersproof. Require Import SelectOp SelectOpproof SplitLong SplitLongproof. Require Import SelectLong. diff --git a/arm/SelectOp.vp b/arm/SelectOp.vp index c361df65..f3f01730 100644 --- a/arm/SelectOp.vp +++ b/arm/SelectOp.vp @@ -42,6 +42,7 @@ Require Import AST. Require Import Integers. Require Import Floats. Require Import Op. +Require Import OpHelpers. Require Import CminorSel. Local Open Scope cminorsel_scope. @@ -508,3 +509,10 @@ Nondetfunction builtin_arg (e: expr) := | Eop (Oaddimm n) (e1:::Enil) => BA_addptr (BA e1) (BA_int n) | _ => BA e end. + +(* floats *) +Definition divf_base (e1: expr) (e2: expr) := + Eop Odivf (e1 ::: e2 ::: Enil). + +Definition divfs_base (e1: expr) (e2: expr) := + Eop Odivfs (e1 ::: e2 ::: Enil). diff --git a/arm/SelectOpproof.v b/arm/SelectOpproof.v index d4aac9b6..212bcfd7 100644 --- a/arm/SelectOpproof.v +++ b/arm/SelectOpproof.v @@ -24,6 +24,7 @@ Require Import Cminor. Require Import Op. Require Import CminorSel. Require Import SelectOp. +Require Import OpHelpers OpHelpersproof. Local Open Scope cminorsel_scope. Local Transparent Archi.ptr64. @@ -76,8 +77,10 @@ Ltac TrivialExists := (** * Correctness of the smart constructors *) Section CMCONSTR. - -Variable ge: genv. +Variable prog: program. +Variable hf: helper_functions. +Hypothesis HELPERS: helper_functions_declared prog hf. +Let ge := Genv.globalenv prog. Variable sp: val. Variable e: env. Variable m: mem. @@ -893,4 +896,25 @@ Proof. - constructor; auto. Qed. + +(* floating-point division without HELPERS *) +Theorem eval_divf_base: + forall le a b x y, + eval_expr ge sp e m le a x -> + eval_expr ge sp e m le b y -> + exists v, eval_expr ge sp e m le (divf_base a b) v /\ Val.lessdef (Val.divf x y) v. +Proof. + intros; unfold divf_base. + TrivialExists. +Qed. + +Theorem eval_divfs_base: + forall le a b x y, + eval_expr ge sp e m le a x -> + eval_expr ge sp e m le b y -> + exists v, eval_expr ge sp e m le (divfs_base a b) v /\ Val.lessdef (Val.divfs x y) v. +Proof. + intros; unfold divfs_base. + TrivialExists. +Qed. End CMCONSTR. |