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