summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
diff options
context:
space:
mode:
authorBrandt Bucher <brandtbucher@microsoft.com>2022-02-10 17:50:02 (GMT)
committerGitHub <noreply@github.com>2022-02-10 17:50:02 (GMT)
commitd7a5aca982def155a9255893cefcc1493c127c9c (patch)
tree853f98c7fe29a5fbb836640f64c8fe8442aa856f /Python/ceval.c
parent1a6411f5738895fa48d35a93435f7c7b6c17bdb9 (diff)
downloadcpython-d7a5aca982def155a9255893cefcc1493c127c9c.zip
cpython-d7a5aca982def155a9255893cefcc1493c127c9c.tar.gz
cpython-d7a5aca982def155a9255893cefcc1493c127c9c.tar.bz2
bpo-45923: Add `RESUME_QUICK` (GH-31244)
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index ffce6b7..5eb9150 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1734,9 +1734,6 @@ handle_eval_breaker:
}
TARGET(RESUME) {
- assert(tstate->cframe == &cframe);
- assert(frame == cframe.current_frame);
-
int err = _Py_IncrementCountAndMaybeQuicken(frame->f_code);
if (err) {
if (err < 0) {
@@ -1747,6 +1744,13 @@ handle_eval_breaker:
first_instr = frame->f_code->co_firstinstr;
next_instr = first_instr + nexti;
}
+ JUMP_TO_INSTRUCTION(RESUME_QUICK);
+ }
+
+ TARGET(RESUME_QUICK) {
+ PREDICTED(RESUME_QUICK);
+ assert(tstate->cframe == &cframe);
+ assert(frame == cframe.current_frame);
frame->f_state = FRAME_EXECUTING;
if (_Py_atomic_load_relaxed(eval_breaker) && oparg < 2) {
goto handle_eval_breaker;
@@ -4004,7 +4008,6 @@ handle_eval_breaker:
TARGET(JUMP_ABSOLUTE) {
PREDICTED(JUMP_ABSOLUTE);
- assert(oparg < INSTR_OFFSET());
int err = _Py_IncrementCountAndMaybeQuicken(frame->f_code);
if (err) {
if (err < 0) {
@@ -4015,9 +4018,7 @@ handle_eval_breaker:
first_instr = frame->f_code->co_firstinstr;
next_instr = first_instr + nexti;
}
- JUMPTO(oparg);
- CHECK_EVAL_BREAKER();
- DISPATCH();
+ JUMP_TO_INSTRUCTION(JUMP_ABSOLUTE_QUICK);
}
TARGET(JUMP_NO_INTERRUPT) {
@@ -4032,6 +4033,7 @@ handle_eval_breaker:
}
TARGET(JUMP_ABSOLUTE_QUICK) {
+ PREDICTED(JUMP_ABSOLUTE_QUICK);
assert(oparg < INSTR_OFFSET());
JUMPTO(oparg);
CHECK_EVAL_BREAKER();