(** Useful simplification tactic *)
Ltac Simplif :=
((rewrite nextinstr_inv by eauto with asmgen)
|| (rewrite nextinstr_inv1 by eauto with asmgen)
|| (rewrite nextinstr_nf_inv by eauto with asmgen)
|| (rewrite Pregmap.gss)
|| (rewrite nextinstr_pc)
|| (rewrite nextinstr_nf_pc)
|| (rewrite Pregmap.gso by eauto with asmgen)); auto with asmgen.
Ltac Simpl := repeat Simplif.
(** * Correctness of ARM constructor functions *)
Section CONSTRUCTORS.
Variable ge: genv.
Variable fn: function.
(** Decomposition of an integer constant *)

(* Specifications: *)
Lemma decompose_int_arm_or:
forall N n p x, List.fold_left Int.or (decompose_int_arm N n p) x = Int.or x n.
Lemma decompose_int_arm_xor:
forall N n p x, List.fold_left Int.xor (decompose_int_arm N n p) x = Int.xor x n.
Lemma decompose_int_arm_add:
forall N n p x, List.fold_left Int.add (decompose_int_arm N n p) x = Int.add x n.