32 #define P00_UINTMAX_HIGHBIT(X) ((((uintmax_t)+(X)) & (UINTMAX_MAX ^ INTMAX_MAX)) >> (P99_UINTMAX_WIDTH - 1U))
43 #define P00_ARITH_INTMAX_SHIFT(X) (-((intmax_t)+P00_UINTMAX_HIGHBIT(X)))
47 #if UINTMAX_MAX > INTMAX_MAX
48 register uintmax_t p00_m = P00_ARITH_INTMAX_SHIFT(p00_a);
49 return (p00_m ^ p00_a) - p00_m;
53 return (p00_a < 0) ? -p00_a : p00_a;
56 #define p99_arith_abs(X) (P99_SIGNED(X) ? p00_arith_abs(X) : P99_RVAL(uintmax_t, (X)))
60 #if UINTMAX_MAX > INTMAX_MAX
62 return (p00_a & P00_ARITH_INTMAX_SHIFT(p00_a)) + p00_b;
64 return p00_a < p00_b ? p00_a : p00_b;
70 #if UINTMAX_MAX > INTMAX_MAX
72 return (p00_a & ~P00_ARITH_INTMAX_SHIFT(p00_a)) + p00_b;
74 return p00_a < p00_b ? p00_b : p00_a;
82 p00_a |= p00_a >> p00_s;
84 return p00_a - (p00_a >> 1);
92 p00_a |= p00_a >> p00_s;
105 #if P99_LOW2(P99_UINTMAX_WIDTH) == P99_UINTMAX_WIDTH
116 for(
int p00_i = p00_ll; p00_i >= 0; --p00_i) {
118 uintmax_t p00_m = ((UINTMAX_C(1) << p00_s) - 1) << p00_s;
121 p00_l |= p00_t * p00_s;
122 p00_a >>= p00_t * p00_s;