#line 2 "../src/kernel/none/addll.h"
#undef LOCAL_OVERFLOW
#define LOCAL_OVERFLOW
extern ulong overflow;
#if !defined(INLINE)
extern long addll(ulong x, ulong y);
extern long addllx(ulong x, ulong y);
extern long subll(ulong x, ulong y);
extern long subllx(ulong x, ulong y);
#else
#if defined(__GNUC__) && !defined(DISABLE_INLINE)
#undef LOCAL_OVERFLOW
#define LOCAL_OVERFLOW register ulong overflow
#define addll(a, b) \
__extension__ ({ \
ulong __arg1 = (a), __arg2 = (b), __value = __arg1 + __arg2; \
overflow = (__value < __arg1); \
__value; \
})
#define addllx(a, b) \
__extension__ ({ \
ulong __arg1 = (a), __arg2 = (b), __value, __tmp = __arg1 + overflow;\
overflow = (__tmp < __arg1); \
__value = __tmp + __arg2; \
overflow |= (__value < __tmp); \
__value; \
})
#define subll(a, b) \
__extension__ ({ \
ulong __arg1 = (a), __arg2 = (b); \
overflow = (__arg2 > __arg1); \
__arg1 - __arg2; \
})
#define subllx(a, b) \
__extension__ ({ \
ulong __arg1 = (a), __arg2 = (b), __value, __tmp = __arg1 - overflow;\
overflow = (__arg1 < overflow); \
__value = __tmp - __arg2; \
overflow |= (__arg2 > __tmp); \
__value; \
})
#else
INLINE long
addll(ulong x, ulong y)
{
const ulong z = x+y;
overflow=(z<x);
return (long) z;
}
INLINE long
addllx(ulong x, ulong y)
{
const ulong z = x+y+overflow;
overflow = (z<x || (z==x && overflow));
return (long) z;
}
INLINE long
subll(ulong x, ulong y)
{
const ulong z = x-y;
overflow = (z>x);
return (long) z;
}
INLINE long
subllx(ulong x, ulong y)
{
const ulong z = x-y-overflow;
overflow = (z>x || (z==x && overflow));
return (long) z;
}
#endif
#endif