]> git.saurik.com Git - apple/objc4.git/blob - runtime/objc-blocktramps-arm64.s
objc4-750.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
38 .macro TrampolineEntry
39 // load address of trampoline data (two pages before this instruction)
40 adr x17, -2*PAGE_MAX_SIZE
41 b L_objc_blockTrampolineImpl
42 .endmacro
43
44 .macro TrampolineEntryX16
45 TrampolineEntry
46 TrampolineEntry
47 TrampolineEntry
48 TrampolineEntry
49
50 TrampolineEntry
51 TrampolineEntry
52 TrampolineEntry
53 TrampolineEntry
54
55 TrampolineEntry
56 TrampolineEntry
57 TrampolineEntry
58 TrampolineEntry
59
60 TrampolineEntry
61 TrampolineEntry
62 TrampolineEntry
63 TrampolineEntry
64 .endmacro
65
66 .macro TrampolineEntryX256
67 TrampolineEntryX16
68 TrampolineEntryX16
69 TrampolineEntryX16
70 TrampolineEntryX16
71
72 TrampolineEntryX16
73 TrampolineEntryX16
74 TrampolineEntryX16
75 TrampolineEntryX16
76
77 TrampolineEntryX16
78 TrampolineEntryX16
79 TrampolineEntryX16
80 TrampolineEntryX16
81
82 TrampolineEntryX16
83 TrampolineEntryX16
84 TrampolineEntryX16
85 TrampolineEntryX16
86 .endmacro
87
88 .align 3
89 __objc_blockTrampolineStart:
90 // 2048-3 trampolines to fill 16K page
91 TrampolineEntryX256
92 TrampolineEntryX256
93 TrampolineEntryX256
94 TrampolineEntryX256
95
96 TrampolineEntryX256
97 TrampolineEntryX256
98 TrampolineEntryX256
99
100 TrampolineEntryX16
101 TrampolineEntryX16
102 TrampolineEntryX16
103 TrampolineEntryX16
104
105 TrampolineEntryX16
106 TrampolineEntryX16
107 TrampolineEntryX16
108 TrampolineEntryX16
109
110 TrampolineEntryX16
111 TrampolineEntryX16
112 TrampolineEntryX16
113 TrampolineEntryX16
114
115 TrampolineEntryX16
116 TrampolineEntryX16
117 TrampolineEntryX16
118
119 TrampolineEntry
120 TrampolineEntry
121 TrampolineEntry
122 TrampolineEntry
123
124 TrampolineEntry
125 TrampolineEntry
126 TrampolineEntry
127 TrampolineEntry
128
129 TrampolineEntry
130 TrampolineEntry
131 TrampolineEntry
132 TrampolineEntry
133
134 __objc_blockTrampolineLast:
135 TrampolineEntry
136 // TrampolineEntry
137 // TrampolineEntry
138 // TrampolineEntry
139
140 #endif