blob: df0d88a9a56e0326b9269473b4f875243f0bbc76 [file] [log] [blame]
David Peixottoe407d092013-12-19 18:12:36 +00001@ This test has a partner (ldr-pseudo-darwin.s) that contains matching
2@ tests for the ldr-pseudo on darwin targets. We need separate files
3@ because the syntax for switching sections and temporary labels differs
4@ between darwin and linux. Any tests added here should have a matching
5@ test added there.
6
7@RUN: llvm-mc -triple armv7-unknown-linux-gnueabi %s | FileCheck %s
8@RUN: llvm-mc -triple thumbv5-unknown-linux-gnueabi %s | FileCheck %s
9@RUN: llvm-mc -triple thumbv7-unknown-linux-gnueabi %s | FileCheck %s
10
11@
12@ Check that large constants are converted to ldr from constant pool
13@
14@ simple test
15.section b,"ax",%progbits
16@ CHECK-LABEL: f3:
17f3:
18 ldr r0, =0x10001
Oliver Stannardf010b982014-03-14 09:10:26 +000019@ CHECK: ldr r0, .Ltmp[[TMP0:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +000020
21@ loading multiple constants
22.section c,"ax",%progbits
23@ CHECK-LABEL: f4:
24f4:
25 ldr r0, =0x10002
Oliver Stannardf010b982014-03-14 09:10:26 +000026@ CHECK: ldr r0, .Ltmp[[TMP1:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +000027 adds r0, r0, #1
28 adds r0, r0, #1
29 adds r0, r0, #1
30 adds r0, r0, #1
31 ldr r0, =0x10003
Oliver Stannardf010b982014-03-14 09:10:26 +000032@ CHECK: ldr r0, .Ltmp[[TMP2:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +000033 adds r0, r0, #1
34 adds r0, r0, #1
35
36@ TODO: the same constants should have the same constant pool location
37.section d,"ax",%progbits
38@ CHECK-LABEL: f5:
39f5:
40 ldr r0, =0x10004
Oliver Stannardf010b982014-03-14 09:10:26 +000041@ CHECK: ldr r0, .Ltmp[[TMP3:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +000042 adds r0, r0, #1
43 adds r0, r0, #1
44 adds r0, r0, #1
45 adds r0, r0, #1
46 adds r0, r0, #1
47 adds r0, r0, #1
48 adds r0, r0, #1
49 ldr r0, =0x10004
Oliver Stannardf010b982014-03-14 09:10:26 +000050@ CHECK: ldr r0, .Ltmp[[TMP4:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +000051 adds r0, r0, #1
52 adds r0, r0, #1
53 adds r0, r0, #1
54 adds r0, r0, #1
55 adds r0, r0, #1
56 adds r0, r0, #1
57
58@ a section defined in multiple pieces should be merged and use a single constant pool
59.section e,"ax",%progbits
60@ CHECK-LABEL: f6:
61f6:
62 ldr r0, =0x10006
Oliver Stannardf010b982014-03-14 09:10:26 +000063@ CHECK: ldr r0, .Ltmp[[TMP5:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +000064 adds r0, r0, #1
65 adds r0, r0, #1
66 adds r0, r0, #1
67
68.section f, "ax", %progbits
69@ CHECK-LABEL: f7:
70f7:
71 adds r0, r0, #1
72 adds r0, r0, #1
73 adds r0, r0, #1
74
75.section e, "ax", %progbits
76@ CHECK-LABEL: f8:
77f8:
78 adds r0, r0, #1
79 ldr r0, =0x10007
Oliver Stannardf010b982014-03-14 09:10:26 +000080@ CHECK: ldr r0, .Ltmp[[TMP6:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +000081 adds r0, r0, #1
82 adds r0, r0, #1
83
84@
85@ Check that symbols can be loaded using ldr pseudo
86@
87
88@ load an undefined symbol
89.section g,"ax",%progbits
90@ CHECK-LABEL: f9:
91f9:
92 ldr r0, =foo
Oliver Stannardf010b982014-03-14 09:10:26 +000093@ CHECK: ldr r0, .Ltmp[[TMP7:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +000094
95@ load a symbol from another section
96.section h,"ax",%progbits
97@ CHECK-LABEL: f10:
98f10:
99 ldr r0, =f5
Oliver Stannardf010b982014-03-14 09:10:26 +0000100@ CHECK: ldr r0, .Ltmp[[TMP8:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +0000101
102@ load a symbol from the same section
103.section i,"ax",%progbits
104@ CHECK-LABEL: f11:
105f11:
106 ldr r0, =f12
Oliver Stannardf010b982014-03-14 09:10:26 +0000107@ CHECK: ldr r0, .Ltmp[[TMP9:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +0000108
109@ CHECK-LABEL: f12:
110f12:
111 adds r0, r0, #1
112 adds r0, r0, #1
113
114.section j,"ax",%progbits
115@ mix of symbols and constants
116@ CHECK-LABEL: f13:
117f13:
118 adds r0, r0, #1
119 adds r0, r0, #1
120 ldr r0, =0x101
Oliver Stannardf010b982014-03-14 09:10:26 +0000121@ CHECK: ldr r0, .Ltmp[[TMP10:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +0000122 adds r0, r0, #1
123 adds r0, r0, #1
124 ldr r0, =bar
Oliver Stannardf010b982014-03-14 09:10:26 +0000125@ CHECK: ldr r0, .Ltmp[[TMP11:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +0000126 adds r0, r0, #1
127 adds r0, r0, #1
128@
129@ Check for correct usage in other contexts
130@
131
132@ usage in macro
133.macro useit_in_a_macro
134 ldr r0, =0x10008
135 ldr r0, =baz
136.endm
137.section k,"ax",%progbits
138@ CHECK-LABEL: f14:
139f14:
140 useit_in_a_macro
Oliver Stannardf010b982014-03-14 09:10:26 +0000141@ CHECK: ldr r0, .Ltmp[[TMP12:[0-9]+]]
142@ CHECK: ldr r0, .Ltmp[[TMP13:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +0000143
144@ usage with expressions
145.section l, "ax", %progbits
146@ CHECK-LABEL: f15:
147f15:
148 ldr r0, =0x10001+8
Oliver Stannardf010b982014-03-14 09:10:26 +0000149@ CHECK: ldr r0, .Ltmp[[TMP14:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +0000150 adds r0, r0, #1
151 ldr r0, =bar+4
Oliver Stannardf010b982014-03-14 09:10:26 +0000152@ CHECK: ldr r0, .Ltmp[[TMP15:[0-9]+]]
David Peixottoe407d092013-12-19 18:12:36 +0000153 adds r0, r0, #1
154
155@
156@ Constant Pools
157@
158@ CHECK: .section b,"ax",%progbits
159@ CHECK: .align 2
Oliver Stannardf010b982014-03-14 09:10:26 +0000160@ CHECK: .Ltmp[[TMP0]]
David Peixottoe407d092013-12-19 18:12:36 +0000161@ CHECK: .long 65537
162
163@ CHECK: .section c,"ax",%progbits
164@ CHECK: .align 2
Oliver Stannardf010b982014-03-14 09:10:26 +0000165@ CHECK: .Ltmp[[TMP1]]
David Peixottoe407d092013-12-19 18:12:36 +0000166@ CHECK: .long 65538
Oliver Stannardf010b982014-03-14 09:10:26 +0000167@ CHECK: .Ltmp[[TMP2]]
David Peixottoe407d092013-12-19 18:12:36 +0000168@ CHECK: .long 65539
169
170@ CHECK: .section d,"ax",%progbits
171@ CHECK: .align 2
Oliver Stannardf010b982014-03-14 09:10:26 +0000172@ CHECK: .Ltmp[[TMP3]]
David Peixottoe407d092013-12-19 18:12:36 +0000173@ CHECK: .long 65540
Oliver Stannardf010b982014-03-14 09:10:26 +0000174@ CHECK: .Ltmp[[TMP4]]
David Peixottoe407d092013-12-19 18:12:36 +0000175@ CHECK: .long 65540
176
177@ CHECK: .section e,"ax",%progbits
178@ CHECK: .align 2
Oliver Stannardf010b982014-03-14 09:10:26 +0000179@ CHECK: .Ltmp[[TMP5]]
David Peixottoe407d092013-12-19 18:12:36 +0000180@ CHECK: .long 65542
Oliver Stannardf010b982014-03-14 09:10:26 +0000181@ CHECK: .Ltmp[[TMP6]]
David Peixottoe407d092013-12-19 18:12:36 +0000182@ CHECK: .long 65543
183
184@ Should not switch to section because it has no constant pool
185@ CHECK-NOT: .section f,"ax",%progbits
186
187@ CHECK: .section g,"ax",%progbits
188@ CHECK: .align 2
Oliver Stannardf010b982014-03-14 09:10:26 +0000189@ CHECK: .Ltmp[[TMP7]]
David Peixottoe407d092013-12-19 18:12:36 +0000190@ CHECK: .long foo
191
192@ CHECK: .section h,"ax",%progbits
193@ CHECK: .align 2
Oliver Stannardf010b982014-03-14 09:10:26 +0000194@ CHECK: .Ltmp[[TMP8]]
David Peixottoe407d092013-12-19 18:12:36 +0000195@ CHECK: .long f5
196
197@ CHECK: .section i,"ax",%progbits
198@ CHECK: .align 2
Oliver Stannardf010b982014-03-14 09:10:26 +0000199@ CHECK: .Ltmp[[TMP9]]
David Peixottoe407d092013-12-19 18:12:36 +0000200@ CHECK: .long f12
201
202@ CHECK: .section j,"ax",%progbits
203@ CHECK: .align 2
Oliver Stannardf010b982014-03-14 09:10:26 +0000204@ CHECK: .Ltmp[[TMP10]]
David Peixottoe407d092013-12-19 18:12:36 +0000205@ CHECK: .long 257
Oliver Stannardf010b982014-03-14 09:10:26 +0000206@ CHECK: .Ltmp[[TMP11]]
David Peixottoe407d092013-12-19 18:12:36 +0000207@ CHECK: .long bar
208
209@ CHECK: .section k,"ax",%progbits
210@ CHECK: .align 2
Oliver Stannardf010b982014-03-14 09:10:26 +0000211@ CHECK: .Ltmp[[TMP12]]
David Peixottoe407d092013-12-19 18:12:36 +0000212@ CHECK: .long 65544
Oliver Stannardf010b982014-03-14 09:10:26 +0000213@ CHECK: .Ltmp[[TMP13]]
David Peixottoe407d092013-12-19 18:12:36 +0000214@ CHECK: .long baz
215
216@ CHECK: .section l,"ax",%progbits
217@ CHECK: .align 2
Oliver Stannardf010b982014-03-14 09:10:26 +0000218@ CHECK: .Ltmp[[TMP14]]
David Peixottoe407d092013-12-19 18:12:36 +0000219@ CHECK: .long 65545
Oliver Stannardf010b982014-03-14 09:10:26 +0000220@ CHECK: .Ltmp[[TMP15]]
David Peixottoe407d092013-12-19 18:12:36 +0000221@ CHECK: .long bar+4