aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/Values.v48
-rw-r--r--lib/Floats.v9
2 files changed, 57 insertions, 0 deletions
diff --git a/common/Values.v b/common/Values.v
index 87ebea00..cf5a1255 100644
--- a/common/Values.v
+++ b/common/Values.v
@@ -244,6 +244,18 @@ Definition intuoffloat (v: val) : option val :=
| _ => None
end.
+Definition intoffloat_ne (v: val) : option val :=
+ match v with
+ | Vfloat f => option_map Vint (Float.to_int_ne f)
+ | _ => None
+ end.
+
+Definition intuoffloat_ne (v: val) : option val :=
+ match v with
+ | Vfloat f => option_map Vint (Float.to_intu_ne f)
+ | _ => None
+ end.
+
Definition floatofint (v: val) : option val :=
match v with
| Vint n => Some (Vfloat (Float.of_int n))
@@ -268,6 +280,18 @@ Definition intuofsingle (v: val) : option val :=
| _ => None
end.
+Definition intofsingle_ne (v: val) : option val :=
+ match v with
+ | Vsingle f => option_map Vint (Float32.to_int_ne f)
+ | _ => None
+ end.
+
+Definition intuofsingle_ne (v: val) : option val :=
+ match v with
+ | Vsingle f => option_map Vint (Float32.to_intu_ne f)
+ | _ => None
+ end.
+
Definition singleofint (v: val) : option val :=
match v with
| Vint n => Some (Vsingle (Float32.of_int n))
@@ -623,6 +647,30 @@ Definition longuofsingle (v: val) : option val :=
| _ => None
end.
+Definition longoffloat_ne (v: val) : option val :=
+ match v with
+ | Vfloat f => option_map Vlong (Float.to_long_ne f)
+ | _ => None
+ end.
+
+Definition longuoffloat_ne (v: val) : option val :=
+ match v with
+ | Vfloat f => option_map Vlong (Float.to_longu_ne f)
+ | _ => None
+ end.
+
+Definition longofsingle_ne (v: val) : option val :=
+ match v with
+ | Vsingle f => option_map Vlong (Float32.to_long_ne f)
+ | _ => None
+ end.
+
+Definition longuofsingle_ne (v: val) : option val :=
+ match v with
+ | Vsingle f => option_map Vlong (Float32.to_longu_ne f)
+ | _ => None
+ end.
+
Definition floatoflong (v: val) : option val :=
match v with
| Vlong n => Some (Vfloat (Float.of_long n))
diff --git a/lib/Floats.v b/lib/Floats.v
index bc066b20..b12c6585 100644
--- a/lib/Floats.v
+++ b/lib/Floats.v
@@ -1145,6 +1145,15 @@ Definition to_long (f:float32): option int64 := (**r conversion to signed 64-bit
Definition to_longu (f:float32): option int64 := (**r conversion to unsigned 64-bit int *)
option_map Int64.repr (ZofB_range _ _ f 0 Int64.max_unsigned).
+Definition to_int_ne (f:float32): option int := (**r conversion to signed 32-bit int *)
+ option_map Int.repr (ZofB_ne_range _ _ f Int.min_signed Int.max_signed).
+Definition to_intu_ne (f:float32): option int := (**r conversion to unsigned 32-bit int *)
+ option_map Int.repr (ZofB_ne_range _ _ f 0 Int.max_unsigned).
+Definition to_long_ne (f:float32): option int64 := (**r conversion to signed 64-bit int *)
+ option_map Int64.repr (ZofB_ne_range _ _ f Int64.min_signed Int64.max_signed).
+Definition to_longu_ne (f:float32): option int64 := (**r conversion to unsigned 64-bit int *)
+ option_map Int64.repr (ZofB_ne_range _ _ f 0 Int64.max_unsigned).
+
Definition of_int (n:int): float32 := (**r conversion from signed 32-bit int to single-precision float *)
BofZ 24 128 __ __ (Int.signed n).
Definition of_intu (n:int): float32 := (**r conversion from unsigned 32-bit int to single-precision float *)