the code generated for 64x64=64 was superficially plausible, but incorrect. the low-order words are unsigned regardless whether the 64-bit quantity is signed or unsigned, and the multiplication to form the high-order 32 bits of the 32x32=64 should therefore always be the unsigned version.