basic-thumb2-instructions.s revision 12c7e90d369b4605aac0ddbd252231beacb2aabb
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        subw r11, pc, #3270
111        adr.w r11, #-826
112
113@ CHECK: subw	r11, pc, #3270          @ encoding: [0xaf,0xf6,0xc6,0x4b]
114@ CHECK: adr.w	r11, #-826              @ encoding: [0xaf,0xf2,0x3a,0x3b]
115
116@------------------------------------------------------------------------------
117@ AND (immediate)
118@------------------------------------------------------------------------------
119        and r2, r5, #0xff000
120        ands r3, r12, #0xf
121        and r1, #0xff
122        and r1, r1, #0xff
123
124@ CHECK: and	r2, r5, #1044480        @ encoding: [0x05,0xf4,0x7f,0x22]
125@ CHECK: ands	r3, r12, #15            @ encoding: [0x1c,0xf0,0x0f,0x03]
126@ CHECK: and	r1, r1, #255            @ encoding: [0x01,0xf0,0xff,0x01]
127@ CHECK: and	r1, r1, #255            @ encoding: [0x01,0xf0,0xff,0x01]
128
129
130@------------------------------------------------------------------------------
131@ AND (register)
132@------------------------------------------------------------------------------
133        and r4, r9, r8
134        and r1, r4, r8, asr #3
135        ands r2, r1, r7, lsl #1
136        ands.w r4, r5, r2, lsr #20
137        and.w r9, r12, r1, ror #17
138
139@ CHECK: and.w	r4, r9, r8              @ encoding: [0x09,0xea,0x08,0x04]
140@ CHECK: and.w	r1, r4, r8, asr #3      @ encoding: [0x04,0xea,0xe8,0x01]
141@ CHECK: ands.w	r2, r1, r7, lsl #1      @ encoding: [0x11,0xea,0x47,0x02]
142@ CHECK: ands.w	r4, r5, r2, lsr #20     @ encoding: [0x15,0xea,0x12,0x54]
143@ CHECK: and.w	r9, r12, r1, ror #17    @ encoding: [0x0c,0xea,0x71,0x49]
144
145@------------------------------------------------------------------------------
146@ ASR (immediate)
147@------------------------------------------------------------------------------
148        asr r2, r3, #12
149        asrs r8, r3, #32
150        asrs.w r2, r3, #1
151        asr r2, r3, #4
152        asrs r2, r12, #15
153
154        asr r3, #19
155        asrs r8, #2
156        asrs.w r7, #5
157        asr.w r12, #21
158
159@ CHECK: asr.w	r2, r3, #12             @ encoding: [0x4f,0xea,0x23,0x32]
160@ CHECK: asrs.w	r8, r3, #32             @ encoding: [0x5f,0xea,0x23,0x08]
161@ CHECK: asrs.w	r2, r3, #1              @ encoding: [0x5f,0xea,0x63,0x02]
162@ CHECK: asr.w	r2, r3, #4              @ encoding: [0x4f,0xea,0x23,0x12]
163@ CHECK: asrs.w	r2, r12, #15            @ encoding: [0x5f,0xea,0xec,0x32]
164
165@ CHECK: asr.w	r3, r3, #19             @ encoding: [0x4f,0xea,0xe3,0x43]
166@ CHECK: asrs.w	r8, r8, #2              @ encoding: [0x5f,0xea,0xa8,0x08]
167@ CHECK: asrs.w	r7, r7, #5              @ encoding: [0x5f,0xea,0x67,0x17]
168@ CHECK: asr.w	r12, r12, #21           @ encoding: [0x4f,0xea,0x6c,0x5c]
169
170
171@------------------------------------------------------------------------------
172@ ASR (register)
173@------------------------------------------------------------------------------
174        asr r3, r4, r2
175        asr.w r1, r2
176        asrs r3, r4, r8
177
178@ CHECK: asr.w	r3, r4, r2              @ encoding: [0x44,0xfa,0x02,0xf3]
179@ CHECK: asr.w	r1, r1, r2              @ encoding: [0x41,0xfa,0x02,0xf1]
180@ CHECK: asrs.w	r3, r4, r8              @ encoding: [0x54,0xfa,0x08,0xf3]
181
182
183@------------------------------------------------------------------------------
184@ B
185@------------------------------------------------------------------------------
186        b.w   _bar
187        beq.w   _bar
188        it eq
189        beq.w _bar
190        bmi.w   #-183396
191
192@ CHECK: b.w	_bar                    @ encoding: [A,0xf0'A',A,0x90'A']
193          @   fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch
194@ CHECK: beq.w	_bar                    @ encoding: [A,0xf0'A',A,0x80'A']
195          @   fixup A - offset: 0, value: _bar, kind: fixup_t2_condbranch
196@ CHECK: it	eq                      @ encoding: [0x08,0xbf]
197@ CHECK: beq.w	_bar                    @ encoding: [A,0xf0'A',A,0x90'A']
198          @   fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch
199@ CHECK: bmi.w   #-183396                @ encoding: [0x13,0xf5,0xce,0xa9]
200
201
202@------------------------------------------------------------------------------
203@ BFC
204@------------------------------------------------------------------------------
205        bfc r5, #3, #17
206        it lo
207        bfccc r5, #3, #17
208
209@ CHECK: bfc	r5, #3, #17             @ encoding: [0x6f,0xf3,0xd3,0x05]
210@ CHECK: it	lo                      @ encoding: [0x38,0xbf]
211@ CHECK: bfclo	r5, #3, #17             @ encoding: [0x6f,0xf3,0xd3,0x05]
212
213
214@------------------------------------------------------------------------------
215@ BFI
216@------------------------------------------------------------------------------
217        bfi r5, r2, #3, #17
218        it ne
219        bfine r5, r2, #3, #17
220
221@ CHECK: bfi	r5, r2, #3, #17         @ encoding: [0x62,0xf3,0xd3,0x05]
222@ CHECK: it	ne                      @ encoding: [0x18,0xbf]
223@ CHECK: bfine	r5, r2, #3, #17         @ encoding: [0x62,0xf3,0xd3,0x05]
224
225
226@------------------------------------------------------------------------------
227@ BIC
228@------------------------------------------------------------------------------
229        bic r10, r1, #0xf
230        bic r12, r3, r6
231        bic r11, r2, r6, lsl #12
232        bic r8, r4, r1, lsr #11
233        bic r7, r5, r7, lsr #15
234        bic r6, r7, r9, asr #32
235        bic r5, r6, r8, ror #1
236
237        @ destination register is optional
238        bic r1, #0xf
239        bic r1, r1
240        bic r4, r2, lsl #31
241        bic r6, r3, lsr #12
242        bic r7, r4, lsr #7
243        bic r8, r5, asr #15
244        bic r12, r6, ror #29
245
246@ CHECK: bic	r10, r1, #15            @ encoding: [0x21,0xf0,0x0f,0x0a]
247@ CHECK: bic.w	r12, r3, r6             @ encoding: [0x23,0xea,0x06,0x0c]
248@ CHECK: bic.w	r11, r2, r6, lsl #12    @ encoding: [0x22,0xea,0x06,0x3b]
249@ CHECK: bic.w	r8, r4, r1, lsr #11     @ encoding: [0x24,0xea,0xd1,0x28]
250@ CHECK: bic.w	r7, r5, r7, lsr #15     @ encoding: [0x25,0xea,0xd7,0x37]
251@ CHECK: bic.w	r6, r7, r9, asr #32     @ encoding: [0x27,0xea,0x29,0x06]
252@ CHECK: bic.w	r5, r6, r8, ror #1      @ encoding: [0x26,0xea,0x78,0x05]
253
254@ CHECK: bic	r1, r1, #15             @ encoding: [0x21,0xf0,0x0f,0x01]
255@ CHECK: bic.w	r1, r1, r1              @ encoding: [0x21,0xea,0x01,0x01]
256@ CHECK: bic.w	r4, r4, r2, lsl #31     @ encoding: [0x24,0xea,0xc2,0x74]
257@ CHECK: bic.w	r6, r6, r3, lsr #12     @ encoding: [0x26,0xea,0x13,0x36]
258@ CHECK: bic.w	r7, r7, r4, lsr #7      @ encoding: [0x27,0xea,0xd4,0x17]
259@ CHECK: bic.w	r8, r8, r5, asr #15     @ encoding: [0x28,0xea,0xe5,0x38]
260@ CHECK: bic.w	r12, r12, r6, ror #29   @ encoding: [0x2c,0xea,0x76,0x7c]
261
262
263@------------------------------------------------------------------------------
264@ BXJ
265@------------------------------------------------------------------------------
266        bxj r5
267        it ne
268        bxjne r7
269
270@ CHECK: bxj	r5                      @ encoding: [0xc5,0xf3,0x00,0x8f]
271@ CHECK: it	ne                      @ encoding: [0x18,0xbf]
272@ CHECK: bxjne	r7                      @ encoding: [0xc7,0xf3,0x00,0x8f]
273
274
275@------------------------------------------------------------------------------
276@ CBZ/CBNZ
277@------------------------------------------------------------------------------
278        cbnz    r7, #6
279        cbnz    r7, #12
280        cbz   r6, _bar
281        cbnz   r6, _bar
282
283@ CHECK: cbnz    r7, #6                  @ encoding: [0x1f,0xb9]
284@ CHECK: cbnz    r7, #12                 @ encoding: [0x37,0xb9]
285@ CHECK: cbz	r6, _bar                @ encoding: [0x06'A',0xb1'A']
286           @   fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
287@ CHECK: cbnz	r6, _bar                @ encoding: [0x06'A',0xb9'A']
288           @   fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
289
290
291@------------------------------------------------------------------------------
292@ CDP/CDP2
293@------------------------------------------------------------------------------
294  cdp  p7, #1, c1, c1, c1, #4
295  cdp2  p7, #1, c1, c1, c1, #4
296
297@ CHECK: cdp	p7, #1, c1, c1, c1, #4  @ encoding: [0x11,0xee,0x81,0x17]
298@ CHECK: cdp2	p7, #1, c1, c1, c1, #4  @ encoding: [0x11,0xfe,0x81,0x17]
299
300
301@------------------------------------------------------------------------------
302@ CLREX
303@------------------------------------------------------------------------------
304        clrex
305        it ne
306        clrexne
307
308@ CHECK: clrex                           @ encoding: [0xbf,0xf3,0x2f,0x8f]
309@ CHECK: it	ne                       @ encoding: [0x18,0xbf]
310@ CHECK: clrexne                         @ encoding: [0xbf,0xf3,0x2f,0x8f]
311
312
313@------------------------------------------------------------------------------
314@ CLZ
315@------------------------------------------------------------------------------
316        clz r1, r2
317        it eq
318        clzeq r1, r2
319
320@ CHECK: clz	r1, r2                  @ encoding: [0xb2,0xfa,0x82,0xf1]
321@ CHECK: it	eq                      @ encoding: [0x08,0xbf]
322@ CHECK: clzeq	r1, r2                  @ encoding: [0xb2,0xfa,0x82,0xf1]
323
324
325@------------------------------------------------------------------------------
326@ CMN
327@------------------------------------------------------------------------------
328        cmn r1, #0xf
329        cmn r8, r6
330        cmn r1, r6, lsl #10
331        cmn r1, r6, lsr #10
332        cmn sp, r6, lsr #10
333        cmn r1, r6, asr #10
334        cmn r1, r6, ror #10
335
336@ CHECK: cmn.w	r1, #15                 @ encoding: [0x11,0xf1,0x0f,0x0f]
337@ CHECK: cmn.w	r8, r6                  @ encoding: [0x18,0xeb,0x06,0x0f]
338@ CHECK: cmn.w	r1, r6, lsl #10         @ encoding: [0x11,0xeb,0x86,0x2f]
339@ CHECK: cmn.w	r1, r6, lsr #10         @ encoding: [0x11,0xeb,0x96,0x2f]
340@ CHECK: cmn.w	sp, r6, lsr #10         @ encoding: [0x1d,0xeb,0x96,0x2f]
341@ CHECK: cmn.w	r1, r6, asr #10         @ encoding: [0x11,0xeb,0xa6,0x2f]
342@ CHECK: cmn.w	r1, r6, ror #10         @ encoding: [0x11,0xeb,0xb6,0x2f]
343
344
345@------------------------------------------------------------------------------
346@ CMP
347@------------------------------------------------------------------------------
348        cmp r5, #0xff00
349        cmp.w r4, r12
350        cmp r9, r6, lsl #12
351        cmp r3, r7, lsr #31
352        cmp sp, r6, lsr #1
353        cmp r2, r5, asr #24
354        cmp r1, r4, ror #15
355
356@ CHECK: cmp.w	r5, #65280              @ encoding: [0xb5,0xf5,0x7f,0x4f]
357@ CHECK: cmp.w	r4, r12                 @ encoding: [0xb4,0xeb,0x0c,0x0f]
358@ CHECK: cmp.w	r9, r6, lsl #12         @ encoding: [0xb9,0xeb,0x06,0x3f]
359@ CHECK: cmp.w	r3, r7, lsr #31         @ encoding: [0xb3,0xeb,0xd7,0x7f]
360@ CHECK: cmp.w	sp, r6, lsr #1          @ encoding: [0xbd,0xeb,0x56,0x0f]
361@ CHECK: cmp.w	r2, r5, asr #24         @ encoding: [0xb2,0xeb,0x25,0x6f]
362@ CHECK: cmp.w	r1, r4, ror #15         @ encoding: [0xb1,0xeb,0xf4,0x3f]
363
364
365@------------------------------------------------------------------------------
366@ DBG
367@------------------------------------------------------------------------------
368        dbg #5
369        dbg #0
370        dbg #15
371
372@ CHECK: dbg	#5                      @ encoding: [0xaf,0xf3,0xf5,0x80]
373@ CHECK: dbg	#0                      @ encoding: [0xaf,0xf3,0xf0,0x80]
374@ CHECK: dbg	#15                     @ encoding: [0xaf,0xf3,0xff,0x80]
375
376
377@------------------------------------------------------------------------------
378@ DMB
379@------------------------------------------------------------------------------
380        dmb sy
381        dmb st
382        dmb sh
383        dmb ish
384        dmb shst
385        dmb ishst
386        dmb un
387        dmb nsh
388        dmb unst
389        dmb nshst
390        dmb osh
391        dmb oshst
392        dmb
393
394@ CHECK: dmb	sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
395@ CHECK: dmb	st                      @ encoding: [0xbf,0xf3,0x5e,0x8f]
396@ CHECK: dmb	ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
397@ CHECK: dmb	ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
398@ CHECK: dmb	ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
399@ CHECK: dmb	ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
400@ CHECK: dmb	nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
401@ CHECK: dmb	nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
402@ CHECK: dmb	nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
403@ CHECK: dmb	nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
404@ CHECK: dmb	osh                     @ encoding: [0xbf,0xf3,0x53,0x8f]
405@ CHECK: dmb	oshst                   @ encoding: [0xbf,0xf3,0x52,0x8f]
406@ CHECK: dmb	sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
407
408
409@------------------------------------------------------------------------------
410@ DSB
411@------------------------------------------------------------------------------
412        dsb sy
413        dsb st
414        dsb sh
415        dsb ish
416        dsb shst
417        dsb ishst
418        dsb un
419        dsb nsh
420        dsb unst
421        dsb nshst
422        dsb osh
423        dsb oshst
424        dsb
425
426@ CHECK: dsb	sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
427@ CHECK: dsb	st                      @ encoding: [0xbf,0xf3,0x4e,0x8f]
428@ CHECK: dsb	ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
429@ CHECK: dsb	ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
430@ CHECK: dsb	ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
431@ CHECK: dsb	ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
432@ CHECK: dsb	nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
433@ CHECK: dsb	nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
434@ CHECK: dsb	nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
435@ CHECK: dsb	nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
436@ CHECK: dsb	osh                     @ encoding: [0xbf,0xf3,0x43,0x8f]
437@ CHECK: dsb	oshst                   @ encoding: [0xbf,0xf3,0x42,0x8f]
438@ CHECK: dsb	sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
439
440
441@------------------------------------------------------------------------------
442@ EOR
443@------------------------------------------------------------------------------
444        eor r4, r5, #0xf000
445        eor r4, r5, r6
446        eor r4, r5, r6, lsl #5
447        eor r4, r5, r6, lsr #5
448        eor r4, r5, r6, lsr #5
449        eor r4, r5, r6, asr #5
450        eor r4, r5, r6, ror #5
451
452@ CHECK: eor	r4, r5, #61440          @ encoding: [0x85,0xf4,0x70,0x44]
453@ CHECK: eor.w	r4, r5, r6              @ encoding: [0x85,0xea,0x06,0x04]
454@ CHECK: eor.w	r4, r5, r6, lsl #5      @ encoding: [0x85,0xea,0x46,0x14]
455@ CHECK: eor.w	r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
456@ CHECK: eor.w	r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
457@ CHECK: eor.w	r4, r5, r6, asr #5      @ encoding: [0x85,0xea,0x66,0x14]
458@ CHECK: eor.w	r4, r5, r6, ror #5      @ encoding: [0x85,0xea,0x76,0x14]
459
460
461@------------------------------------------------------------------------------
462@ ISB
463@------------------------------------------------------------------------------
464        isb sy
465        isb
466
467@ CHECK: isb	sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
468@ CHECK: isb	sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
469
470
471@------------------------------------------------------------------------------
472@ LDMIA
473@------------------------------------------------------------------------------
474        ldmia.w r4, {r4, r5, r8, r9}
475        ldmia.w r4, {r5, r6}
476        ldmia.w r5!, {r3, r8}
477        ldm.w r4, {r4, r5, r8, r9}
478        ldm.w r4, {r5, r6}
479        ldm.w r5!, {r3, r8}
480        ldm.w r5!, {r1, r2}
481        ldm.w r2, {r1, r2}
482
483        ldmia r4, {r4, r5, r8, r9}
484        ldmia r4, {r5, r6}
485        ldmia r5!, {r3, r8}
486        ldm r4, {r4, r5, r8, r9}
487        ldm r4, {r5, r6}
488        ldm r5!, {r3, r8}
489        ldmfd r5!, {r3, r8}
490
491@ CHECK: ldm.w	r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
492@ CHECK: ldm.w	r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
493@ CHECK: ldm.w	r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
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	r5!, {r1, r2}           @ encoding: [0xb5,0xe8,0x06,0x00]
498@ CHECK: ldm.w	r2, {r1, r2}            @ encoding: [0x92,0xe8,0x06,0x00]
499
500@ CHECK: ldm.w	r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
501@ CHECK: ldm.w	r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
502@ CHECK: ldm.w	r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
503@ CHECK: ldm.w	r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
504@ CHECK: ldm.w	r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
505@ CHECK: ldm.w	r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
506@ CHECK: ldm.w	r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
507
508
509@------------------------------------------------------------------------------
510@ LDMDB
511@------------------------------------------------------------------------------
512        ldmdb r4, {r4, r5, r8, r9}
513        ldmdb r4, {r5, r6}
514        ldmdb r5!, {r3, r8}
515        ldmea r5!, {r3, r8}
516
517@ CHECK: ldmdb	r4, {r4, r5, r8, r9}    @ encoding: [0x14,0xe9,0x30,0x03]
518@ CHECK: ldmdb	r4, {r5, r6}            @ encoding: [0x14,0xe9,0x60,0x00]
519@ CHECK: ldmdb	r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
520@ CHECK: ldmdb	r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
521
522
523@------------------------------------------------------------------------------
524@ LDR(immediate)
525@------------------------------------------------------------------------------
526        ldr r5, [r5, #-4]
527        ldr r5, [r6, #32]
528        ldr r5, [r6, #33]
529        ldr r5, [r6, #257]
530        ldr.w pc, [r7, #257]
531
532@ CHECK: ldr	r5, [r5, #-4]           @ encoding: [0x55,0xf8,0x04,0x5c]
533@ CHECK: ldr	r5, [r6, #32]           @ encoding: [0x35,0x6a]
534@ CHECK: ldr.w	r5, [r6, #33]           @ encoding: [0xd6,0xf8,0x21,0x50]
535@ CHECK: ldr.w	r5, [r6, #257]          @ encoding: [0xd6,0xf8,0x01,0x51]
536@ CHECK: ldr.w	pc, [r7, #257]          @ encoding: [0xd7,0xf8,0x01,0xf1]
537
538
539@------------------------------------------------------------------------------
540@ LDR(literal)
541@------------------------------------------------------------------------------
542        ldr.w r5, _foo
543
544@ CHECK: ldr.w	r5, _foo                @ encoding: [0x5f'A',0xf8'A',A,0x50'A']
545            @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
546
547
548@------------------------------------------------------------------------------
549@ LDR(register)
550@------------------------------------------------------------------------------
551        ldr r1, [r8, r1]
552        ldr.w r4, [r5, r2]
553        ldr r6, [r0, r2, lsl #3]
554        ldr r8, [r8, r2, lsl #2]
555        ldr r7, [sp, r2, lsl #1]
556        ldr r7, [sp, r2, lsl #0]
557        ldr r2, [r4, #255]!
558        ldr r8, [sp, #4]!
559        ldr lr, [sp, #-4]!
560        ldr r2, [r4], #255
561        ldr r8, [sp], #4
562        ldr lr, [sp], #-4
563
564@ CHECK: ldr.w	r1, [r8, r1]            @ encoding: [0x58,0xf8,0x01,0x10]
565@ CHECK: ldr.w	r4, [r5, r2]            @ encoding: [0x55,0xf8,0x02,0x40]
566@ CHECK: ldr.w	r6, [r0, r2, lsl #3]    @ encoding: [0x50,0xf8,0x32,0x60]
567@ CHECK: ldr.w	r8, [r8, r2, lsl #2]    @ encoding: [0x58,0xf8,0x22,0x80]
568@ CHECK: ldr.w	r7, [sp, r2, lsl #1]    @ encoding: [0x5d,0xf8,0x12,0x70]
569@ CHECK: ldr.w	r7, [sp, r2]            @ encoding: [0x5d,0xf8,0x02,0x70]
570@ CHECK: ldr	r2, [r4, #255]!         @ encoding: [0x54,0xf8,0xff,0x2f]
571@ CHECK: ldr	r8, [sp, #4]!           @ encoding: [0x5d,0xf8,0x04,0x8f]
572@ CHECK: ldr	lr, [sp, #-4]!          @ encoding: [0x5d,0xf8,0x04,0xed]
573@ CHECK: ldr	r2, [r4], #255          @ encoding: [0x54,0xf8,0xff,0x2b]
574@ CHECK: ldr	r8, [sp], #4            @ encoding: [0x5d,0xf8,0x04,0x8b]
575@ CHECK: ldr	lr, [sp], #-4           @ encoding: [0x5d,0xf8,0x04,0xe9]
576
577
578@------------------------------------------------------------------------------
579@ LDRB(immediate)
580@------------------------------------------------------------------------------
581        ldrb r5, [r5, #-4]
582        ldrb r5, [r6, #32]
583        ldrb r5, [r6, #33]
584        ldrb r5, [r6, #257]
585        ldrb.w lr, [r7, #257]
586
587@ CHECK: ldrb	r5, [r5, #-4]           @ encoding: [0x15,0xf8,0x04,0x5c]
588@ CHECK: ldrb.w	r5, [r6, #32]           @ encoding: [0x96,0xf8,0x20,0x50]
589@ CHECK: ldrb.w	r5, [r6, #33]           @ encoding: [0x96,0xf8,0x21,0x50]
590@ CHECK: ldrb.w	r5, [r6, #257]          @ encoding: [0x96,0xf8,0x01,0x51]
591@ CHECK: ldrb.w	lr, [r7, #257]          @ encoding: [0x97,0xf8,0x01,0xe1]
592
593
594@------------------------------------------------------------------------------
595@ LDRB(register)
596@------------------------------------------------------------------------------
597        ldrb r1, [r8, r1]
598        ldrb.w r4, [r5, r2]
599        ldrb r6, [r0, r2, lsl #3]
600        ldrb r8, [r8, r2, lsl #2]
601        ldrb r7, [sp, r2, lsl #1]
602        ldrb r7, [sp, r2, lsl #0]
603        ldrb r5, [r8, #255]!
604        ldrb r2, [r5, #4]!
605        ldrb r1, [r4, #-4]!
606        ldrb lr, [r3], #255
607        ldrb r9, [r2], #4
608        ldrb r3, [sp], #-4
609
610@ CHECK: ldrb.w	r1, [r8, r1]            @ encoding: [0x18,0xf8,0x01,0x10]
611@ CHECK: ldrb.w	r4, [r5, r2]            @ encoding: [0x15,0xf8,0x02,0x40]
612@ CHECK: ldrb.w	r6, [r0, r2, lsl #3]    @ encoding: [0x10,0xf8,0x32,0x60]
613@ CHECK: ldrb.w	r8, [r8, r2, lsl #2]    @ encoding: [0x18,0xf8,0x22,0x80]
614@ CHECK: ldrb.w	r7, [sp, r2, lsl #1]    @ encoding: [0x1d,0xf8,0x12,0x70]
615@ CHECK: ldrb.w	r7, [sp, r2]            @ encoding: [0x1d,0xf8,0x02,0x70]
616@ CHECK: ldrb	r5, [r8, #255]!         @ encoding: [0x18,0xf8,0xff,0x5f]
617@ CHECK: ldrb	r2, [r5, #4]!           @ encoding: [0x15,0xf8,0x04,0x2f]
618@ CHECK: ldrb	r1, [r4, #-4]!          @ encoding: [0x14,0xf8,0x04,0x1d]
619@ CHECK: ldrb	lr, [r3], #255          @ encoding: [0x13,0xf8,0xff,0xeb]
620@ CHECK: ldrb	r9, [r2], #4            @ encoding: [0x12,0xf8,0x04,0x9b]
621@ CHECK: ldrb	r3, [sp], #-4           @ encoding: [0x1d,0xf8,0x04,0x39]
622
623
624@------------------------------------------------------------------------------
625@ LDRBT
626@------------------------------------------------------------------------------
627        ldrbt r1, [r2]
628        ldrbt r1, [r8, #0]
629        ldrbt r1, [r8, #3]
630        ldrbt r1, [r8, #255]
631
632@ CHECK: ldrbt	r1, [r2]                @ encoding: [0x12,0xf8,0x00,0x1e]
633@ CHECK: ldrbt	r1, [r8]                @ encoding: [0x18,0xf8,0x00,0x1e]
634@ CHECK: ldrbt	r1, [r8, #3]            @ encoding: [0x18,0xf8,0x03,0x1e]
635@ CHECK: ldrbt	r1, [r8, #255]          @ encoding: [0x18,0xf8,0xff,0x1e]
636
637
638@------------------------------------------------------------------------------
639@ LDRD(immediate)
640@------------------------------------------------------------------------------
641        ldrd r3, r5, [r6, #24]
642        ldrd r3, r5, [r6, #24]!
643        ldrd r3, r5, [r6], #4
644        ldrd r3, r5, [r6], #-8
645        ldrd r3, r5, [r6]
646        ldrd r8, r1, [r3, #0]
647
648@ CHECK: ldrd	r3, r5, [r6, #24]       @ encoding: [0xd6,0xe9,0x06,0x35]
649@ CHECK: ldrd	r3, r5, [r6, #24]!      @ encoding: [0xf6,0xe9,0x06,0x35]
650@ CHECK: ldrd	r3, r5, [r6], #4        @ encoding: [0xf6,0xe8,0x01,0x35]
651@ CHECK: ldrd	r3, r5, [r6], #-8       @ encoding: [0x76,0xe8,0x02,0x35]
652@ CHECK: ldrd	r3, r5, [r6]            @ encoding: [0xd6,0xe9,0x00,0x35]
653@ CHECK: ldrd	r8, r1, [r3]            @ encoding: [0xd3,0xe9,0x00,0x81]
654
655
656@------------------------------------------------------------------------------
657@ FIXME: LDRD(literal)
658@------------------------------------------------------------------------------
659
660
661@------------------------------------------------------------------------------
662@ LDREX/LDREXB/LDREXH/LDREXD
663@------------------------------------------------------------------------------
664        ldrex r1, [r4]
665        ldrex r8, [r4, #0]
666        ldrex r2, [sp, #128]
667        ldrexb r5, [r7]
668        ldrexh r9, [r12]
669        ldrexd r9, r3, [r4]
670
671@ CHECK: ldrex	r1, [r4]                @ encoding: [0x54,0xe8,0x00,0x1f]
672@ CHECK: ldrex	r8, [r4]                @ encoding: [0x54,0xe8,0x00,0x8f]
673@ CHECK: ldrex	r2, [sp, #128]          @ encoding: [0x5d,0xe8,0x20,0x2f]
674@ CHECK: ldrexb	r5, [r7]                @ encoding: [0xd7,0xe8,0x4f,0x5f]
675@ CHECK: ldrexh	r9, [r12]               @ encoding: [0xdc,0xe8,0x5f,0x9f]
676@ CHECK: ldrexd	r9, r3, [r4]            @ encoding: [0xd4,0xe8,0x7f,0x93]
677
678
679@------------------------------------------------------------------------------
680@ LDRH(immediate)
681@------------------------------------------------------------------------------
682        ldrh r5, [r5, #-4]
683        ldrh r5, [r6, #32]
684        ldrh r5, [r6, #33]
685        ldrh r5, [r6, #257]
686        ldrh.w lr, [r7, #257]
687
688@ CHECK: ldrh	r5, [r5, #-4]           @ encoding: [0x35,0xf8,0x04,0x5c]
689@ CHECK: ldrh	r5, [r6, #32]           @ encoding: [0x35,0x8c]
690@ CHECK: ldrh.w	r5, [r6, #33]           @ encoding: [0xb6,0xf8,0x21,0x50]
691@ CHECK: ldrh.w	r5, [r6, #257]          @ encoding: [0xb6,0xf8,0x01,0x51]
692@ CHECK: ldrh.w	lr, [r7, #257]          @ encoding: [0xb7,0xf8,0x01,0xe1]
693
694
695@------------------------------------------------------------------------------
696@ LDRH(register)
697@------------------------------------------------------------------------------
698        ldrh r1, [r8, r1]
699        ldrh.w r4, [r5, r2]
700        ldrh r6, [r0, r2, lsl #3]
701        ldrh r8, [r8, r2, lsl #2]
702        ldrh r7, [sp, r2, lsl #1]
703        ldrh r7, [sp, r2, lsl #0]
704        ldrh r5, [r8, #255]!
705        ldrh r2, [r5, #4]!
706        ldrh r1, [r4, #-4]!
707        ldrh lr, [r3], #255
708        ldrh r9, [r2], #4
709        ldrh r3, [sp], #-4
710
711@ CHECK: ldrh.w	r1, [r8, r1]            @ encoding: [0x38,0xf8,0x01,0x10]
712@ CHECK: ldrh.w	r4, [r5, r2]            @ encoding: [0x35,0xf8,0x02,0x40]
713@ CHECK: ldrh.w	r6, [r0, r2, lsl #3]    @ encoding: [0x30,0xf8,0x32,0x60]
714@ CHECK: ldrh.w	r8, [r8, r2, lsl #2]    @ encoding: [0x38,0xf8,0x22,0x80]
715@ CHECK: ldrh.w	r7, [sp, r2, lsl #1]    @ encoding: [0x3d,0xf8,0x12,0x70]
716@ CHECK: ldrh.w	r7, [sp, r2]            @ encoding: [0x3d,0xf8,0x02,0x70]
717@ CHECK: ldrh	r5, [r8, #255]!         @ encoding: [0x38,0xf8,0xff,0x5f]
718@ CHECK: ldrh	r2, [r5, #4]!           @ encoding: [0x35,0xf8,0x04,0x2f]
719@ CHECK: ldrh	r1, [r4, #-4]!          @ encoding: [0x34,0xf8,0x04,0x1d]
720@ CHECK: ldrh	lr, [r3], #255          @ encoding: [0x33,0xf8,0xff,0xeb]
721@ CHECK: ldrh	r9, [r2], #4            @ encoding: [0x32,0xf8,0x04,0x9b]
722@ CHECK: ldrh	r3, [sp], #-4           @ encoding: [0x3d,0xf8,0x04,0x39]
723
724
725@------------------------------------------------------------------------------
726@ LDRH(literal)
727@------------------------------------------------------------------------------
728        ldrh r5, _bar
729
730@ CHECK: ldrh.w	r5, _bar                @ encoding: [0xbf'A',0xf8'A',A,0x50'A']
731@ CHECK:     @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
732
733
734@------------------------------------------------------------------------------
735@ LDRSB(immediate)
736@------------------------------------------------------------------------------
737        ldrsb r5, [r5, #-4]
738        ldrsb r5, [r6, #32]
739        ldrsb r5, [r6, #33]
740        ldrsb r5, [r6, #257]
741        ldrsb.w lr, [r7, #257]
742
743@ CHECK: ldrsb	r5, [r5, #-4]            @ encoding: [0x15,0xf9,0x04,0x5c]
744@ CHECK: ldrsb.w r5, [r6, #32]           @ encoding: [0x96,0xf9,0x20,0x50]
745@ CHECK: ldrsb.w r5, [r6, #33]           @ encoding: [0x96,0xf9,0x21,0x50]
746@ CHECK: ldrsb.w r5, [r6, #257]          @ encoding: [0x96,0xf9,0x01,0x51]
747@ CHECK: ldrsb.w lr, [r7, #257]          @ encoding: [0x97,0xf9,0x01,0xe1]
748
749
750@------------------------------------------------------------------------------
751@ LDRSB(register)
752@------------------------------------------------------------------------------
753        ldrsb r1, [r8, r1]
754        ldrsb.w r4, [r5, r2]
755        ldrsb r6, [r0, r2, lsl #3]
756        ldrsb r8, [r8, r2, lsl #2]
757        ldrsb r7, [sp, r2, lsl #1]
758        ldrsb r7, [sp, r2, lsl #0]
759        ldrsb r5, [r8, #255]!
760        ldrsb r2, [r5, #4]!
761        ldrsb r1, [r4, #-4]!
762        ldrsb lr, [r3], #255
763        ldrsb r9, [r2], #4
764        ldrsb r3, [sp], #-4
765
766@ CHECK: ldrsb.w r1, [r8, r1]           @ encoding: [0x18,0xf9,0x01,0x10]
767@ CHECK: ldrsb.w r4, [r5, r2]           @ encoding: [0x15,0xf9,0x02,0x40]
768@ CHECK: ldrsb.w r6, [r0, r2, lsl #3]   @ encoding: [0x10,0xf9,0x32,0x60]
769@ CHECK: ldrsb.w r8, [r8, r2, lsl #2]   @ encoding: [0x18,0xf9,0x22,0x80]
770@ CHECK: ldrsb.w r7, [sp, r2, lsl #1]   @ encoding: [0x1d,0xf9,0x12,0x70]
771@ CHECK: ldrsb.w r7, [sp, r2]           @ encoding: [0x1d,0xf9,0x02,0x70]
772@ CHECK: ldrsb	r5, [r8, #255]!         @ encoding: [0x18,0xf9,0xff,0x5f]
773@ CHECK: ldrsb	r2, [r5, #4]!           @ encoding: [0x15,0xf9,0x04,0x2f]
774@ CHECK: ldrsb	r1, [r4, #-4]!          @ encoding: [0x14,0xf9,0x04,0x1d]
775@ CHECK: ldrsb	lr, [r3], #255          @ encoding: [0x13,0xf9,0xff,0xeb]
776@ CHECK: ldrsb	r9, [r2], #4            @ encoding: [0x12,0xf9,0x04,0x9b]
777@ CHECK: ldrsb	r3, [sp], #-4           @ encoding: [0x1d,0xf9,0x04,0x39]
778
779
780@------------------------------------------------------------------------------
781@ LDRSB(literal)
782@------------------------------------------------------------------------------
783        ldrsb r5, _bar
784
785@ CHECK: ldrsb.w r5, _bar               @ encoding: [0x9f'A',0xf9'A',A,0x50'A']
786@ CHECK:      @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
787
788
789@------------------------------------------------------------------------------
790@ LDRSBT
791@------------------------------------------------------------------------------
792        ldrsbt r1, [r2]
793        ldrsbt r1, [r8, #0]
794        ldrsbt r1, [r8, #3]
795        ldrsbt r1, [r8, #255]
796
797@ CHECK: ldrsbt	r1, [r2]                @ encoding: [0x12,0xf9,0x00,0x1e]
798@ CHECK: ldrsbt	r1, [r8]                @ encoding: [0x18,0xf9,0x00,0x1e]
799@ CHECK: ldrsbt	r1, [r8, #3]            @ encoding: [0x18,0xf9,0x03,0x1e]
800@ CHECK: ldrsbt	r1, [r8, #255]          @ encoding: [0x18,0xf9,0xff,0x1e]
801
802
803@------------------------------------------------------------------------------
804@ LDRSH(immediate)
805@------------------------------------------------------------------------------
806        ldrsh r5, [r5, #-4]
807        ldrsh r5, [r6, #32]
808        ldrsh r5, [r6, #33]
809        ldrsh r5, [r6, #257]
810        ldrsh.w lr, [r7, #257]
811
812@ CHECK: ldrsh	r5, [r5, #-4]           @ encoding: [0x35,0xf9,0x04,0x5c]
813@ CHECK: ldrsh.w r5, [r6, #32]          @ encoding: [0xb6,0xf9,0x20,0x50]
814@ CHECK: ldrsh.w r5, [r6, #33]          @ encoding: [0xb6,0xf9,0x21,0x50]
815@ CHECK: ldrsh.w r5, [r6, #257]         @ encoding: [0xb6,0xf9,0x01,0x51]
816@ CHECK: ldrsh.w lr, [r7, #257]         @ encoding: [0xb7,0xf9,0x01,0xe1]
817
818
819@------------------------------------------------------------------------------
820@ LDRSH(register)
821@------------------------------------------------------------------------------
822        ldrsh r1, [r8, r1]
823        ldrsh.w r4, [r5, r2]
824        ldrsh r6, [r0, r2, lsl #3]
825        ldrsh r8, [r8, r2, lsl #2]
826        ldrsh r7, [sp, r2, lsl #1]
827        ldrsh r7, [sp, r2, lsl #0]
828        ldrsh r5, [r8, #255]!
829        ldrsh r2, [r5, #4]!
830        ldrsh r1, [r4, #-4]!
831        ldrsh lr, [r3], #255
832        ldrsh r9, [r2], #4
833        ldrsh r3, [sp], #-4
834
835@ CHECK: ldrsh.w r1, [r8, r1]           @ encoding: [0x38,0xf9,0x01,0x10]
836@ CHECK: ldrsh.w r4, [r5, r2]           @ encoding: [0x35,0xf9,0x02,0x40]
837@ CHECK: ldrsh.w r6, [r0, r2, lsl #3]   @ encoding: [0x30,0xf9,0x32,0x60]
838@ CHECK: ldrsh.w r8, [r8, r2, lsl #2]   @ encoding: [0x38,0xf9,0x22,0x80]
839@ CHECK: ldrsh.w r7, [sp, r2, lsl #1]   @ encoding: [0x3d,0xf9,0x12,0x70]
840@ CHECK: ldrsh.w r7, [sp, r2]           @ encoding: [0x3d,0xf9,0x02,0x70]
841@ CHECK: ldrsh	r5, [r8, #255]!         @ encoding: [0x38,0xf9,0xff,0x5f]
842@ CHECK: ldrsh	r2, [r5, #4]!           @ encoding: [0x35,0xf9,0x04,0x2f]
843@ CHECK: ldrsh	r1, [r4, #-4]!          @ encoding: [0x34,0xf9,0x04,0x1d]
844@ CHECK: ldrsh	lr, [r3], #255          @ encoding: [0x33,0xf9,0xff,0xeb]
845@ CHECK: ldrsh	r9, [r2], #4            @ encoding: [0x32,0xf9,0x04,0x9b]
846@ CHECK: ldrsh	r3, [sp], #-4           @ encoding: [0x3d,0xf9,0x04,0x39]
847
848
849@------------------------------------------------------------------------------
850@ LDRSH(literal)
851@------------------------------------------------------------------------------
852        ldrsh r5, _bar
853        ldrsh.w r4, #1435
854
855@ CHECK: ldrsh.w r5, _bar               @ encoding: [0xbf'A',0xf9'A',A,0x50'A']
856@ CHECK:      @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
857@ CHECK: ldrsh.w r4, #1435               @ encoding: [0x3f,0xf9,0x9b,0x45]
858
859@------------------------------------------------------------------------------
860@ LDRSHT
861@------------------------------------------------------------------------------
862        ldrsht r1, [r2]
863        ldrsht r1, [r8, #0]
864        ldrsht r1, [r8, #3]
865        ldrsht r1, [r8, #255]
866
867@ CHECK: ldrsht	r1, [r2]                @ encoding: [0x32,0xf9,0x00,0x1e]
868@ CHECK: ldrsht	r1, [r8]                @ encoding: [0x38,0xf9,0x00,0x1e]
869@ CHECK: ldrsht	r1, [r8, #3]            @ encoding: [0x38,0xf9,0x03,0x1e]
870@ CHECK: ldrsht	r1, [r8, #255]          @ encoding: [0x38,0xf9,0xff,0x1e]
871
872
873@------------------------------------------------------------------------------
874@ LDRT
875@------------------------------------------------------------------------------
876        ldrt r1, [r2]
877        ldrt r2, [r6, #0]
878        ldrt r3, [r7, #3]
879        ldrt r4, [r9, #255]
880
881@ CHECK: ldrt	r1, [r2]                @ encoding: [0x52,0xf8,0x00,0x1e]
882@ CHECK: ldrt	r2, [r6]                @ encoding: [0x56,0xf8,0x00,0x2e]
883@ CHECK: ldrt	r3, [r7, #3]            @ encoding: [0x57,0xf8,0x03,0x3e]
884@ CHECK: ldrt	r4, [r9, #255]          @ encoding: [0x59,0xf8,0xff,0x4e]
885
886
887@------------------------------------------------------------------------------
888@ LSL (immediate)
889@------------------------------------------------------------------------------
890        lsl r2, r3, #12
891        lsls r8, r3, #31
892        lsls.w r2, r3, #1
893        lsl r2, r3, #4
894        lsls r2, r12, #15
895
896        lsl r3, #19
897        lsls r8, #2
898        lsls.w r7, #5
899        lsl.w r12, #21
900
901@ CHECK: lsl.w	r2, r3, #12             @ encoding: [0x4f,0xea,0x03,0x32]
902@ CHECK: lsls.w	r8, r3, #31             @ encoding: [0x5f,0xea,0xc3,0x78]
903@ CHECK: lsls.w	r2, r3, #1              @ encoding: [0x5f,0xea,0x43,0x02]
904@ CHECK: lsl.w	r2, r3, #4              @ encoding: [0x4f,0xea,0x03,0x12]
905@ CHECK: lsls.w	r2, r12, #15            @ encoding: [0x5f,0xea,0xcc,0x32]
906
907@ CHECK: lsl.w	r3, r3, #19             @ encoding: [0x4f,0xea,0xc3,0x43]
908@ CHECK: lsls.w	r8, r8, #2              @ encoding: [0x5f,0xea,0x88,0x08]
909@ CHECK: lsls.w	r7, r7, #5              @ encoding: [0x5f,0xea,0x47,0x17]
910@ CHECK: lsl.w	r12, r12, #21           @ encoding: [0x4f,0xea,0x4c,0x5c]
911
912
913@------------------------------------------------------------------------------
914@ LSL (register)
915@------------------------------------------------------------------------------
916        lsl r3, r4, r2
917        lsl.w r1, r2
918        lsls r3, r4, r8
919
920@ CHECK: lsl.w	r3, r4, r2              @ encoding: [0x04,0xfa,0x02,0xf3]
921@ CHECK: lsl.w	r1, r1, r2              @ encoding: [0x01,0xfa,0x02,0xf1]
922@ CHECK: lsls.w	r3, r4, r8              @ encoding: [0x14,0xfa,0x08,0xf3]
923
924
925@------------------------------------------------------------------------------
926@ LSR (immediate)
927@------------------------------------------------------------------------------
928        lsr r2, r3, #12
929        lsrs r8, r3, #32
930        lsrs.w r2, r3, #1
931        lsr r2, r3, #4
932        lsrs r2, r12, #15
933
934        lsr r3, #19
935        lsrs r8, #2
936        lsrs.w r7, #5
937        lsr.w r12, #21
938
939@ CHECK: lsr.w	r2, r3, #12             @ encoding: [0x4f,0xea,0x13,0x32]
940@ CHECK: lsrs.w	r8, r3, #32             @ encoding: [0x5f,0xea,0x13,0x08]
941@ CHECK: lsrs.w	r2, r3, #1              @ encoding: [0x5f,0xea,0x53,0x02]
942@ CHECK: lsr.w	r2, r3, #4              @ encoding: [0x4f,0xea,0x13,0x12]
943@ CHECK: lsrs.w	r2, r12, #15            @ encoding: [0x5f,0xea,0xdc,0x32]
944
945@ CHECK: lsr.w	r3, r3, #19             @ encoding: [0x4f,0xea,0xd3,0x43]
946@ CHECK: lsrs.w	r8, r8, #2              @ encoding: [0x5f,0xea,0x98,0x08]
947@ CHECK: lsrs.w	r7, r7, #5              @ encoding: [0x5f,0xea,0x57,0x17]
948@ CHECK: lsr.w	r12, r12, #21           @ encoding: [0x4f,0xea,0x5c,0x5c]
949
950
951@------------------------------------------------------------------------------
952@ LSR (register)
953@------------------------------------------------------------------------------
954        lsr r3, r4, r2
955        lsr.w r1, r2
956        lsrs r3, r4, r8
957
958@ CHECK: lsr.w	r3, r4, r2              @ encoding: [0x24,0xfa,0x02,0xf3]
959@ CHECK: lsr.w	r1, r1, r2              @ encoding: [0x21,0xfa,0x02,0xf1]
960@ CHECK: lsrs.w	r3, r4, r8              @ encoding: [0x34,0xfa,0x08,0xf3]
961
962@------------------------------------------------------------------------------
963@ MCR/MCR2
964@------------------------------------------------------------------------------
965        mcr  p7, #1, r5, c1, c1, #4
966        mcr2  p7, #1, r5, c1, c1, #4
967
968@ CHECK: mcr	p7, #1, r5, c1, c1, #4  @ encoding: [0x21,0xee,0x91,0x57]
969@ CHECK: mcr2	p7, #1, r5, c1, c1, #4  @ encoding: [0x21,0xfe,0x91,0x57]
970
971
972@------------------------------------------------------------------------------
973@ MCRR/MCRR2
974@------------------------------------------------------------------------------
975        mcrr  p7, #15, r5, r4, c1
976        mcrr2  p7, #15, r5, r4, c1
977
978@ CHECK: mcrr	p7, #15, r5, r4, c1     @ encoding: [0x44,0xec,0xf1,0x57]
979@ CHECK: mcrr2	p7, #15, r5, r4, c1     @ encoding: [0x44,0xfc,0xf1,0x57]
980
981
982@------------------------------------------------------------------------------
983@ MLA/MLS
984@------------------------------------------------------------------------------
985        mla  r1,r2,r3,r4
986        mls  r1,r2,r3,r4
987
988@ CHECK: mla	r1, r2, r3, r4          @ encoding: [0x02,0xfb,0x03,0x41]
989@ CHECK: mls	r1, r2, r3, r4          @ encoding: [0x02,0xfb,0x13,0x41]
990
991
992@------------------------------------------------------------------------------
993@ MOV(immediate)
994@------------------------------------------------------------------------------
995        movs r1, #21
996        movs.w r1, #21
997        movs r8, #21
998        movw r0, #65535
999        movw r1, #43777
1000        movw r1, #43792
1001        mov.w r0, #0x3fc0000
1002        mov r0, #0x3fc0000
1003        movs.w r0, #0x3fc0000
1004
1005@ CHECK: movs	r1, #21                 @ encoding: [0x15,0x21]
1006@ CHECK: movs.w	r1, #21                 @ encoding: [0x5f,0xf0,0x15,0x01]
1007@ CHECK: movs.w	r8, #21                 @ encoding: [0x5f,0xf0,0x15,0x08]
1008@ CHECK: movw	r0, #65535              @ encoding: [0x4f,0xf6,0xff,0x70]
1009@ CHECK: movw	r1, #43777              @ encoding: [0x4a,0xf6,0x01,0x31]
1010@ CHECK: movw	r1, #43792              @ encoding: [0x4a,0xf6,0x10,0x31]
1011@ CHECK: mov.w	r0, #66846720           @ encoding: [0x4f,0xf0,0x7f,0x70]
1012@ CHECK: mov.w	r0, #66846720           @ encoding: [0x4f,0xf0,0x7f,0x70]
1013@ CHECK: movs.w	r0, #66846720           @ encoding: [0x5f,0xf0,0x7f,0x70]
1014
1015
1016@------------------------------------------------------------------------------
1017@ IT
1018@------------------------------------------------------------------------------
1019@ Test encodings of a few full IT blocks, not just the IT instruction
1020
1021        iteet eq
1022        addeq r0, r1, r2
1023        nopne
1024        subne r5, r6, r7
1025        addeq r1, r2, #4
1026
1027@ CHECK: iteet	eq                      @ encoding: [0x0d,0xbf]
1028@ CHECK: addeq	r0, r1, r2              @ encoding: [0x88,0x18]
1029@ CHECK: nopne                          @ encoding: [0x00,0xbf]
1030@ CHECK: subne	r5, r6, r7              @ encoding: [0xf5,0x1b]
1031@ CHECK: addeq	r1, r2, #4              @ encoding: [0x11,0x1d]
1032
1033@------------------------------------------------------------------------------
1034@ SUB (register)
1035@------------------------------------------------------------------------------
1036        sub.w r5, r2, r12, rrx
1037
1038@ CHECK: sub.w r5, r2, r12, rrx        @ encoding: [0xa2,0xeb,0x3c,0x05]
1039
1040