widenMulImpl function

(Uint64, Uint64) widenMulImpl(
  1. Uint64 a,
  2. Uint64 b
)

Implementation

(Uint64 hi, Uint64 lo) widenMulImpl(Uint64 a, Uint64 b) {
  final aLo = a.lo, aHi = a.hi, bLo = b.lo, bHi = b.hi;
  final p0 = aLo * bLo, p1 = aLo * bHi, p2 = aHi * bLo, p3 = aHi * bHi;
  final mid = (p0 >>> 32) + (p1 & _mask32) + (p2 & _mask32);
  final loVal = ((mid & _mask32) << 32) + (p0 & _mask32);
  final hiVal = p3 + (p1 >>> 32) + (p2 >>> 32) + (mid >>> 32);
  return (_unpack(hiVal), _unpack(loVal));
}