(* not provable at present; see https://github.com/AbsInt/CompCert/issues/207
    for a description of how to solve this problem. *)

Definition samerep (ch1 ch2: memory_chunk) (v1 v2: val) :=
  Memdata.size_chunk ch1 = Memdata.size_chunk ch2 /\
  forall bl: list Memdata.memval,
   Memdata.size_chunk ch1 = Z.of_nat (length bl) ->
   (Memdata.decode_val ch1 bl = v1 <-> Memdata.decode_val ch2 bl = v2).

(* Specifications: *)
Lemma mapsto_single_int: forall sh v1 v2 p, is_single v1 -> is_int I32 Unsigned v2 -> samerep Mfloat32 Mint32 v1 v2 -> mapsto sh (Tfloat F32 noattr) p v1 = mapsto sh (Tint I32 Unsigned noattr) p v2.
Lemma data_at_single_int: forall sh v1 v2 p1 p2, is_single v1 -> is_int I32 Unsigned v2 -> samerep Mfloat32 Mint32 v1 v2 -> readable_share sh -> p1 = p2 -> data_at sh (Tfloat F32 noattr) v1 p1 = data_at sh (Tint I32 Unsigned noattr) v2 p2.
Lemma float32_to_bits_abs': forall x, Fappli_IEEE_bits.bits_of_b32 (Fappli_IEEE.Babs 24 128 (fun _ pl => (false,pl)) x) = Z.land (Fappli_IEEE_bits.bits_of_b32 x) (2 ^ 31 - 1).
Lemma float32_to_bits_abs: forall x, Float32.to_bits (Float32.abs x) = Int.and (Float32.to_bits x) (Int.repr (2 ^ 31 - 1)).
Lemma fabs_float32_lemma: forall x: float32, exists y: int, samerep Mfloat32 Mint32 (Vsingle x) (Vint y) /\ samerep Mfloat32 Mint32 (Vsingle (Float32.abs x)) (Vint (Int.and y (Int.repr 2147483647))).
Lemma body_fabs_single: semax_body Vprog Gprog f_fabs_single fabs_single_spec.
Lemma body_fabs_single: semax_body Vprog Gprog f_fabs_single fabs_single_spec.