http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55393
--- Comment #2 from Clay Harris <cosmos at claycon dot org> 2012-11-20 07:46:15 UTC --- I shouldn't write bug reports when I've been awake for 24 hours. The bit 63 reference was for one more 9 in num, which got missed with a cut & paste error. In any case, the IMUL instruction is doing what its supposed to for the C code (and executes faster than MUL). The handling of the sign bit would be wrong, except that we're throwing away the upper half of the product, where the discrepancy would occur. It would be very convenient for overflow testing to have the upper half (or at least the Carry flag), but alas gcc doesn't seem to have a way to do that since long long int stopped being 128 bits in 64bit mode. Please close this bug as INVALID.