| (* WebAssembly-compatible type conversions to i32 implementation *) |
| |
| let wrap_i64 x = Int64.to_int32 x |
| |
| let trunc_f32_s x = |
| if F32.ne x x then |
| raise Ixx.InvalidConversion |
| else |
| let xf = F32.to_float x in |
| if xf >= -.Int32.(to_float min_int) || xf < Int32.(to_float min_int) then |
| raise Ixx.Overflow |
| else |
| Int32.of_float xf |
| |
| let trunc_f32_u x = |
| if F32.ne x x then |
| raise Ixx.InvalidConversion |
| else |
| let xf = F32.to_float x in |
| if xf >= -.Int32.(to_float min_int) *. 2.0 || xf <= -1.0 then |
| raise Ixx.Overflow |
| else |
| Int64.(to_int32 (of_float xf)) |
| |
| let trunc_f64_s x = |
| if F64.ne x x then |
| raise Ixx.InvalidConversion |
| else |
| let xf = F64.to_float x in |
| if xf >= -.Int32.(to_float min_int) || xf <= Int32.(to_float min_int) -. 1.0 then |
| raise Ixx.Overflow |
| else |
| Int32.of_float xf |
| |
| let trunc_f64_u x = |
| if F64.ne x x then |
| raise Ixx.InvalidConversion |
| else |
| let xf = F64.to_float x in |
| if xf >= -.Int32.(to_float min_int) *. 2.0 || xf <= -1.0 then |
| raise Ixx.Overflow |
| else |
| Int64.(to_int32 (of_float xf)) |
| |
| let trunc_sat_f32_s x = |
| if F32.ne x x then |
| 0l |
| else |
| let xf = F32.to_float x in |
| if xf < Int32.(to_float min_int) then |
| Int32.min_int |
| else if xf >= -.Int32.(to_float min_int) then |
| Int32.max_int |
| else |
| Int32.of_float xf |
| |
| let trunc_sat_f32_u x = |
| if F32.ne x x then |
| 0l |
| else |
| let xf = F32.to_float x in |
| if xf <= -1.0 then |
| 0l |
| else if xf >= -.Int32.(to_float min_int) *. 2.0 then |
| -1l |
| else |
| Int64.(to_int32 (of_float xf)) |
| |
| let trunc_sat_f64_s x = |
| if F64.ne x x then |
| 0l |
| else |
| let xf = F64.to_float x in |
| if xf < Int32.(to_float min_int) then |
| Int32.min_int |
| else if xf >= -.Int32.(to_float min_int) then |
| Int32.max_int |
| else |
| Int32.of_float xf |
| |
| let trunc_sat_f64_u x = |
| if F64.ne x x then |
| 0l |
| else |
| let xf = F64.to_float x in |
| if xf <= -1.0 then |
| 0l |
| else if xf >= -.Int32.(to_float min_int) *. 2.0 then |
| -1l |
| else |
| Int64.(to_int32 (of_float xf)) |
| |
| let reinterpret_f32 = F32.to_bits |