Section CONSTRUCTORS.
Variable ge: genv.
Variable fn: function.
(** Decomposition of an integer constant *)
Remark decompose_int_arm_nil:
forall N n p, decompose_int_arm N n p = nil -> n = Int.zero.
Remark decompose_int_thumb_nil:
forall N n p, decompose_int_thumb N n p = nil -> n = Int.zero.
(** Loading a constant. *)
(** Add integer immediate. *)
(* And integer immediate *)
(** Reverse sub immediate *)
(** Or immediate *)
(** Xor immediate *)
(** Indexed memory loads. *)
(** Indexed memory stores. *)
(** Saving the link register *)

Lemma save_lr_correct:
forall ofs k (rs: regset) m m',
Mem.storev Mint32 m (Val.offset_ptr rs#IR13 ofs) (rs#IR14) = Some m' ->
exists rs',
exec_straight ge fn (save_lr ofs k) rs m k rs' m'
/\ (forall r, if_preg r = true -> r <> IR12 -> rs'#r = rs#r)
/\ (save_lr_preserves_R12 ofs = true -> rs'#IR12 = rs#IR12).