1 .text
2 .abiversion 2
3 .globl __xray_FunctionEntry
4 .p2align 4
5__xray_FunctionEntry:
6 std 0, 16(1)
7 stdu 1, -408(1)
8# Spill r3-r10, f1-f13, and vsr34-vsr45, which are parameter registers.
9# If this appears to be slow, the caller needs to pass in number of generic,
10# floating point, and vector parameters, so that we only spill those live ones.
11 std 3, 32(1)
12 ld 3, 400(1) # FuncId
13 std 4, 40(1)
14 std 5, 48(1)
15 std 6, 56(1)
16 std 7, 64(1)
17 std 8, 72(1)
18 std 9, 80(1)
19 std 10, 88(1)
20 addi 4, 1, 96
21 stxsdx 1, 0, 4
22 addi 4, 1, 104
23 stxsdx 2, 0, 4
24 addi 4, 1, 112
25 stxsdx 3, 0, 4
26 addi 4, 1, 120
27 stxsdx 4, 0, 4
28 addi 4, 1, 128
29 stxsdx 5, 0, 4
30 addi 4, 1, 136
31 stxsdx 6, 0, 4
32 addi 4, 1, 144
33 stxsdx 7, 0, 4
34 addi 4, 1, 152
35 stxsdx 8, 0, 4
36 addi 4, 1, 160
37 stxsdx 9, 0, 4
38 addi 4, 1, 168
39 stxsdx 10, 0, 4
40 addi 4, 1, 176
41 stxsdx 11, 0, 4
42 addi 4, 1, 184
43 stxsdx 12, 0, 4
44 addi 4, 1, 192
45 stxsdx 13, 0, 4
46 addi 4, 1, 200
47 stxvd2x 34, 0, 4
48 addi 4, 1, 216
49 stxvd2x 35, 0, 4
50 addi 4, 1, 232
51 stxvd2x 36, 0, 4
52 addi 4, 1, 248
53 stxvd2x 37, 0, 4
54 addi 4, 1, 264
55 stxvd2x 38, 0, 4
56 addi 4, 1, 280
57 stxvd2x 39, 0, 4
58 addi 4, 1, 296
59 stxvd2x 40, 0, 4
60 addi 4, 1, 312
61 stxvd2x 41, 0, 4
62 addi 4, 1, 328
63 stxvd2x 42, 0, 4
64 addi 4, 1, 344
65 stxvd2x 43, 0, 4
66 addi 4, 1, 360
67 stxvd2x 44, 0, 4
68 addi 4, 1, 376
69 stxvd2x 45, 0, 4
70 std 2, 392(1)
71 mflr 0
72 std 0, 400(1)
73
74 li 4, 0
75 bl _ZN6__xray23CallXRayPatchedFunctionEi13XRayEntryType
76 nop
77
78 addi 4, 1, 96
79 lxsdx 1, 0, 4
80 addi 4, 1, 104
81 lxsdx 2, 0, 4
82 addi 4, 1, 112
83 lxsdx 3, 0, 4
84 addi 4, 1, 120
85 lxsdx 4, 0, 4
86 addi 4, 1, 128
87 lxsdx 5, 0, 4
88 addi 4, 1, 136
89 lxsdx 6, 0, 4
90 addi 4, 1, 144
91 lxsdx 7, 0, 4
92 addi 4, 1, 152
93 lxsdx 8, 0, 4
94 addi 4, 1, 160
95 lxsdx 9, 0, 4
96 addi 4, 1, 168
97 lxsdx 10, 0, 4
98 addi 4, 1, 176
99 lxsdx 11, 0, 4
100 addi 4, 1, 184
101 lxsdx 12, 0, 4
102 addi 4, 1, 192
103 lxsdx 13, 0, 4
104 addi 4, 1, 200
105 lxvd2x 34, 0, 4
106 addi 4, 1, 216
107 lxvd2x 35, 0, 4
108 addi 4, 1, 232
109 lxvd2x 36, 0, 4
110 addi 4, 1, 248
111 lxvd2x 37, 0, 4
112 addi 4, 1, 264
113 lxvd2x 38, 0, 4
114 addi 4, 1, 280
115 lxvd2x 39, 0, 4
116 addi 4, 1, 296
117 lxvd2x 40, 0, 4
118 addi 4, 1, 312
119 lxvd2x 41, 0, 4
120 addi 4, 1, 328
121 lxvd2x 42, 0, 4
122 addi 4, 1, 344
123 lxvd2x 43, 0, 4
124 addi 4, 1, 360
125 lxvd2x 44, 0, 4
126 addi 4, 1, 376
127 lxvd2x 45, 0, 4
128 ld 0, 400(1)
129 mtlr 0
130 ld 2, 392(1)
131 ld 3, 32(1)
132 ld 4, 40(1)
133 ld 5, 48(1)
134 ld 6, 56(1)
135 ld 7, 64(1)
136 ld 8, 72(1)
137 ld 9, 80(1)
138 ld 10, 88(1)
139
140 addi 1, 1, 408
141 ld 0, 16(1)
142 blr
143
144 .globl __xray_FunctionExit
145 .p2align 4
146__xray_FunctionExit:
147 std 0, 16(1)
148 stdu 1, -256(1)
149# Spill r3-r4, f1-f8, and vsr34-vsr41, which are return registers.
150# If this appears to be slow, the caller needs to pass in number of generic,
151# floating point, and vector parameters, so that we only spill those live ones.
152 std 3, 32(1)
153 ld 3, 248(1) # FuncId
154 std 4, 40(1)
155 addi 4, 1, 48
156 stxsdx 1, 0, 4
157 addi 4, 1, 56
158 stxsdx 2, 0, 4
159 addi 4, 1, 64
160 stxsdx 3, 0, 4
161 addi 4, 1, 72
162 stxsdx 4, 0, 4
163 addi 4, 1, 80
164 stxsdx 5, 0, 4
165 addi 4, 1, 88
166 stxsdx 6, 0, 4
167 addi 4, 1, 96
168 stxsdx 7, 0, 4
169 addi 4, 1, 104
170 stxsdx 8, 0, 4
171 addi 4, 1, 112
172 stxvd2x 34, 0, 4
173 addi 4, 1, 128
174 stxvd2x 35, 0, 4
175 addi 4, 1, 144
176 stxvd2x 36, 0, 4
177 addi 4, 1, 160
178 stxvd2x 37, 0, 4
179 addi 4, 1, 176
180 stxvd2x 38, 0, 4
181 addi 4, 1, 192
182 stxvd2x 39, 0, 4
183 addi 4, 1, 208
184 stxvd2x 40, 0, 4
185 addi 4, 1, 224
186 stxvd2x 41, 0, 4
187 std 2, 240(1)
188 mflr 0
189 std 0, 248(1)
190
191 li 4, 1
192 bl _ZN6__xray23CallXRayPatchedFunctionEi13XRayEntryType
193 nop
194
195 addi 4, 1, 48
196 lxsdx 1, 0, 4
197 addi 4, 1, 56
198 lxsdx 2, 0, 4
199 addi 4, 1, 64
200 lxsdx 3, 0, 4
201 addi 4, 1, 72
202 lxsdx 4, 0, 4
203 addi 4, 1, 80
204 lxsdx 5, 0, 4
205 addi 4, 1, 88
206 lxsdx 6, 0, 4
207 addi 4, 1, 96
208 lxsdx 7, 0, 4
209 addi 4, 1, 104
210 lxsdx 8, 0, 4
211 addi 4, 1, 112
212 lxvd2x 34, 0, 4
213 addi 4, 1, 128
214 lxvd2x 35, 0, 4
215 addi 4, 1, 144
216 lxvd2x 36, 0, 4
217 addi 4, 1, 160
218 lxvd2x 37, 0, 4
219 addi 4, 1, 176
220 lxvd2x 38, 0, 4
221 addi 4, 1, 192
222 lxvd2x 39, 0, 4
223 addi 4, 1, 208
224 lxvd2x 40, 0, 4
225 addi 4, 1, 224
226 lxvd2x 41, 0, 4
227 ld 0, 248(1)
228 mtlr 0
229 ld 2, 240(1)
230 ld 3, 32(1)
231 ld 4, 40(1)
232
233 addi 1, 1, 256
234 ld 0, 16(1)
235 blr
236

source code of compiler-rt/lib/xray/xray_trampoline_powerpc64_asm.S