def double.of_f32bits
bendonnect-rpc@0.1.0.0 · src/pb.bend:320
import bendonnect-rpc@0.1.0.0/src/pb.bend as Pb
import Base
import bend-kit-protobuf@0.1.0.0/protobuf.bend as Pb
320
321def double.of_f32bits(+b: U32) -> Pb.Word64:
322 +s = ((b >> 31n) << 31n : U32)
323 +e = ((b >> 23n) .&. 255 : U32)
324 +m = (b .&. 8388607 : U32)
325 +p = msb(m)
326 +sub = word64.shl(Pb.Word64{0, (m - (1 << U32.to_nat(p)) : U32)}, (52 - p : U32))
327 +mh = (m >> 3n : U32)
328 +ml = ((m .&. 7) << 29n : U32)
329 +nh = (s .|. ((e + 896) << 20n) .|. mh : U32)
330 +sh = (s .|. 2146435072 .|. mh : U32)
331 +uh = (s .|. ((p + 874) << 20n) .|. word64.hi(sub) : U32)
332 Pb.Word64{
333 Bool.pick(U32, U32.is_eq(e, 255), sh, Bool.pick(U32, U32.is_zero(e), Bool.pick(U32, U32.is_zero(m), s, uh), nh)),
334 Bool.pick(U32, U32.is_zero(e), Bool.pick(U32, U32.is_zero(m), 0, word64.lo(sub)), ml)}