home *** CD-ROM | disk | FTP | other *** search
- #include "longlong.h"
-
- static int bneg ();
-
- long long
- __negdi2 (u)
- long long u;
- {
- unsigned long a[2], b[2];
- long_long w;
- long_long uu;
-
- uu.ll = u;
-
- a[HIGH] = uu.s.high;
- a[LOW] = uu.s.low;
-
- bneg (a, b, sizeof b);
-
- w.s.high = b[HIGH];
- w.s.low = b[LOW];
- return w.ll;
- }
-
- static int
- bneg (a, b, n)
- unsigned short *a, *b;
- size_t n;
- {
- signed long acc;
- int i;
-
- n /= sizeof (short);
-
- acc = 0;
- for (i = little_end (n); is_not_msd (i, n); i = next_msd (i))
- {
- acc -= a[i];
- b[i] = acc & low16;
- acc = acc >> 16;
- }
- return acc;
- }
-