Section CONSTRUCTORS.
Variable ge: genv.
Variable fn: function.
(** Smart constructor for moves. *)
(** Properties of division *)
(** Smart constructor for [shrx] *)
(** Smart constructor for [shrxl] *)

Lemma mk_shrxlimm_correct:
forall n k c (rs1: regset) v m,
mk_shrxlimm n k = OK c ->
Val.shrxl (rs1#RAX) (Vint n) = Some v ->
exists rs2,
exec_straight ge fn c rs1 m k rs2 m
/\ rs2#RAX = v
/\ forall r, data_preg r = true -> r <> RAX -> r <> RDX -> rs2#r = rs1#r.