• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1@ RUN: llvm-mc -triple=thumbv7-apple-darwin -mcpu=cortex-a8 -show-encoding < %s | FileCheck %s
2
3@------------------------------------------------------------------------------
4@ unconditional branches accept narrow suffix and encode to short encodings
5@------------------------------------------------------------------------------
6
7         b.n    #-2048
8         b.n    #2046
9
10@ CHECK: b	#-2048                  @ encoding: [0x00,0xe4]
11@ CHECK: b	#2046                   @ encoding: [0xff,0xe3]
12
13@------------------------------------------------------------------------------
14@ unconditional branches accept wide suffix and encode to wide encodings
15@------------------------------------------------------------------------------
16
17         b.w    #-2048
18         b.w    #2046
19         b.w    #-1677216
20         b.w    #1677214
21
22@ CHECK: b.w	#-2048                  @ encoding: [0xff,0xf7,0x00,0xbc]
23@ CHECK: b.w	#2046                   @ encoding: [0x00,0xf0,0xff,0xbb]
24@ CHECK: b.w	#-1677216               @ encoding: [0x66,0xf6,0x30,0xbc]
25@ CHECK: b.w	#1677214                @ encoding: [0x99,0xf1,0xcf,0xbb]
26
27@------------------------------------------------------------------------------
28@ unconditional branches without width suffix encode depending of offset size
29@------------------------------------------------------------------------------
30
31         b      #-2048
32         b      #2046
33         b      #-2050
34         b      #2048
35         b      #-1677216
36         b      #1677214
37
38@ CHECK: b	#-2048                  @ encoding: [0x00,0xe4]
39@ CHECK: b	#2046                   @ encoding: [0xff,0xe3]
40@ CHECK: b.w	#-2050                  @ encoding: [0xff,0xf7,0xff,0xbb]
41@ CHECK: b.w	#2048                   @ encoding: [0x00,0xf0,0x00,0xbc]
42@ CHECK: b.w	#-1677216               @ encoding: [0x66,0xf6,0x30,0xbc]
43@ CHECK: b.w	#1677214                @ encoding: [0x99,0xf1,0xcf,0xbb]
44
45@------------------------------------------------------------------------------
46@ unconditional branches with width narrow suffix in IT block
47@------------------------------------------------------------------------------
48
49         it     eq
50         beq.n  #-2048
51         it     ne
52         bne.n  #-2046
53
54@ CHECK: it	eq                      @ encoding: [0x08,0xbf]
55@ CHECK: beq	#-2048                  @ encoding: [0x00,0xe4]
56@ CHECK: it	ne                      @ encoding: [0x18,0xbf]
57@ CHECK: bne	#-2046                  @ encoding: [0x01,0xe4]
58
59@------------------------------------------------------------------------------
60@ unconditional branches with wide suffix in IT block
61@------------------------------------------------------------------------------
62
63         it     gt
64         bgt.w  #-2048
65         it     le
66         ble.w  #2046
67         it     ge
68         bge.w  #-1677216
69         it     lt
70         blt.w  #1677214
71
72@ CHECK: it	gt                      @ encoding: [0xc8,0xbf]
73@ CHECK: bgt.w	#-2048                  @ encoding: [0xff,0xf7,0x00,0xbc]
74@ CHECK: it	le                      @ encoding: [0xd8,0xbf]
75@ CHECK: ble.w	#2046                   @ encoding: [0x00,0xf0,0xff,0xbb]
76@ CHECK: it	ge                      @ encoding: [0xa8,0xbf]
77@ CHECK: bge.w	#-1677216               @ encoding: [0x66,0xf6,0x30,0xbc]
78@ CHECK: it	lt                      @ encoding: [0xb8,0xbf]
79@ CHECK: blt.w	#1677214                @ encoding: [0x99,0xf1,0xcf,0xbb]
80
81@------------------------------------------------------------------------------
82@ conditional branches accept narrow suffix and encode to short encodings
83@------------------------------------------------------------------------------
84
85         beq.n    #-256
86         bne.n    #254
87
88@ CHECK: beq	#-256                   @ encoding: [0x80,0xd0]
89@ CHECK: bne	#254                    @ encoding: [0x7f,0xd1]
90
91@------------------------------------------------------------------------------
92@ unconditional branches accept wide suffix and encode to wide encodings
93@------------------------------------------------------------------------------
94
95         bmi.w    #-256
96         bne.w    #254
97         blt.w    #-1048576
98         bge.w    #1048574
99
100@ CHECK: bmi.w	#-256                   @ encoding: [0x3f,0xf5,0x80,0xaf]
101@ CHECK: bne.w	#254                    @ encoding: [0x40,0xf0,0x7f,0x80]
102@ CHECK: blt.w	#-1048576               @ encoding: [0xc0,0xf6,0x00,0x80]
103@ CHECK: bge.w	#1048574                @ encoding: [0xbf,0xf2,0xff,0xaf]
104
105@------------------------------------------------------------------------------
106@ unconditional branches without width suffix encode depending of offset size
107@------------------------------------------------------------------------------
108
109         bne     #-256
110         bgt     #254
111         bne     #-258
112         bgt     #256
113         bne     #-1048576
114         bgt     #1048574
115
116@ CHECK: bne	#-256                   @ encoding: [0x80,0xd1]
117@ CHECK: bgt	#254                    @ encoding: [0x7f,0xdc]
118@ CHECK: bne.w	#-258                   @ encoding: [0x7f,0xf4,0x7f,0xaf]
119@ CHECK: bgt.w	#256                    @ encoding: [0x00,0xf3,0x80,0x80]
120@ CHECK: bne.w	#-1048576               @ encoding: [0x40,0xf4,0x00,0x80]
121@ CHECK: bgt.w	#1048574                @ encoding: [0x3f,0xf3,0xff,0xaf]
122
123@------------------------------------------------------------------------------
124@ same branch insturction encoding to conditional or unconditional depending
125@ on whether it is in an IT block or not
126@------------------------------------------------------------------------------
127
128         it     eq
129         addeq  r0, r1
130         bne    #128
131
132@ CHECK: it	eq                      @ encoding: [0x08,0xbf]
133@ CHECK: addeq	r0, r1                  @ encoding: [0x08,0x44]
134@ CHECK: bne	#128                    @ encoding: [0x40,0xd1]
135
136         ite    eq
137         addeq  r0, r1
138         bne    #128
139
140@ CHECK: ite	eq                      @ encoding: [0x0c,0xbf]
141@ CHECK: addeq	r0, r1                  @ encoding: [0x08,0x44]
142@ CHECK: bne	#128                    @ encoding: [0x40,0xe0]
143
144@ RUN: llvm-mc -triple=thumbv7-apple-darwin -mcpu=cortex-a8 -show-encoding < %s | FileCheck %s
145
146@------------------------------------------------------------------------------
147@ unconditional branches accept narrow suffix and encode to short encodings
148@------------------------------------------------------------------------------
149
150         b.n    #-2048
151         b.n    #2046
152
153@ CHECK: b	#-2048                  @ encoding: [0x00,0xe4]
154@ CHECK: b	#2046                   @ encoding: [0xff,0xe3]
155
156@------------------------------------------------------------------------------
157@ unconditional branches accept wide suffix and encode to wide encodings
158@------------------------------------------------------------------------------
159
160         b.w    #-2048
161         b.w    #2046
162         b.w    #-1677216
163         b.w    #1677214
164
165@ CHECK: b.w	#-2048                  @ encoding: [0xff,0xf7,0x00,0xbc]
166@ CHECK: b.w	#2046                   @ encoding: [0x00,0xf0,0xff,0xbb]
167@ CHECK: b.w	#-1677216               @ encoding: [0x66,0xf6,0x30,0xbc]
168@ CHECK: b.w	#1677214                @ encoding: [0x99,0xf1,0xcf,0xbb]
169
170@------------------------------------------------------------------------------
171@ unconditional branches without width suffix encode depending of offset size
172@------------------------------------------------------------------------------
173
174         b      #-2048
175         b      #2046
176         b      #-2050
177         b      #2048
178         b      #-1677216
179         b      #1677214
180
181@ CHECK: b	#-2048                  @ encoding: [0x00,0xe4]
182@ CHECK: b	#2046                   @ encoding: [0xff,0xe3]
183@ CHECK: b.w	#-2050                  @ encoding: [0xff,0xf7,0xff,0xbb]
184@ CHECK: b.w	#2048                   @ encoding: [0x00,0xf0,0x00,0xbc]
185@ CHECK: b.w	#-1677216               @ encoding: [0x66,0xf6,0x30,0xbc]
186@ CHECK: b.w	#1677214                @ encoding: [0x99,0xf1,0xcf,0xbb]
187
188@------------------------------------------------------------------------------
189@ unconditional branches with width narrow suffix in IT block
190@------------------------------------------------------------------------------
191
192         it     eq
193         beq.n  #-2048
194         it     ne
195         bne.n  #-2046
196
197@ CHECK: it	eq                      @ encoding: [0x08,0xbf]
198@ CHECK: beq	#-2048                  @ encoding: [0x00,0xe4]
199@ CHECK: it	ne                      @ encoding: [0x18,0xbf]
200@ CHECK: bne	#-2046                  @ encoding: [0x01,0xe4]
201
202@------------------------------------------------------------------------------
203@ unconditional branches with wide suffix in IT block
204@------------------------------------------------------------------------------
205
206         it     gt
207         bgt.w  #-2048
208         it     le
209         ble.w  #2046
210         it     ge
211         bge.w  #-1677216
212         it     lt
213         blt.w  #1677214
214
215@ CHECK: it	gt                      @ encoding: [0xc8,0xbf]
216@ CHECK: bgt.w	#-2048                  @ encoding: [0xff,0xf7,0x00,0xbc]
217@ CHECK: it	le                      @ encoding: [0xd8,0xbf]
218@ CHECK: ble.w	#2046                   @ encoding: [0x00,0xf0,0xff,0xbb]
219@ CHECK: it	ge                      @ encoding: [0xa8,0xbf]
220@ CHECK: bge.w	#-1677216               @ encoding: [0x66,0xf6,0x30,0xbc]
221@ CHECK: it	lt                      @ encoding: [0xb8,0xbf]
222@ CHECK: blt.w	#1677214                @ encoding: [0x99,0xf1,0xcf,0xbb]
223
224@------------------------------------------------------------------------------
225@ conditional branches accept narrow suffix and encode to short encodings
226@------------------------------------------------------------------------------
227
228         beq.n    #-256
229         bne.n    #254
230
231@ CHECK: beq	#-256                   @ encoding: [0x80,0xd0]
232@ CHECK: bne	#254                    @ encoding: [0x7f,0xd1]
233
234@------------------------------------------------------------------------------
235@ unconditional branches accept wide suffix and encode to wide encodings
236@------------------------------------------------------------------------------
237
238         bmi.w    #-256
239         bne.w    #254
240         blt.w    #-1048576
241         bge.w    #1048574
242
243@ CHECK: bmi.w	#-256                   @ encoding: [0x3f,0xf5,0x80,0xaf]
244@ CHECK: bne.w	#254                    @ encoding: [0x40,0xf0,0x7f,0x80]
245@ CHECK: blt.w	#-1048576               @ encoding: [0xc0,0xf6,0x00,0x80]
246@ CHECK: bge.w	#1048574                @ encoding: [0xbf,0xf2,0xff,0xaf]
247
248@------------------------------------------------------------------------------
249@ unconditional branches without width suffix encode depending of offset size
250@------------------------------------------------------------------------------
251
252         bne     #-256
253         bgt     #254
254         bne     #-258
255         bgt     #256
256         bne     #-1048576
257         bgt     #1048574
258
259@ CHECK: bne	#-256                   @ encoding: [0x80,0xd1]
260@ CHECK: bgt	#254                    @ encoding: [0x7f,0xdc]
261@ CHECK: bne.w	#-258                   @ encoding: [0x7f,0xf4,0x7f,0xaf]
262@ CHECK: bgt.w	#256                    @ encoding: [0x00,0xf3,0x80,0x80]
263@ CHECK: bne.w	#-1048576               @ encoding: [0x40,0xf4,0x00,0x80]
264@ CHECK: bgt.w	#1048574                @ encoding: [0x3f,0xf3,0xff,0xaf]
265
266@------------------------------------------------------------------------------
267@ same branch insturction encoding to conditional or unconditional depending
268@ on whether it is in an IT block or not
269@------------------------------------------------------------------------------
270
271         it     eq
272         addeq  r0, r1
273         bne    #128
274
275@ CHECK: it	eq                      @ encoding: [0x08,0xbf]
276@ CHECK: addeq	r0, r1                  @ encoding: [0x08,0x44]
277@ CHECK: bne	#128                    @ encoding: [0x40,0xd1]
278
279         ite    eq
280         addeq  r0, r1
281         bne    #128
282
283@ CHECK: ite	eq                      @ encoding: [0x0c,0xbf]
284@ CHECK: addeq	r0, r1                  @ encoding: [0x08,0x44]
285@ CHECK: bne	#128                    @ encoding: [0x40,0xe0]
286
287
288@------------------------------------------------------------------------------
289@ Branch targets destined for ARM mode must == 0 (mod 4), otherwise (mod 2).
290@------------------------------------------------------------------------------
291
292        b #2
293        bl #2
294        beq #2
295        cbz r0, #2
296        @ N.b. destination is "align(PC, 4) + imm" so imm is still 4-byte
297        @ aligned even though current PC may not and destination must be.
298        blx #4
299
300@ CHECK: b	#2                      @ encoding: [0x01,0xe0]
301@ CHECK: bl	#2                      @ encoding: [0x00,0xf0,0x01,0xf8]
302@ CHECK: beq	#2                      @ encoding: [0x01,0xd0]
303@ CHECK: cbz	r0, #2                  @ encoding: [0x08,0xb1]
304@ CHECK: blx	#4                      @ encoding: [0x00,0xf0,0x02,0xe8]
305