diff options
author | T. Wouters <thomas@python.org> | 2025-01-29 00:07:56 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-29 00:07:56 (GMT) |
commit | 5c930a26fb78c40929f1b894efee1b07c6d828fd (patch) | |
tree | 393ee4f7fb4c2dc4f0736144647c985e771ca87e /Python/generated_cases.c.h | |
parent | 789390872b16e1c8cc681605bf100d2d7b3e9111 (diff) | |
download | cpython-5c930a26fb78c40929f1b894efee1b07c6d828fd.zip cpython-5c930a26fb78c40929f1b894efee1b07c6d828fd.tar.gz cpython-5c930a26fb78c40929f1b894efee1b07c6d828fd.tar.bz2 |
gh-115999: Enable free-threaded specialization of LOAD_CONST (#129365)
Enable free-threaded specialization of LOAD_CONST.
Diffstat (limited to 'Python/generated_cases.c.h')
-rw-r--r-- | Python/generated_cases.c.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index ad044e6..5dd2f37 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -3318,7 +3318,7 @@ } OPCODE_DEFERRED_INC(COMPARE_OP); ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter); - #endif /* ENABLE_SPECIALIZATION */ + #endif /* ENABLE_SPECIALIZATION_FT */ } // _COMPARE_OP { @@ -6035,11 +6035,21 @@ * marshalling can intern strings and make them immortal. */ PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg); value = PyStackRef_FromPyObjectNew(obj); - #if ENABLE_SPECIALIZATION + #if ENABLE_SPECIALIZATION_FT + #ifdef Py_GIL_DISABLED + uint8_t expected = LOAD_CONST; + if (!_Py_atomic_compare_exchange_uint8( + &this_instr->op.code, &expected, + _Py_IsImmortal(obj) ? LOAD_CONST_IMMORTAL : LOAD_CONST_MORTAL)) { + // We might lose a race with instrumentation, which we don't care about. + assert(expected >= MIN_INSTRUMENTED_OPCODE); + } + #else if (this_instr->op.code == LOAD_CONST) { this_instr->op.code = _Py_IsImmortal(obj) ? LOAD_CONST_IMMORTAL : LOAD_CONST_MORTAL; } #endif + #endif stack_pointer[0] = value; stack_pointer += 1; assert(WITHIN_STACK_BOUNDS()); |