summaryrefslogtreecommitdiff
path: root/powerpc/SelectOpproof.v
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2012-02-24 16:43:38 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2012-02-24 16:43:38 +0000
commit62316a8e94d8cdcbf9e7aeadd1caf8e29507e6b0 (patch)
tree39b77b415e5387e8df643e18a206b7f1ffdaf329 /powerpc/SelectOpproof.v
parent91dcfe11ff321386f7924da053be83523073a50c (diff)
Take advantage of Cmaskzero and Cmasknotzero.
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1825 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'powerpc/SelectOpproof.v')
-rw-r--r--powerpc/SelectOpproof.v23
1 files changed, 23 insertions, 0 deletions
diff --git a/powerpc/SelectOpproof.v b/powerpc/SelectOpproof.v
index 39205db..1d35d9f 100644
--- a/powerpc/SelectOpproof.v
+++ b/powerpc/SelectOpproof.v
@@ -817,5 +817,28 @@ Proof.
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 until v. unfold cond_of_expr; case (cond_of_expr_match a); intros; InvEval.
+ subst v. exists (v1 :: nil); split; auto with evalexpr.
+ simpl. destruct b.
+ generalize (Val.bool_of_true_val2 _ H0); clear H0; intro ISTRUE.
+ destruct v1; simpl in ISTRUE; try contradiction.
+ rewrite Int.eq_false; auto.
+ generalize (Val.bool_of_false_val2 _ H0); clear H0; intro ISFALSE.
+ destruct v1; simpl in ISFALSE; try contradiction.
+ rewrite ISFALSE. rewrite Int.eq_true; auto.
+ exists (v :: nil); split; auto with evalexpr.
+ simpl. inversion H0; simpl. rewrite Int.eq_false; auto. auto. auto.
+Qed.
+
End CMCONSTR.