1 // REQUIRES
: arm-registered-target
2 // RUN
: llvm-mc
-filetype
=obj
-triple thumbv7-windows-gnu
%s
-o
%t.o
3 // RUN
: llvm-readobj
--unwind
%t.o | FileCheck
--strict-whitespace
%s
5 // CHECK
: RuntimeFunction
{
6 // CHECK-NEXT
: Function
: func6
7 // CHECK-NEXT
: Fragment
: No
8 // CHECK-NEXT
: FunctionLength
: 8
9 // CHECK-NEXT
: ReturnType
: bx
<reg
>
10 // CHECK-NEXT
: HomedParameters
: No
13 // CHECK-NEXT
: LinkRegister
: No
14 // CHECK-NEXT
: Chaining
: No
15 // CHECK-NEXT
: StackAdjustment
: 0
16 // CHECK-NEXT
: Prologue
[
18 // CHECK-NEXT
: Epilogue
[
19 // CHECK-NEXT
: bx
<reg
>
22 // CHECK-NEXT
: RuntimeFunction
{
23 // CHECK-NEXT
: Function
: func7
24 // CHECK-NEXT
: Fragment
: No
25 // CHECK-NEXT
: FunctionLength
: 8
26 // CHECK-NEXT
: ReturnType
: bx
<reg
>
27 // CHECK-NEXT
: HomedParameters
: No
30 // CHECK-NEXT
: LinkRegister
: No
31 // CHECK-NEXT
: Chaining
: No
32 // CHECK-NEXT
: StackAdjustment
: 0
33 // CHECK-NEXT
: Prologue
[
34 // CHECK-NEXT
: push
{r4}
36 // CHECK-NEXT
: Epilogue
[
37 // CHECK-NEXT
: pop
{r4}
38 // CHECK-NEXT
: bx
<reg
>
41 // CHECK-NEXT
: RuntimeFunction
{
42 // CHECK-NEXT
: Function
: func8
43 // CHECK-NEXT
: Fragment
: No
44 // CHECK-NEXT
: FunctionLength
: 10
45 // CHECK-NEXT
: ReturnType
: bx
<reg
>
46 // CHECK-NEXT
: HomedParameters
: No
49 // CHECK-NEXT
: LinkRegister
: Yes
50 // CHECK-NEXT
: Chaining
: No
51 // CHECK-NEXT
: StackAdjustment
: 0
52 // CHECK-NEXT
: Prologue
[
53 // CHECK-NEXT
: push
{r4, lr}
55 // CHECK-NEXT
: Epilogue
[
56 // CHECK-NEXT
: pop
{r4, lr}
57 // CHECK-NEXT
: bx
<reg
>
60 // CHECK-NEXT
: RuntimeFunction
{
61 // CHECK-NEXT
: Function
: func9
62 // CHECK-NEXT
: Fragment
: No
63 // CHECK-NEXT
: FunctionLength
: 24
64 // CHECK-NEXT
: ReturnType
: b.w
<target
>
65 // CHECK-NEXT
: HomedParameters
: No
68 // CHECK-NEXT
: LinkRegister
: Yes
69 // CHECK-NEXT
: Chaining
: No
70 // CHECK-NEXT
: StackAdjustment
: 32
71 // CHECK-NEXT
: Prologue
[
72 // CHECK-NEXT
: sub sp
, sp
, #32
73 // CHECK-NEXT
: vpush
{d8
}
74 // CHECK-NEXT
: push
{lr}
76 // CHECK-NEXT
: Epilogue
[
77 // CHECK-NEXT
: add sp
, sp
, #32
78 // CHECK-NEXT
: vpop
{d8
}
79 // CHECK-NEXT
: pop
{lr}
80 // CHECK-NEXT
: b.w
<target
>
83 // CHECK-NEXT
: RuntimeFunction
{
84 // CHECK-NEXT
: Function
: func10
85 // CHECK-NEXT
: Fragment
: No
86 // CHECK-NEXT
: FunctionLength
: 26
87 // CHECK-NEXT
: ReturnType
: bx
<reg
>
88 // CHECK-NEXT
: HomedParameters
: No
91 // CHECK-NEXT
: LinkRegister
: Yes
92 // CHECK-NEXT
: Chaining
: Yes
93 // CHECK-NEXT
: StackAdjustment
: 16
94 // CHECK-NEXT
: Prologue
[
95 // CHECK-NEXT
: sub sp
, sp
, #16
96 // CHECK-NEXT
: vpush
{d8-d9
}
97 // CHECK-NEXT
: mov
r11, sp
98 // CHECK-NEXT
: push
{r11, lr}
100 // CHECK-NEXT
: Epilogue
[
101 // CHECK-NEXT
: add sp
, sp
, #16
102 // CHECK-NEXT
: vpop
{d8-d9
}
103 // CHECK-NEXT
: pop
{r11, lr}
104 // CHECK-NEXT
: bx
<reg
>
107 // CHECK-NEXT
: RuntimeFunction
{
108 // CHECK-NEXT
: Function
: func11
109 // CHECK-NEXT
: Fragment
: No
110 // CHECK-NEXT
: FunctionLength
: 24
111 // CHECK-NEXT
: ReturnType
: pop
{pc
}
112 // CHECK-NEXT
: HomedParameters
: No
113 // CHECK-NEXT
: Reg
: 1
115 // CHECK-NEXT
: LinkRegister
: Yes
116 // CHECK-NEXT
: Chaining
: Yes
117 // CHECK-NEXT
: StackAdjustment
: 16
118 // CHECK-NEXT
: Prologue
[
119 // CHECK-NEXT
: sub sp
, sp
, #16
120 // CHECK-NEXT
: vpush
{d8-d9
}
121 // CHECK-NEXT
: mov
r11, sp
122 // CHECK-NEXT
: push
{r11, lr}
124 // CHECK-NEXT
: Epilogue
[
125 // CHECK-NEXT
: add sp
, sp
, #16
126 // CHECK-NEXT
: vpop
{d8-d9
}
127 // CHECK-NEXT
: pop
{r11, pc
}
130 // CHECK-NEXT
: RuntimeFunction
{
131 // CHECK-NEXT
: Function
: func12
132 // CHECK-NEXT
: Fragment
: No
133 // CHECK-NEXT
: FunctionLength
: 18
134 // CHECK-NEXT
: ReturnType
: b.w
<target
>
135 // CHECK-NEXT
: HomedParameters
: No
136 // CHECK-NEXT
: Reg
: 6
138 // CHECK-NEXT
: LinkRegister
: No
139 // CHECK-NEXT
: Chaining
: No
140 // CHECK-NEXT
: StackAdjustment
: 16
141 // CHECK-NEXT
: Prologue
[
142 // CHECK-NEXT
: sub sp
, sp
, #16
143 // CHECK-NEXT
: vpush
{d8-d14
}
145 // CHECK-NEXT
: Epilogue
[
146 // CHECK-NEXT
: add sp
, sp
, #16
147 // CHECK-NEXT
: vpop
{d8-d14
}
148 // CHECK-NEXT
: b.w
<target
>
151 // CHECK-NEXT
: RuntimeFunction
{
152 // CHECK-NEXT
: Function
: func13
153 // CHECK-NEXT
: Fragment
: No
154 // CHECK-NEXT
: FunctionLength
: 18
155 // CHECK-NEXT
: ReturnType
: pop
{pc
}
156 // CHECK-NEXT
: HomedParameters
: No
157 // CHECK-NEXT
: Reg
: 6
159 // CHECK-NEXT
: LinkRegister
: Yes
160 // CHECK-NEXT
: Chaining
: Yes
161 // CHECK-NEXT
: StackAdjustment
: 20
162 // CHECK-NEXT
: Prologue
[
163 // CHECK-NEXT
: sub sp
, sp
, #20
164 // CHECK-NEXT
: add.w
r11, sp
, #28
165 // CHECK-NEXT
: push
{r4-
r11, lr}
167 // CHECK-NEXT
: Epilogue
[
168 // CHECK-NEXT
: add sp
, sp
, #20
169 // CHECK-NEXT
: pop
{r4-
r11, pc
}
172 // CHECK-NEXT
: RuntimeFunction
{
173 // CHECK-NEXT
: Function
: func14
174 // CHECK-NEXT
: Fragment
: No
175 // CHECK-NEXT
: FunctionLength
: 14
176 // CHECK-NEXT
: ReturnType
: pop
{pc
}
177 // CHECK-NEXT
: HomedParameters
: No
178 // CHECK-NEXT
: Reg
: 7
180 // CHECK-NEXT
: LinkRegister
: Yes
181 // CHECK-NEXT
: Chaining
: No
182 // CHECK-NEXT
: StackAdjustment
: 20
183 // CHECK-NEXT
: Prologue
[
184 // CHECK-NEXT
: sub sp
, sp
, #20
185 // CHECK-NEXT
: push
{r4-
r11, lr}
187 // CHECK-NEXT
: Epilogue
[
188 // CHECK-NEXT
: add sp
, sp
, #20
189 // CHECK-NEXT
: pop
{r4-
r11, pc
}
192 // CHECK-NEXT
: RuntimeFunction
{
193 // CHECK-NEXT
: Function
: func15
194 // CHECK-NEXT
: Fragment
: No
195 // CHECK-NEXT
: FunctionLength
: 20
196 // CHECK-NEXT
: ReturnType
: pop
{pc
}
197 // CHECK-NEXT
: HomedParameters
: Yes
198 // CHECK-NEXT
: Reg
: 0
200 // CHECK-NEXT
: LinkRegister
: Yes
201 // CHECK-NEXT
: Chaining
: No
202 // CHECK-NEXT
: StackAdjustment
: 512
203 // CHECK-NEXT
: Prologue
[
204 // CHECK-NEXT
: sub sp
, sp
, #512
205 // CHECK-NEXT
: push
{r4, lr}
206 // CHECK-NEXT
: push
{r0-
r3}
208 // CHECK-NEXT
: Epilogue
[
209 // CHECK-NEXT
: add sp
, sp
, #512
210 // CHECK-NEXT
: pop
{r4}
211 // CHECK-NEXT
: ldr pc
, [sp
], #20
214 // CHECK-NEXT
: RuntimeFunction
{
215 // CHECK-NEXT
: Function
: func16
216 // CHECK-NEXT
: Fragment
: No
217 // CHECK-NEXT
: FunctionLength
: 20
218 // CHECK-NEXT
: ReturnType
: b.w
<target
>
219 // CHECK-NEXT
: HomedParameters
: Yes
220 // CHECK-NEXT
: Reg
: 7
222 // CHECK-NEXT
: LinkRegister
: Yes
223 // CHECK-NEXT
: Chaining
: Yes
224 // CHECK-NEXT
: StackAdjustment
: 0
225 // CHECK-NEXT
: Prologue
[
226 // CHECK-NEXT
: mov
r11, sp
227 // CHECK-NEXT
: push
{r11, lr}
228 // CHECK-NEXT
: push
{r0-
r3}
230 // CHECK-NEXT
: Epilogue
[
231 // CHECK-NEXT
: pop
{r11, lr}
232 // CHECK-NEXT
: add sp
, sp
, #16
233 // CHECK-NEXT
: b.w
<target
>
236 // CHECK-NEXT
: RuntimeFunction
{
237 // CHECK-NEXT
: Function
: func17
238 // CHECK-NEXT
: Fragment
: No
239 // CHECK-NEXT
: FunctionLength
: 20
240 // CHECK-NEXT
: ReturnType
: bx
<reg
>
241 // CHECK-NEXT
: HomedParameters
: Yes
242 // CHECK-NEXT
: Reg
: 0
244 // CHECK-NEXT
: LinkRegister
: No
245 // CHECK-NEXT
: Chaining
: No
246 // CHECK-NEXT
: StackAdjustment
: 512
247 // CHECK-NEXT
: Prologue
[
248 // CHECK-NEXT
: sub sp
, sp
, #512
249 // CHECK-NEXT
: push
{r4}
250 // CHECK-NEXT
: push
{r0-
r3}
252 // CHECK-NEXT
: Epilogue
[
253 // CHECK-NEXT
: add sp
, sp
, #512
254 // CHECK-NEXT
: pop
{r4}
255 // CHECK-NEXT
: add sp
, sp
, #16
256 // CHECK-NEXT
: bx
<reg
>
259 // CHECK-NEXT
: RuntimeFunction
{
260 // CHECK-NEXT
: Function
: func18
261 // CHECK-NEXT
: Fragment
: No
262 // CHECK-NEXT
: FunctionLength
: 6
263 // CHECK-NEXT
: ReturnType
: pop
{pc
}
264 // CHECK-NEXT
: HomedParameters
: No
265 // CHECK-NEXT
: Reg
: 7
267 // CHECK-NEXT
: LinkRegister
: Yes
268 // CHECK-NEXT
: Chaining
: No
269 // CHECK-NEXT
: StackAdjustment
: 4
270 // CHECK-NEXT
: Prologue
[
271 // CHECK-NEXT
: push
{r3, lr}
273 // CHECK-NEXT
: Epilogue
[
274 // CHECK-NEXT
: pop
{r3, pc
}
277 // CHECK-NEXT
: RuntimeFunction
{
278 // CHECK-NEXT
: Function
: func19
279 // CHECK-NEXT
: Fragment
: No
280 // CHECK-NEXT
: FunctionLength
: 12
281 // CHECK-NEXT
: ReturnType
: bx
<reg
>
282 // CHECK-NEXT
: HomedParameters
: Yes
283 // CHECK-NEXT
: Reg
: 0
285 // CHECK-NEXT
: LinkRegister
: No
286 // CHECK-NEXT
: Chaining
: No
287 // CHECK-NEXT
: StackAdjustment
: 16
288 // CHECK-NEXT
: Prologue
[
289 // CHECK-NEXT
: push
{r0-
r4}
290 // CHECK-NEXT
: push
{r0-
r3}
292 // CHECK-NEXT
: Epilogue
[
293 // CHECK-NEXT
: pop
{r0-
r4}
294 // CHECK-NEXT
: add sp
, sp
, #16
295 // CHECK-NEXT
: bx
<reg
>
298 // CHECK-NEXT
: RuntimeFunction
{
299 // CHECK-NEXT
: Function
: func20
300 // CHECK-NEXT
: Fragment
: No
301 // CHECK-NEXT
: FunctionLength
: 14
302 // CHECK-NEXT
: ReturnType
: bx
<reg
>
303 // CHECK-NEXT
: HomedParameters
: Yes
304 // CHECK-NEXT
: Reg
: 0
306 // CHECK-NEXT
: LinkRegister
: No
307 // CHECK-NEXT
: Chaining
: No
308 // CHECK-NEXT
: StackAdjustment
: 16
309 // CHECK-NEXT
: Prologue
[
310 // CHECK-NEXT
: push
{r0-
r4}
311 // CHECK-NEXT
: push
{r0-
r3}
313 // CHECK-NEXT
: Epilogue
[
314 // CHECK-NEXT
: add sp
, sp
, #16
315 // CHECK-NEXT
: pop
{r4}
316 // CHECK-NEXT
: add sp
, sp
, #16
317 // CHECK-NEXT
: bx
<reg
>
320 // CHECK-NEXT
: RuntimeFunction
{
321 // CHECK-NEXT
: Function
: func21
322 // CHECK-NEXT
: Fragment
: No
323 // CHECK-NEXT
: FunctionLength
: 14
324 // CHECK-NEXT
: ReturnType
: bx
<reg
>
325 // CHECK-NEXT
: HomedParameters
: Yes
326 // CHECK-NEXT
: Reg
: 0
328 // CHECK-NEXT
: LinkRegister
: No
329 // CHECK-NEXT
: Chaining
: No
330 // CHECK-NEXT
: StackAdjustment
: 16
331 // CHECK-NEXT
: Prologue
[
332 // CHECK-NEXT
: sub sp
, sp
, #16
333 // CHECK-NEXT
: push
{r4}
334 // CHECK-NEXT
: push
{r0-
r3}
336 // CHECK-NEXT
: Epilogue
[
337 // CHECK-NEXT
: pop
{r0-
r4}
338 // CHECK-NEXT
: add sp
, sp
, #16
339 // CHECK-NEXT
: bx
<reg
>
342 // CHECK-NEXT
: RuntimeFunction
{
343 // CHECK-NEXT
: Function
: func22
344 // CHECK-NEXT
: Fragment
: Yes
345 // CHECK-NEXT
: FunctionLength
: 14
346 // CHECK-NEXT
: ReturnType
: pop
{pc
}
347 // CHECK-NEXT
: HomedParameters
: Yes
348 // CHECK-NEXT
: Reg
: 0
350 // CHECK-NEXT
: LinkRegister
: Yes
351 // CHECK-NEXT
: Chaining
: No
352 // CHECK-NEXT
: StackAdjustment
: 512
353 // CHECK-NEXT
: Prologue
[
354 // CHECK-NEXT
: sub sp
, sp
, #512
355 // CHECK-NEXT
: push
{r4, lr}
356 // CHECK-NEXT
: push
{r0-
r3}
358 // CHECK-NEXT
: Epilogue
[
359 // CHECK-NEXT
: add sp
, sp
, #512
360 // CHECK-NEXT
: pop
{r4}
361 // CHECK-NEXT
: ldr pc
, [sp
], #20
364 // CHECK-NEXT
: RuntimeFunction
{
365 // CHECK-NEXT
: Function
: func23
366 // CHECK-NEXT
: Fragment
: No
367 // CHECK-NEXT
: FunctionLength
: 12
368 // CHECK-NEXT
: ReturnType
: (no epilogue
)
369 // CHECK-NEXT
: HomedParameters
: Yes
370 // CHECK-NEXT
: Reg
: 0
372 // CHECK-NEXT
: LinkRegister
: Yes
373 // CHECK-NEXT
: Chaining
: No
374 // CHECK-NEXT
: StackAdjustment
: 512
375 // CHECK-NEXT
: Prologue
[
376 // CHECK-NEXT
: sub sp
, sp
, #512
377 // CHECK-NEXT
: push
{r4, lr}
378 // CHECK-NEXT
: push
{r0-
r3}
381 // CHECK-NEXT
: RuntimeFunction
{
382 // CHECK-NEXT
: Function
: func24
383 // CHECK-NEXT
: Fragment
: No
384 // CHECK-NEXT
: FunctionLength
: 16
385 // CHECK-NEXT
: ReturnType
: pop
{pc
}
386 // CHECK-NEXT
: HomedParameters
: No
387 // CHECK-NEXT
: Reg
: 3
389 // CHECK-NEXT
: LinkRegister
: Yes
390 // CHECK-NEXT
: Chaining
: Yes
391 // CHECK-NEXT
: StackAdjustment
: 8
392 // CHECK-NEXT
: Prologue
[
393 // CHECK-NEXT
: add.w
r11, sp
, #24
394 // CHECK-NEXT
: push
{r2-
r7, r11, lr}
396 // CHECK-NEXT
: Epilogue
[
397 // CHECK-NEXT
: add sp
, sp
, #8
398 // CHECK-NEXT
: pop
{r4-
r7, r11, pc
}
401 // CHECK-NEXT
: RuntimeFunction
{
402 // CHECK-NEXT
: Function
: func25
403 // CHECK-NEXT
: Fragment
: No
404 // CHECK-NEXT
: FunctionLength
: 16
405 // CHECK-NEXT
: ReturnType
: pop
{pc
}
406 // CHECK-NEXT
: HomedParameters
: No
407 // CHECK-NEXT
: Reg
: 3
409 // CHECK-NEXT
: LinkRegister
: Yes
410 // CHECK-NEXT
: Chaining
: Yes
411 // CHECK-NEXT
: StackAdjustment
: 8
412 // CHECK-NEXT
: Prologue
[
413 // CHECK-NEXT
: sub sp
, sp
, #8
414 // CHECK-NEXT
: add.w
r11, sp
, #16
415 // CHECK-NEXT
: push
{r4-
r7, r11, lr}
417 // CHECK-NEXT
: Epilogue
[
418 // CHECK-NEXT
: pop
{r2-
r7, r11, pc
}
421 // CHECK-NEXT
: RuntimeFunction
{
422 // CHECK-NEXT
: Function
: func26
423 // CHECK-NEXT
: Fragment
: No
424 // CHECK-NEXT
: FunctionLength
: 8
425 // CHECK-NEXT
: ReturnType
: bx
<reg
>
426 // CHECK-NEXT
: HomedParameters
: No
427 // CHECK-NEXT
: Reg
: 7
429 // CHECK-NEXT
: LinkRegister
: No
430 // CHECK-NEXT
: Chaining
: No
431 // CHECK-NEXT
: StackAdjustment
: 12
432 // CHECK-NEXT
: Prologue
[
433 // CHECK-NEXT
: push
{r1-
r3}
435 // CHECK-NEXT
: Epilogue
[
436 // CHECK-NEXT
: add sp
, sp
, #12
437 // CHECK-NEXT
: bx
<reg
>
440 // CHECK-NEXT
: RuntimeFunction
{
441 // CHECK-NEXT
: Function
: func27
442 // CHECK-NEXT
: Fragment
: No
443 // CHECK-NEXT
: FunctionLength
: 8
444 // CHECK-NEXT
: ReturnType
: bx
<reg
>
445 // CHECK-NEXT
: HomedParameters
: No
446 // CHECK-NEXT
: Reg
: 7
448 // CHECK-NEXT
: LinkRegister
: No
449 // CHECK-NEXT
: Chaining
: No
450 // CHECK-NEXT
: StackAdjustment
: 12
451 // CHECK-NEXT
: Prologue
[
452 // CHECK-NEXT
: sub sp
, sp
, #12
454 // CHECK-NEXT
: Epilogue
[
455 // CHECK-NEXT
: pop
{r1-
r3}
456 // CHECK-NEXT
: bx
<reg
>
459 // CHECK-NEXT
: RuntimeFunction
{
460 // CHECK-NEXT
: Function
: func28
461 // CHECK-NEXT
: Fragment
: No
462 // CHECK-NEXT
: FunctionLength
: 8
463 // CHECK-NEXT
: ReturnType
: bx
<reg
>
464 // CHECK-NEXT
: HomedParameters
: No
465 // CHECK-NEXT
: Reg
: 0
467 // CHECK-NEXT
: LinkRegister
: No
468 // CHECK-NEXT
: Chaining
: No
469 // CHECK-NEXT
: StackAdjustment
: 4
470 // CHECK-NEXT
: Prologue
[
471 // CHECK-NEXT
: vpush
{d8
}
472 // CHECK-NEXT
: push
{r3}
474 // CHECK-NEXT
: Epilogue
[
475 // CHECK-NEXT
: vpop
{d8
}
476 // CHECK-NEXT
: pop
{r3}
477 // CHECK-NEXT
: bx
<reg
>
480 // CHECK-NEXT
: RuntimeFunction
{
481 // CHECK-NEXT
: Function
: func29
482 // CHECK-NEXT
: Fragment
: Yes
483 // CHECK-NEXT
: FunctionLength
: 6
484 // CHECK-NEXT
: ReturnType
: pop
{pc
}
485 // CHECK-NEXT
: HomedParameters
: No
486 // CHECK-NEXT
: Reg
: 2
488 // CHECK-NEXT
: LinkRegister
: Yes
489 // CHECK-NEXT
: Chaining
: No
490 // CHECK-NEXT
: StackAdjustment
: 16
491 // CHECK-NEXT
: Prologue
[
492 // CHECK-NEXT
: sub sp
, sp
, #16
493 // CHECK-NEXT
: push
{r4-
r6, lr}
495 // CHECK-NEXT
: Epilogue
[
496 // CHECK-NEXT
: add sp
, sp
, #16
497 // CHECK-NEXT
: pop
{r4-
r6, pc
}