fe3ab34e0c1d5ba8960290fb2f79e5b01815b65f
[oota-llvm.git] / test / MC / ARM / basic-thumb2-instructions.s
1 @ RUN: llvm-mc -triple=thumbv7-apple-darwin -show-encoding < %s | FileCheck %s
2   .syntax unified
3   .globl _func
4
5 @ Check that the assembler can handle the documented syntax from the ARM ARM.
6 @ For complex constructs like shifter operands, check more thoroughly for them
7 @ once then spot check that following instructions accept the form generally.
8 @ This gives us good coverage while keeping the overall size of the test
9 @ more reasonable.
10
11
12 @ FIXME: Some 3-operand instructions have a 2-operand assembly syntax.
13
14 _func:
15 @ CHECK: _func
16
17 @------------------------------------------------------------------------------
18 @ ADC (immediate)
19 @------------------------------------------------------------------------------
20         adc r0, r1, #4
21         adcs r0, r1, #0
22         adc r1, r2, #255
23         adc r3, r7, #0x00550055
24         adc r8, r12, #0xaa00aa00
25         adc r9, r7, #0xa5a5a5a5
26         adc r5, r3, #0x87000000
27         adc r4, r2, #0x7f800000
28         adc r4, r2, #0x00000680
29
30 @ CHECK: adc    r0, r1, #4              @ encoding: [0x41,0xf1,0x04,0x00]
31 @ CHECK: adcs   r0, r1, #0              @ encoding: [0x51,0xf1,0x00,0x00]
32 @ CHECK: adc    r1, r2, #255            @ encoding: [0x42,0xf1,0xff,0x01]
33 @ CHECK: adc    r3, r7, #5570645        @ encoding: [0x47,0xf1,0x55,0x13]
34 @ CHECK: adc    r8, r12, #2852170240    @ encoding: [0x4c,0xf1,0xaa,0x28]
35 @ CHECK: adc    r9, r7, #2779096485     @ encoding: [0x47,0xf1,0xa5,0x39]
36 @ CHECK: adc    r5, r3, #2264924160     @ encoding: [0x43,0xf1,0x07,0x45]
37 @ CHECK: adc    r4, r2, #2139095040     @ encoding: [0x42,0xf1,0xff,0x44]
38 @ CHECK: adc    r4, r2, #1664           @ encoding: [0x42,0xf5,0xd0,0x64]
39
40 @------------------------------------------------------------------------------
41 @ ADC (register)
42 @------------------------------------------------------------------------------
43         adc r4, r5, r6
44         adcs r4, r5, r6
45         adc.w r9, r1, r3
46         adcs.w r9, r1, r3
47         adc     r0, r1, r3, ror #4
48         adcs    r0, r1, r3, lsl #7
49         adc.w   r0, r1, r3, lsr #31
50         adcs.w  r0, r1, r3, asr #32
51
52 @ CHECK: adc.w  r4, r5, r6              @ encoding: [0x45,0xeb,0x06,0x04]
53 @ CHECK: adcs.w r4, r5, r6              @ encoding: [0x55,0xeb,0x06,0x04]
54 @ CHECK: adc.w  r9, r1, r3              @ encoding: [0x41,0xeb,0x03,0x09]
55 @ CHECK: adcs.w r9, r1, r3              @ encoding: [0x51,0xeb,0x03,0x09]
56 @ CHECK: adc.w  r0, r1, r3, ror #4      @ encoding: [0x41,0xeb,0x33,0x10]
57 @ CHECK: adcs.w r0, r1, r3, lsl #7      @ encoding: [0x51,0xeb,0xc3,0x10]
58 @ CHECK: adc.w  r0, r1, r3, lsr #31     @ encoding: [0x41,0xeb,0xd3,0x70]
59 @ CHECK: adcs.w r0, r1, r3, asr #32     @ encoding: [0x51,0xeb,0x23,0x00]
60
61
62 @------------------------------------------------------------------------------
63 @ ADD (immediate)
64 @------------------------------------------------------------------------------
65         itet eq
66         addeq r1, r2, #4
67         addwne r5, r3, #1023
68         addeq r4, r5, #293
69         add r2, sp, #1024
70         add r2, r8, #0xff00
71         add r2, r3, #257
72         addw r2, r3, #257
73         add r12, r6, #0x100
74         addw r12, r6, #0x100
75         adds r1, r2, #0x1f0
76
77 @ CHECK: itet   eq                      @ encoding: [0x0a,0xbf]
78 @ CHECK: addeq  r1, r2, #4              @ encoding: [0x11,0x1d]
79 @ CHECK: addwne r5, r3, #1023           @ encoding: [0x03,0xf2,0xff,0x35]
80 @ CHECK: addweq r4, r5, #293            @ encoding: [0x05,0xf2,0x25,0x14]
81 @ CHECK: add.w  r2, sp, #1024           @ encoding: [0x0d,0xf5,0x80,0x62]
82 @ CHECK: add.w  r2, r8, #65280          @ encoding: [0x08,0xf5,0x7f,0x42]
83 @ CHECK: addw   r2, r3, #257            @ encoding: [0x03,0xf2,0x01,0x12]
84 @ CHECK: addw   r2, r3, #257            @ encoding: [0x03,0xf2,0x01,0x12]
85 @ CHECK: add.w  r12, r6, #256           @ encoding: [0x06,0xf5,0x80,0x7c]
86 @ CHECK: addw   r12, r6, #256           @ encoding: [0x06,0xf2,0x00,0x1c]
87 @ CHECK: adds.w r1, r2, #496            @ encoding: [0x12,0xf5,0xf8,0x71]
88
89
90 @------------------------------------------------------------------------------
91 @ ADD (register)
92 @------------------------------------------------------------------------------
93         add r1, r2, r8
94         add r5, r9, r2, asr #32
95         adds r7, r3, r1, lsl #31
96         adds.w r0, r3, r6, lsr #25
97         add.w r4, r8, r1, ror #12
98
99 @ CHECK: add.w  r1, r2, r8              @ encoding: [0x02,0xeb,0x08,0x01]
100 @ CHECK: add.w  r5, r9, r2, asr #32     @ encoding: [0x09,0xeb,0x22,0x05]
101 @ CHECK: adds.w r7, r3, r1, lsl #31     @ encoding: [0x13,0xeb,0xc1,0x77]
102 @ CHECK: adds.w r0, r3, r6, lsr #25     @ encoding: [0x13,0xeb,0x56,0x60]
103 @ CHECK: add.w  r4, r8, r1, ror #12     @ encoding: [0x08,0xeb,0x31,0x34]
104
105
106 @------------------------------------------------------------------------------
107 @ FIXME: ADR
108 @------------------------------------------------------------------------------
109
110 @------------------------------------------------------------------------------
111 @ AND (immediate)
112 @------------------------------------------------------------------------------
113         and r2, r5, #0xff000
114         ands r3, r12, #0xf
115         and r1, #0xff
116         and r1, r1, #0xff
117
118 @ CHECK: and    r2, r5, #1044480        @ encoding: [0x05,0xf4,0x7f,0x22]
119 @ CHECK: ands   r3, r12, #15            @ encoding: [0x1c,0xf0,0x0f,0x03]
120 @ CHECK: and    r1, r1, #255            @ encoding: [0x01,0xf0,0xff,0x01]
121 @ CHECK: and    r1, r1, #255            @ encoding: [0x01,0xf0,0xff,0x01]
122
123
124 @------------------------------------------------------------------------------
125 @ AND (register)
126 @------------------------------------------------------------------------------
127         and r4, r9, r8
128         and r1, r4, r8, asr #3
129         ands r2, r1, r7, lsl #1
130         ands.w r4, r5, r2, lsr #20
131         and.w r9, r12, r1, ror #17
132
133 @ CHECK: and.w  r4, r9, r8              @ encoding: [0x09,0xea,0x08,0x04]
134 @ CHECK: and.w  r1, r4, r8, asr #3      @ encoding: [0x04,0xea,0xe8,0x01]
135 @ CHECK: ands.w r2, r1, r7, lsl #1      @ encoding: [0x11,0xea,0x47,0x02]
136 @ CHECK: ands.w r4, r5, r2, lsr #20     @ encoding: [0x15,0xea,0x12,0x54]
137 @ CHECK: and.w  r9, r12, r1, ror #17    @ encoding: [0x0c,0xea,0x71,0x49]
138
139 @------------------------------------------------------------------------------
140 @ ASR (immediate)
141 @------------------------------------------------------------------------------
142         asr r2, r3, #12
143         asrs r8, r3, #32
144         asrs.w r2, r3, #1
145         asr r2, r3, #4
146         asrs r2, r12, #15
147
148         asr r3, #19
149         asrs r8, #2
150         asrs.w r7, #5
151         asr.w r12, #21
152
153 @ CHECK: asr.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x23,0x32]
154 @ CHECK: asrs.w r8, r3, #32             @ encoding: [0x5f,0xea,0x23,0x08]
155 @ CHECK: asrs.w r2, r3, #1              @ encoding: [0x5f,0xea,0x63,0x02]
156 @ CHECK: asr.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x23,0x12]
157 @ CHECK: asrs.w r2, r12, #15            @ encoding: [0x5f,0xea,0xec,0x32]
158
159 @ CHECK: asr.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xe3,0x43]
160 @ CHECK: asrs.w r8, r8, #2              @ encoding: [0x5f,0xea,0xa8,0x08]
161 @ CHECK: asrs.w r7, r7, #5              @ encoding: [0x5f,0xea,0x67,0x17]
162 @ CHECK: asr.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x6c,0x5c]
163
164
165 @------------------------------------------------------------------------------
166 @ ASR (register)
167 @------------------------------------------------------------------------------
168         asr r3, r4, r2
169         asr.w r1, r2
170         asrs r3, r4, r8
171
172 @ CHECK: asr.w  r3, r4, r2              @ encoding: [0x44,0xfa,0x02,0xf3]
173 @ CHECK: asr.w  r1, r1, r2              @ encoding: [0x41,0xfa,0x02,0xf1]
174 @ CHECK: asrs.w r3, r4, r8              @ encoding: [0x54,0xfa,0x08,0xf3]
175
176
177 @------------------------------------------------------------------------------
178 @ B
179 @------------------------------------------------------------------------------
180         b.w   _bar
181         beq.w   _bar
182         it eq
183         beq.w _bar
184         bmi.w   #-183396
185
186 @ CHECK: b.w    _bar                    @ encoding: [A,0xf0'A',A,0x90'A']
187           @   fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch
188 @ CHECK: beq.w  _bar                    @ encoding: [A,0xf0'A',A,0x80'A']
189           @   fixup A - offset: 0, value: _bar, kind: fixup_t2_condbranch
190 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
191 @ CHECK: b.w    _bar                    @ encoding: [A,0xf0'A',A,0x90'A']
192           @   fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch
193 @ CHECK: bmi.w   #-183396                @ encoding: [0x13,0xf5,0xce,0xa9]
194
195
196 @------------------------------------------------------------------------------
197 @ BFC
198 @------------------------------------------------------------------------------
199         bfc r5, #3, #17
200         it lo
201         bfccc r5, #3, #17
202
203 @ CHECK: bfc    r5, #3, #17             @ encoding: [0x6f,0xf3,0xd3,0x05]
204 @ CHECK: it     lo                      @ encoding: [0x38,0xbf]
205 @ CHECK: bfclo  r5, #3, #17             @ encoding: [0x6f,0xf3,0xd3,0x05]
206
207
208 @------------------------------------------------------------------------------
209 @ BFI
210 @------------------------------------------------------------------------------
211         bfi r5, r2, #3, #17
212         it ne
213         bfine r5, r2, #3, #17
214
215 @ CHECK: bfi    r5, r2, #3, #17         @ encoding: [0x62,0xf3,0xd3,0x05]
216 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
217 @ CHECK: bfine  r5, r2, #3, #17         @ encoding: [0x62,0xf3,0xd3,0x05]
218
219
220 @------------------------------------------------------------------------------
221 @ BIC
222 @------------------------------------------------------------------------------
223         bic r10, r1, #0xf
224         bic r12, r3, r6
225         bic r11, r2, r6, lsl #12
226         bic r8, r4, r1, lsr #11
227         bic r7, r5, r7, lsr #15
228         bic r6, r7, r9, asr #32
229         bic r5, r6, r8, ror #1
230
231         @ destination register is optional
232         bic r1, #0xf
233         bic r1, r1
234         bic r4, r2, lsl #31
235         bic r6, r3, lsr #12
236         bic r7, r4, lsr #7
237         bic r8, r5, asr #15
238         bic r12, r6, ror #29
239
240 @ CHECK: bic    r10, r1, #15            @ encoding: [0x21,0xf0,0x0f,0x0a]
241 @ CHECK: bic.w  r12, r3, r6             @ encoding: [0x23,0xea,0x06,0x0c]
242 @ CHECK: bic.w  r11, r2, r6, lsl #12    @ encoding: [0x22,0xea,0x06,0x3b]
243 @ CHECK: bic.w  r8, r4, r1, lsr #11     @ encoding: [0x24,0xea,0xd1,0x28]
244 @ CHECK: bic.w  r7, r5, r7, lsr #15     @ encoding: [0x25,0xea,0xd7,0x37]
245 @ CHECK: bic.w  r6, r7, r9, asr #32     @ encoding: [0x27,0xea,0x29,0x06]
246 @ CHECK: bic.w  r5, r6, r8, ror #1      @ encoding: [0x26,0xea,0x78,0x05]
247
248 @ CHECK: bic    r1, r1, #15             @ encoding: [0x21,0xf0,0x0f,0x01]
249 @ CHECK: bic.w  r1, r1, r1              @ encoding: [0x21,0xea,0x01,0x01]
250 @ CHECK: bic.w  r4, r4, r2, lsl #31     @ encoding: [0x24,0xea,0xc2,0x74]
251 @ CHECK: bic.w  r6, r6, r3, lsr #12     @ encoding: [0x26,0xea,0x13,0x36]
252 @ CHECK: bic.w  r7, r7, r4, lsr #7      @ encoding: [0x27,0xea,0xd4,0x17]
253 @ CHECK: bic.w  r8, r8, r5, asr #15     @ encoding: [0x28,0xea,0xe5,0x38]
254 @ CHECK: bic.w  r12, r12, r6, ror #29   @ encoding: [0x2c,0xea,0x76,0x7c]
255
256
257 @------------------------------------------------------------------------------
258 @ BXJ
259 @------------------------------------------------------------------------------
260         bxj r5
261         it ne
262         bxjne r7
263
264 @ CHECK: bxj    r5                      @ encoding: [0xc5,0xf3,0x00,0x8f]
265 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
266 @ CHECK: bxjne  r7                      @ encoding: [0xc7,0xf3,0x00,0x8f]
267
268
269 @------------------------------------------------------------------------------
270 @ CBZ/CBNZ
271 @------------------------------------------------------------------------------
272         cbnz    r7, #6
273         cbnz    r7, #12
274         cbz   r6, _bar
275         cbnz   r6, _bar
276
277 @ CHECK: cbnz    r7, #6                  @ encoding: [0x1f,0xb9]
278 @ CHECK: cbnz    r7, #12                 @ encoding: [0x37,0xb9]
279 @ CHECK: cbz    r6, _bar                @ encoding: [0x06'A',0xb1'A']
280            @   fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
281 @ CHECK: cbnz   r6, _bar                @ encoding: [0x06'A',0xb9'A']
282            @   fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
283
284
285 @------------------------------------------------------------------------------
286 @ CDP/CDP2
287 @------------------------------------------------------------------------------
288   cdp  p7, #1, c1, c1, c1, #4
289   cdp2  p7, #1, c1, c1, c1, #4
290
291 @ CHECK: cdp    p7, #1, c1, c1, c1, #4  @ encoding: [0x11,0xee,0x81,0x17]
292 @ CHECK: cdp2   p7, #1, c1, c1, c1, #4  @ encoding: [0x11,0xfe,0x81,0x17]
293
294
295 @------------------------------------------------------------------------------
296 @ CLREX
297 @------------------------------------------------------------------------------
298         clrex
299         it ne
300         clrexne
301
302 @ CHECK: clrex                           @ encoding: [0xbf,0xf3,0x2f,0x8f]
303 @ CHECK: it     ne                       @ encoding: [0x18,0xbf]
304 @ CHECK: clrexne                         @ encoding: [0xbf,0xf3,0x2f,0x8f]
305
306
307 @------------------------------------------------------------------------------
308 @ CLZ
309 @------------------------------------------------------------------------------
310         clz r1, r2
311         it eq
312         clzeq r1, r2
313
314 @ CHECK: clz    r1, r2                  @ encoding: [0xb2,0xfa,0x82,0xf1]
315 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
316 @ CHECK: clzeq  r1, r2                  @ encoding: [0xb2,0xfa,0x82,0xf1]
317
318
319 @------------------------------------------------------------------------------
320 @ CMN
321 @------------------------------------------------------------------------------
322         cmn r1, #0xf
323         cmn r8, r6
324         cmn r1, r6, lsl #10
325         cmn r1, r6, lsr #10
326         cmn sp, r6, lsr #10
327         cmn r1, r6, asr #10
328         cmn r1, r6, ror #10
329
330 @ CHECK: cmn.w  r1, #15                 @ encoding: [0x11,0xf1,0x0f,0x0f]
331 @ CHECK: cmn.w  r8, r6                  @ encoding: [0x18,0xeb,0x06,0x0f]
332 @ CHECK: cmn.w  r1, r6, lsl #10         @ encoding: [0x11,0xeb,0x86,0x2f]
333 @ CHECK: cmn.w  r1, r6, lsr #10         @ encoding: [0x11,0xeb,0x96,0x2f]
334 @ CHECK: cmn.w  sp, r6, lsr #10         @ encoding: [0x1d,0xeb,0x96,0x2f]
335 @ CHECK: cmn.w  r1, r6, asr #10         @ encoding: [0x11,0xeb,0xa6,0x2f]
336 @ CHECK: cmn.w  r1, r6, ror #10         @ encoding: [0x11,0xeb,0xb6,0x2f]
337
338
339 @------------------------------------------------------------------------------
340 @ CMP
341 @------------------------------------------------------------------------------
342         cmp r5, #0xff00
343         cmp.w r4, r12
344         cmp r9, r6, lsl #12
345         cmp r3, r7, lsr #31
346         cmp sp, r6, lsr #1
347         cmp r2, r5, asr #24
348         cmp r1, r4, ror #15
349
350 @ CHECK: cmp.w  r5, #65280              @ encoding: [0xb5,0xf5,0x7f,0x4f]
351 @ CHECK: cmp.w  r4, r12                 @ encoding: [0xb4,0xeb,0x0c,0x0f]
352 @ CHECK: cmp.w  r9, r6, lsl #12         @ encoding: [0xb9,0xeb,0x06,0x3f]
353 @ CHECK: cmp.w  r3, r7, lsr #31         @ encoding: [0xb3,0xeb,0xd7,0x7f]
354 @ CHECK: cmp.w  sp, r6, lsr #1          @ encoding: [0xbd,0xeb,0x56,0x0f]
355 @ CHECK: cmp.w  r2, r5, asr #24         @ encoding: [0xb2,0xeb,0x25,0x6f]
356 @ CHECK: cmp.w  r1, r4, ror #15         @ encoding: [0xb1,0xeb,0xf4,0x3f]
357
358
359 @------------------------------------------------------------------------------
360 @ DBG
361 @------------------------------------------------------------------------------
362         dbg #5
363         dbg #0
364         dbg #15
365
366 @ CHECK: dbg    #5                      @ encoding: [0xaf,0xf3,0xf5,0x80]
367 @ CHECK: dbg    #0                      @ encoding: [0xaf,0xf3,0xf0,0x80]
368 @ CHECK: dbg    #15                     @ encoding: [0xaf,0xf3,0xff,0x80]
369
370
371 @------------------------------------------------------------------------------
372 @ DMB
373 @------------------------------------------------------------------------------
374         dmb sy
375         dmb st
376         dmb sh
377         dmb ish
378         dmb shst
379         dmb ishst
380         dmb un
381         dmb nsh
382         dmb unst
383         dmb nshst
384         dmb osh
385         dmb oshst
386         dmb
387
388 @ CHECK: dmb    sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
389 @ CHECK: dmb    st                      @ encoding: [0xbf,0xf3,0x5e,0x8f]
390 @ CHECK: dmb    ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
391 @ CHECK: dmb    ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
392 @ CHECK: dmb    ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
393 @ CHECK: dmb    ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
394 @ CHECK: dmb    nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
395 @ CHECK: dmb    nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
396 @ CHECK: dmb    nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
397 @ CHECK: dmb    nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
398 @ CHECK: dmb    osh                     @ encoding: [0xbf,0xf3,0x53,0x8f]
399 @ CHECK: dmb    oshst                   @ encoding: [0xbf,0xf3,0x52,0x8f]
400 @ CHECK: dmb    sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
401
402
403 @------------------------------------------------------------------------------
404 @ DSB
405 @------------------------------------------------------------------------------
406         dsb sy
407         dsb st
408         dsb sh
409         dsb ish
410         dsb shst
411         dsb ishst
412         dsb un
413         dsb nsh
414         dsb unst
415         dsb nshst
416         dsb osh
417         dsb oshst
418         dsb
419
420 @ CHECK: dsb    sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
421 @ CHECK: dsb    st                      @ encoding: [0xbf,0xf3,0x4e,0x8f]
422 @ CHECK: dsb    ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
423 @ CHECK: dsb    ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
424 @ CHECK: dsb    ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
425 @ CHECK: dsb    ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
426 @ CHECK: dsb    nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
427 @ CHECK: dsb    nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
428 @ CHECK: dsb    nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
429 @ CHECK: dsb    nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
430 @ CHECK: dsb    osh                     @ encoding: [0xbf,0xf3,0x43,0x8f]
431 @ CHECK: dsb    oshst                   @ encoding: [0xbf,0xf3,0x42,0x8f]
432 @ CHECK: dsb    sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
433
434
435 @------------------------------------------------------------------------------
436 @ EOR
437 @------------------------------------------------------------------------------
438         eor r4, r5, #0xf000
439         eor r4, r5, r6
440         eor r4, r5, r6, lsl #5
441         eor r4, r5, r6, lsr #5
442         eor r4, r5, r6, lsr #5
443         eor r4, r5, r6, asr #5
444         eor r4, r5, r6, ror #5
445
446 @ CHECK: eor    r4, r5, #61440          @ encoding: [0x85,0xf4,0x70,0x44]
447 @ CHECK: eor.w  r4, r5, r6              @ encoding: [0x85,0xea,0x06,0x04]
448 @ CHECK: eor.w  r4, r5, r6, lsl #5      @ encoding: [0x85,0xea,0x46,0x14]
449 @ CHECK: eor.w  r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
450 @ CHECK: eor.w  r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
451 @ CHECK: eor.w  r4, r5, r6, asr #5      @ encoding: [0x85,0xea,0x66,0x14]
452 @ CHECK: eor.w  r4, r5, r6, ror #5      @ encoding: [0x85,0xea,0x76,0x14]
453
454
455 @------------------------------------------------------------------------------
456 @ ISB
457 @------------------------------------------------------------------------------
458         isb sy
459         isb
460
461 @ CHECK: isb    sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
462 @ CHECK: isb    sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
463
464
465 @------------------------------------------------------------------------------
466 @ LDMIA
467 @------------------------------------------------------------------------------
468         ldmia.w r4, {r4, r5, r8, r9}
469         ldmia.w r4, {r5, r6}
470         ldmia.w r5!, {r3, r8}
471         ldm.w r4, {r4, r5, r8, r9}
472         ldm.w r4, {r5, r6}
473         ldm.w r5!, {r3, r8}
474         ldm.w r5!, {r1, r2}
475         ldm.w r2, {r1, r2}
476
477         ldmia r4, {r4, r5, r8, r9}
478         ldmia r4, {r5, r6}
479         ldmia r5!, {r3, r8}
480         ldm r4, {r4, r5, r8, r9}
481         ldm r4, {r5, r6}
482         ldm r5!, {r3, r8}
483         ldmfd r5!, {r3, r8}
484
485 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
486 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
487 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
488 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
489 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
490 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
491 @ CHECK: ldm.w  r5!, {r1, r2}           @ encoding: [0xb5,0xe8,0x06,0x00]
492 @ CHECK: ldm.w  r2, {r1, r2}            @ encoding: [0x92,0xe8,0x06,0x00]
493
494 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
495 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
496 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
497 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
498 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
499 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
500 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
501
502
503 @------------------------------------------------------------------------------
504 @ LDMDB
505 @------------------------------------------------------------------------------
506         ldmdb r4, {r4, r5, r8, r9}
507         ldmdb r4, {r5, r6}
508         ldmdb r5!, {r3, r8}
509         ldmea r5!, {r3, r8}
510
511 @ CHECK: ldmdb  r4, {r4, r5, r8, r9}    @ encoding: [0x14,0xe9,0x30,0x03]
512 @ CHECK: ldmdb  r4, {r5, r6}            @ encoding: [0x14,0xe9,0x60,0x00]
513 @ CHECK: ldmdb  r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
514 @ CHECK: ldmdb  r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
515
516
517 @------------------------------------------------------------------------------
518 @ LDR(immediate)
519 @------------------------------------------------------------------------------
520         ldr r5, [r5, #-4]
521         ldr r5, [r6, #32]
522         ldr r5, [r6, #33]
523         ldr r5, [r6, #257]
524         ldr.w pc, [r7, #257]
525
526 @ CHECK: ldr    r5, [r5, #-4]           @ encoding: [0x55,0xf8,0x04,0x5c]
527 @ CHECK: ldr    r5, [r6, #32]           @ encoding: [0x35,0x6a]
528 @ CHECK: ldr.w  r5, [r6, #33]           @ encoding: [0xd6,0xf8,0x21,0x50]
529 @ CHECK: ldr.w  r5, [r6, #257]          @ encoding: [0xd6,0xf8,0x01,0x51]
530 @ CHECK: ldr.w  pc, [r7, #257]          @ encoding: [0xd7,0xf8,0x01,0xf1]
531
532
533 @------------------------------------------------------------------------------
534 @ LDR(literal)
535 @------------------------------------------------------------------------------
536         ldr.w r5, _foo
537
538 @ CHECK: ldr.w  r5, _foo                @ encoding: [0x5f'A',0xf8'A',A,0x50'A']
539             @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
540
541
542 @------------------------------------------------------------------------------
543 @ LDR(register)
544 @------------------------------------------------------------------------------
545         ldr r1, [r8, r1]
546         ldr.w r4, [r5, r2]
547         ldr r6, [r0, r2, lsl #3]
548         ldr r8, [r8, r2, lsl #2]
549         ldr r7, [sp, r2, lsl #1]
550         ldr r7, [sp, r2, lsl #0]
551         ldr r2, [r4, #255]!
552         ldr r8, [sp, #4]!
553         ldr lr, [sp, #-4]!
554         ldr r2, [r4], #255
555         ldr r8, [sp], #4
556         ldr lr, [sp], #-4
557
558 @ CHECK: ldr.w  r1, [r8, r1]            @ encoding: [0x58,0xf8,0x01,0x10]
559 @ CHECK: ldr.w  r4, [r5, r2]            @ encoding: [0x55,0xf8,0x02,0x40]
560 @ CHECK: ldr.w  r6, [r0, r2, lsl #3]    @ encoding: [0x50,0xf8,0x32,0x60]
561 @ CHECK: ldr.w  r8, [r8, r2, lsl #2]    @ encoding: [0x58,0xf8,0x22,0x80]
562 @ CHECK: ldr.w  r7, [sp, r2, lsl #1]    @ encoding: [0x5d,0xf8,0x12,0x70]
563 @ CHECK: ldr.w  r7, [sp, r2]            @ encoding: [0x5d,0xf8,0x02,0x70]
564 @ CHECK: ldr    r2, [r4, #255]!         @ encoding: [0x54,0xf8,0xff,0x2f]
565 @ CHECK: ldr    r8, [sp, #4]!           @ encoding: [0x5d,0xf8,0x04,0x8f]
566 @ CHECK: ldr    lr, [sp, #-4]!          @ encoding: [0x5d,0xf8,0x04,0xed]
567 @ CHECK: ldr    r2, [r4], #255          @ encoding: [0x54,0xf8,0xff,0x2b]
568 @ CHECK: ldr    r8, [sp], #4            @ encoding: [0x5d,0xf8,0x04,0x8b]
569 @ CHECK: ldr    lr, [sp], #-4           @ encoding: [0x5d,0xf8,0x04,0xe9]
570
571
572 @------------------------------------------------------------------------------
573 @ LDRB(immediate)
574 @------------------------------------------------------------------------------
575         ldrb r5, [r5, #-4]
576         ldrb r5, [r6, #32]
577         ldrb r5, [r6, #33]
578         ldrb r5, [r6, #257]
579         ldrb.w lr, [r7, #257]
580
581 @ CHECK: ldrb   r5, [r5, #-4]           @ encoding: [0x15,0xf8,0x04,0x5c]
582 @ CHECK: ldrb.w r5, [r6, #32]           @ encoding: [0x96,0xf8,0x20,0x50]
583 @ CHECK: ldrb.w r5, [r6, #33]           @ encoding: [0x96,0xf8,0x21,0x50]
584 @ CHECK: ldrb.w r5, [r6, #257]          @ encoding: [0x96,0xf8,0x01,0x51]
585 @ CHECK: ldrb.w lr, [r7, #257]          @ encoding: [0x97,0xf8,0x01,0xe1]
586
587
588 @------------------------------------------------------------------------------
589 @ LDRB(register)
590 @------------------------------------------------------------------------------
591         ldrb r1, [r8, r1]
592         ldrb.w r4, [r5, r2]
593         ldrb r6, [r0, r2, lsl #3]
594         ldrb r8, [r8, r2, lsl #2]
595         ldrb r7, [sp, r2, lsl #1]
596         ldrb r7, [sp, r2, lsl #0]
597         ldrb r5, [r8, #255]!
598         ldrb r2, [r5, #4]!
599         ldrb r1, [r4, #-4]!
600         ldrb lr, [r3], #255
601         ldrb r9, [r2], #4
602         ldrb r3, [sp], #-4
603
604 @ CHECK: ldrb.w r1, [r8, r1]            @ encoding: [0x18,0xf8,0x01,0x10]
605 @ CHECK: ldrb.w r4, [r5, r2]            @ encoding: [0x15,0xf8,0x02,0x40]
606 @ CHECK: ldrb.w r6, [r0, r2, lsl #3]    @ encoding: [0x10,0xf8,0x32,0x60]
607 @ CHECK: ldrb.w r8, [r8, r2, lsl #2]    @ encoding: [0x18,0xf8,0x22,0x80]
608 @ CHECK: ldrb.w r7, [sp, r2, lsl #1]    @ encoding: [0x1d,0xf8,0x12,0x70]
609 @ CHECK: ldrb.w r7, [sp, r2]            @ encoding: [0x1d,0xf8,0x02,0x70]
610 @ CHECK: ldrb   r5, [r8, #255]!         @ encoding: [0x18,0xf8,0xff,0x5f]
611 @ CHECK: ldrb   r2, [r5, #4]!           @ encoding: [0x15,0xf8,0x04,0x2f]
612 @ CHECK: ldrb   r1, [r4, #-4]!          @ encoding: [0x14,0xf8,0x04,0x1d]
613 @ CHECK: ldrb   lr, [r3], #255          @ encoding: [0x13,0xf8,0xff,0xeb]
614 @ CHECK: ldrb   r9, [r2], #4            @ encoding: [0x12,0xf8,0x04,0x9b]
615 @ CHECK: ldrb   r3, [sp], #-4           @ encoding: [0x1d,0xf8,0x04,0x39]
616
617
618 @------------------------------------------------------------------------------
619 @ LDRBT
620 @------------------------------------------------------------------------------
621         ldrbt r1, [r2]
622         ldrbt r1, [r8, #0]
623         ldrbt r1, [r8, #3]
624         ldrbt r1, [r8, #255]
625
626 @ CHECK: ldrbt  r1, [r2]                @ encoding: [0x12,0xf8,0x00,0x1e]
627 @ CHECK: ldrbt  r1, [r8]                @ encoding: [0x18,0xf8,0x00,0x1e]
628 @ CHECK: ldrbt  r1, [r8, #3]            @ encoding: [0x18,0xf8,0x03,0x1e]
629 @ CHECK: ldrbt  r1, [r8, #255]          @ encoding: [0x18,0xf8,0xff,0x1e]
630
631
632 @------------------------------------------------------------------------------
633 @ LDRD(immediate)
634 @------------------------------------------------------------------------------
635         ldrd r3, r5, [r6, #24]
636         ldrd r3, r5, [r6, #24]!
637         ldrd r3, r5, [r6], #4
638         ldrd r3, r5, [r6], #-8
639         ldrd r3, r5, [r6]
640         ldrd r8, r1, [r3, #0]
641
642 @ CHECK: ldrd   r3, r5, [r6, #24]       @ encoding: [0xd6,0xe9,0x06,0x35]
643 @ CHECK: ldrd   r3, r5, [r6, #24]!      @ encoding: [0xf6,0xe9,0x06,0x35]
644 @ CHECK: ldrd   r3, r5, [r6], #4        @ encoding: [0xf6,0xe8,0x01,0x35]
645 @ CHECK: ldrd   r3, r5, [r6], #-8       @ encoding: [0x76,0xe8,0x02,0x35]
646 @ CHECK: ldrd   r3, r5, [r6]            @ encoding: [0xd6,0xe9,0x00,0x35]
647 @ CHECK: ldrd   r8, r1, [r3]            @ encoding: [0xd3,0xe9,0x00,0x81]
648
649
650 @------------------------------------------------------------------------------
651 @ FIXME: LDRD(literal)
652 @------------------------------------------------------------------------------
653
654
655 @------------------------------------------------------------------------------
656 @ IT
657 @------------------------------------------------------------------------------
658 @ Test encodings of a few full IT blocks, not just the IT instruction
659
660         iteet eq
661         addeq r0, r1, r2
662         nopne
663         subne r5, r6, r7
664         addeq r1, r2, #4
665
666 @ CHECK: iteet  eq                      @ encoding: [0x0d,0xbf]
667 @ CHECK: addeq  r0, r1, r2              @ encoding: [0x88,0x18]
668 @ CHECK: nopne                          @ encoding: [0x00,0xbf]
669 @ CHECK: subne  r5, r6, r7              @ encoding: [0xf5,0x1b]
670 @ CHECK: addeq  r1, r2, #4              @ encoding: [0x11,0x1d]