long
__mulsi3(unsigned long a, unsigned long b)
{
long res = 0;
while (a)
if (a & 1)
res += b;
}
b <<= 1;
a >>=1;
return res;