summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/using/configure.rst3
-rw-r--r--Doc/whatsnew/3.11.rst10
-rw-r--r--Include/pyport.h16
-rw-r--r--Misc/NEWS.d/next/Build/2022-01-09-11-24-54.bpo-45569.zCIENy.rst5
-rwxr-xr-xconfigure2
-rw-r--r--configure.ac2
6 files changed, 22 insertions, 16 deletions
diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst
index 771ad3c..f1c156c 100644
--- a/Doc/using/configure.rst
+++ b/Doc/using/configure.rst
@@ -35,8 +35,7 @@ General Options
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*)``:
- 30 bits if ``void*`` size is 64-bit or larger, 15 bits otherwise.
+ By default, the digit size is 30.
Define the ``PYLONG_BITS_IN_DIGIT`` to ``15`` or ``30``.
diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst
index 6a6c22c..96d6e26 100644
--- a/Doc/whatsnew/3.11.rst
+++ b/Doc/whatsnew/3.11.rst
@@ -622,6 +622,16 @@ Build Changes
like Pyodide.
(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
=============
diff --git a/Include/pyport.h b/Include/pyport.h
index 81b1bde..d27b3dd 100644
--- a/Include/pyport.h
+++ b/Include/pyport.h
@@ -85,20 +85,12 @@ Used in: Py_SAFE_DOWNCAST
#define PY_INT32_T int32_t
#define PY_INT64_T int64_t
-/* If PYLONG_BITS_IN_DIGIT is not defined then we'll use 30-bit digits if all
- the necessary integer types are available, and we're on a 64-bit platform
- (as determined by SIZEOF_VOID_P); otherwise we use 15-bit digits.
-
- From pyodide: WASM has 32 bit pointers but has native 64 bit arithmetic
- so it is more efficient to use 30 bit digits.
+/* PYLONG_BITS_IN_DIGIT describes the number of bits per "digit" (limb) in the
+ * PyLongObject implementation (longintrepr.h). It's currently either 30 or 15,
+ * defaulting to 30. The 15-bit digit option may be removed in the future.
*/
-
#ifndef PYLONG_BITS_IN_DIGIT
-#if SIZEOF_VOID_P >= 8 || defined(__wasm__)
-# define PYLONG_BITS_IN_DIGIT 30
-#else
-# define PYLONG_BITS_IN_DIGIT 15
-#endif
+#define PYLONG_BITS_IN_DIGIT 30
#endif
/* uintptr_t is the C9X name for an unsigned integral type such that a
diff --git a/Misc/NEWS.d/next/Build/2022-01-09-11-24-54.bpo-45569.zCIENy.rst b/Misc/NEWS.d/next/Build/2022-01-09-11-24-54.bpo-45569.zCIENy.rst
new file mode 100644
index 0000000..69716cd
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2022-01-09-11-24-54.bpo-45569.zCIENy.rst
@@ -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``.
diff --git a/configure b/configure
index b5a6e0c..1dee645 100755
--- a/configure
+++ b/configure
@@ -1730,7 +1730,7 @@ Optional Features:
Doc/library/socket.rst (default is yes if supported)
--enable-big-digits[=15|30]
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
Optional Packages:
diff --git a/configure.ac b/configure.ac
index 300d793..7b084a2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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
AC_MSG_CHECKING([digit size for Python's longs])
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
yes)
enable_big_digits=30 ;;