Proof with eauto 10 using val_erasure_cmpu with regs_erasure val_erasure.
intros.
unfold compare_floats32.
destruct v1,v2; inv Hval_erasure; inv Hval_erasure2; simpl;
eauto 6 with regs_erasure val_erasure;
try destruct v1'; try destruct v2';
eauto 6 with regs_erasure val_erasure;
unfold Val.of_bool;
repeat rewrite if_negb;
repeat match goal with
| [|- context[match ?Expr with | _ => _ end]] =>
destruct Expr eqn:?
end...
Qed.
Hint Transparent undef_regs: regs_erasure.

(* Specifications: *)
(* TODO: move this to the right place*)
Lemma get_reg_erasure:
forall rs rs' r
(Hregs_erasure: regs_erasure rs rs')
(Hundef: rs r <> Vundef),
rs r = rs' r.
Lemma erasure_eval_testcond:
forall c rs rs' b,
regs_erasure rs rs' ->
eval_testcond c rs = Some b ->
eval_testcond c rs' = Some b.
Lemma eval_addrmode64_erase:
forall g a rs rs',
regs_erasure rs rs' ->
val_erasure (eval_addrmode64 g a rs) (eval_addrmode64 g a rs').
Lemma compare_longs_erasure:
forall v1 v1' v2 v2' rs rs' m m'
(Hval1: val_erasure v1 v1')
(Hval2: val_erasure v2 v2')
(Hregs: regs_erasure rs rs')
(Hmem: mem_erasure m m'),
regs_erasure (compare_longs v1 v2 rs m) (compare_longs v1' v2' rs' m').