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.

(* Specifications: *)
Lemma small_shift_amount_3: forall i, Int.ltu i Int64.iwordsize' = true -> Int64.unsigned (Int64.repr (Int.unsigned i)) = Int.unsigned i.
Lemma make_shl_correct: shift_constructor_correct make_shl sem_shl.
Lemma make_shr_correct: shift_constructor_correct make_shr sem_shr.
Lemma make_cmp_ptr_correct: forall cmp e le m a va b vb v, cmp_ptr m cmp va vb = Some v -> eval_expr ge e le m a va -> eval_expr ge e le m b vb -> eval_expr ge e le m (make_cmp_ptr cmp a b) v.