all: Simplify mp_int_t/mp_uint_t definition.

Assuming proper C99 language support, we can select "the int type as big as
a pointer" (most of the time) or "the 64-bit int type" (nanboxing with
REPR_D), and then define everything else automatically.

This simplifies port configuration files.  And the types can still be
overridden if needed.

Signed-off-by: Jeff Epler <jepler@unpythonic.net>
This commit is contained in:
Jeff Epler
2025-10-11 19:12:55 -05:00
committed by Damien George
parent eac81de4e0
commit 007f127a61
40 changed files with 106 additions and 188 deletions

View File

@@ -456,15 +456,15 @@ static inline uint32_t mp_clz_mpi(mp_int_t x) {
}
return zeroes;
#else
MP_STATIC_ASSERT(sizeof(mp_int_t) == sizeof(long long)
|| sizeof(mp_int_t) == sizeof(long));
// ugly, but should compile to single intrinsic unless O0 is set
if (mp_check(sizeof(mp_int_t) == sizeof(long))) {
return mp_clzl((unsigned long)x);
} else {
return mp_clzll((unsigned long long)x);
}
#if MP_INT_MAX == INT_MAX
return mp_clz((unsigned)x);
#elif MP_INT_MAX == LONG_MAX
return mp_clzl((unsigned long)x);
#elif MP_INT_MAX == LLONG_MAX
return mp_clzll((unsigned long long)x);
#else
#error Unexpected MP_INT_MAX value
#endif
#endif
}