37,7 → 37,8 |
#define ABSVAL(x) ( (x) > 0 ? (x) : -(x)) |
#define SGN(x) ( (x) >= 0 ? 1 : 0 ) |
|
static unsigned int divandmod32(unsigned int a, unsigned int b, unsigned int *remainder) |
static unsigned int divandmod32(unsigned int a, unsigned int b, |
unsigned int *remainder) |
{ |
unsigned int result; |
int steps = sizeof(unsigned int) * 8; |
71,7 → 72,8 |
} |
|
|
static unsigned long long divandmod64(unsigned long long a, unsigned long long b, unsigned long long *remainder) |
static unsigned long long divandmod64(unsigned long long a, |
unsigned long long b, unsigned long long *remainder) |
{ |
unsigned long long result; |
int steps = sizeof(unsigned long long) * 8; |
112,7 → 114,8 |
|
result = (int)divandmod32(ABSVAL(a), ABSVAL(b), &rem); |
|
if ( SGN(a) == SGN(b)) return result; |
if (SGN(a) == SGN(b)) |
return result; |
return -result; |
} |
|
124,7 → 127,8 |
|
result = (long long)divandmod64(ABSVAL(a), ABSVAL(b), &rem); |
|
if ( SGN(a) == SGN(b)) return result; |
if (SGN(a) == SGN(b)) |
return result; |
return -result; |
} |
|
186,7 → 190,8 |
return rem; |
} |
|
unsigned long long __udivmoddi3(unsigned long long a, unsigned long long b, unsigned long long *c) |
unsigned long long __udivmoddi3(unsigned long long a, unsigned long long b, |
unsigned long long *c) |
{ |
return divandmod64(a, b, c); |
} |