1 /* Public domain. */ 2 extern int __mulhi3 (int, int); 3 4 int __mulhi3(int x,int y)5__mulhi3 (int x, int y) 6 { 7 char bit; 8 int neg = 0; 9 int rv = 0; 10 11 if (y < 0) 12 { 13 y = - y; 14 neg = 1; 15 } 16 17 for (bit = 0; y && bit < sizeof (y) * 8; bit ++) 18 { 19 if (y & 1) 20 rv += x; 21 x <<= 1; 22 y >>= 1; 23 } 24 25 return neg ? - rv : rv; 26 } 27