(** * Agreement between location sets and Mach states *)
(** Agreement with Mach register states *)
Definition agree_regs (j: meminj) (ls: locset) (rs: regset) : Prop :=
forall r, Val.inject j (ls (R r)) (rs r).
(** Agreement over locations *)
Record agree_locs (ls ls0: locset) : Prop :=
mk_agree_locs {
(** Unused registers have the same value as in the caller *)
agree_unused_reg:
forall r, ~(mreg_within_bounds b r) -> ls (R r) = ls0 (R r);
(** Incoming stack slots have the same value as the corresponding Outgoing stack slots in the caller *)
agree_incoming:
forall ofs ty,
In (S Incoming ofs ty) (regs_of_rpairs (loc_parameters f.(Linear.fn_sig))) ->
ls (S Incoming ofs ty) = ls0 (S Outgoing ofs ty)
}.
(** ** Properties of [agree_regs]. *)
(** Values of registers *)

(* Specifications: *)
Lemma agree_reg:
forall j ls rs r,
agree_regs j ls rs -> Val.inject j (ls (R r)) (rs r).
Lemma agree_reglist:
forall j ls rs rl,
agree_regs j ls rs -> Val.inject_list j (reglist ls rl) (rs##rl).