Definition rotate_long (sem: int64 -> int64 -> int64) (v w: aval) :=
  match v, w with
  | L i, I amount => L (sem i (Int64.repr (Int.unsigned amount)))
  | _, _ => ntop1 v
  end.

Lemma rotate_long_sound: forall sem v w x y, vmatch v x -> vmatch w y -> vmatch (match v, w with | Vlong i, Vint j => Vlong (sem i (Int64.repr (Int.unsigned j))) | _, _ => Vundef end) (rotate_long sem x y).