why mult generated for unsigned int multiply on mips?

Amker.Cheng amker.cheng@gmail.com
Thu Apr 8 11:56:00 GMT 2010

> It would, however, be nice if you actually posted an answer to your
> (now solved) question. That way, any casual reader may learn something
> new.
Sorry for the unintentional offense, here comes the method:
for 2's complement binary number x31x30...x0,
unsigned value U = 2^(31)*x31 + 2^(30)*x30 + ... + 2^(0)*x0
signed value S = - 2^(31)*x31 + 2^(30)*x30 + ... + 2^(0)*x0
say V =  2^(30)*x30 + ... + 2^(0)*x0, and s = x31
so,  S = U - 2^(32)*s.

now think about two number U1, U2, the corresponding signed value are S1, S2.
S1 * S2 = (U1-2^32 *s1 ) * (U2-2^32 *s2)
             =  U1*U2 - 2^32*s2*U1 - 2^32*s1*U2 + 2^64*s1*s2
It's easy to prove that the lower 32 bit of S1*S2 is determined by the
lower part of U1*U2.

Maybe this is the reason gcc can safely use mult for unsigned
multiplication for mips.

Hope this is right and it's hard to edit equations in plain text -_-

Best Regards.

More information about the Gcc mailing list