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 index 00000000000000..9da77312cbb22d --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-03-13-20-23-02.gh-issue-129149.z42wkm.rst @@ -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. diff --git a/Objects/longobject.c b/Objects/longobject.c index 51ecbd9e0ee0bd..1c2f7f389366cf 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -6742,16 +6742,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 { \