Ltac comput val :=
  let x := fresh in set val as x in *; vm_compute in x; subst x.Remark small_shift_amount_1:
  forall i,
  Int64.ltu i Int64.iwordsize = true ->
  Int.ltu (Int64.loword i) Int64.iwordsize' = true
  /\ Int64.unsigned i = Int.unsigned (Int64.loword i).Remark small_shift_amount_2:
  forall i,
  Int64.ltu i (Int64.repr 32) = true ->
  Int.ltu (Int64.loword i) Int.iwordsize = true.

Lemma make_store_correct_StoreEffect: forall addr ty rhs code e le m b ofs v m' f k, make_store addr ty rhs = OK code -> eval_expr ge e le m addr (Vptr b ofs) -> eval_expr ge e le m rhs v -> assign_loc ty m b ofs v m' -> match access_mode ty with By_value chunk => effstep csharpmin_eff_sem ge (StoreEffect (Vptr b ofs) (encode_val chunk v)) (CSharpMin_State f code k e le) m (CSharpMin_State f Sskip k e le) m' | By_copy => True (*WILL be needed for builtin: exists b' ofs', v = Vptr b' ofs' /\ effstep csharpmin_eff_sem ge (BuiltinEffect ge (ef_sig (EF_memcpy (sizeof ty) (alignof_blockcopy ty))) (Vptr b ofs :: Vptr b' ofs' :: nil) m) (CSharpMin_State f code k e le) m (CSharpMin_State f Sskip k e le) m'*) | _ => False end.