@@ -865,26 +865,24 @@ dummy_func(
865865res=PyStackRef_FromPyObjectSteal(res_o);
866866 }
867867868-op(_BINARY_SUBSCR_CHECK_FUNC, (container, unused--container, unused)) {
868+op(_BINARY_SUBSCR_CHECK_FUNC, (container, unused--container, unused, getitem)) {
869869PyTypeObject*tp=Py_TYPE(PyStackRef_AsPyObjectBorrow(container));
870870DEOPT_IF(!PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE));
871871PyHeapTypeObject*ht= (PyHeapTypeObject*)tp;
872-PyObject*getitem=ht->_spec_cache.getitem;
873-DEOPT_IF(getitem==NULL);
874-assert(PyFunction_Check(getitem));
875-uint32_tcached_version=ht->_spec_cache.getitem_version;
876-DEOPT_IF(((PyFunctionObject*)getitem)->func_version!=cached_version);
877-PyCodeObject*code= (PyCodeObject*)PyFunction_GET_CODE(getitem);
872+PyObject*getitem_o=FT_ATOMIC_LOAD_PTR_ACQUIRE(ht->_spec_cache.getitem);
873+DEOPT_IF(getitem_o==NULL);
874+assert(PyFunction_Check(getitem_o));
875+uint32_tcached_version=FT_ATOMIC_LOAD_UINT32_RELAXED(ht->_spec_cache.getitem_version);
876+DEOPT_IF(((PyFunctionObject*)getitem_o)->func_version!=cached_version);
877+PyCodeObject*code= (PyCodeObject*)PyFunction_GET_CODE(getitem_o);
878878assert(code->co_argcount==2);
879879DEOPT_IF(!_PyThreadState_HasStackSpace(tstate, code->co_framesize));
880+getitem=PyStackRef_FromPyObjectNew(getitem_o);
880881STAT_INC(BINARY_SUBSCR, hit);
881882 }
882883883-op(_BINARY_SUBSCR_INIT_CALL, (container, sub--new_frame: _PyInterpreterFrame* )) {
884-PyTypeObject*tp=Py_TYPE(PyStackRef_AsPyObjectBorrow(container));
885-PyHeapTypeObject*ht= (PyHeapTypeObject*)tp;
886-PyObject*getitem=ht->_spec_cache.getitem;
887-new_frame=_PyFrame_PushUnchecked(tstate, PyStackRef_FromPyObjectNew(getitem), 2, frame);
884+op(_BINARY_SUBSCR_INIT_CALL, (container, sub, getitem--new_frame: _PyInterpreterFrame* )) {
885+new_frame=_PyFrame_PushUnchecked(tstate, getitem, 2, frame);
888886new_frame->localsplus[0] =container;
889887new_frame->localsplus[1] =sub;
890888INPUTS_DEAD();