mul32 function

int mul32(
  1. int a,
  2. int b
)

Low 32 bits of a * b for 0 <= a, b < 2^32. Exact on every backend (all intermediates stay below 2^53).

Implementation

int mul32(int a, int b) {
  final aLo = a & 0xFFFF;
  final aHi = (a >>> 16) & 0xFFFF;
  final bLo = b & 0xFFFF;
  final bHi = (b >>> 16) & 0xFFFF;
  final mid = ((aHi * bLo + aLo * bHi) & 0xFFFF) * 65536; // < 2^32
  return (aLo * bLo + mid) & _m32; // < 2^33 before masking
}