]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-129149: Add fast path for medium-sized integers in `PyLong_From*` functions (...
authorChris Eibl <138194463+chris-eibl@users.noreply.github.com>
Sun, 30 Mar 2025 08:12:42 +0000 (10:12 +0200)
committerGitHub <noreply@github.com>
Sun, 30 Mar 2025 08:12:42 +0000 (10:12 +0200)
Add a fast path for medium-sized integers in `PyLong_FromInt{32,64}` and `PyLong_FromUInt{32,64}`.

Misc/NEWS.d/next/Core_and_Builtins/2025-03-13-20-23-02.gh-issue-129149.z42wkm.rst [new file with mode: 0644]
Objects/longobject.c

diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-03-13-20-23-02.gh-issue-129149.z42wkm.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-03-13-20-23-02.gh-issue-129149.z42wkm.rst
new file mode 100644 (file)
index 0000000..9da7731
--- /dev/null
@@ -0,0 +1,4 @@
+Add fast path for small and medium-size integers in
+:c:func:`PyLong_FromInt32`, :c:func:`PyLong_FromUInt32`,
+:c:func:`PyLong_FromInt64` and
+:c:func:`PyLong_FromUInt64`. Patch by Chris Eibl.
index 984381ff4969d073c9fa7157d720cf9ecbc02dbb..d0c3bb145ac28d6f831c86777875b1de0aad28be 100644 (file)
@@ -6749,16 +6749,24 @@ PyUnstable_Long_CompactValue(const PyLongObject* op) {
 
 
 PyObject* PyLong_FromInt32(int32_t value)
-{ return PyLong_FromNativeBytes(&value, sizeof(value), -1); }
+{
+    PYLONG_FROM_INT(uint32_t, int32_t, value);
+}
 
 PyObject* PyLong_FromUInt32(uint32_t value)
-{ return PyLong_FromUnsignedNativeBytes(&value, sizeof(value), -1); }
+{
+    PYLONG_FROM_UINT(uint32_t, value);
+}
 
 PyObject* PyLong_FromInt64(int64_t value)
-{ return PyLong_FromNativeBytes(&value, sizeof(value), -1); }
+{
+    PYLONG_FROM_INT(uint64_t, int64_t, value);
+}
 
 PyObject* PyLong_FromUInt64(uint64_t value)
-{ return PyLong_FromUnsignedNativeBytes(&value, sizeof(value), -1); }
+{
+    PYLONG_FROM_UINT(uint64_t, value);
+}
 
 #define LONG_TO_INT(obj, value, type_name) \
     do { \