GH-108614: Add RESUME_CHECK instruction (GH-108630)

This commit is contained in:
Mark Shannon 2023-09-07 14:39:03 +01:00 committed by GitHub
parent d485551c9d
commit 0858328ca2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 519 additions and 482 deletions

View file

@ -7,22 +7,15 @@
break;
}
case RESUME: {
assert(frame == tstate->current_frame);
/* Possibly combine this with eval breaker */
if (_PyFrame_GetCode(frame)->_co_instrumentation_version != tstate->interp->monitoring_version) {
int err = _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp);
if (err) goto error;
#if TIER_ONE
next_instr--;
#endif
#if TIER_TWO
goto deoptimize;
#endif
}
else if (oparg < 2) {
CHECK_EVAL_BREAKER();
}
case RESUME_CHECK: {
#if defined(__EMSCRIPTEN__)
DEOPT_IF(emscripten_signal_clock == 0, RESUME);
emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING;
#endif
/* Possibly combine these two checks */
DEOPT_IF(_PyFrame_GetCode(frame)->_co_instrumentation_version
!= tstate->interp->monitoring_version, RESUME);
DEOPT_IF(_Py_atomic_load_relaxed_int32(&tstate->interp->ceval.eval_breaker), RESUME);
break;
}