1 //RUN: llvm-mc -triple=aarch64-linux-gnu %s | FileCheck %s
4 // Check that large constants are converted to ldr from constant pool
7 .section a, "ax", @progbits
11 // CHECK: movz x0, #0x1234
13 // CHECK: movz w1, #0x4567
15 // CHECK: movz x0, #0x1234, lsl #16
17 // CHECK: movz w1, #0x4567, lsl #16
18 ldr x0, =0xabc00000000
19 // CHECK: movz x0, #0xabc, lsl #32
20 ldr x0, =0xbeef000000000000
21 // CHECK: movz x0, #0xbeef, lsl #48
23 .section b,"ax",@progbits
27 // CHECK: ldr x0, .Ltmp[[TMP0:[0-9]+]]
29 // loading multiple constants
30 .section c,"ax",@progbits
34 // CHECK: ldr x0, .Ltmp[[TMP1:[0-9]+]]
40 // CHECK: ldr x0, .Ltmp[[TMP2:[0-9]+]]
44 // TODO: the same constants should have the same constant pool location
45 .section d,"ax",@progbits
49 // CHECK: ldr x0, .Ltmp[[TMP3:[0-9]+]]
58 // CHECK: ldr x0, .Ltmp[[TMP4:[0-9]+]]
66 // a section defined in multiple pieces should be merged and use a single constant pool
67 .section e,"ax",@progbits
71 // CHECK: ldr x0, .Ltmp[[TMP5:[0-9]+]]
76 .section f, "ax", @progbits
83 .section e, "ax", @progbits
88 // CHECK: ldr x0, .Ltmp[[TMP6:[0-9]+]]
93 // Check that symbols can be loaded using ldr pseudo
96 // load an undefined symbol
97 .section g,"ax",@progbits
101 // CHECK: ldr x0, .Ltmp[[TMP7:[0-9]+]]
103 // load a symbol from another section
104 .section h,"ax",@progbits
108 // CHECK: ldr x0, .Ltmp[[TMP8:[0-9]+]]
110 // load a symbol from the same section
111 .section i,"ax",@progbits
115 // CHECK: ldr x0, .Ltmp[[TMP9:[0-9]+]]
117 // CHECK: ldr w0, .Ltmp[[TMP10:[0-9]+]]
124 .section j,"ax",@progbits
125 // mix of symbols and constants
131 // CHECK: movz x0, #0x101
135 // CHECK: ldr x0, .Ltmp[[TMP11:[0-9]+]]
139 // Check for correct usage in other contexts
143 .macro useit_in_a_macro
147 .section k,"ax",@progbits
151 // CHECK: ldr x0, .Ltmp[[TMP12:[0-9]+]]
152 // CHECK: ldr x0, .Ltmp[[TMP13:[0-9]+]]
154 // usage with expressions
155 .section l, "ax", @progbits
159 // CHECK: ldr x0, .Ltmp[[TMP14:[0-9]+]]
162 // CHECK: ldr x0, .Ltmp[[TMP15:[0-9]+]]
168 // CHECK: .section b,"ax",@progbits
170 // CHECK: .Ltmp[[TMP0]]
171 // CHECK: .word 65537
173 // CHECK: .section c,"ax",@progbits
175 // CHECK: .Ltmp[[TMP1]]
176 // CHECK: .word 65538
177 // CHECK: .Ltmp[[TMP2]]
178 // CHECK: .word 65539
180 // CHECK: .section d,"ax",@progbits
182 // CHECK: .Ltmp[[TMP3]]
183 // CHECK: .word 65540
184 // CHECK: .Ltmp[[TMP4]]
185 // CHECK: .word 65540
187 // CHECK: .section e,"ax",@progbits
189 // CHECK: .Ltmp[[TMP5]]
190 // CHECK: .word 65542
191 // CHECK: .Ltmp[[TMP6]]
192 // CHECK: .word 65543
194 // Should not switch to section because it has no constant pool
195 // CHECK-NOT: .section f,"ax",@progbits
197 // CHECK: .section g,"ax",@progbits
199 // CHECK: .Ltmp[[TMP7]]
202 // CHECK: .section h,"ax",@progbits
204 // CHECK: .Ltmp[[TMP8]]
207 // CHECK: .section i,"ax",@progbits
209 // CHECK: .Ltmp[[TMP9]]
211 // CHECK: .Ltmp[[TMP10]]
212 // CHECK: .word 245760
214 // CHECK: .section j,"ax",@progbits
216 // CHECK: .Ltmp[[TMP11]]
219 // CHECK: .section k,"ax",@progbits
221 // CHECK: .Ltmp[[TMP12]]
222 // CHECK: .word 65544
223 // CHECK: .Ltmp[[TMP13]]
226 // CHECK: .section l,"ax",@progbits
228 // CHECK: .Ltmp[[TMP14]]
229 // CHECK: .word 65545
230 // CHECK: .Ltmp[[TMP15]]
231 // CHECK: .word bar+4