cpython/Python
mpage 09c240f20c
gh-115999: Specialize `LOAD_GLOBAL` in free-threaded builds (#126607)
Enable specialization of LOAD_GLOBAL in free-threaded builds.

Thread-safety of specialization in free-threaded builds is provided by the following:

A critical section is held on both the globals and builtins objects during specialization. This ensures we get an atomic view of both builtins and globals during specialization.
Generation of new keys versions is made atomic in free-threaded builds.
Existing helpers are used to atomically modify the opcode.
Thread-safety of specialized instructions in free-threaded builds is provided by the following:

Relaxed atomics are used when loading and storing dict keys versions. This avoids potential data races as the dict keys versions are read without holding the dictionary's per-object lock in version guards.
Dicts keys objects are passed from keys version guards to the downstream uops. This ensures that we are loading from the correct offset in the keys object. Once a unicode key has been stored in a keys object for a combined dictionary in free-threaded builds, the offset that it is stored in will never be reused for a different key. Once the version guard passes, we know that we are reading from the correct offset.
The dictionary read fast-path is used to read values from the dictionary once we know the correct offset.
2024-11-21 11:22:21 -08:00
..
clinic gh-126579: Adapt sys.audit() to Argument Clinic (GH-126580) 2024-11-08 13:11:44 +00:00
frozen_modules gh-97669: Create Tools/build/ directory (#97963) 2022-10-17 12:01:00 +02:00
Python-ast.c gh-126105: Fix crash in `ast` module, when `._fields` is deleted (#126115) 2024-10-29 17:42:48 +02:00
Python-tokenize.c gh-115754: Use Py_GetConstant(Py_CONSTANT_EMPTY_STR) (#125194) 2024-10-09 17:15:23 +02:00
README
_warnings.c gh-126209: Fix inconsistency of `skip_file_prefixes` in `warnings.warn`'s C and Python implementations (GH-126329) 2024-11-12 13:01:56 +01:00
asdl.c bpo-43244: Remove ast.h, asdl.h, Python-ast.h headers (GH-24933) 2021-03-23 20:47:40 +01:00
asm_trampoline.S gh-120400 :Support Linux perf profile to see Python calls on RISC-V architecture (#120089) 2024-06-12 14:24:46 +01:00
assemble.c gh-121040: Use __attribute__((fallthrough)) (#121044) 2024-06-27 09:58:44 +00:00
ast.c gh-122313: Clean up deep recursion guarding code in the compiler (GH-122640) 2024-08-03 12:45:45 +03:00
ast_opt.c gh-123497: New limit for Python integers on 64-bit platforms (GH-123724) 2024-09-29 10:40:20 +03:00
ast_unparse.c gh-125268: Use static string for "1e309" in AST (#125272) 2024-10-10 16:21:29 -04:00
bltinmodule.c gh-126757: fix minor typo (GH-126758) 2024-11-12 13:23:40 -08:00
bootstrap_hash.c gh-121199: Use _Py__has_attribute() in timemodule.c (#121203) 2024-07-01 08:49:33 +00:00
brc.c Fix typos in documentation and comments (#119763) 2024-06-04 10:22:22 +00:00
bytecodes.c gh-115999: Specialize `LOAD_GLOBAL` in free-threaded builds (#126607) 2024-11-21 11:22:21 -08:00
ceval.c gh-114940: Add _Py_FOR_EACH_TSTATE_UNLOCKED(), and Friends (gh-127077) 2024-11-21 11:08:38 -07:00
ceval_gil.c gh-114940: Add _Py_FOR_EACH_TSTATE_UNLOCKED(), and Friends (gh-127077) 2024-11-21 11:08:38 -07:00
ceval_macros.h gh-120619: Strength reduce function guards, support 2-operand uop forms (GH-124846) 2024-11-09 11:35:33 +08:00
codecs.c gh-115754: Use Py_GetConstant(Py_CONSTANT_EMPTY_STR) (#125194) 2024-10-09 17:15:23 +02:00
codegen.c gh-126072: Set docstring attribute for module and class (#126231) 2024-11-08 15:13:18 +00:00
compile.c gh-120017: use 'do-while(0)' in some `{codegen,compile}.c` multi-line macros (#120018) 2024-11-07 23:03:11 +00:00
condvar.h gh-104530: Enable native Win32 condition variables by default (GH-104531) 2024-02-02 13:50:51 +00:00
config_common.h gh-76785: Add PyInterpreterConfig Helpers (gh-117170) 2024-04-02 20:35:52 +00:00
context.c gh-124872: Replace enter/exit events with "switched" (#125532) 2024-10-16 13:53:21 +02:00
critical_section.c gh-119344: Make critical section API public (#119353) 2024-06-21 15:50:18 -04:00
crossinterp.c gh-126986: Drop _PyInterpreterState_FailIfNotRunning() (gh-126988) 2024-11-19 00:11:12 +00:00
crossinterp_data_lookup.h gh-76785: Improved Subinterpreters Compatibility with 3.12 (2/2) (gh-126707) 2024-11-12 10:41:51 -07:00
crossinterp_exceptions.h gh-76785: Minor Cleanup of Exception-related Cross-interpreter State (gh-126602) 2024-11-11 14:49:41 -07:00
dtoa.c gh-121040: Use __attribute__((fallthrough)) (#121044) 2024-06-27 09:58:44 +00:00
dup2.c gh-108765: Python.h no longer includes <unistd.h> (#108783) 2023-09-02 16:50:18 +02:00
dynamic_annotations.c bpo-32241: Add the const qualifire to declarations of umodifiable strings. (#4748) 2017-12-12 13:55:04 +02:00
dynload_hpux.c gh-88402: Add new sysconfig variables on Windows (GH-110049) 2023-10-04 22:50:29 +00:00
dynload_shlib.c gh-88402: Add new sysconfig variables on Windows (GH-110049) 2023-10-04 22:50:29 +00:00
dynload_stub.c gh-88402: Add new sysconfig variables on Windows (GH-110049) 2023-10-04 22:50:29 +00:00
dynload_win.c gh-88402: Add new sysconfig variables on Windows (GH-110049) 2023-10-04 22:50:29 +00:00
emscripten_signal.c GH-108614: Unbreak emscripten build (GH-109132) 2023-09-08 17:54:45 +01:00
emscripten_trampoline.c gh-121698 Emscripten: Use updated WebAssembly type reflection proposal (GH-121699) 2024-07-14 11:25:09 +02:00
errors.c gh-125604: Move _Py_AuditHookEntry, etc. Out of pycore_runtime.h (gh-125605) 2024-10-18 09:26:08 -06:00
executor_cases.c.h gh-115999: Specialize `LOAD_GLOBAL` in free-threaded builds (#126607) 2024-11-21 11:22:21 -08:00
fileutils.c gh-126780: Fix `ntpath.normpath()` for drive-relative paths (GH-126801) 2024-11-21 14:43:36 +00:00
flowgraph.c GH-125837: Split `LOAD_CONST` into three. (GH-125972) 2024-10-29 11:15:42 +00:00
formatter_unicode.c gh-115754: Use Py_GetConstant(Py_CONSTANT_EMPTY_STR) (#125194) 2024-10-09 17:15:23 +02:00
frame.c gh-115999: Implement thread-local bytecode and enable specialization for `BINARY_OP` (#123926) 2024-11-04 11:13:32 -08:00
frozen.c gh-108716: Cleanup remaining deepfreeze infrastructure (#116919) 2024-03-18 11:13:11 -07:00
frozenmain.c gh-105716: Fix _PyInterpreterState_IsRunningMain() For Embedders (gh-117140) 2024-03-21 18:20:20 -06:00
future.c gh-126139: Improve error message location for future statement with unknown feature (#126140) 2024-10-29 23:57:59 +00:00
gc.c GH-127010: Don't lazily track and untrack dicts (GH-127027) 2024-11-20 16:41:20 +00:00
gc_free_threading.c gh-114940: Add _Py_FOR_EACH_TSTATE_UNLOCKED(), and Friends (gh-127077) 2024-11-21 11:08:38 -07:00
gc_gil.c gh-100240: Use a consistent implementation for freelists (#121934) 2024-07-22 12:08:27 -04:00
generated_cases.c.h gh-115999: Specialize `LOAD_GLOBAL` in free-threaded builds (#126607) 2024-11-21 11:22:21 -08:00
getargs.c gh-122943: Add the varpos parameter in _PyArg_UnpackKeywords (GH-126564) 2024-11-08 14:23:50 +02:00
getcompiler.c closes bpo-43278: remove unnecessary leading '\n' from COMPILER when build with GCC/Clang (GH-24606) 2021-02-25 20:24:21 -08:00
getcopyright.c gh-126133: Only use start year in PSF copyright, remove end years (#126236) 2024-11-12 15:59:19 +02:00
getopt.c gh-110079: Remove extern "C" { ...} in C code (#110080) 2023-09-29 10:56:49 +02:00
getplatform.c bpo-32150: Expand tabs to spaces in C files. (#4583) 2017-11-28 17:56:10 +02:00
getversion.c gh-119132: Update sys.version to identify free-threaded or not. (gh-119134) 2024-05-18 19:44:40 +00:00
hamt.c gh-125196: Use PyUnicodeWriter in HAMT (#125458) 2024-10-15 09:47:36 +00:00
hashtable.c gh-111545: Add Py_HashPointer() function (#112096) 2023-12-06 15:09:22 +01:00
import.c gh-126688: Reinit import lock after fork (#126692) 2024-11-12 15:53:58 -05:00
importdl.c gh-122907: Fix Builds Without HAVE_DYNAMIC_LOADING Set (gh-122952) 2024-08-13 14:44:57 -06:00
index_pool.c gh-115999: Implement thread-local bytecode and enable specialization for `BINARY_OP` (#123926) 2024-11-04 11:13:32 -08:00
initconfig.c gh-115999: Implement thread-local bytecode and enable specialization for `BINARY_OP` (#123926) 2024-11-04 11:13:32 -08:00
instruction_sequence.c gh-117680: Fix msvc warning in instruction_sequence.c (#118326) 2024-04-26 17:20:30 +01:00
instrumentation.c gh-114940: Add _Py_FOR_EACH_TSTATE_UNLOCKED(), and Friends (gh-127077) 2024-11-21 11:08:38 -07:00
interpconfig.c gh-76785: Fix a Refleak in _interpreters.new_config() (gh-117491) 2024-04-03 01:10:26 +00:00
intrinsics.c gh-74929: Implement PEP 667 (GH-115153) 2024-05-04 12:12:10 +01:00
jit.c GH-126195: Use M1 JIT memory protection APIs (GH-126196) 2024-11-11 17:20:10 -08:00
legacy_tracing.c gh-125604: Move _Py_AuditHookEntry, etc. Out of pycore_runtime.h (gh-125605) 2024-10-18 09:26:08 -06:00
lock.c gh-125139: use `_PyRecursiveMutex` in `_thread.RLock` (#125144) 2024-10-14 14:06:31 +05:30
marshal.c gh-125063: marshal: Add version 5, improve documentation (GH-126829) 2024-11-15 13:48:57 +01:00
modsupport.c gh-121040: Use __attribute__((fallthrough)) (#121044) 2024-06-27 09:58:44 +00:00
mysnprintf.c Add a warning message about PyOS_snprintf (#95993) 2022-10-07 11:49:53 -07:00
mystrtoul.c gh-108765: Python.h no longer includes <ctype.h> (#108831) 2023-09-03 18:54:27 +02:00
object_stack.c gh-100240: Use a consistent implementation for freelists (#121934) 2024-07-22 12:08:27 -04:00
opcode_targets.h GH-125837: Split `LOAD_CONST` into three. (GH-125972) 2024-10-29 11:15:42 +00:00
optimizer.c gh-115999: Specialize `LOAD_GLOBAL` in free-threaded builds (#126607) 2024-11-21 11:22:21 -08:00
optimizer_analysis.c gh-120619: Strength reduce function guards, support 2-operand uop forms (GH-124846) 2024-11-09 11:35:33 +08:00
optimizer_bytecodes.c gh-120619: Strength reduce function guards, support 2-operand uop forms (GH-124846) 2024-11-09 11:35:33 +08:00
optimizer_cases.c.h gh-120619: Strength reduce function guards, support 2-operand uop forms (GH-124846) 2024-11-09 11:35:33 +08:00
optimizer_symbols.c gh-120642: Move private PyCode APIs to the internal C API (#120643) 2024-06-26 13:54:03 +02:00
parking_lot.c gh-76785: Improved Subinterpreters Compatibility with 3.12 (1/2) (gh-126704) 2024-11-11 15:58:46 -07:00
pathconfig.c gh-117987: Restore several functions removed in Python 3.13 alpha 1 (GH-117993) 2024-04-18 15:20:38 +02:00
perf_jit_trampoline.c GH-118844: Fix build failures when combining --disable-gil with --enable-experimental-jit (GH-118935) 2024-05-11 16:19:31 -07:00
perf_trampoline.c gh-118518: Allow perf to work without frame pointers (#112254) 2024-05-05 03:07:29 +02:00
preconfig.c gh-106320: Remove private pylifecycle.h functions (#106400) 2023-07-04 09:41:43 +00:00
pyarena.c Chore: Fix typo in `pyarena.c` (#126527) 2024-11-07 16:37:41 +01:00
pyctype.c
pyfpe.c bpo-46315: Add ifdef HAVE_ feature checks for WASI compatibility (GH-30507) 2022-01-13 09:46:04 +01:00
pyhash.c gh-122854: Add Py_HashBuffer() function (#122855) 2024-08-30 15:42:27 +00:00
pylifecycle.c gh-126255: Ignore warning about JIT being deactivated when perf support is active in `test_embed.InitConfigTests.test_initconfig_api` (#126302) 2024-11-01 23:10:58 +00:00
pymath.c bpo-45440: Remove pymath.c fallbacks (GH-28977) 2021-10-15 19:45:34 +02:00
pystate.c gh-114940: Add _Py_FOR_EACH_TSTATE_UNLOCKED(), and Friends (gh-127077) 2024-11-21 11:08:38 -07:00
pystrcmp.c gh-108767: Replace ctype.h functions with pyctype.h functions (#108772) 2023-09-01 18:36:53 +02:00
pystrhex.c gh-108765: pystrhex: Replace stdlib.h abs() with Py_ABS() (#108830) 2023-09-02 23:15:54 +02:00
pystrtod.c gh-120026: soft deprecate Py_HUGE_VAL macro (#120027) 2024-11-01 22:04:31 +00:00
pythonrun.c gh-125842: Fix `sys.exit(0xffff_ffff)` on Windows (#125896) 2024-10-24 12:03:50 -04:00
pytime.c gh-111513: Improve datetime.fromtimestamp's error message (#124249) 2024-09-20 14:42:43 +02:00
qsbr.c Fix typos in comments (#120481) 2024-06-19 23:16:14 -04:00
specialize.c gh-115999: Specialize `LOAD_GLOBAL` in free-threaded builds (#126607) 2024-11-21 11:22:21 -08:00
stdlib_module_names.h gh-123892: Add "_wmi" to sys.stdlib_module_names (#123893) 2024-09-10 09:54:17 +00:00
structmember.c gh-117657: Fix `__slots__` thread safety in free-threaded build (#119368) 2024-06-17 18:44:54 +00:00
suggestions.c Fixes loop variables to be the same types as their limit (GH-120958) 2024-06-24 17:11:47 +01:00
symtable.c gh-126072: Set docstring attribute for module and class (#126231) 2024-11-08 15:13:18 +00:00
sysmodule.c gh-126579: Adapt sys.audit() to Argument Clinic (GH-126580) 2024-11-08 13:11:44 +00:00
thread.c gh-110850: Cleanup PyTime API: PyTime_t are nanoseconds (#115753) 2024-02-21 11:46:00 +01:00
thread_nt.h gh-87135: Hang non-main threads that attempt to acquire the GIL during finalization (GH-105805) 2024-10-02 09:17:49 -07:00
thread_pthread.h gh-87135: Hang non-main threads that attempt to acquire the GIL during finalization (GH-105805) 2024-10-02 09:17:49 -07:00
thread_pthread_stubs.h gh-125161: return non zero value in pthread_self on wasi (#125303) 2024-10-13 20:59:41 +05:30
tier2_engine.md Docs: fix spelling of the word 'transferring' (#116641) 2024-03-13 23:53:32 +01:00
traceback.c gh-117764: Fix and add signatures for many builtins (GH-117769) 2024-04-12 13:56:41 +03:00
tracemalloc.c gh-123923: Defer refcounting for `f_executable` in `_PyInterpreterFrame` (#123924) 2024-09-12 12:37:06 -04:00
uniqueid.c gh-124218: Use per-thread reference counting for globals and builtins (#125713) 2024-10-21 12:51:29 -04:00
vm-state.md Fix typos in documentation and comments (#119763) 2024-06-04 10:22:22 +00:00

README

Miscellaneous source files for the main Python shared library