◐ Shell
clean mode source ↗

bpo-46841: Don't use an oparg counter for `STORE_SUBSCR` by brandtbucher · Pull Request #31742 · python/cpython

Expand Up @@ -2267,13 +2267,16 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int Py_DECREF(v); Py_DECREF(container); Py_DECREF(sub); if (err != 0) if (err != 0) { goto error; } JUMPBY(INLINE_CACHE_ENTRIES_STORE_SUBSCR); DISPATCH(); }
TARGET(STORE_SUBSCR_ADAPTIVE) { if (oparg == 0) { _PyStoreSubscrCache *cache = (_PyStoreSubscrCache *)next_instr; if (cache->counter == 0) { PyObject *sub = TOP(); PyObject *container = SECOND(); next_instr--; Expand All @@ -2284,8 +2287,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int } else { STAT_INC(STORE_SUBSCR, deferred); // oparg is the adaptive cache counter UPDATE_PREV_INSTR_OPARG(next_instr, oparg - 1); cache->counter--; JUMP_TO_INSTRUCTION(STORE_SUBSCR); } } Expand All @@ -2312,6 +2314,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int Py_DECREF(old_value); Py_DECREF(sub); Py_DECREF(list); JUMPBY(INLINE_CACHE_ENTRIES_STORE_SUBSCR); NOTRACE_DISPATCH(); }
Expand All @@ -2328,6 +2331,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int if (err != 0) { goto error; } JUMPBY(INLINE_CACHE_ENTRIES_STORE_SUBSCR); DISPATCH(); }
Expand Down Expand Up @@ -5520,21 +5524,6 @@ opname ## _miss: \ JUMP_TO_INSTRUCTION(opname); \ }
#define MISS_WITH_OPARG_COUNTER(opname) \ opname ## _miss: \ { \ STAT_INC(opname, miss); \ uint8_t oparg = _Py_OPARG(next_instr[-1])-1; \ UPDATE_PREV_INSTR_OPARG(next_instr, oparg); \ assert(_Py_OPARG(next_instr[-1]) == oparg); \ if (oparg == 0) /* too many cache misses */ { \ oparg = ADAPTIVE_CACHE_BACKOFF; \ next_instr[-1] = _Py_MAKECODEUNIT(opname ## _ADAPTIVE, oparg); \ STAT_INC(opname, deopt); \ } \ JUMP_TO_INSTRUCTION(opname); \ }
MISS_WITH_INLINE_CACHE(LOAD_ATTR) MISS_WITH_INLINE_CACHE(STORE_ATTR) MISS_WITH_INLINE_CACHE(LOAD_GLOBAL) Expand All @@ -5545,7 +5534,7 @@ MISS_WITH_INLINE_CACHE(BINARY_OP) MISS_WITH_INLINE_CACHE(COMPARE_OP) MISS_WITH_INLINE_CACHE(BINARY_SUBSCR) MISS_WITH_INLINE_CACHE(UNPACK_SEQUENCE) MISS_WITH_OPARG_COUNTER(STORE_SUBSCR) MISS_WITH_INLINE_CACHE(STORE_SUBSCR)
binary_subscr_dict_error: { Expand Down