(** ** Construction 1: allocating the stack frame at function entry *)

Ltac splitall := repeat (match goal with |- _ /\ _ => split end).

Theorem hide_stack: forall m sp bc ge rm am, genv_match bc ge -> romatch bc m rm -> mmatch bc m am -> bc sp = BCstack -> pge Nonstack am.(am_nonstack) -> exists bc', bc_nostack bc' /\ bc' sp = BCinvalid /\ (forall b, b <> sp -> bc' b = bc b) /\ (forall v x, vge (Ifptr Nonstack) x -> vmatch bc v x -> vmatch bc' v Vtop) /\ genv_match bc' ge /\ romatch bc' m rm /\ mmatch bc' m mtop.