(** Memory accesses *)

Lemma transl_store_access_correct:
forall chunk (mk_instr: ireg -> offset -> instruction) addr args k c r1 (rs: regset) m v m',
(forall base ofs rs,
exec_instr ge fn (mk_instr base ofs) rs m = exec_store ge chunk rs m r1 base ofs) ->
transl_memory_access mk_instr addr args k = OK c ->
eval_addressing ge rs#SP addr (map rs (map preg_of args)) = Some v ->
Mem.storev chunk m v rs#r1 = Some m' ->
r1 <> PC -> r1 <> X31 ->
exists rs',
exec_straight ge fn c rs m k rs' m'
/\ forall r, r <> PC -> r <> X31 -> rs'#r = rs#r.