Proof with eauto 10 using val_erasure_cmpu with regs_erasure val_erasure.
intros.
unfold compare_longs.
destruct v1,v2; inv Hval1; inv Hval2; 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 Resolve compare_ints_erasure compare_floats_erasure compare_longs_erasure
compare_floats32_erasure val_erasure_addrmode eval_addrmode32_erase
eval_addrmode64_erase regs_erasure_undef : regs_erasure.
Hint Extern 0 (val_erasure (undef_regs _ _ # _ <- _ _) _) =>
eapply regs_erasure_set : regs_erasure.

Lemma exec_instr_erased:
forall (fn : function) (i : instruction) (rs rs' rs2: regset)
(m m' m2 : mem) ev
(HeraseCores: regs_erasure rs rs')
(HerasedMem: mem_erasure m m')
(Hexec_ev: Asm_event.drf_instr the_ge (fn_code fn) i rs m = Some ev)
(Hexec: exec_instr the_ge fn i rs m = Next rs2 m2),
exists rs2' m2' ev',
exec_instr the_ge fn i rs' m' = Next rs2' m2' /\
Asm_event.drf_instr the_ge (fn_code fn) i rs' m' = Some ev' /\
regs_erasure rs2 rs2' /\ mem_erasure m2 (erasePerm m2') /\
mem_event_list_erasure ev ev'.