GH-117062: Make _JUMP_TO_TOP a general absolute jump (GH-120854)
This commit is contained in:
parent
ce1064e4c9
commit
a47abdb45d
@ -4149,9 +4149,7 @@ dummy_func(
|
|||||||
}
|
}
|
||||||
|
|
||||||
op(_JUMP_TO_TOP, (--)) {
|
op(_JUMP_TO_TOP, (--)) {
|
||||||
#ifndef _Py_JIT
|
JUMP_TO_JUMP_TARGET();
|
||||||
next_uop = ¤t_executor->trace[1];
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tier2 op(_SET_IP, (instr_ptr/4 --)) {
|
tier2 op(_SET_IP, (instr_ptr/4 --)) {
|
||||||
|
4
Python/executor_cases.c.h
generated
4
Python/executor_cases.c.h
generated
@ -4302,9 +4302,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
case _JUMP_TO_TOP: {
|
case _JUMP_TO_TOP: {
|
||||||
#ifndef _Py_JIT
|
JUMP_TO_JUMP_TARGET();
|
||||||
next_uop = ¤t_executor->trace[1];
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1059,6 +1059,11 @@ prepare_for_execution(_PyUOpInstruction *buffer, int length)
|
|||||||
buffer[i].jump_target = 0;
|
buffer[i].jump_target = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (opcode == _JUMP_TO_TOP) {
|
||||||
|
assert(buffer[0].opcode == _START_EXECUTOR);
|
||||||
|
buffer[i].format = UOP_FORMAT_JUMP;
|
||||||
|
buffer[i].jump_target = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return next_spare;
|
return next_spare;
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,6 @@ class HoleValue(enum.Enum):
|
|||||||
ERROR_TARGET = enum.auto()
|
ERROR_TARGET = enum.auto()
|
||||||
# The index of the exit to be jumped through (exposed as _JIT_EXIT_INDEX):
|
# The index of the exit to be jumped through (exposed as _JIT_EXIT_INDEX):
|
||||||
EXIT_INDEX = enum.auto()
|
EXIT_INDEX = enum.auto()
|
||||||
# The base address of the machine code for the first uop (exposed as _JIT_TOP):
|
|
||||||
TOP = enum.auto()
|
|
||||||
# A hardcoded value of zero (used for symbol lookups):
|
# A hardcoded value of zero (used for symbol lookups):
|
||||||
ZERO = enum.auto()
|
ZERO = enum.auto()
|
||||||
|
|
||||||
@ -110,7 +108,6 @@ _HOLE_EXPRS = {
|
|||||||
HoleValue.JUMP_TARGET: "instruction_starts[instruction->jump_target]",
|
HoleValue.JUMP_TARGET: "instruction_starts[instruction->jump_target]",
|
||||||
HoleValue.ERROR_TARGET: "instruction_starts[instruction->error_target]",
|
HoleValue.ERROR_TARGET: "instruction_starts[instruction->error_target]",
|
||||||
HoleValue.EXIT_INDEX: "instruction->exit_index",
|
HoleValue.EXIT_INDEX: "instruction->exit_index",
|
||||||
HoleValue.TOP: "instruction_starts[1]",
|
|
||||||
HoleValue.ZERO: "",
|
HoleValue.ZERO: "",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,9 +105,6 @@ _JIT_ENTRY(_PyInterpreterFrame *frame, PyObject **stack_pointer, PyThreadState *
|
|||||||
UOP_STAT_INC(uopcode, execution_count);
|
UOP_STAT_INC(uopcode, execution_count);
|
||||||
|
|
||||||
// The actual instruction definitions (only one will be used):
|
// The actual instruction definitions (only one will be used):
|
||||||
if (uopcode == _JUMP_TO_TOP) {
|
|
||||||
PATCH_JUMP(_JIT_TOP);
|
|
||||||
}
|
|
||||||
switch (uopcode) {
|
switch (uopcode) {
|
||||||
#include "executor_cases.c.h"
|
#include "executor_cases.c.h"
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user