Hint Resolve ireg_of_not_X31 ireg_of_not_X31': asmgen.
(** Useful simplification tactic *)
Ltac Simplif :=
((rewrite nextinstr_inv by eauto with asmgen)
|| (rewrite nextinstr_inv1 by eauto with asmgen)
|| (rewrite Pregmap.gss)
|| (rewrite nextinstr_pc)
|| (rewrite Pregmap.gso by eauto with asmgen)); auto with asmgen.
Ltac Simpl := repeat Simplif.
(** * Correctness of RISC-V constructor functions *)
Section CONSTRUCTORS.
Variable ge: genv.
Variable fn: function.
(** 32-bit integer constants and arithmetic *)

Lemma load_hilo32_correct:
forall rd hi lo k rs m,
exists rs',
exec_straight ge fn (load_hilo32 rd hi lo k) rs m k rs' m
/\ rs'#rd = Vint (Int.add (Int.shl hi (Int.repr 12)) lo)
/\ forall r, r <> PC -> r <> rd -> rs'#r = rs#r.