summaryrefslogtreecommitdiffstats
path: root/Python/executor_cases.c.h
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2023-07-13 19:14:51 (GMT)
committerGitHub <noreply@github.com>2023-07-13 19:14:51 (GMT)
commite6e0ea0113748db1e9fe675be6db9041cd5cce1f (patch)
treeea6e1d899151e58ec7b88a7e2e969470eb9ef042 /Python/executor_cases.c.h
parent2f3ee02c22c4b42bf6075a75104c3cfbb4eb4c86 (diff)
downloadcpython-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.h36
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;
+ }