diff options
Diffstat (limited to 'arm')
-rw-r--r-- | arm/SelectOp.vp | 2 | ||||
-rw-r--r-- | arm/SelectOpproof.v | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/arm/SelectOp.vp b/arm/SelectOp.vp index 7b8851c..27b5f53 100644 --- a/arm/SelectOp.vp +++ b/arm/SelectOp.vp @@ -454,4 +454,4 @@ Nondetfunction addressing (chunk: memory_chunk) (e: expr) := | _ => (Aindexed Int.zero, e:::Enil) end. - +Definition cond_of_expr (e: expr) := (Ccompuimm Cne Int.zero, e:::Enil). diff --git a/arm/SelectOpproof.v b/arm/SelectOpproof.v index 0a5ee64..1a2f560 100644 --- a/arm/SelectOpproof.v +++ b/arm/SelectOpproof.v @@ -769,4 +769,19 @@ Proof. exists (v :: nil); split. eauto with evalexpr. subst. simpl. rewrite Int.add_zero; auto. Qed. +Theorem eval_cond_of_expr: + forall le a v b, + eval_expr ge sp e m le a v -> + Val.bool_of_val v b -> + match cond_of_expr a with (cond, args) => + exists vl, + eval_exprlist ge sp e m le args vl /\ + eval_condition cond vl m = Some b + end. +Proof. + intros. unfold cond_of_expr; simpl. + exists (v :: nil); split; auto with evalexpr. + simpl. inversion H0; simpl. rewrite Int.eq_false; auto. auto. auto. +Qed. + End CMCONSTR. |