mpy.c 334 B

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