summaryrefslogtreecommitdiffstats
path: root/Include/internal/pycore_stackref.h
Commit message (Collapse)AuthorAgeFilesLines
* GH-127705: Add debug mode for `_PyStackRef`s inspired by HPy debug mode ↵Mark Shannon2024-12-201-0/+113
| | | | (GH-128121)
* gh-127022: Simplify `PyStackRef_FromPyObjectSteal` (#127024)Sam Gross2024-11-221-4/+10
| | | | | | | | | This gets rid of the immortal check in `PyStackRef_FromPyObjectSteal()`. Overall, this improves performance about 2% in the free threading build. This also renames `PyStackRef_Is()` to `PyStackRef_IsExactly()` because the macro requires that the tag bits of the arguments match, which is only true in certain special cases.
* GH-125323: Convert DECREF_INPUTS_AND_REUSE_FLOAT into a function that takes ↵Mark Shannon2024-10-141-0/+7
| | | | PyStackRefs. (GH-125439)
* gh-125323: Remove some unsafe Py_DECREFs in bytecodes.c, replacing them with ↵Ken Jin2024-10-141-0/+3
| | | | PyStackRef_CLOSEs (GH-125324)
* GH-120024: Tidy up pycore_stackref.h, splitting into GIL and free-threading ↵Mark Shannon2024-10-091-101/+65
| | | | sections (GH-125095)
* GH-121459: Streamline PyObject* to PyStackRef conversions by disallowing ↵Mark Shannon2024-10-071-5/+9
| | | | NULL pointers. (GH-124894)
* gh-124064: Fix -Wconversion warnings in pycore_{long,object}.h (#124177)Victor Stinner2024-09-171-3/+3
| | | | Change also the fix for pycore_gc.h and pycore_stackref.h: declare constants as uintptr_t, rather than casting constants.
* gh-124064: Fix -Wconversion warnings in pycore_{gc,list,stackref}.h (#124174)Victor Stinner2024-09-171-2/+2
|
* gh-123923: Defer refcounting for `f_executable` in `_PyInterpreterFrame` ↵Sam Gross2024-09-121-0/+12
| | | | | | | | (#123924) Use a `_PyStackRef` and defer the reference to `f_executable` when possible. This avoids some reference count contention in the common case of executing the same code object from multiple threads concurrently in the free-threaded build.
* gh-117376: Make `Py_DECREF` a macro in ceval.c in free-threaded build (#122975)Sam Gross2024-08-231-12/+9
| | | | | | | | | | | `Py_DECREF` and `PyStackRef_CLOSE` are now implemented as macros in the free-threaded build in ceval.c. There are two motivations; * MSVC has problems inlining functions in ceval.c in the PGO build. * We will want to mark escaping calls in order to spill the stack pointer in ceval.c and we will want to do this around `_Py_Dealloc` (or `_Py_MergeZeroLocalRefcount` or `_Py_DecRefShared`), not around the entire `Py_DECREF` or `PyStackRef_CLOSE` call.
* gh-117139: Garbage collector support for deferred refcounting (#122956)Sam Gross2024-08-151-3/+3
| | | | | | | | | | The free-threaded GC now visits interpreter stacks to keep objects that use deferred reference counting alive. Interpreter frames are zero initialized in the free-threaded GC so that the GC doesn't see garbage data. This is a temporary measure until stack spilling around escaping calls is implemented. Co-authored-by: Ken Jin <kenjin@python.org>
* GH-122034: Add StackRef variants of type checks to reduce the number of ↵Mark Shannon2024-07-251-0/+33
| | | | PyStackRef_AsPyObjectBorrow calls (GH-122037)
* gh-121263: Macro-ify most stackref functions for MSVC (GH-121270)Ken Jin2024-07-031-58/+30
| | | Macro-ify most stackref functions for MSVC
* gh-117139: Add _PyTuple_FromStackRefSteal and use it (#121244)Sam Gross2024-07-021-1/+1
| | | Avoids the extra conversion from stack refs to PyObjects.
* gh-117139: Convert the evaluation stack to stack refs (#118450)Ken Jin2024-06-261-109/+186
| | | | | | | | | | | | | | | | | This PR sets up tagged pointers for CPython. The general idea is to create a separate struct _PyStackRef for everything on the evaluation stack to store the bits. This forces the C compiler to warn us if we try to cast things or pull things out of the struct directly. Only for free threading: We tag the low bit if something is deferred - that means we skip incref and decref operations on it. This behavior may change in the future if Mark's plans to defer all objects in the interpreter loop pans out. This implies a strict stack reference discipline is required. ALL incref and decref operations on stackrefs must use the stackref variants. It is unsafe to untag something then do normal incref/decref ops on it. The new incref and decref variants are called dup and close. They mimic a "handle" API operating on these stackrefs. Please read Include/internal/pycore_stackref.h for more information! --------- Co-authored-by: Mark Shannon <9448417+markshannon@users.noreply.github.com>
* gh-117139: Fix missing semicolon (GH-118573)Ken Jin2024-05-041-1/+1
|
* gh-117139: Add header for tagged pointers (GH-118330)Ken Jin2024-04-301-0/+195
--------- Co-authored-by: Sam Gross <655866+colesbury@users.noreply.github.com>