aboutsummaryrefslogtreecommitdiff
path: root/libgcc/config/msp430/mpy.c
blob: 3842d86fc356fd74966f7e59656d63e9be91e509 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* 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;
}