mirror of https://github.com/python/cpython
GH-119726: Use LDR for AArch64 trampolines (GH-121001)
This commit is contained in:
parent
1dc9a4f6b2
commit
966260841b
|
@ -0,0 +1,2 @@
|
||||||
|
Improve the speed and memory use of C function calls from JIT code on AArch64.
|
||||||
|
Patch by Diego Russo
|
|
@ -204,33 +204,20 @@ class Stencil:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.disassembly += [
|
self.disassembly += [
|
||||||
f"{base + 4 * 0:x}: d2800008 mov x8, #0x0",
|
f"{base + 4 * 0:x}: 58000048 ldr x8, 8",
|
||||||
f"{base + 4 * 0:016x}: R_AARCH64_MOVW_UABS_G0_NC {hole.symbol}",
|
f"{base + 4 * 1:x}: d61f0100 br x8",
|
||||||
f"{base + 4 * 1:x}: f2a00008 movk x8, #0x0, lsl #16",
|
f"{base + 4 * 2:x}: 00000000",
|
||||||
f"{base + 4 * 1:016x}: R_AARCH64_MOVW_UABS_G1_NC {hole.symbol}",
|
f"{base + 4 * 2:016x}: R_AARCH64_ABS64 {hole.symbol}",
|
||||||
f"{base + 4 * 2:x}: f2c00008 movk x8, #0x0, lsl #32",
|
f"{base + 4 * 3:x}: 00000000",
|
||||||
f"{base + 4 * 2:016x}: R_AARCH64_MOVW_UABS_G2_NC {hole.symbol}",
|
|
||||||
f"{base + 4 * 3:x}: f2e00008 movk x8, #0x0, lsl #48",
|
|
||||||
f"{base + 4 * 3:016x}: R_AARCH64_MOVW_UABS_G3 {hole.symbol}",
|
|
||||||
f"{base + 4 * 4:x}: d61f0100 br x8",
|
|
||||||
]
|
]
|
||||||
for code in [
|
for code in [
|
||||||
0xD2800008.to_bytes(4, sys.byteorder),
|
0x58000048.to_bytes(4, sys.byteorder),
|
||||||
0xF2A00008.to_bytes(4, sys.byteorder),
|
|
||||||
0xF2C00008.to_bytes(4, sys.byteorder),
|
|
||||||
0xF2E00008.to_bytes(4, sys.byteorder),
|
|
||||||
0xD61F0100.to_bytes(4, sys.byteorder),
|
0xD61F0100.to_bytes(4, sys.byteorder),
|
||||||
|
0x00000000.to_bytes(4, sys.byteorder),
|
||||||
|
0x00000000.to_bytes(4, sys.byteorder),
|
||||||
]:
|
]:
|
||||||
self.body.extend(code)
|
self.body.extend(code)
|
||||||
for i, kind in enumerate(
|
self.holes.append(hole.replace(offset=base + 8, kind="R_AARCH64_ABS64"))
|
||||||
[
|
|
||||||
"R_AARCH64_MOVW_UABS_G0_NC",
|
|
||||||
"R_AARCH64_MOVW_UABS_G1_NC",
|
|
||||||
"R_AARCH64_MOVW_UABS_G2_NC",
|
|
||||||
"R_AARCH64_MOVW_UABS_G3",
|
|
||||||
]
|
|
||||||
):
|
|
||||||
self.holes.append(hole.replace(offset=base + 4 * i, kind=kind))
|
|
||||||
self.trampolines[hole.symbol] = base
|
self.trampolines[hole.symbol] = base
|
||||||
|
|
||||||
def remove_jump(self, *, alignment: int = 1) -> None:
|
def remove_jump(self, *, alignment: int = 1) -> None:
|
||||||
|
|
Loading…
Reference in New Issue