3 #include <mach/vm_param.h>
7 .private_extern __a1a2_tramphead
8 .private_extern __a1a2_firsttramp
9 .private_extern __a1a2_trampend
16 x17 == address of called trampoline's data (1 page before its code)
17 lr == original return address
20 mov x1, x0 // _cmd = self
21 ldr x0, [x17] // self = block object
22 ldr x16, [x0, #16] // tail call block->invoke
25 // pad up to TrampolineBlockPagePair header size
29 .macro TrampolineEntry
30 // load address of trampoline data (one page before this instruction)
31 adr x17, -PAGE_MAX_SIZE
35 .macro TrampolineEntryX16
57 .macro TrampolineEntryX256
80 .private_extern __a1a2_firsttramp
82 // 2048-3 trampolines to fill 16K page
131 .private_extern __a1a2_trampend