diff options
author | Mark Shannon <mark@hotpy.org> | 2021-09-29 12:16:13 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-29 12:16:13 (GMT) |
commit | 2be4c370c6bfe98a85aa01c5d9c333b804d26197 (patch) | |
tree | 85db304bdc5a5cdad72a58fa4824f170486efa42 /Python/ceval.c | |
parent | 02fdd73a19464bafe9e5f98ecd17fd0a634c3f20 (diff) | |
download | cpython-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.c | 22 |
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 |