mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
JIT: Rename trampoline.c to shim.c (#142974)
This commit is contained in:
parent
4aef138325
commit
685272eb8a
7 changed files with 17 additions and 17 deletions
|
|
@ -123,7 +123,7 @@ _PyEval_EvalFrame(PyThreadState *tstate, _PyInterpreterFrame *frame, int throwfl
|
|||
|
||||
#ifdef _Py_TIER2
|
||||
#ifdef _Py_JIT
|
||||
_Py_CODEUNIT *_Py_LazyJitTrampoline(
|
||||
_Py_CODEUNIT *_Py_LazyJitShim(
|
||||
struct _PyExecutorObject *current_executor, _PyInterpreterFrame *frame,
|
||||
_PyStackRef *stack_pointer, PyThreadState *tstate
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1601,7 +1601,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
|
|||
}
|
||||
#ifdef _Py_TIER2
|
||||
#ifdef _Py_JIT
|
||||
_PyJitEntryFuncPtr _Py_jit_entry = _Py_LazyJitTrampoline;
|
||||
_PyJitEntryFuncPtr _Py_jit_entry = _Py_LazyJitShim;
|
||||
#else
|
||||
_PyJitEntryFuncPtr _Py_jit_entry = _PyTier2Interpreter;
|
||||
#endif
|
||||
|
|
@ -1617,7 +1617,7 @@ _PyTier2Interpreter(
|
|||
const _PyUOpInstruction *next_uop;
|
||||
int oparg;
|
||||
/* Set up "jit" state after entry from tier 1.
|
||||
* This mimics what the jit trampoline function does. */
|
||||
* This mimics what the jit shim function does. */
|
||||
tstate->jit_exit = NULL;
|
||||
_PyStackRef _tos_cache0 = PyStackRef_ZERO_BITS;
|
||||
_PyStackRef _tos_cache1 = PyStackRef_ZERO_BITS;
|
||||
|
|
|
|||
18
Python/jit.c
18
Python/jit.c
|
|
@ -672,20 +672,20 @@ _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction trace[], siz
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* One-off compilation of the jit entry trampoline
|
||||
/* One-off compilation of the jit entry shim
|
||||
* We compile this once only as it effectively a normal
|
||||
* function, but we need to use the JIT because it needs
|
||||
* to understand the jit-specific calling convention.
|
||||
*/
|
||||
static _PyJitEntryFuncPtr
|
||||
compile_trampoline(void)
|
||||
compile_shim(void)
|
||||
{
|
||||
_PyExecutorObject dummy;
|
||||
const StencilGroup *group;
|
||||
size_t code_size = 0;
|
||||
size_t data_size = 0;
|
||||
jit_state state = {0};
|
||||
group = &trampoline;
|
||||
group = &shim;
|
||||
code_size += group->code_size;
|
||||
data_size += group->data_size;
|
||||
combine_symbol_mask(group->trampoline_mask, state.trampolines.mask);
|
||||
|
|
@ -707,7 +707,7 @@ compile_trampoline(void)
|
|||
// Compile the shim, which handles converting between the native
|
||||
// calling convention and the calling convention used by jitted code
|
||||
// (which may be different for efficiency reasons).
|
||||
group = &trampoline;
|
||||
group = &shim;
|
||||
group->emit(code, data, &dummy, NULL, &state);
|
||||
code += group->code_size;
|
||||
data += group->data_size;
|
||||
|
|
@ -723,17 +723,17 @@ compile_trampoline(void)
|
|||
static PyMutex lazy_jit_mutex = { 0 };
|
||||
|
||||
_Py_CODEUNIT *
|
||||
_Py_LazyJitTrampoline(
|
||||
_Py_LazyJitShim(
|
||||
_PyExecutorObject *executor, _PyInterpreterFrame *frame, _PyStackRef *stack_pointer, PyThreadState *tstate
|
||||
) {
|
||||
PyMutex_Lock(&lazy_jit_mutex);
|
||||
if (_Py_jit_entry == _Py_LazyJitTrampoline) {
|
||||
_PyJitEntryFuncPtr trampoline = compile_trampoline();
|
||||
if (trampoline == NULL) {
|
||||
if (_Py_jit_entry == _Py_LazyJitShim) {
|
||||
_PyJitEntryFuncPtr shim = compile_shim();
|
||||
if (shim == NULL) {
|
||||
PyMutex_Unlock(&lazy_jit_mutex);
|
||||
Py_FatalError("Cannot allocate core JIT code");
|
||||
}
|
||||
_Py_jit_entry = trampoline;
|
||||
_Py_jit_entry = shim;
|
||||
}
|
||||
PyMutex_Unlock(&lazy_jit_mutex);
|
||||
return _Py_jit_entry(executor, frame, stack_pointer, tstate);
|
||||
|
|
|
|||
|
|
@ -490,7 +490,7 @@ static inline int check_interpreter_whence(long);
|
|||
#endif
|
||||
|
||||
extern _Py_CODEUNIT *
|
||||
_Py_LazyJitTrampoline(
|
||||
_Py_LazyJitShim(
|
||||
struct _PyExecutorObject *exec, _PyInterpreterFrame *frame, _PyStackRef *stack_pointer, PyThreadState *tstate
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -204,8 +204,8 @@ async def _build_stencils(self) -> dict[str, _stencils.StencilGroup]:
|
|||
with tempfile.TemporaryDirectory() as tempdir:
|
||||
work = pathlib.Path(tempdir).resolve()
|
||||
async with asyncio.TaskGroup() as group:
|
||||
coro = self._compile("trampoline", TOOLS_JIT / "trampoline.c", work)
|
||||
tasks.append(group.create_task(coro, name="trampoline"))
|
||||
coro = self._compile("shim", TOOLS_JIT / "shim.c", work)
|
||||
tasks.append(group.create_task(coro, name="shim"))
|
||||
template = TOOLS_JIT_TEMPLATE_C.read_text()
|
||||
for case, opname in cases_and_opnames:
|
||||
# Write out a copy of the template with *only* this case
|
||||
|
|
|
|||
|
|
@ -23,11 +23,11 @@ def _dump_footer(
|
|||
yield " symbol_mask got_mask;"
|
||||
yield "} StencilGroup;"
|
||||
yield ""
|
||||
yield f"static const StencilGroup trampoline = {groups['trampoline'].as_c('trampoline')};"
|
||||
yield f"static const StencilGroup shim = {groups['shim'].as_c('shim')};"
|
||||
yield ""
|
||||
yield "static const StencilGroup stencil_groups[MAX_UOP_REGS_ID + 1] = {"
|
||||
for opname, group in sorted(groups.items()):
|
||||
if opname == "trampoline":
|
||||
if opname == "shim":
|
||||
continue
|
||||
yield f" [{opname}] = {group.as_c(opname)},"
|
||||
yield "};"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue