mirror of https://github.com/python/cpython
bpo-45569: Change PYLONG_BITS_IN_DIGIT default to 30 (GH-30497)
This commit is contained in:
parent
ee1a8b336d
commit
025cbe7a9b
|
@ -35,8 +35,7 @@ General Options
|
||||||
|
|
||||||
Define the size in bits of Python :class:`int` digits: 15 or 30 bits.
|
Define the size in bits of Python :class:`int` digits: 15 or 30 bits.
|
||||||
|
|
||||||
By default, the number of bits is selected depending on ``sizeof(void*)``:
|
By default, the digit size is 30.
|
||||||
30 bits if ``void*`` size is 64-bit or larger, 15 bits otherwise.
|
|
||||||
|
|
||||||
Define the ``PYLONG_BITS_IN_DIGIT`` to ``15`` or ``30``.
|
Define the ``PYLONG_BITS_IN_DIGIT`` to ``15`` or ``30``.
|
||||||
|
|
||||||
|
|
|
@ -622,6 +622,16 @@ Build Changes
|
||||||
like Pyodide.
|
like Pyodide.
|
||||||
(Contributed by Christian Heimes and Ethan Smith in :issue:`40280`.)
|
(Contributed by Christian Heimes and Ethan Smith in :issue:`40280`.)
|
||||||
|
|
||||||
|
* CPython will now use 30-bit digits by default for the Python :class:`int`
|
||||||
|
implementation. Previously, the default was to use 30-bit digits on platforms
|
||||||
|
with ``SIZEOF_VOID_P >= 8``, and 15-bit digits otherwise. It's still possible
|
||||||
|
to explicitly request use of 15-bit digits via either the
|
||||||
|
``--enable-big-digits`` option to the configure script or (for Windows) the
|
||||||
|
``PYLONG_BITS_IN_DIGIT`` variable in ``PC/pyconfig.h``, but this option may
|
||||||
|
be removed at some point in the future. (Contributed by Mark Dickinson in
|
||||||
|
:issue:`45569`.)
|
||||||
|
|
||||||
|
|
||||||
C API Changes
|
C API Changes
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
|
|
@ -85,20 +85,12 @@ Used in: Py_SAFE_DOWNCAST
|
||||||
#define PY_INT32_T int32_t
|
#define PY_INT32_T int32_t
|
||||||
#define PY_INT64_T int64_t
|
#define PY_INT64_T int64_t
|
||||||
|
|
||||||
/* If PYLONG_BITS_IN_DIGIT is not defined then we'll use 30-bit digits if all
|
/* PYLONG_BITS_IN_DIGIT describes the number of bits per "digit" (limb) in the
|
||||||
the necessary integer types are available, and we're on a 64-bit platform
|
* PyLongObject implementation (longintrepr.h). It's currently either 30 or 15,
|
||||||
(as determined by SIZEOF_VOID_P); otherwise we use 15-bit digits.
|
* defaulting to 30. The 15-bit digit option may be removed in the future.
|
||||||
|
|
||||||
From pyodide: WASM has 32 bit pointers but has native 64 bit arithmetic
|
|
||||||
so it is more efficient to use 30 bit digits.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef PYLONG_BITS_IN_DIGIT
|
#ifndef PYLONG_BITS_IN_DIGIT
|
||||||
#if SIZEOF_VOID_P >= 8 || defined(__wasm__)
|
#define PYLONG_BITS_IN_DIGIT 30
|
||||||
# define PYLONG_BITS_IN_DIGIT 30
|
|
||||||
#else
|
|
||||||
# define PYLONG_BITS_IN_DIGIT 15
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* uintptr_t is the C9X name for an unsigned integral type such that a
|
/* uintptr_t is the C9X name for an unsigned integral type such that a
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
The build now defaults to using 30-bit digits for Python integers. Previously
|
||||||
|
either 15-bit or 30-bit digits would be selected, depending on the platform.
|
||||||
|
15-bit digits may still be selected using the ``--enable-big-digits=15`` option
|
||||||
|
to the ``configure`` script, or by defining ``PYLONG_BITS_IN_DIGIT`` in
|
||||||
|
``pyconfig.h``.
|
|
@ -1730,7 +1730,7 @@ Optional Features:
|
||||||
Doc/library/socket.rst (default is yes if supported)
|
Doc/library/socket.rst (default is yes if supported)
|
||||||
--enable-big-digits[=15|30]
|
--enable-big-digits[=15|30]
|
||||||
use big digits (30 or 15 bits) for Python longs
|
use big digits (30 or 15 bits) for Python longs
|
||||||
(default is system-dependent)]
|
(default is 30)]
|
||||||
--disable-test-modules don't build nor install test modules
|
--disable-test-modules don't build nor install test modules
|
||||||
|
|
||||||
Optional Packages:
|
Optional Packages:
|
||||||
|
|
|
@ -5084,7 +5084,7 @@ AC_CHECK_DECLS([RTLD_LAZY, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL, RTLD_NODELETE, RTL
|
||||||
# determine what size digit to use for Python's longs
|
# determine what size digit to use for Python's longs
|
||||||
AC_MSG_CHECKING([digit size for Python's longs])
|
AC_MSG_CHECKING([digit size for Python's longs])
|
||||||
AC_ARG_ENABLE(big-digits,
|
AC_ARG_ENABLE(big-digits,
|
||||||
AS_HELP_STRING([--enable-big-digits@<:@=15|30@:>@],[use big digits (30 or 15 bits) for Python longs (default is system-dependent)]]),
|
AS_HELP_STRING([--enable-big-digits@<:@=15|30@:>@],[use big digits (30 or 15 bits) for Python longs (default is 30)]]),
|
||||||
[case $enable_big_digits in
|
[case $enable_big_digits in
|
||||||
yes)
|
yes)
|
||||||
enable_big_digits=30 ;;
|
enable_big_digits=30 ;;
|
||||||
|
|
Loading…
Reference in New Issue