typedef union longlong { struct {unsigned short h0, h1, h2, h3;} h; struct {signed long low, high;} si; struct {unsigned long low, high;} ui; signed long long sll; unsigned long long ull; } long_long; long long __negdi2 (u) long long u; { long_long uu; uu.sll = u; uu.si.low = -uu.si.low; if (uu.si.low == 0) uu.si.high = -uu.si.high; else uu.si.high = ~uu.si.high; return uu.sll; }