summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.depend6
-rw-r--r--arm/CombineOp.v6
-rw-r--r--arm/CombineOpproof.v8
-rw-r--r--ia32/CombineOpproof.v8
4 files changed, 21 insertions, 7 deletions
diff --git a/.depend b/.depend
index 8e69f1b..ece241b 100644
--- a/.depend
+++ b/.depend
@@ -95,9 +95,9 @@ backend/Stackingtyping.vo backend/Stackingtyping.glob: backend/Stackingtyping.v
backend/Machsem.vo backend/Machsem.glob: backend/Machsem.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Mach.vo $(ARCH)/$(VARIANT)/Stacklayout.vo $(ARCH)/Asmgenretaddr.vo
$(ARCH)/Asm.vo $(ARCH)/Asm.glob: $(ARCH)/Asm.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo backend/Locations.vo $(ARCH)/$(VARIANT)/Stacklayout.vo backend/Conventions.vo
$(ARCH)/Asmgen.vo $(ARCH)/Asmgen.glob: $(ARCH)/Asmgen.v lib/Coqlib.vo lib/Maps.vo common/Errors.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo $(ARCH)/Asm.vo
-$(ARCH)/Asmgenretaddr.vo $(ARCH)/Asmgenretaddr.glob: $(ARCH)/Asmgenretaddr.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo
-$(ARCH)/Asmgenproof1.vo $(ARCH)/Asmgenproof1.glob: $(ARCH)/Asmgenproof1.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo backend/Machsem.vo backend/Machtyping.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo backend/Conventions.vo
-$(ARCH)/Asmgenproof.vo $(ARCH)/Asmgenproof.glob: $(ARCH)/Asmgenproof.v lib/Coqlib.vo lib/Maps.vo common/Errors.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Mach.vo backend/Machsem.vo backend/Machtyping.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo $(ARCH)/Asmgenretaddr.vo $(ARCH)/Asmgenproof1.vo
+$(ARCH)/Asmgenretaddr.vo $(ARCH)/Asmgenretaddr.glob: $(ARCH)/Asmgenretaddr.v lib/Coqlib.vo lib/Maps.vo common/AST.vo common/Errors.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo
+$(ARCH)/Asmgenproof1.vo $(ARCH)/Asmgenproof1.glob: $(ARCH)/Asmgenproof1.v lib/Coqlib.vo lib/Maps.vo common/AST.vo common/Errors.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo backend/Machsem.vo backend/Machtyping.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo backend/Conventions.vo
+$(ARCH)/Asmgenproof.vo $(ARCH)/Asmgenproof.glob: $(ARCH)/Asmgenproof.v lib/Coqlib.vo lib/Maps.vo common/Errors.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo backend/Machsem.vo backend/Machtyping.vo backend/Conventions.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo $(ARCH)/Asmgenretaddr.vo $(ARCH)/Asmgenproof1.vo
cfrontend/Csyntax.vo cfrontend/Csyntax.glob: cfrontend/Csyntax.v lib/Coqlib.vo common/Errors.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo
cfrontend/Csem.vo cfrontend/Csem.glob: cfrontend/Csem.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo cfrontend/Csyntax.vo common/Smallstep.vo
cfrontend/Cstrategy.vo cfrontend/Cstrategy.glob: cfrontend/Cstrategy.v lib/Axioms.vo lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo cfrontend/Csyntax.vo cfrontend/Csem.vo
diff --git a/arm/CombineOp.v b/arm/CombineOp.v
index d153b73..be9824b 100644
--- a/arm/CombineOp.v
+++ b/arm/CombineOp.v
@@ -41,6 +41,12 @@ Function combine_compimm_eq_0 (x: valnum) : option(condition * list valnum) :=
| _ => None
end.
+Function combine_compimm_eq_1 (x: valnum) : option(condition * list valnum) :=
+ match get x with
+ | Some(Op (Ocmp c) ys) => Some (c, ys)
+ | _ => None
+ end.
+
Function combine_compimm_ne_1 (x: valnum) : option(condition * list valnum) :=
match get x with
| Some(Op (Ocmp c) ys) => Some (negate_condition c, ys)
diff --git a/arm/CombineOpproof.v b/arm/CombineOpproof.v
index 0d2e6dd..e7080f4 100644
--- a/arm/CombineOpproof.v
+++ b/arm/CombineOpproof.v
@@ -76,11 +76,11 @@ Lemma combine_compimm_ne_1_sound:
eval_condition cond (map valu args) m = Val.cmp_bool Cne (valu x) (Vint Int.one) /\
eval_condition cond (map valu args) m = Val.cmpu_bool (Mem.valid_pointer m) Cne (valu x) (Vint Int.one).
Proof.
- intros until args. functional induction (combine_compimm_eq_1 get x); intros EQ; inv EQ.
+ intros until args. functional induction (combine_compimm_ne_1 get x); intros EQ; inv EQ.
(* of cmp *)
exploit get_sound; eauto. unfold equation_holds. simpl. intro EQ; inv EQ.
rewrite eval_negate_condition.
- destruct (eval_condition cond (map valu args) m); simpl; auto. destruct b; auto.
+ destruct (eval_condition c (map valu args) m); simpl; auto. destruct b; auto.
Qed.
Theorem combine_cond_sound:
@@ -91,12 +91,16 @@ Proof.
intros. functional inversion H; subst.
(* compimm ne zero *)
simpl; eapply combine_compimm_ne_0_sound; eauto.
+ (* compimm ne one *)
+ simpl; eapply combine_compimm_ne_1_sound; eauto.
(* compimm eq zero *)
simpl; eapply combine_compimm_eq_0_sound; eauto.
(* compimm eq one *)
simpl; eapply combine_compimm_eq_1_sound; eauto.
(* compuimm ne zero *)
simpl; eapply combine_compimm_ne_0_sound; eauto.
+ (* compuimm ne one *)
+ simpl; eapply combine_compimm_ne_1_sound; eauto.
(* compuimm eq zero *)
simpl; eapply combine_compimm_eq_0_sound; eauto.
(* compuimm eq one *)
diff --git a/ia32/CombineOpproof.v b/ia32/CombineOpproof.v
index 4e07bf5..cd10698 100644
--- a/ia32/CombineOpproof.v
+++ b/ia32/CombineOpproof.v
@@ -84,11 +84,11 @@ Lemma combine_compimm_ne_1_sound:
eval_condition cond (map valu args) m = Val.cmp_bool Cne (valu x) (Vint Int.one) /\
eval_condition cond (map valu args) m = Val.cmpu_bool (Mem.valid_pointer m) Cne (valu x) (Vint Int.one).
Proof.
- intros until args. functional induction (combine_compimm_eq_1 get x); intros EQ; inv EQ.
+ intros until args. functional induction (combine_compimm_ne_1 get x); intros EQ; inv EQ.
(* of cmp *)
exploit get_sound; eauto. unfold equation_holds. simpl. intro EQ; inv EQ.
rewrite eval_negate_condition.
- destruct (eval_condition cond (map valu args) m); simpl; auto. destruct b; auto.
+ destruct (eval_condition c (map valu args) m); simpl; auto. destruct b; auto.
Qed.
Theorem combine_cond_sound:
@@ -99,12 +99,16 @@ Proof.
intros. functional inversion H; subst.
(* compimm ne zero *)
simpl; eapply combine_compimm_ne_0_sound; eauto.
+ (* compimm ne one *)
+ simpl; eapply combine_compimm_ne_1_sound; eauto.
(* compimm eq zero *)
simpl; eapply combine_compimm_eq_0_sound; eauto.
(* compimm eq one *)
simpl; eapply combine_compimm_eq_1_sound; eauto.
(* compuimm ne zero *)
simpl; eapply combine_compimm_ne_0_sound; eauto.
+ (* compuimm ne one *)
+ simpl; eapply combine_compimm_ne_1_sound; eauto.
(* compuimm eq zero *)
simpl; eapply combine_compimm_eq_0_sound; eauto.
(* compuimm eq one *)