46 #ifndef XT_ARITHMETIC_UTIL_H
47 #define XT_ARITHMETIC_UTIL_H
65 return ((x >> (
sizeof (
Xt_int) * CHAR_BIT - 1)) |
68 return (
Xt_int)((x >= 0) - (x < 0));
79 return ((x >> (
sizeof (x) * CHAR_BIT - 1)) |
80 (
int)((
unsigned int)(~x) >> (
sizeof (x) * CHAR_BIT - 1)));
82 return (x >= 0) - (x < 0);
93 return x >> (
sizeof (int) * CHAR_BIT - 1);
95 #warning Unusual behaviour of shift operator detected.
108 return x >> (
sizeof (x) * CHAR_BIT - 1);
110 #warning Unusual behaviour of shift operator detected.
111 return (x < 0) * ~(
Xt_int)0;
118 static inline long long
122 return ((x >> (
sizeof (x) * CHAR_BIT - 1)) |
123 (
long long)((
unsigned long long)(~x) >> (
sizeof (x) * CHAR_BIT - 1)));
125 return (x >= 0) - (x < 0);
132 static inline long long
136 return x >> (
sizeof (x) * CHAR_BIT - 1);
138 #warning Unusual behaviour of shift operator detected.
139 return (x < 0) * ~0LL;
149 return a <= b ? a : b;
154 #define xinlz(v) XT_INT_CLZ(v)
160 #if SIZEOF_XT_INT * CHAR_BIT == 64
161 if (v <= UINT64_C(0x00000000ffffffff)) {c += 32; v <<= 32;}
162 if (v <= UINT64_C(0x0000ffffffffffff)) {c += 16; v <<= 16;}
163 if (v <= UINT64_C(0x00ffffffffffffff)) {c += 8; v <<= 8;}
164 if (v <= UINT64_C(0x0fffffffffffffff)) {c += 4; v <<= 4;}
165 if (v <= UINT64_C(0x3fffffffffffffff)) {c += 2; v <<= 2;}
166 if (v <= UINT64_C(0x7fffffffffffffff)) {c += 1;}
167 #elif SIZEOF_XT_INT * CHAR_BIT == 32
168 if (v <= 0x0000ffffUL) {c += 16; v <<= 16;}
169 if (v <= 0x00ffffffUL) {c += 8; v <<= 8;}
170 if (v <= 0x0fffffffUL) {c += 4; v <<= 4;}
171 if (v <= 0x3fffffffUL) {c += 2; v <<= 2;}
172 if (v <= 0x7fffffffUL) {c += 1;}
173 #elif SIZEOF_XT_INT * CHAR_BIT == 16
174 if (v <= 0x00ffU) {c += 8; v <<= 8;}
175 if (v <= 0x0fffU) {c += 4; v <<= 4;}
176 if (v <= 0x3fffU) {c += 2; v <<= 2;}
177 if (v <= 0x7fffU) {c += 1;}
179 #error "Unexpected size of Xt_int.\n"
static int isign_mask(int x)
static Xt_int Xt_isign_mask(Xt_int x)
static int xinlz(Xt_uint v)
static int imin(int a, int b)
static Xt_int Xt_isign(Xt_int x)
static long long llsign(long long x)
static long long llsign_mask(long long x)
base definitions header file