mirror of
https://github.com/python/cpython.git
synced 2025-07-23 03:05:38 +00:00
GH-135904: Improve the JIT's performance on macOS (GH-136528)
This commit is contained in:
parent
a68ddea3bf
commit
3d8c38f6db
6 changed files with 73 additions and 61 deletions
11
Python/jit.c
11
Python/jit.c
|
@ -431,8 +431,10 @@ void patch_aarch64_trampoline(unsigned char *location, int ordinal, jit_state *s
|
|||
|
||||
#if defined(__aarch64__) || defined(_M_ARM64)
|
||||
#define TRAMPOLINE_SIZE 16
|
||||
#define DATA_ALIGN 8
|
||||
#else
|
||||
#define TRAMPOLINE_SIZE 0
|
||||
#define DATA_ALIGN 1
|
||||
#endif
|
||||
|
||||
// Generate and patch AArch64 trampolines. The symbols to jump to are stored
|
||||
|
@ -522,8 +524,9 @@ _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction trace[], siz
|
|||
// Round up to the nearest page:
|
||||
size_t page_size = get_page_size();
|
||||
assert((page_size & (page_size - 1)) == 0);
|
||||
size_t padding = page_size - ((code_size + state.trampolines.size + data_size) & (page_size - 1));
|
||||
size_t total_size = code_size + state.trampolines.size + data_size + padding;
|
||||
size_t code_padding = DATA_ALIGN - ((code_size + state.trampolines.size) & (DATA_ALIGN - 1));
|
||||
size_t padding = page_size - ((code_size + state.trampolines.size + code_padding + data_size) & (page_size - 1));
|
||||
size_t total_size = code_size + state.trampolines.size + code_padding + data_size + padding;
|
||||
unsigned char *memory = jit_alloc(total_size);
|
||||
if (memory == NULL) {
|
||||
return -1;
|
||||
|
@ -545,7 +548,7 @@ _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction trace[], siz
|
|||
// Loop again to emit the code:
|
||||
unsigned char *code = memory;
|
||||
state.trampolines.mem = memory + code_size;
|
||||
unsigned char *data = memory + code_size + state.trampolines.size;
|
||||
unsigned char *data = memory + code_size + state.trampolines.size + code_padding;
|
||||
// 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).
|
||||
|
@ -567,7 +570,7 @@ _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction trace[], siz
|
|||
code += group->code_size;
|
||||
data += group->data_size;
|
||||
assert(code == memory + code_size);
|
||||
assert(data == memory + code_size + state.trampolines.size + data_size);
|
||||
assert(data == memory + code_size + state.trampolines.size + code_padding + data_size);
|
||||
#ifdef MAP_JIT
|
||||
pthread_jit_write_protect_np(1);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue