]> git.saurik.com Git - apple/objc4.git/blob - runtime/objc-blocktramps-arm64.s
objc4-781.tar.gz
[apple/objc4.git] / runtime / objc-blocktramps-arm64.s
1 #if __arm64__
2
3 #include <mach/vm_param.h>
4 #include "arm64-asm.h"
5
6 // Offset of block->invoke field.
7 #if __LP64__
8 // true arm64
9 # define BLOCK_INVOKE 16
10 #else
11 // arm64_32
12 # define BLOCK_INVOKE 12
13 #endif
14
15 .text
16 .globl __objc_blockTrampolineImpl
17 .globl __objc_blockTrampolineStart
18 .globl __objc_blockTrampolineLast
19
20 .align PAGE_MAX_SHIFT
21 __objc_blockTrampolineImpl:
22 L_objc_blockTrampolineImpl:
23 /*
24 x0 == self
25 x17 == address of called trampoline's data (2 pages before its code)
26 lr == original return address
27 */
28
29 mov x1, x0 // _cmd = self
30 ldr p0, [x17] // self = block object
31 add p15, p0, #BLOCK_INVOKE // x15 = &block->invoke
32 ldr p16, [x15] // x16 = block->invoke
33 TailCallBlockInvoke x16, x15
34
35 // pad up to TrampolineBlockPagePair header size
36 nop
37 nop
38 nop
39
40 .macro TrampolineEntry
41 // load address of trampoline data (two pages before this instruction)
42 adr x17, -2*PAGE_MAX_SIZE
43 b L_objc_blockTrampolineImpl
44 .endmacro
45
46 .macro TrampolineEntryX16
47 TrampolineEntry
48 TrampolineEntry
49 TrampolineEntry
50 TrampolineEntry
51
52 TrampolineEntry
53 TrampolineEntry
54 TrampolineEntry
55 TrampolineEntry
56
57 TrampolineEntry
58 TrampolineEntry
59 TrampolineEntry
60 TrampolineEntry
61
62 TrampolineEntry
63 TrampolineEntry
64 TrampolineEntry
65 TrampolineEntry
66 .endmacro
67
68 .macro TrampolineEntryX256
69 TrampolineEntryX16
70 TrampolineEntryX16
71 TrampolineEntryX16
72 TrampolineEntryX16
73
74 TrampolineEntryX16
75 TrampolineEntryX16
76 TrampolineEntryX16
77 TrampolineEntryX16
78
79 TrampolineEntryX16
80 TrampolineEntryX16
81 TrampolineEntryX16
82 TrampolineEntryX16
83
84 TrampolineEntryX16
85 TrampolineEntryX16
86 TrampolineEntryX16
87 TrampolineEntryX16
88 .endmacro
89
90 .align 3
91 __objc_blockTrampolineStart:
92 // 2048-4 trampolines to fill 16K page
93 TrampolineEntryX256
94 TrampolineEntryX256
95 TrampolineEntryX256
96 TrampolineEntryX256
97
98 TrampolineEntryX256
99 TrampolineEntryX256
100 TrampolineEntryX256
101
102 TrampolineEntryX16
103 TrampolineEntryX16
104 TrampolineEntryX16
105 TrampolineEntryX16
106
107 TrampolineEntryX16
108 TrampolineEntryX16
109 TrampolineEntryX16
110 TrampolineEntryX16
111
112 TrampolineEntryX16
113 TrampolineEntryX16
114 TrampolineEntryX16
115 TrampolineEntryX16
116
117 TrampolineEntryX16
118 TrampolineEntryX16
119 TrampolineEntryX16
120
121 TrampolineEntry
122 TrampolineEntry
123 TrampolineEntry
124 TrampolineEntry
125
126 TrampolineEntry
127 TrampolineEntry
128 TrampolineEntry
129 TrampolineEntry
130
131 TrampolineEntry
132 TrampolineEntry
133 TrampolineEntry
134 __objc_blockTrampolineLast:
135 TrampolineEntry
136
137 // TrampolineEntry
138 // TrampolineEntry
139 // TrampolineEntry
140 // TrampolineEntry
141
142 #endif