diff options
author | Guido van Rossum <guido@python.org> | 2023-07-13 19:14:51 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-13 19:14:51 (GMT) |
commit | e6e0ea0113748db1e9fe675be6db9041cd5cce1f (patch) | |
tree | ea6e1d899151e58ec7b88a7e2e969470eb9ef042 /Python/executor_cases.c.h | |
parent | 2f3ee02c22c4b42bf6075a75104c3cfbb4eb4c86 (diff) | |
download | cpython-e6e0ea0113748db1e9fe675be6db9041cd5cce1f.zip cpython-e6e0ea0113748db1e9fe675be6db9041cd5cce1f.tar.gz cpython-e6e0ea0113748db1e9fe675be6db9041cd5cce1f.tar.bz2 |
gh-106701: Move the hand-written Tier 2 uops to bytecodes.c (#106702)
This moves EXIT_TRACE, SAVE_IP, JUMP_TO_TOP, and
_POP_JUMP_IF_{FALSE,TRUE} from ceval.c to bytecodes.c.
They are no less special than before, but this way
they are discoverable o the copy-and-patch tooling.
Diffstat (limited to 'Python/executor_cases.c.h')
-rw-r--r-- | Python/executor_cases.c.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 805ea06..ce54755 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -1987,3 +1987,39 @@ stack_pointer[-(2 + (oparg-2))] = top; break; } + + case _POP_JUMP_IF_FALSE: { + PyObject *flag = stack_pointer[-1]; + if (Py_IsFalse(flag)) { + pc = oparg; + } + STACK_SHRINK(1); + break; + } + + case _POP_JUMP_IF_TRUE: { + PyObject *flag = stack_pointer[-1]; + if (Py_IsTrue(flag)) { + pc = oparg; + } + STACK_SHRINK(1); + break; + } + + case JUMP_TO_TOP: { + pc = 0; + break; + } + + case SAVE_IP: { + frame->prev_instr = ip_offset + oparg; + break; + } + + case EXIT_TRACE: { + frame->prev_instr--; // Back up to just before destination + _PyFrame_SetStackPointer(frame, stack_pointer); + Py_DECREF(self); + return frame; + break; + } |