/* Public domain. */ | |
extern int __mulhi3 (int, int); | |
int | |
__mulhi3 (int x, int y) | |
{ | |
char bit; | |
int neg = 0; | |
int rv = 0; | |
if (y < 0) | |
{ | |
y = - y; | |
neg = 1; | |
} | |
for (bit = 0; y && bit < sizeof (y) * 8; bit ++) | |
{ | |
if (y & 1) | |
rv += x; | |
x <<= 1; | |
y >>= 1; | |
} | |
return neg ? - rv : rv; | |
} |