diff --git a/block_trampolines.S b/block_trampolines.S index add0e7f..bd6417f 100644 --- a/block_trampolines.S +++ b/block_trampolines.S @@ -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