diff options
Diffstat (limited to 'py/objint_mpz.c')
-rw-r--r-- | py/objint_mpz.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/py/objint_mpz.c b/py/objint_mpz.c index da02b1ea9b..6e1c3c5a84 100644 --- a/py/objint_mpz.c +++ b/py/objint_mpz.c @@ -43,6 +43,26 @@ #if MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_MPZ +#if MICROPY_PY_SYS_MAXSIZE +// Export value for sys.maxsize +#define DIG_MASK ((1 << MPZ_DIG_SIZE) - 1) +STATIC const mpz_dig_t maxsize_dig[MPZ_NUM_DIG_FOR_INT] = { + (INT_MAX >> MPZ_DIG_SIZE * 0) & DIG_MASK, + (INT_MAX >> MPZ_DIG_SIZE * 1) & DIG_MASK, + (INT_MAX >> MPZ_DIG_SIZE * 2) & DIG_MASK, + #if (INT_MAX >> MPZ_DIG_SIZE * 2) > DIG_MASK + (INT_MAX >> MPZ_DIG_SIZE * 3) & DIG_MASK, + (INT_MAX >> MPZ_DIG_SIZE * 4) & DIG_MASK, +// (INT_MAX >> MPZ_DIG_SIZE * 5) & DIG_MASK, + #endif +}; +const mp_obj_int_t mp_maxsize_obj = { + {&mp_type_int}, + {.fixed_dig = 1, .len = MPZ_NUM_DIG_FOR_INT, .alloc = MPZ_NUM_DIG_FOR_INT, .dig = (mpz_dig_t*)maxsize_dig} +}; +#undef DIG_MASK +#endif + STATIC mp_obj_int_t *mp_obj_int_new_mpz(void) { mp_obj_int_t *o = m_new_obj(mp_obj_int_t); o->base.type = &mp_type_int; |