summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c19
1 files changed, 2 insertions, 17 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 8e0be70..27304d3 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1063,31 +1063,16 @@ error_tier_two:
// Jump here from DEOPT_IF()
deoptimize:
- // On DEOPT_IF we just repeat the last instruction.
- // This presumes nothing was popped from the stack (nor pushed).
- frame->instr_ptr = next_uop[-1].target + _PyCode_CODE(_PyFrame_GetCode(frame));
+ next_instr = next_uop[-1].target + _PyCode_CODE(_PyFrame_GetCode(frame));
DPRINTF(2, "DEOPT: [UOp %d (%s), oparg %d, operand %" PRIu64 ", target %d @ %d -> %s]\n",
uopcode, _PyUOpName(uopcode), next_uop[-1].oparg, next_uop[-1].operand, next_uop[-1].target,
(int)(next_uop - current_executor->trace - 1),
_PyOpcode_OpName[frame->instr_ptr->op.code]);
OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
UOP_STAT_INC(uopcode, miss);
- frame->return_offset = 0; // Dispatch to frame->instr_ptr
- _PyFrame_SetStackPointer(frame, stack_pointer);
Py_DECREF(current_executor);
- // Fall through
-// Jump here from ENTER_EXECUTOR
-enter_tier_one:
- next_instr = frame->instr_ptr;
- goto resume_frame;
+ DISPATCH();
-// Jump here from _EXIT_TRACE
-exit_trace:
- _PyFrame_SetStackPointer(frame, stack_pointer);
- frame->instr_ptr = next_uop[-1].target + _PyCode_CODE(_PyFrame_GetCode(frame));
- Py_DECREF(current_executor);
- OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
- goto enter_tier_one;
}
#if defined(__GNUC__)
# pragma GCC diagnostic pop