]> git.saurik.com Git - apple/objc4.git/blame - runtime/a2a3-blocktramps-arm.s
objc4-646.tar.gz
[apple/objc4.git] / runtime / a2a3-blocktramps-arm.s
CommitLineData
8972963c
A
1#if __arm__
2
3#include <arm/arch.h>
7257e56c 4#include <mach/vm_param.h>
8972963c
A
5
6.syntax unified
7
8.text
9
8070259c
A
10 .private_extern __a2a3_tramphead
11 .private_extern __a2a3_firsttramp
12 .private_extern __a2a3_trampend
cd5f04f5 13
8070259c
A
14// Trampoline machinery assumes the trampolines are Thumb function pointers
15#if !__thumb2__
16# error sorry
cd5f04f5
A
17#endif
18
8070259c
A
19.thumb
20.thumb_func __a2a3_tramphead
21.thumb_func __a2a3_firsttramp
22.thumb_func __a2a3_trampend
23
24.align PAGE_MAX_SHIFT
8972963c
A
25__a2a3_tramphead:
26 /*
8972963c 27 r1 == self
8070259c 28 r12 == pc of trampoline's first instruction + PC bias
8972963c
A
29 lr == original return address
30 */
31
8972963c 32 mov r2, r1 // _cmd = self
8972963c 33
8070259c
A
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 r1, [r12, #-4] // self = block object
38 ldr pc, [r1, #12] // tail call block->invoke
8972963c
A
39 // not reached
40
8070259c
A
41 // Align trampolines to 8 bytes
42.align 3
43
8972963c 44.macro TrampolineEntry
8070259c 45 mov r12, pc
8972963c 46 b __a2a3_tramphead
8070259c
A
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
8972963c
A
92.endmacro
93
8972963c
A
94.private_extern __a2a3_firsttramp
95__a2a3_firsttramp:
8070259c
A
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
8972963c 139
8070259c
A
140 TrampolineEntry
141 TrampolineEntry
142 // TrampolineEntry
143 // TrampolineEntry
8972963c
A
144
145.private_extern __a2a3_trampend
146__a2a3_trampend:
147
148#endif