(** Translation of arguments and results to builtins. *)

Remark builtin_arg_match:
  forall ge (rs: regset) sp m a v,
  eval_builtin_arg ge (fun r => rs (preg_of r)) sp m a v ->
  eval_builtin_arg ge rs sp m (map_builtin_arg preg_of a) v.

(* Specifications: *)
Lemma builtin_args_match: forall ge ms sp rs m m', agree ms sp rs -> Mem.extends m m' -> forall al vl, eval_builtin_args ge ms sp m al vl -> exists vl', eval_builtin_args ge rs sp m' (map (map_builtin_arg preg_of) al) vl' /\ Val.lessdef_list vl vl'.
Lemma agree_set_res: forall res ms sp rs v v', agree ms sp rs -> Val.lessdef v v' -> agree (Mach.set_res res v ms) sp (Asm.set_res (map_builtin_res preg_of res) v' rs).
Lemma set_res_other: forall r res v rs, data_preg r = false -> set_res (map_builtin_res preg_of res) v rs r = rs r.
Lemma find_instr_in: forall c pos i, find_instr pos c = Some i -> In i c.