#line 2 "../src/kernel/none/divll.h"
#undef LOCAL_HIREMAINDER
#define LOCAL_HIREMAINDER
extern ulong hiremainder;
#if !defined(INLINE)
extern long divll(ulong x, ulong y);
#else
#define __GLUE(hi, lo) (((hi) << BITS_IN_HALFULONG) | (lo))
#define __SPLIT(a, b, c) b = HIGHWORD(a); c = LOWWORD(a)
#define __LDIV(a, b, q, r) q = a / b; r = a - q*b
extern ulong hiremainder;
#if defined(__GNUC__) && !defined(DISABLE_INLINE)
#undef LOCAL_HIREMAINDER
#define LOCAL_HIREMAINDER register ulong hiremainder
#define divll(n0, d) \
__extension__ ({ \
ulong __d1, __d0, __q1, __q0, __r1, __r0, __m, __n1, __n0; \
ulong __k, __d; \
\
__n1 = hiremainder; __n0 = n0; __d = d; \
if (__n1 == 0) \
{ \
__LDIV(__n0, __d, __q1, hiremainder); \
} \
else if (__d < LOWMASK) \
{ \
__n1 = __GLUE(__n1, HIGHWORD(__n0)); \
__LDIV(__n1, __d, __q1, __r1); \
__n1 = __GLUE(__r1, LOWWORD(__n0)); \
__LDIV(__n1, __d, __q0, hiremainder); \
__q1 = __GLUE(__q1, __q0); \
} \
else \
{ \
if (__d & HIGHBIT) \
{ \
__k = 0; __SPLIT(__d, __d1, __d0); \
} \
else \
{ \
__k = bfffo(__d); \
__n1 = (__n1 << __k) | (__n0 >> (BITS_IN_LONG - __k)); \
__n0 <<= __k; \
__d = __d << __k; __SPLIT(__d, __d1, __d0); \
} \
__LDIV(__n1, __d1, __q1, __r1); \
__m = __q1 * __d0; \
__r1 = __GLUE(__r1, HIGHWORD(__n0)); \
if (__r1 < __m) \
{ \
__q1--, __r1 += __d; \
if (__r1 >= __d) \
if (__r1 < __m) __q1--, __r1 += __d; \
} \
__r1 -= __m; \
__LDIV(__r1, __d1, __q0, __r0); \
__m = __q0 * __d0; \
__r0 = __GLUE(__r0, LOWWORD(__n0)); \
if (__r0 < __m) \
{ \
__q0--, __r0 += __d; \
if (__r0 >= __d) \
if (__r0 < __m) __q0--, __r0 += __d; \
} \
hiremainder = (__r0 - __m) >> __k; \
__q1 = __GLUE(__q1, __q0); \
} \
__q1; \
})
#else
INLINE long
divll(ulong n0, ulong d)
{
ulong __d1, __d0, __q1, __q0, __r1, __r0, __m, __n1, __n0;
ulong __k, __d;
__n1 = hiremainder; __n0 = n0; __d = d;
if (__n1 == 0)
{
__LDIV(__n0, __d, __q1, hiremainder);
}
else if (__d < LOWMASK)
{
__n1 = __GLUE(__n1, HIGHWORD(__n0));
__LDIV(__n1, __d, __q1, __r1);
__n1 = __GLUE(__r1, LOWWORD(__n0));
__LDIV(__n1, __d, __q0, hiremainder);
__q1 = __GLUE(__q1, __q0);
}
else
{
if (__d & HIGHBIT)
{
__k = 0; __SPLIT(__d, __d1, __d0);
}
else
{
__k = bfffo(__d);
__n1 = (__n1 << __k) | (__n0 >> (BITS_IN_LONG - __k));
__n0 = __n0 << __k;
__d = __d << __k; __SPLIT(__d, __d1, __d0);
}
__LDIV(__n1, __d1, __q1, __r1);
__m = __q1 * __d0;
__r1 = __GLUE(__r1, HIGHWORD(__n0));
if (__r1 < __m)
{
__q1--, __r1 += __d;
if (__r1 >= __d)
if (__r1 < __m) __q1--, __r1 += __d;
}
__r1 -= __m;
__LDIV(__r1, __d1, __q0, __r0);
__m = __q0 * __d0;
__r0 = __GLUE(__r0, LOWWORD(__n0));
if (__r0 < __m)
{
__q0--, __r0 += __d;
if (__r0 >= __d)
if (__r0 < __m) __q0--, __r0 += __d;
}
hiremainder = (__r0 - __m) >> __k;
__q1 = __GLUE(__q1, __q0);
}
return __q1;
}
#endif
#endif