AArch64/ARM64: remove AArch64 from tree prior to renaming ARM64.
[oota-llvm.git] / test / MC / ARM64 / leaf-compact-unwind.s
1 // RUN: llvm-mc -triple=arm64-apple-ios -filetype=obj < %s | \
2 // RUN: llvm-readobj -sections -section-relocations -section-data | \
3 // RUN: FileCheck %s
4 //
5 // rdar://13070556
6
7 // FIXME: we should add compact unwind support to llvm-objdump -unwind-info
8
9 // CHECK:      Section {
10 // CHECK:        Index: 1
11 // CHECK-NEXT:   Name: __compact_unwind
12 // CHECK-NEXT:   Segment: __LD
13 // CHECK-NEXT:   Address:
14 // CHECK-NEXT:   Size:
15 // CHECK-NEXT:   Offset:
16 // CHECK-NEXT:   Alignment:
17 // CHECK-NEXT:   RelocationOffset:
18 // CHECK-NEXT:   RelocationCount:
19 // CHECK-NEXT:   Type:
20 // CHECK-NEXT:   Attributes [
21 // CHECK-NEXT:     Debug
22 // CHECK-NEXT:   ]
23 // CHECK-NEXT:   Reserved1:
24 // CHECK-NEXT:   Reserved2:
25 // CHECK-NEXT:   Relocations [
26 // CHECK-NEXT:     0x60 0 3 0 ARM64_RELOC_UNSIGNED 0 -
27 // CHECK-NEXT:     0x40 0 3 0 ARM64_RELOC_UNSIGNED 0 -
28 // CHECK-NEXT:     0x20 0 3 0 ARM64_RELOC_UNSIGNED 0 -
29 // CHECK-NEXT:     0x0 0 3 0 ARM64_RELOC_UNSIGNED 0 -
30 // CHECK-NEXT:   ]
31 // CHECK-NEXT:   SectionData (
32 // CHECK-NEXT:     0000: 00000000 00000000 08000000 00000002
33 // CHECK-NEXT:     0010: 00000000 00000000 00000000 00000000
34 // CHECK-NEXT:     0020: 08000000 00000000 40000000 00900002
35 // CHECK-NEXT:     0030: 00000000 00000000 00000000 00000000
36 // CHECK-NEXT:     0040: 48000000 00000000 D4000000 0F400002
37 // CHECK-NEXT:     0050: 00000000 00000000 00000000 00000000
38 // CHECK-NEXT:     0060: 1C010000 00000000 54000000 10100202
39 // CHECK-NEXT:     0070: 00000000 00000000 00000000 00000000
40 // CHECK-NEXT:   )
41 // CHECK-NEXT: }
42
43         .section        __TEXT,__text,regular,pure_instructions
44         .globl  _foo1
45         .align  2
46 _foo1:                                  ; @foo1
47         .cfi_startproc
48 ; BB#0:                                 ; %entry
49         add     w0, w0, #42             ; =#42
50         ret
51         .cfi_endproc
52
53         .globl  _foo2
54         .align  2
55 _foo2:                                  ; @foo2
56         .cfi_startproc
57 ; BB#0:                                 ; %entry
58         sub     sp, sp, #144            ; =#144
59 Ltmp2:
60         .cfi_def_cfa_offset 144
61         mov     x9, xzr
62         mov     x8, sp
63 LBB1_1:                                 ; %for.body
64                                         ; =>This Inner Loop Header: Depth=1
65         str     w9, [x8, x9, lsl #2]
66         add     x9, x9, #1              ; =#1
67         cmp     w9, #36                 ; =#36
68         b.ne    LBB1_1
69 ; BB#2:
70         mov     x9, xzr
71         mov     w0, wzr
72 LBB1_3:                                 ; %for.body4
73                                         ; =>This Inner Loop Header: Depth=1
74         ldr     w10, [x8, x9]
75         add     x9, x9, #4              ; =#4
76         cmp     w9, #144                ; =#144
77         add     w0, w10, w0
78         b.ne    LBB1_3
79 ; BB#4:                                 ; %for.end9
80         add     sp, sp, #144            ; =#144
81         ret
82         .cfi_endproc
83
84         .globl  _foo3
85         .align  2
86 _foo3:                                  ; @foo3
87         .cfi_startproc
88 ; BB#0:                                 ; %entry
89         stp     x26, x25, [sp, #-64]!
90         stp     x24, x23, [sp, #16]
91         stp     x22, x21, [sp, #32]
92         stp     x20, x19, [sp, #48]
93 Ltmp3:
94         .cfi_def_cfa_offset 64
95 Ltmp4:
96         .cfi_offset w19, -16
97 Ltmp5:
98         .cfi_offset w20, -24
99 Ltmp6:
100         .cfi_offset w21, -32
101 Ltmp7:
102         .cfi_offset w22, -40
103 Ltmp8:
104         .cfi_offset w23, -48
105 Ltmp9:
106         .cfi_offset w24, -56
107 Ltmp10:
108         .cfi_offset w25, -64
109 Ltmp11:
110         .cfi_offset w26, -72
111 Lloh0:
112         adrp    x8, _bar@GOTPAGE
113 Lloh1:
114         ldr     x8, [x8, _bar@GOTPAGEOFF]
115         ldr     w9, [x8]
116         ldr     w10, [x8]
117         ldr     w11, [x8]
118         ldr     w12, [x8]
119         ldr     w13, [x8]
120         ldr     w14, [x8]
121         ldr     w15, [x8]
122         ldr     w16, [x8]
123         ldr     w17, [x8]
124         ldr     w0, [x8]
125         ldr     w19, [x8]
126         ldr     w20, [x8]
127         ldr     w21, [x8]
128         ldr     w22, [x8]
129         ldr     w23, [x8]
130         ldr     w24, [x8]
131         ldr     w25, [x8]
132         ldr     w8, [x8]
133         add     w9, w10, w9
134         add     w9, w9, w11
135         add     w9, w9, w12
136         add     w9, w9, w13
137         add     w9, w9, w14
138         add     w9, w9, w15
139         add     w9, w9, w16
140         add     w9, w9, w17
141         add     w9, w9, w0
142         add     w9, w9, w19
143         add     w9, w9, w20
144         add     w9, w9, w21
145         add     w9, w9, w22
146         add     w9, w9, w23
147         add     w9, w9, w24
148         add     w9, w9, w25
149         sub     w8, w8, w9
150         sub     w8, w8, w7, lsl #1
151         sub     w8, w8, w6, lsl #1
152         sub     w8, w8, w5, lsl #1
153         sub     w8, w8, w4, lsl #1
154         sub     w8, w8, w3, lsl #1
155         sub     w8, w8, w2, lsl #1
156         sub     w0, w8, w1, lsl #1
157         ldp     x20, x19, [sp, #48]
158         ldp     x22, x21, [sp, #32]
159         ldp     x24, x23, [sp, #16]
160         ldp     x26, x25, [sp], #64
161         ret
162         .loh AdrpLdrGot Lloh0, Lloh1
163         .cfi_endproc
164
165         .globl  _foo4
166         .align  2
167 _foo4:                                  ; @foo4
168         .cfi_startproc
169 ; BB#0:                                 ; %entry
170         stp     x28, x27, [sp, #-16]!
171         sub     sp, sp, #512            ; =#512
172 Ltmp12:
173         .cfi_def_cfa_offset 528
174 Ltmp13:
175         .cfi_offset w27, -16
176 Ltmp14:
177         .cfi_offset w28, -24
178                                         ; kill: W0<def> W0<kill> X0<def>
179         mov     x9, xzr
180         ubfx    x10, x0, #0, #32
181         mov     x8, sp
182 LBB3_1:                                 ; %for.body
183                                         ; =>This Inner Loop Header: Depth=1
184         add     w11, w10, w9
185         str     w11, [x8, x9, lsl #2]
186         add     x9, x9, #1              ; =#1
187         cmp     w9, #128                ; =#128
188         b.ne    LBB3_1
189 ; BB#2:                                 ; %for.cond2.preheader
190         mov     x9, xzr
191         mov     w0, wzr
192         add     x8, x8, w5, sxtw #2
193 LBB3_3:                                 ; %for.body4
194                                         ; =>This Inner Loop Header: Depth=1
195         ldr     w10, [x8, x9]
196         add     x9, x9, #4              ; =#4
197         cmp     w9, #512                ; =#512
198         add     w0, w10, w0
199         b.ne    LBB3_3
200 ; BB#4:                                 ; %for.end11
201         add     sp, sp, #512            ; =#512
202         ldp     x28, x27, [sp], #16
203         ret
204         .cfi_endproc
205
206         .comm   _bar,4,2                ; @bar
207
208 .subsections_via_symbols