mul32 function
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
}