]> git.saurik.com Git - apple/objc4.git/blob - runtime/a1a2-blocktramps-arm.s
objc4-723.tar.gz
[apple/objc4.git] / runtime / a1a2-blocktramps-arm.s
1 #if __arm__
2
3 #include <arm/arch.h>
4 #include <mach/vm_param.h>
5
6 .syntax unified
7
8 .text
9
10 .private_extern __a1a2_tramphead
11 .private_extern __a1a2_firsttramp
12 .private_extern __a1a2_trampend
13
14 // Trampoline machinery assumes the trampolines are Thumb function pointers
15 #if !__thumb2__
16 # error sorry
17 #endif
18
19 .thumb
20 .thumb_func __a1a2_tramphead
21 .thumb_func __a1a2_firsttramp
22 .thumb_func __a1a2_trampend
23
24 .align PAGE_MAX_SHIFT
25 __a1a2_tramphead:
26 /*
27 r0 == self
28 r12 == pc of trampoline's first instruction + PC bias
29 lr == original return address
30 */
31
32 mov r1, r0 // _cmd = self
33
34 // Trampoline's data is one page before the trampoline text.
35 // Also correct PC bias of 4 bytes.
36 sub r12, #PAGE_MAX_SIZE
37 ldr r0, [r12, #-4] // self = block object
38 ldr pc, [r0, #12] // tail call block->invoke
39 // not reached
40
41 // Align trampolines to 8 bytes
42 .align 3
43
44 .macro TrampolineEntry
45 mov r12, pc
46 b __a1a2_tramphead
47 .align 3
48 .endmacro
49
50 .macro TrampolineEntryX16
51 TrampolineEntry
52 TrampolineEntry
53 TrampolineEntry
54 TrampolineEntry
55
56 TrampolineEntry
57 TrampolineEntry
58 TrampolineEntry
59 TrampolineEntry
60
61 TrampolineEntry
62 TrampolineEntry
63 TrampolineEntry
64 TrampolineEntry
65
66 TrampolineEntry
67 TrampolineEntry
68 TrampolineEntry
69 TrampolineEntry
70 .endmacro
71
72 .macro TrampolineEntryX256
73 TrampolineEntryX16
74 TrampolineEntryX16
75 TrampolineEntryX16
76 TrampolineEntryX16
77
78 TrampolineEntryX16
79 TrampolineEntryX16
80 TrampolineEntryX16
81 TrampolineEntryX16
82
83 TrampolineEntryX16
84 TrampolineEntryX16
85 TrampolineEntryX16
86 TrampolineEntryX16
87
88 TrampolineEntryX16
89 TrampolineEntryX16
90 TrampolineEntryX16
91 TrampolineEntryX16
92 .endmacro
93
94 .private_extern __a1a2_firsttramp
95 __a1a2_firsttramp:
96 // 2048-2 trampolines to fill 16K page
97 TrampolineEntryX256
98 TrampolineEntryX256
99 TrampolineEntryX256
100 TrampolineEntryX256
101
102 TrampolineEntryX256
103 TrampolineEntryX256
104 TrampolineEntryX256
105
106 TrampolineEntryX16
107 TrampolineEntryX16
108 TrampolineEntryX16
109 TrampolineEntryX16
110
111 TrampolineEntryX16
112 TrampolineEntryX16
113 TrampolineEntryX16
114 TrampolineEntryX16
115
116 TrampolineEntryX16
117 TrampolineEntryX16
118 TrampolineEntryX16
119 TrampolineEntryX16
120
121 TrampolineEntryX16
122 TrampolineEntryX16
123 TrampolineEntryX16
124
125 TrampolineEntry
126 TrampolineEntry
127 TrampolineEntry
128 TrampolineEntry
129
130 TrampolineEntry
131 TrampolineEntry
132 TrampolineEntry
133 TrampolineEntry
134
135 TrampolineEntry
136 TrampolineEntry
137 TrampolineEntry
138 TrampolineEntry
139
140 TrampolineEntry
141 TrampolineEntry
142 // TrampolineEntry
143 // TrampolineEntry
144
145 .private_extern __a1a2_trampend
146 __a1a2_trampend:
147
148 #endif