@@ -124,19 +124,6 @@ module Term = struct
124124 Fmt. failwith " %acould not parse colon: %a %a" pp_loc loc Expr. pp symbol
125125 Expr. pp term
126126
127- let combine_to_int64 sign_bit exponent_bit mantissa_bit =
128- let sign = Int64. of_string sign_bit in
129- let exponent = Int64. of_string exponent_bit in
130- let mantissa = Int64. of_string mantissa_bit in
131- let sign_shifted = Int64. shift_left sign 63 in
132- let exponent_shifted = Int64. shift_left exponent 52 in
133- Int64. logor sign_shifted (Int64. logor exponent_shifted mantissa)
134-
135- let combine_to_int32 sign exponent mantissa =
136- let sign_shifted = Int32. shift_left sign 31 in
137- let exponent_shifted = Int32. shift_left exponent 23 in
138- Int32. logor sign_shifted (Int32. logor exponent_shifted mantissa)
139-
140127 let make_fp_binop symbol (op : Ty.Binop.t ) rm a b =
141128 match Expr. view rm with
142129 | Symbol { name = Simple "roundNearestTiesToEven" ; _ } ->
@@ -227,6 +214,13 @@ module Term = struct
227214 if fp_sz = 32 then Expr. value (Num (F32 (Bitvector. to_int32 fp)))
228215 else if fp_sz = 64 then Expr. value (Num (F64 (Bitvector. to_int64 fp)))
229216 else Fmt. failwith " %afp size not supported" pp_loc loc
217+ | "fp.isNormal" , [ a ] -> Expr. raw_unop Ty_none Is_normal a
218+ | "fp.isSubnormal" , [ a ] -> Expr. raw_unop Ty_none Is_subnormal a
219+ | "fp.isNegative" , [ a ] -> Expr. raw_unop Ty_none Is_negative a
220+ | "fp.isPositive" , [ a ] -> Expr. raw_unop Ty_none Is_positive a
221+ | "fp.isInfinite" , [ a ] -> Expr. raw_unop Ty_none Is_infinite a
222+ | "fp.isNaN" , [ a ] -> Expr. raw_unop Ty_none Is_nan a
223+ | "fp.isZero" , [ a ] -> Expr. raw_unop Ty_none Is_zero a
230224 | "fp.abs" , [ a ] -> Expr. raw_unop Ty_none Abs a
231225 | "fp.neg" , [ a ] -> Expr. raw_unop Ty_none Neg a
232226 | "fp.add" , [ rm; a; b ] -> make_fp_binop symbol Add rm a b
0 commit comments