Implement AArch64 block trampolines.

main
David Chisnall 10 years ago
parent c6dd7d13b7
commit fecddec3f3

@ -15,8 +15,10 @@
# argument (the first block argument) and the _cmd parameter excised
.file "block_trampolines.S"
#if __arm__
#ifdef __ARM_ARCH
#ifdef __arm__
.syntax unified
#endif
.globl CDECL(__objc_block_trampoline_sret)
TYPE_DIRECTIVE(CDECL(__objc_block_trampoline_sret), %function)
.globl CDECL(__objc_block_trampoline_end_sret)
@ -100,6 +102,19 @@ CDECL(__objc_block_trampoline_sret):
jr $25
CDECL(__objc_block_trampoline_end_sret):
# endif
#elif defined(__ARM_ARCH_ISA_A64)
.macro trampoline arg0, arg1
adr x17, #-4096
mov \arg1, \arg0
ldp \arg0, x17, [x17]
br x17
.endm
CDECL(__objc_block_trampoline):
trampoline x0, x1
CDECL(__objc_block_trampoline_end):
CDECL(__objc_block_trampoline_sret):
trampoline x1, x2
CDECL(__objc_block_trampoline_end_sret):
#elif __arm__
CDECL(__objc_block_trampoline):
sub r12, pc, #4096

Loading…
Cancel
Save