GH-117062: Make _JUMP_TO_TOP a general absolute jump (GH-120854)

This commit is contained in:
Brandt Bucher 2024-06-24 08:35:10 -07:00 committed by GitHub
parent ce1064e4c9
commit a47abdb45d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 7 additions and 12 deletions

View File

@ -4149,9 +4149,7 @@ dummy_func(
} }
op(_JUMP_TO_TOP, (--)) { op(_JUMP_TO_TOP, (--)) {
#ifndef _Py_JIT JUMP_TO_JUMP_TARGET();
next_uop = &current_executor->trace[1];
#endif
} }
tier2 op(_SET_IP, (instr_ptr/4 --)) { tier2 op(_SET_IP, (instr_ptr/4 --)) {

View File

@ -4302,9 +4302,7 @@
} }
case _JUMP_TO_TOP: { case _JUMP_TO_TOP: {
#ifndef _Py_JIT JUMP_TO_JUMP_TARGET();
next_uop = &current_executor->trace[1];
#endif
break; break;
} }

View File

@ -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;
} }

View File

@ -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: "",
} }

View File

@ -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: