summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2021-09-29 12:16:13 (GMT)
committerGitHub <noreply@github.com>2021-09-29 12:16:13 (GMT)
commit2be4c370c6bfe98a85aa01c5d9c333b804d26197 (patch)
tree85db304bdc5a5cdad72a58fa4824f170486efa42 /Python/ceval.c
parent02fdd73a19464bafe9e5f98ecd17fd0a634c3f20 (diff)
downloadcpython-2be4c370c6bfe98a85aa01c5d9c333b804d26197.zip
cpython-2be4c370c6bfe98a85aa01c5d9c333b804d26197.tar.gz
cpython-2be4c370c6bfe98a85aa01c5d9c333b804d26197.tar.bz2
Move predispatch logic from DISPATCH macro to juts before switch. Reduces size of each opocde in interpreter. (GH-28475)
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 429ddb8..686250e 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1297,12 +1297,6 @@ eval_frame_handle_pending(PyThreadState *tstate)
#if USE_COMPUTED_GOTOS
#define TARGET(op) op: TARGET_##op
-#define DISPATCH_GOTO() goto *opcode_targets[opcode]
-#else
-#define TARGET(op) op
-#define DISPATCH_GOTO() goto dispatch_opcode
-#endif
-
#define DISPATCH() \
{ \
if (trace_info.cframe.use_tracing OR_DTRACE_LINE OR_LLTRACE) { \
@@ -1310,8 +1304,13 @@ eval_frame_handle_pending(PyThreadState *tstate)
} \
f->f_lasti = INSTR_OFFSET(); \
NEXTOPARG(); \
- DISPATCH_GOTO(); \
+ goto *opcode_targets[opcode]; \
}
+#else
+#define TARGET(op) op
+#define DISPATCH() goto predispatch;
+#endif
+
#define CHECK_EVAL_BREAKER() \
if (_Py_atomic_load_relaxed(eval_breaker)) { \
@@ -1827,7 +1826,16 @@ main_loop:
}
}
#endif
+#if USE_COMPUTED_GOTOS == 0
+ goto dispatch_opcode;
+ predispatch:
+ if (trace_info.cframe.use_tracing OR_DTRACE_LINE OR_LLTRACE) {
+ goto tracing_dispatch;
+ }
+ f->f_lasti = INSTR_OFFSET();
+ NEXTOPARG();
+#endif
dispatch_opcode:
#ifdef DYNAMIC_EXECUTION_PROFILE
#ifdef DXPAIRS