basic-thumb2-instructions.s revision ed15ab1aadea6216b30ccfc659b194d09f44ca14
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@ BKPT
264@------------------------------------------------------------------------------
265        it pl
266        bkpt #234
267
268@ CHECK: it pl                      @ encoding: [0x58,0xbf]
269@ CHECK: bkpt #234                    @ encoding: [0xea,0xbe]
270
271@------------------------------------------------------------------------------
272@ BXJ
273@------------------------------------------------------------------------------
274        bxj r5
275        it ne
276        bxjne r7
277
278@ CHECK: bxj	r5                      @ encoding: [0xc5,0xf3,0x00,0x8f]
279@ CHECK: it	ne                      @ encoding: [0x18,0xbf]
280@ CHECK: bxjne	r7                      @ encoding: [0xc7,0xf3,0x00,0x8f]
281
282
283@------------------------------------------------------------------------------
284@ CBZ/CBNZ
285@------------------------------------------------------------------------------
286        cbnz    r7, #6
287        cbnz    r7, #12
288        cbz   r6, _bar
289        cbnz   r6, _bar
290
291@ CHECK: cbnz    r7, #6                  @ encoding: [0x1f,0xb9]
292@ CHECK: cbnz    r7, #12                 @ encoding: [0x37,0xb9]
293@ CHECK: cbz	r6, _bar                @ encoding: [0x06'A',0xb1'A']
294           @   fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
295@ CHECK: cbnz	r6, _bar                @ encoding: [0x06'A',0xb9'A']
296           @   fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
297
298
299@------------------------------------------------------------------------------
300@ CDP/CDP2
301@------------------------------------------------------------------------------
302  cdp  p7, #1, c1, c1, c1, #4
303  cdp2  p7, #1, c1, c1, c1, #4
304
305@ CHECK: cdp	p7, #1, c1, c1, c1, #4  @ encoding: [0x11,0xee,0x81,0x17]
306@ CHECK: cdp2	p7, #1, c1, c1, c1, #4  @ encoding: [0x11,0xfe,0x81,0x17]
307
308
309@------------------------------------------------------------------------------
310@ CLREX
311@------------------------------------------------------------------------------
312        clrex
313        it ne
314        clrexne
315
316@ CHECK: clrex                           @ encoding: [0xbf,0xf3,0x2f,0x8f]
317@ CHECK: it	ne                       @ encoding: [0x18,0xbf]
318@ CHECK: clrexne                         @ encoding: [0xbf,0xf3,0x2f,0x8f]
319
320
321@------------------------------------------------------------------------------
322@ CLZ
323@------------------------------------------------------------------------------
324        clz r1, r2
325        it eq
326        clzeq r1, r2
327
328@ CHECK: clz	r1, r2                  @ encoding: [0xb2,0xfa,0x82,0xf1]
329@ CHECK: it	eq                      @ encoding: [0x08,0xbf]
330@ CHECK: clzeq	r1, r2                  @ encoding: [0xb2,0xfa,0x82,0xf1]
331
332
333@------------------------------------------------------------------------------
334@ CMN
335@------------------------------------------------------------------------------
336        cmn r1, #0xf
337        cmn r8, r6
338        cmn r1, r6, lsl #10
339        cmn r1, r6, lsr #10
340        cmn sp, r6, lsr #10
341        cmn r1, r6, asr #10
342        cmn r1, r6, ror #10
343
344@ CHECK: cmn.w	r1, #15                 @ encoding: [0x11,0xf1,0x0f,0x0f]
345@ CHECK: cmn.w	r8, r6                  @ encoding: [0x18,0xeb,0x06,0x0f]
346@ CHECK: cmn.w	r1, r6, lsl #10         @ encoding: [0x11,0xeb,0x86,0x2f]
347@ CHECK: cmn.w	r1, r6, lsr #10         @ encoding: [0x11,0xeb,0x96,0x2f]
348@ CHECK: cmn.w	sp, r6, lsr #10         @ encoding: [0x1d,0xeb,0x96,0x2f]
349@ CHECK: cmn.w	r1, r6, asr #10         @ encoding: [0x11,0xeb,0xa6,0x2f]
350@ CHECK: cmn.w	r1, r6, ror #10         @ encoding: [0x11,0xeb,0xb6,0x2f]
351
352
353@------------------------------------------------------------------------------
354@ CMP
355@------------------------------------------------------------------------------
356        cmp r5, #0xff00
357        cmp.w r4, r12
358        cmp r9, r6, lsl #12
359        cmp r3, r7, lsr #31
360        cmp sp, r6, lsr #1
361        cmp r2, r5, asr #24
362        cmp r1, r4, ror #15
363
364@ CHECK: cmp.w	r5, #65280              @ encoding: [0xb5,0xf5,0x7f,0x4f]
365@ CHECK: cmp.w	r4, r12                 @ encoding: [0xb4,0xeb,0x0c,0x0f]
366@ CHECK: cmp.w	r9, r6, lsl #12         @ encoding: [0xb9,0xeb,0x06,0x3f]
367@ CHECK: cmp.w	r3, r7, lsr #31         @ encoding: [0xb3,0xeb,0xd7,0x7f]
368@ CHECK: cmp.w	sp, r6, lsr #1          @ encoding: [0xbd,0xeb,0x56,0x0f]
369@ CHECK: cmp.w	r2, r5, asr #24         @ encoding: [0xb2,0xeb,0x25,0x6f]
370@ CHECK: cmp.w	r1, r4, ror #15         @ encoding: [0xb1,0xeb,0xf4,0x3f]
371
372
373@------------------------------------------------------------------------------
374@ DBG
375@------------------------------------------------------------------------------
376        dbg #5
377        dbg #0
378        dbg #15
379
380@ CHECK: dbg	#5                      @ encoding: [0xaf,0xf3,0xf5,0x80]
381@ CHECK: dbg	#0                      @ encoding: [0xaf,0xf3,0xf0,0x80]
382@ CHECK: dbg	#15                     @ encoding: [0xaf,0xf3,0xff,0x80]
383
384
385@------------------------------------------------------------------------------
386@ DMB
387@------------------------------------------------------------------------------
388        dmb sy
389        dmb st
390        dmb sh
391        dmb ish
392        dmb shst
393        dmb ishst
394        dmb un
395        dmb nsh
396        dmb unst
397        dmb nshst
398        dmb osh
399        dmb oshst
400        dmb
401
402@ CHECK: dmb	sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
403@ CHECK: dmb	st                      @ encoding: [0xbf,0xf3,0x5e,0x8f]
404@ CHECK: dmb	ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
405@ CHECK: dmb	ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
406@ CHECK: dmb	ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
407@ CHECK: dmb	ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
408@ CHECK: dmb	nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
409@ CHECK: dmb	nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
410@ CHECK: dmb	nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
411@ CHECK: dmb	nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
412@ CHECK: dmb	osh                     @ encoding: [0xbf,0xf3,0x53,0x8f]
413@ CHECK: dmb	oshst                   @ encoding: [0xbf,0xf3,0x52,0x8f]
414@ CHECK: dmb	sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
415
416
417@------------------------------------------------------------------------------
418@ DSB
419@------------------------------------------------------------------------------
420        dsb sy
421        dsb st
422        dsb sh
423        dsb ish
424        dsb shst
425        dsb ishst
426        dsb un
427        dsb nsh
428        dsb unst
429        dsb nshst
430        dsb osh
431        dsb oshst
432        dsb
433
434@ CHECK: dsb	sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
435@ CHECK: dsb	st                      @ encoding: [0xbf,0xf3,0x4e,0x8f]
436@ CHECK: dsb	ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
437@ CHECK: dsb	ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
438@ CHECK: dsb	ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
439@ CHECK: dsb	ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
440@ CHECK: dsb	nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
441@ CHECK: dsb	nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
442@ CHECK: dsb	nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
443@ CHECK: dsb	nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
444@ CHECK: dsb	osh                     @ encoding: [0xbf,0xf3,0x43,0x8f]
445@ CHECK: dsb	oshst                   @ encoding: [0xbf,0xf3,0x42,0x8f]
446@ CHECK: dsb	sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
447
448
449@------------------------------------------------------------------------------
450@ EOR
451@------------------------------------------------------------------------------
452        eor r4, r5, #0xf000
453        eor r4, r5, r6
454        eor r4, r5, r6, lsl #5
455        eor r4, r5, r6, lsr #5
456        eor r4, r5, r6, lsr #5
457        eor r4, r5, r6, asr #5
458        eor r4, r5, r6, ror #5
459
460@ CHECK: eor	r4, r5, #61440          @ encoding: [0x85,0xf4,0x70,0x44]
461@ CHECK: eor.w	r4, r5, r6              @ encoding: [0x85,0xea,0x06,0x04]
462@ CHECK: eor.w	r4, r5, r6, lsl #5      @ encoding: [0x85,0xea,0x46,0x14]
463@ CHECK: eor.w	r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
464@ CHECK: eor.w	r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
465@ CHECK: eor.w	r4, r5, r6, asr #5      @ encoding: [0x85,0xea,0x66,0x14]
466@ CHECK: eor.w	r4, r5, r6, ror #5      @ encoding: [0x85,0xea,0x76,0x14]
467
468
469@------------------------------------------------------------------------------
470@ ISB
471@------------------------------------------------------------------------------
472        isb sy
473        isb
474
475@ CHECK: isb	sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
476@ CHECK: isb	sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
477
478
479@------------------------------------------------------------------------------
480@ IT
481@------------------------------------------------------------------------------
482@ Test encodings of a few full IT blocks, not just the IT instruction
483
484        iteet eq
485        addeq r0, r1, r2
486        nopne
487        subne r5, r6, r7
488        addeq r1, r2, #4
489
490@ CHECK: iteet	eq                      @ encoding: [0x0d,0xbf]
491@ CHECK: addeq	r0, r1, r2              @ encoding: [0x88,0x18]
492@ CHECK: nopne                          @ encoding: [0x00,0xbf]
493@ CHECK: subne	r5, r6, r7              @ encoding: [0xf5,0x1b]
494@ CHECK: addeq	r1, r2, #4              @ encoding: [0x11,0x1d]
495
496
497@------------------------------------------------------------------------------
498@ LDMIA
499@------------------------------------------------------------------------------
500        ldmia.w r4, {r4, r5, r8, r9}
501        ldmia.w r4, {r5, r6}
502        ldmia.w r5!, {r3, r8}
503        ldm.w r4, {r4, r5, r8, r9}
504        ldm.w r4, {r5, r6}
505        ldm.w r5!, {r3, r8}
506        ldm.w r5!, {r1, r2}
507        ldm.w r2, {r1, r2}
508
509        ldmia r4, {r4, r5, r8, r9}
510        ldmia r4, {r5, r6}
511        ldmia r5!, {r3, r8}
512        ldm r4, {r4, r5, r8, r9}
513        ldm r4, {r5, r6}
514        ldm r5!, {r3, r8}
515        ldmfd r5!, {r3, r8}
516
517@ CHECK: ldm.w	r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
518@ CHECK: ldm.w	r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
519@ CHECK: ldm.w	r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
520@ CHECK: ldm.w	r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
521@ CHECK: ldm.w	r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
522@ CHECK: ldm.w	r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
523@ CHECK: ldm.w	r5!, {r1, r2}           @ encoding: [0xb5,0xe8,0x06,0x00]
524@ CHECK: ldm.w	r2, {r1, r2}            @ encoding: [0x92,0xe8,0x06,0x00]
525
526@ CHECK: ldm.w	r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
527@ CHECK: ldm.w	r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
528@ CHECK: ldm.w	r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
529@ CHECK: ldm.w	r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
530@ CHECK: ldm.w	r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
531@ CHECK: ldm.w	r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
532@ CHECK: ldm.w	r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
533
534
535@------------------------------------------------------------------------------
536@ LDMDB
537@------------------------------------------------------------------------------
538        ldmdb r4, {r4, r5, r8, r9}
539        ldmdb r4, {r5, r6}
540        ldmdb r5!, {r3, r8}
541        ldmea r5!, {r3, r8}
542
543@ CHECK: ldmdb	r4, {r4, r5, r8, r9}    @ encoding: [0x14,0xe9,0x30,0x03]
544@ CHECK: ldmdb	r4, {r5, r6}            @ encoding: [0x14,0xe9,0x60,0x00]
545@ CHECK: ldmdb	r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
546@ CHECK: ldmdb	r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
547
548
549@------------------------------------------------------------------------------
550@ LDR(immediate)
551@------------------------------------------------------------------------------
552        ldr r5, [r5, #-4]
553        ldr r5, [r6, #32]
554        ldr r5, [r6, #33]
555        ldr r5, [r6, #257]
556        ldr.w pc, [r7, #257]
557
558@ CHECK: ldr	r5, [r5, #-4]           @ encoding: [0x55,0xf8,0x04,0x5c]
559@ CHECK: ldr	r5, [r6, #32]           @ encoding: [0x35,0x6a]
560@ CHECK: ldr.w	r5, [r6, #33]           @ encoding: [0xd6,0xf8,0x21,0x50]
561@ CHECK: ldr.w	r5, [r6, #257]          @ encoding: [0xd6,0xf8,0x01,0x51]
562@ CHECK: ldr.w	pc, [r7, #257]          @ encoding: [0xd7,0xf8,0x01,0xf1]
563
564
565@------------------------------------------------------------------------------
566@ LDR(literal)
567@------------------------------------------------------------------------------
568        ldr.w r5, _foo
569
570@ CHECK: ldr.w	r5, _foo                @ encoding: [0x5f'A',0xf8'A',A,0x50'A']
571            @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
572
573
574@------------------------------------------------------------------------------
575@ LDR(register)
576@------------------------------------------------------------------------------
577        ldr r1, [r8, r1]
578        ldr.w r4, [r5, r2]
579        ldr r6, [r0, r2, lsl #3]
580        ldr r8, [r8, r2, lsl #2]
581        ldr r7, [sp, r2, lsl #1]
582        ldr r7, [sp, r2, lsl #0]
583        ldr r2, [r4, #255]!
584        ldr r8, [sp, #4]!
585        ldr lr, [sp, #-4]!
586        ldr r2, [r4], #255
587        ldr r8, [sp], #4
588        ldr lr, [sp], #-4
589
590@ CHECK: ldr.w	r1, [r8, r1]            @ encoding: [0x58,0xf8,0x01,0x10]
591@ CHECK: ldr.w	r4, [r5, r2]            @ encoding: [0x55,0xf8,0x02,0x40]
592@ CHECK: ldr.w	r6, [r0, r2, lsl #3]    @ encoding: [0x50,0xf8,0x32,0x60]
593@ CHECK: ldr.w	r8, [r8, r2, lsl #2]    @ encoding: [0x58,0xf8,0x22,0x80]
594@ CHECK: ldr.w	r7, [sp, r2, lsl #1]    @ encoding: [0x5d,0xf8,0x12,0x70]
595@ CHECK: ldr.w	r7, [sp, r2]            @ encoding: [0x5d,0xf8,0x02,0x70]
596@ CHECK: ldr	r2, [r4, #255]!         @ encoding: [0x54,0xf8,0xff,0x2f]
597@ CHECK: ldr	r8, [sp, #4]!           @ encoding: [0x5d,0xf8,0x04,0x8f]
598@ CHECK: ldr	lr, [sp, #-4]!          @ encoding: [0x5d,0xf8,0x04,0xed]
599@ CHECK: ldr	r2, [r4], #255          @ encoding: [0x54,0xf8,0xff,0x2b]
600@ CHECK: ldr	r8, [sp], #4            @ encoding: [0x5d,0xf8,0x04,0x8b]
601@ CHECK: ldr	lr, [sp], #-4           @ encoding: [0x5d,0xf8,0x04,0xe9]
602
603
604@------------------------------------------------------------------------------
605@ LDRB(immediate)
606@------------------------------------------------------------------------------
607        ldrb r5, [r5, #-4]
608        ldrb r5, [r6, #32]
609        ldrb r5, [r6, #33]
610        ldrb r5, [r6, #257]
611        ldrb.w lr, [r7, #257]
612
613@ CHECK: ldrb	r5, [r5, #-4]           @ encoding: [0x15,0xf8,0x04,0x5c]
614@ CHECK: ldrb.w	r5, [r6, #32]           @ encoding: [0x96,0xf8,0x20,0x50]
615@ CHECK: ldrb.w	r5, [r6, #33]           @ encoding: [0x96,0xf8,0x21,0x50]
616@ CHECK: ldrb.w	r5, [r6, #257]          @ encoding: [0x96,0xf8,0x01,0x51]
617@ CHECK: ldrb.w	lr, [r7, #257]          @ encoding: [0x97,0xf8,0x01,0xe1]
618
619
620@------------------------------------------------------------------------------
621@ LDRB(register)
622@------------------------------------------------------------------------------
623        ldrb r1, [r8, r1]
624        ldrb.w r4, [r5, r2]
625        ldrb r6, [r0, r2, lsl #3]
626        ldrb r8, [r8, r2, lsl #2]
627        ldrb r7, [sp, r2, lsl #1]
628        ldrb r7, [sp, r2, lsl #0]
629        ldrb r5, [r8, #255]!
630        ldrb r2, [r5, #4]!
631        ldrb r1, [r4, #-4]!
632        ldrb lr, [r3], #255
633        ldrb r9, [r2], #4
634        ldrb r3, [sp], #-4
635
636@ CHECK: ldrb.w	r1, [r8, r1]            @ encoding: [0x18,0xf8,0x01,0x10]
637@ CHECK: ldrb.w	r4, [r5, r2]            @ encoding: [0x15,0xf8,0x02,0x40]
638@ CHECK: ldrb.w	r6, [r0, r2, lsl #3]    @ encoding: [0x10,0xf8,0x32,0x60]
639@ CHECK: ldrb.w	r8, [r8, r2, lsl #2]    @ encoding: [0x18,0xf8,0x22,0x80]
640@ CHECK: ldrb.w	r7, [sp, r2, lsl #1]    @ encoding: [0x1d,0xf8,0x12,0x70]
641@ CHECK: ldrb.w	r7, [sp, r2]            @ encoding: [0x1d,0xf8,0x02,0x70]
642@ CHECK: ldrb	r5, [r8, #255]!         @ encoding: [0x18,0xf8,0xff,0x5f]
643@ CHECK: ldrb	r2, [r5, #4]!           @ encoding: [0x15,0xf8,0x04,0x2f]
644@ CHECK: ldrb	r1, [r4, #-4]!          @ encoding: [0x14,0xf8,0x04,0x1d]
645@ CHECK: ldrb	lr, [r3], #255          @ encoding: [0x13,0xf8,0xff,0xeb]
646@ CHECK: ldrb	r9, [r2], #4            @ encoding: [0x12,0xf8,0x04,0x9b]
647@ CHECK: ldrb	r3, [sp], #-4           @ encoding: [0x1d,0xf8,0x04,0x39]
648
649
650@------------------------------------------------------------------------------
651@ LDRBT
652@------------------------------------------------------------------------------
653        ldrbt r1, [r2]
654        ldrbt r1, [r8, #0]
655        ldrbt r1, [r8, #3]
656        ldrbt r1, [r8, #255]
657
658@ CHECK: ldrbt	r1, [r2]                @ encoding: [0x12,0xf8,0x00,0x1e]
659@ CHECK: ldrbt	r1, [r8]                @ encoding: [0x18,0xf8,0x00,0x1e]
660@ CHECK: ldrbt	r1, [r8, #3]            @ encoding: [0x18,0xf8,0x03,0x1e]
661@ CHECK: ldrbt	r1, [r8, #255]          @ encoding: [0x18,0xf8,0xff,0x1e]
662
663
664@------------------------------------------------------------------------------
665@ LDRD(immediate)
666@------------------------------------------------------------------------------
667        ldrd r3, r5, [r6, #24]
668        ldrd r3, r5, [r6, #24]!
669        ldrd r3, r5, [r6], #4
670        ldrd r3, r5, [r6], #-8
671        ldrd r3, r5, [r6]
672        ldrd r8, r1, [r3, #0]
673
674@ CHECK: ldrd	r3, r5, [r6, #24]       @ encoding: [0xd6,0xe9,0x06,0x35]
675@ CHECK: ldrd	r3, r5, [r6, #24]!      @ encoding: [0xf6,0xe9,0x06,0x35]
676@ CHECK: ldrd	r3, r5, [r6], #4        @ encoding: [0xf6,0xe8,0x01,0x35]
677@ CHECK: ldrd	r3, r5, [r6], #-8       @ encoding: [0x76,0xe8,0x02,0x35]
678@ CHECK: ldrd	r3, r5, [r6]            @ encoding: [0xd6,0xe9,0x00,0x35]
679@ CHECK: ldrd	r8, r1, [r3]            @ encoding: [0xd3,0xe9,0x00,0x81]
680
681
682@------------------------------------------------------------------------------
683@ FIXME: LDRD(literal)
684@------------------------------------------------------------------------------
685
686
687@------------------------------------------------------------------------------
688@ LDREX/LDREXB/LDREXH/LDREXD
689@------------------------------------------------------------------------------
690        ldrex r1, [r4]
691        ldrex r8, [r4, #0]
692        ldrex r2, [sp, #128]
693        ldrexb r5, [r7]
694        ldrexh r9, [r12]
695        ldrexd r9, r3, [r4]
696
697@ CHECK: ldrex	r1, [r4]                @ encoding: [0x54,0xe8,0x00,0x1f]
698@ CHECK: ldrex	r8, [r4]                @ encoding: [0x54,0xe8,0x00,0x8f]
699@ CHECK: ldrex	r2, [sp, #128]          @ encoding: [0x5d,0xe8,0x20,0x2f]
700@ CHECK: ldrexb	r5, [r7]                @ encoding: [0xd7,0xe8,0x4f,0x5f]
701@ CHECK: ldrexh	r9, [r12]               @ encoding: [0xdc,0xe8,0x5f,0x9f]
702@ CHECK: ldrexd	r9, r3, [r4]            @ encoding: [0xd4,0xe8,0x7f,0x93]
703
704
705@------------------------------------------------------------------------------
706@ LDRH(immediate)
707@------------------------------------------------------------------------------
708        ldrh r5, [r5, #-4]
709        ldrh r5, [r6, #32]
710        ldrh r5, [r6, #33]
711        ldrh r5, [r6, #257]
712        ldrh.w lr, [r7, #257]
713
714@ CHECK: ldrh	r5, [r5, #-4]           @ encoding: [0x35,0xf8,0x04,0x5c]
715@ CHECK: ldrh	r5, [r6, #32]           @ encoding: [0x35,0x8c]
716@ CHECK: ldrh.w	r5, [r6, #33]           @ encoding: [0xb6,0xf8,0x21,0x50]
717@ CHECK: ldrh.w	r5, [r6, #257]          @ encoding: [0xb6,0xf8,0x01,0x51]
718@ CHECK: ldrh.w	lr, [r7, #257]          @ encoding: [0xb7,0xf8,0x01,0xe1]
719
720
721@------------------------------------------------------------------------------
722@ LDRH(register)
723@------------------------------------------------------------------------------
724        ldrh r1, [r8, r1]
725        ldrh.w r4, [r5, r2]
726        ldrh r6, [r0, r2, lsl #3]
727        ldrh r8, [r8, r2, lsl #2]
728        ldrh r7, [sp, r2, lsl #1]
729        ldrh r7, [sp, r2, lsl #0]
730        ldrh r5, [r8, #255]!
731        ldrh r2, [r5, #4]!
732        ldrh r1, [r4, #-4]!
733        ldrh lr, [r3], #255
734        ldrh r9, [r2], #4
735        ldrh r3, [sp], #-4
736
737@ CHECK: ldrh.w	r1, [r8, r1]            @ encoding: [0x38,0xf8,0x01,0x10]
738@ CHECK: ldrh.w	r4, [r5, r2]            @ encoding: [0x35,0xf8,0x02,0x40]
739@ CHECK: ldrh.w	r6, [r0, r2, lsl #3]    @ encoding: [0x30,0xf8,0x32,0x60]
740@ CHECK: ldrh.w	r8, [r8, r2, lsl #2]    @ encoding: [0x38,0xf8,0x22,0x80]
741@ CHECK: ldrh.w	r7, [sp, r2, lsl #1]    @ encoding: [0x3d,0xf8,0x12,0x70]
742@ CHECK: ldrh.w	r7, [sp, r2]            @ encoding: [0x3d,0xf8,0x02,0x70]
743@ CHECK: ldrh	r5, [r8, #255]!         @ encoding: [0x38,0xf8,0xff,0x5f]
744@ CHECK: ldrh	r2, [r5, #4]!           @ encoding: [0x35,0xf8,0x04,0x2f]
745@ CHECK: ldrh	r1, [r4, #-4]!          @ encoding: [0x34,0xf8,0x04,0x1d]
746@ CHECK: ldrh	lr, [r3], #255          @ encoding: [0x33,0xf8,0xff,0xeb]
747@ CHECK: ldrh	r9, [r2], #4            @ encoding: [0x32,0xf8,0x04,0x9b]
748@ CHECK: ldrh	r3, [sp], #-4           @ encoding: [0x3d,0xf8,0x04,0x39]
749
750
751@------------------------------------------------------------------------------
752@ LDRH(literal)
753@------------------------------------------------------------------------------
754        ldrh r5, _bar
755
756@ CHECK: ldrh.w	r5, _bar                @ encoding: [0xbf'A',0xf8'A',A,0x50'A']
757@ CHECK:     @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
758
759
760@------------------------------------------------------------------------------
761@ LDRSB(immediate)
762@------------------------------------------------------------------------------
763        ldrsb r5, [r5, #-4]
764        ldrsb r5, [r6, #32]
765        ldrsb r5, [r6, #33]
766        ldrsb r5, [r6, #257]
767        ldrsb.w lr, [r7, #257]
768
769@ CHECK: ldrsb	r5, [r5, #-4]            @ encoding: [0x15,0xf9,0x04,0x5c]
770@ CHECK: ldrsb.w r5, [r6, #32]           @ encoding: [0x96,0xf9,0x20,0x50]
771@ CHECK: ldrsb.w r5, [r6, #33]           @ encoding: [0x96,0xf9,0x21,0x50]
772@ CHECK: ldrsb.w r5, [r6, #257]          @ encoding: [0x96,0xf9,0x01,0x51]
773@ CHECK: ldrsb.w lr, [r7, #257]          @ encoding: [0x97,0xf9,0x01,0xe1]
774
775
776@------------------------------------------------------------------------------
777@ LDRSB(register)
778@------------------------------------------------------------------------------
779        ldrsb r1, [r8, r1]
780        ldrsb.w r4, [r5, r2]
781        ldrsb r6, [r0, r2, lsl #3]
782        ldrsb r8, [r8, r2, lsl #2]
783        ldrsb r7, [sp, r2, lsl #1]
784        ldrsb r7, [sp, r2, lsl #0]
785        ldrsb r5, [r8, #255]!
786        ldrsb r2, [r5, #4]!
787        ldrsb r1, [r4, #-4]!
788        ldrsb lr, [r3], #255
789        ldrsb r9, [r2], #4
790        ldrsb r3, [sp], #-4
791
792@ CHECK: ldrsb.w r1, [r8, r1]           @ encoding: [0x18,0xf9,0x01,0x10]
793@ CHECK: ldrsb.w r4, [r5, r2]           @ encoding: [0x15,0xf9,0x02,0x40]
794@ CHECK: ldrsb.w r6, [r0, r2, lsl #3]   @ encoding: [0x10,0xf9,0x32,0x60]
795@ CHECK: ldrsb.w r8, [r8, r2, lsl #2]   @ encoding: [0x18,0xf9,0x22,0x80]
796@ CHECK: ldrsb.w r7, [sp, r2, lsl #1]   @ encoding: [0x1d,0xf9,0x12,0x70]
797@ CHECK: ldrsb.w r7, [sp, r2]           @ encoding: [0x1d,0xf9,0x02,0x70]
798@ CHECK: ldrsb	r5, [r8, #255]!         @ encoding: [0x18,0xf9,0xff,0x5f]
799@ CHECK: ldrsb	r2, [r5, #4]!           @ encoding: [0x15,0xf9,0x04,0x2f]
800@ CHECK: ldrsb	r1, [r4, #-4]!          @ encoding: [0x14,0xf9,0x04,0x1d]
801@ CHECK: ldrsb	lr, [r3], #255          @ encoding: [0x13,0xf9,0xff,0xeb]
802@ CHECK: ldrsb	r9, [r2], #4            @ encoding: [0x12,0xf9,0x04,0x9b]
803@ CHECK: ldrsb	r3, [sp], #-4           @ encoding: [0x1d,0xf9,0x04,0x39]
804
805
806@------------------------------------------------------------------------------
807@ LDRSB(literal)
808@------------------------------------------------------------------------------
809        ldrsb r5, _bar
810
811@ CHECK: ldrsb.w r5, _bar               @ encoding: [0x9f'A',0xf9'A',A,0x50'A']
812@ CHECK:      @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
813
814
815@------------------------------------------------------------------------------
816@ LDRSBT
817@------------------------------------------------------------------------------
818        ldrsbt r1, [r2]
819        ldrsbt r1, [r8, #0]
820        ldrsbt r1, [r8, #3]
821        ldrsbt r1, [r8, #255]
822
823@ CHECK: ldrsbt	r1, [r2]                @ encoding: [0x12,0xf9,0x00,0x1e]
824@ CHECK: ldrsbt	r1, [r8]                @ encoding: [0x18,0xf9,0x00,0x1e]
825@ CHECK: ldrsbt	r1, [r8, #3]            @ encoding: [0x18,0xf9,0x03,0x1e]
826@ CHECK: ldrsbt	r1, [r8, #255]          @ encoding: [0x18,0xf9,0xff,0x1e]
827
828
829@------------------------------------------------------------------------------
830@ LDRSH(immediate)
831@------------------------------------------------------------------------------
832        ldrsh r5, [r5, #-4]
833        ldrsh r5, [r6, #32]
834        ldrsh r5, [r6, #33]
835        ldrsh r5, [r6, #257]
836        ldrsh.w lr, [r7, #257]
837
838@ CHECK: ldrsh	r5, [r5, #-4]           @ encoding: [0x35,0xf9,0x04,0x5c]
839@ CHECK: ldrsh.w r5, [r6, #32]          @ encoding: [0xb6,0xf9,0x20,0x50]
840@ CHECK: ldrsh.w r5, [r6, #33]          @ encoding: [0xb6,0xf9,0x21,0x50]
841@ CHECK: ldrsh.w r5, [r6, #257]         @ encoding: [0xb6,0xf9,0x01,0x51]
842@ CHECK: ldrsh.w lr, [r7, #257]         @ encoding: [0xb7,0xf9,0x01,0xe1]
843
844
845@------------------------------------------------------------------------------
846@ LDRSH(register)
847@------------------------------------------------------------------------------
848        ldrsh r1, [r8, r1]
849        ldrsh.w r4, [r5, r2]
850        ldrsh r6, [r0, r2, lsl #3]
851        ldrsh r8, [r8, r2, lsl #2]
852        ldrsh r7, [sp, r2, lsl #1]
853        ldrsh r7, [sp, r2, lsl #0]
854        ldrsh r5, [r8, #255]!
855        ldrsh r2, [r5, #4]!
856        ldrsh r1, [r4, #-4]!
857        ldrsh lr, [r3], #255
858        ldrsh r9, [r2], #4
859        ldrsh r3, [sp], #-4
860
861@ CHECK: ldrsh.w r1, [r8, r1]           @ encoding: [0x38,0xf9,0x01,0x10]
862@ CHECK: ldrsh.w r4, [r5, r2]           @ encoding: [0x35,0xf9,0x02,0x40]
863@ CHECK: ldrsh.w r6, [r0, r2, lsl #3]   @ encoding: [0x30,0xf9,0x32,0x60]
864@ CHECK: ldrsh.w r8, [r8, r2, lsl #2]   @ encoding: [0x38,0xf9,0x22,0x80]
865@ CHECK: ldrsh.w r7, [sp, r2, lsl #1]   @ encoding: [0x3d,0xf9,0x12,0x70]
866@ CHECK: ldrsh.w r7, [sp, r2]           @ encoding: [0x3d,0xf9,0x02,0x70]
867@ CHECK: ldrsh	r5, [r8, #255]!         @ encoding: [0x38,0xf9,0xff,0x5f]
868@ CHECK: ldrsh	r2, [r5, #4]!           @ encoding: [0x35,0xf9,0x04,0x2f]
869@ CHECK: ldrsh	r1, [r4, #-4]!          @ encoding: [0x34,0xf9,0x04,0x1d]
870@ CHECK: ldrsh	lr, [r3], #255          @ encoding: [0x33,0xf9,0xff,0xeb]
871@ CHECK: ldrsh	r9, [r2], #4            @ encoding: [0x32,0xf9,0x04,0x9b]
872@ CHECK: ldrsh	r3, [sp], #-4           @ encoding: [0x3d,0xf9,0x04,0x39]
873
874
875@------------------------------------------------------------------------------
876@ LDRSH(literal)
877@------------------------------------------------------------------------------
878        ldrsh r5, _bar
879        ldrsh.w r4, #1435
880
881@ CHECK: ldrsh.w r5, _bar               @ encoding: [0xbf'A',0xf9'A',A,0x50'A']
882@ CHECK:      @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
883@ CHECK: ldrsh.w r4, #1435               @ encoding: [0x3f,0xf9,0x9b,0x45]
884
885@------------------------------------------------------------------------------
886@ LDRSHT
887@------------------------------------------------------------------------------
888        ldrsht r1, [r2]
889        ldrsht r1, [r8, #0]
890        ldrsht r1, [r8, #3]
891        ldrsht r1, [r8, #255]
892
893@ CHECK: ldrsht	r1, [r2]                @ encoding: [0x32,0xf9,0x00,0x1e]
894@ CHECK: ldrsht	r1, [r8]                @ encoding: [0x38,0xf9,0x00,0x1e]
895@ CHECK: ldrsht	r1, [r8, #3]            @ encoding: [0x38,0xf9,0x03,0x1e]
896@ CHECK: ldrsht	r1, [r8, #255]          @ encoding: [0x38,0xf9,0xff,0x1e]
897
898
899@------------------------------------------------------------------------------
900@ LDRT
901@------------------------------------------------------------------------------
902        ldrt r1, [r2]
903        ldrt r2, [r6, #0]
904        ldrt r3, [r7, #3]
905        ldrt r4, [r9, #255]
906
907@ CHECK: ldrt	r1, [r2]                @ encoding: [0x52,0xf8,0x00,0x1e]
908@ CHECK: ldrt	r2, [r6]                @ encoding: [0x56,0xf8,0x00,0x2e]
909@ CHECK: ldrt	r3, [r7, #3]            @ encoding: [0x57,0xf8,0x03,0x3e]
910@ CHECK: ldrt	r4, [r9, #255]          @ encoding: [0x59,0xf8,0xff,0x4e]
911
912
913@------------------------------------------------------------------------------
914@ LSL (immediate)
915@------------------------------------------------------------------------------
916        lsl r2, r3, #12
917        lsls r8, r3, #31
918        lsls.w r2, r3, #1
919        lsl r2, r3, #4
920        lsls r2, r12, #15
921
922        lsl r3, #19
923        lsls r8, #2
924        lsls.w r7, #5
925        lsl.w r12, #21
926
927@ CHECK: lsl.w	r2, r3, #12             @ encoding: [0x4f,0xea,0x03,0x32]
928@ CHECK: lsls.w	r8, r3, #31             @ encoding: [0x5f,0xea,0xc3,0x78]
929@ CHECK: lsls.w	r2, r3, #1              @ encoding: [0x5f,0xea,0x43,0x02]
930@ CHECK: lsl.w	r2, r3, #4              @ encoding: [0x4f,0xea,0x03,0x12]
931@ CHECK: lsls.w	r2, r12, #15            @ encoding: [0x5f,0xea,0xcc,0x32]
932
933@ CHECK: lsl.w	r3, r3, #19             @ encoding: [0x4f,0xea,0xc3,0x43]
934@ CHECK: lsls.w	r8, r8, #2              @ encoding: [0x5f,0xea,0x88,0x08]
935@ CHECK: lsls.w	r7, r7, #5              @ encoding: [0x5f,0xea,0x47,0x17]
936@ CHECK: lsl.w	r12, r12, #21           @ encoding: [0x4f,0xea,0x4c,0x5c]
937
938
939@------------------------------------------------------------------------------
940@ LSL (register)
941@------------------------------------------------------------------------------
942        lsl r3, r4, r2
943        lsl.w r1, r2
944        lsls r3, r4, r8
945
946@ CHECK: lsl.w	r3, r4, r2              @ encoding: [0x04,0xfa,0x02,0xf3]
947@ CHECK: lsl.w	r1, r1, r2              @ encoding: [0x01,0xfa,0x02,0xf1]
948@ CHECK: lsls.w	r3, r4, r8              @ encoding: [0x14,0xfa,0x08,0xf3]
949
950
951@------------------------------------------------------------------------------
952@ LSR (immediate)
953@------------------------------------------------------------------------------
954        lsr r2, r3, #12
955        lsrs r8, r3, #32
956        lsrs.w r2, r3, #1
957        lsr r2, r3, #4
958        lsrs r2, r12, #15
959
960        lsr r3, #19
961        lsrs r8, #2
962        lsrs.w r7, #5
963        lsr.w r12, #21
964
965@ CHECK: lsr.w	r2, r3, #12             @ encoding: [0x4f,0xea,0x13,0x32]
966@ CHECK: lsrs.w	r8, r3, #32             @ encoding: [0x5f,0xea,0x13,0x08]
967@ CHECK: lsrs.w	r2, r3, #1              @ encoding: [0x5f,0xea,0x53,0x02]
968@ CHECK: lsr.w	r2, r3, #4              @ encoding: [0x4f,0xea,0x13,0x12]
969@ CHECK: lsrs.w	r2, r12, #15            @ encoding: [0x5f,0xea,0xdc,0x32]
970
971@ CHECK: lsr.w	r3, r3, #19             @ encoding: [0x4f,0xea,0xd3,0x43]
972@ CHECK: lsrs.w	r8, r8, #2              @ encoding: [0x5f,0xea,0x98,0x08]
973@ CHECK: lsrs.w	r7, r7, #5              @ encoding: [0x5f,0xea,0x57,0x17]
974@ CHECK: lsr.w	r12, r12, #21           @ encoding: [0x4f,0xea,0x5c,0x5c]
975
976
977@------------------------------------------------------------------------------
978@ LSR (register)
979@------------------------------------------------------------------------------
980        lsr r3, r4, r2
981        lsr.w r1, r2
982        lsrs r3, r4, r8
983
984@ CHECK: lsr.w	r3, r4, r2              @ encoding: [0x24,0xfa,0x02,0xf3]
985@ CHECK: lsr.w	r1, r1, r2              @ encoding: [0x21,0xfa,0x02,0xf1]
986@ CHECK: lsrs.w	r3, r4, r8              @ encoding: [0x34,0xfa,0x08,0xf3]
987
988@------------------------------------------------------------------------------
989@ MCR/MCR2
990@------------------------------------------------------------------------------
991        mcr  p7, #1, r5, c1, c1, #4
992        mcr2  p7, #1, r5, c1, c1, #4
993
994@ CHECK: mcr	p7, #1, r5, c1, c1, #4  @ encoding: [0x21,0xee,0x91,0x57]
995@ CHECK: mcr2	p7, #1, r5, c1, c1, #4  @ encoding: [0x21,0xfe,0x91,0x57]
996
997
998@------------------------------------------------------------------------------
999@ MCRR/MCRR2
1000@------------------------------------------------------------------------------
1001        mcrr  p7, #15, r5, r4, c1
1002        mcrr2  p7, #15, r5, r4, c1
1003
1004@ CHECK: mcrr	p7, #15, r5, r4, c1     @ encoding: [0x44,0xec,0xf1,0x57]
1005@ CHECK: mcrr2	p7, #15, r5, r4, c1     @ encoding: [0x44,0xfc,0xf1,0x57]
1006
1007
1008@------------------------------------------------------------------------------
1009@ MLA/MLS
1010@------------------------------------------------------------------------------
1011        mla  r1,r2,r3,r4
1012        mls  r1,r2,r3,r4
1013
1014@ CHECK: mla	r1, r2, r3, r4          @ encoding: [0x02,0xfb,0x03,0x41]
1015@ CHECK: mls	r1, r2, r3, r4          @ encoding: [0x02,0xfb,0x13,0x41]
1016
1017
1018@------------------------------------------------------------------------------
1019@ MOV(immediate)
1020@------------------------------------------------------------------------------
1021        movs r1, #21
1022        movs.w r1, #21
1023        movs r8, #21
1024        movw r0, #65535
1025        movw r1, #43777
1026        movw r1, #43792
1027        mov.w r0, #0x3fc0000
1028        mov r0, #0x3fc0000
1029        movs.w r0, #0x3fc0000
1030        itte eq
1031        movseq r1, #12
1032        moveq r1, #12
1033        movne.w r1, #12
1034        mov.w r6, #450
1035
1036@ CHECK: movs	r1, #21                 @ encoding: [0x15,0x21]
1037@ CHECK: movs.w	r1, #21                 @ encoding: [0x5f,0xf0,0x15,0x01]
1038@ CHECK: movs.w	r8, #21                 @ encoding: [0x5f,0xf0,0x15,0x08]
1039@ CHECK: movw	r0, #65535              @ encoding: [0x4f,0xf6,0xff,0x70]
1040@ CHECK: movw	r1, #43777              @ encoding: [0x4a,0xf6,0x01,0x31]
1041@ CHECK: movw	r1, #43792              @ encoding: [0x4a,0xf6,0x10,0x31]
1042@ CHECK: mov.w	r0, #66846720           @ encoding: [0x4f,0xf0,0x7f,0x70]
1043@ CHECK: mov.w	r0, #66846720           @ encoding: [0x4f,0xf0,0x7f,0x70]
1044@ CHECK: movs.w	r0, #66846720           @ encoding: [0x5f,0xf0,0x7f,0x70]
1045@ CHECK: itte	eq                      @ encoding: [0x06,0xbf]
1046@ CHECK: movseq.w	r1, #12         @ encoding: [0x5f,0xf0,0x0c,0x01]
1047@ CHECK: moveq	r1, #12                 @ encoding: [0x0c,0x21]
1048@ CHECK: movne.w r1, #12                @ encoding: [0x4f,0xf0,0x0c,0x01]
1049@ CHECK: mov.w	r6, #450                @ encoding: [0x4f,0xf4,0xe1,0x76]
1050
1051
1052@------------------------------------------------------------------------------
1053@ MOVT
1054@------------------------------------------------------------------------------
1055        movt r3, #7
1056        movt r6, #0xffff
1057        it eq
1058        movteq r4, #0xff0
1059
1060@ CHECK: movt	r3, #7                  @ encoding: [0xc0,0xf2,0x07,0x03]
1061@ CHECK: movt	r6, #65535              @ encoding: [0xcf,0xf6,0xff,0x76]
1062@ CHECK: it	eq                      @ encoding: [0x08,0xbf]
1063@ CHECK: movteq	r4, #4080               @ encoding: [0xc0,0xf6,0xf0,0x74]
1064
1065@------------------------------------------------------------------------------
1066@ MRC/MRC2
1067@------------------------------------------------------------------------------
1068        mrc  p14, #0, r1, c1, c2, #4
1069        mrc2  p14, #0, r1, c1, c2, #4
1070
1071@ CHECK: mrc	p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xee,0x92,0x1e]
1072@ CHECK: mrc2	p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xfe,0x92,0x1e]
1073
1074
1075@------------------------------------------------------------------------------
1076@ MRRC/MRRC2
1077@------------------------------------------------------------------------------
1078        mrrc  p7, #1, r5, r4, c1
1079        mrrc2  p7, #1, r5, r4, c1
1080
1081@ CHECK: mrrc	p7, #1, r5, r4, c1      @ encoding: [0x54,0xec,0x11,0x57]
1082@ CHECK: mrrc2	p7, #1, r5, r4, c1      @ encoding: [0x54,0xfc,0x11,0x57]
1083
1084
1085@------------------------------------------------------------------------------
1086@ MRS
1087@------------------------------------------------------------------------------
1088        mrs  r8, apsr
1089        mrs  r8, cpsr
1090        mrs  r8, spsr
1091
1092@ CHECK: mrs	r8, apsr                @ encoding: [0xef,0xf3,0x00,0x88]
1093@ CHECK: mrs	r8, apsr                @ encoding: [0xef,0xf3,0x00,0x88]
1094@ CHECK: mrs	r8, spsr                @ encoding: [0xff,0xf3,0x00,0x88]
1095
1096
1097@------------------------------------------------------------------------------
1098@ MSR
1099@------------------------------------------------------------------------------
1100        msr  apsr, r1
1101        msr  apsr_g, r2
1102        msr  apsr_nzcvq, r3
1103        msr  APSR_nzcvq, r4
1104        msr  apsr_nzcvqg, r5
1105        msr  cpsr_fc, r6
1106        msr  cpsr_c, r7
1107        msr  cpsr_x, r8
1108        msr  cpsr_fc, r9
1109        msr  cpsr_all, r11
1110        msr  cpsr_fsx, r12
1111        msr  spsr_fc, r0
1112        msr  SPSR_fsxc, r5
1113        msr  cpsr_fsxc, r8
1114
1115@ CHECK: msr	APSR_nzcvq, r1          @ encoding: [0x81,0xf3,0x00,0x88]
1116@ CHECK: msr	APSR_g, r2              @ encoding: [0x82,0xf3,0x00,0x84]
1117@ CHECK: msr	APSR_nzcvq, r3          @ encoding: [0x83,0xf3,0x00,0x88]
1118@ CHECK: msr	APSR_nzcvq, r4          @ encoding: [0x84,0xf3,0x00,0x88]
1119@ CHECK: msr	APSR_nzcvqg, r5         @ encoding: [0x85,0xf3,0x00,0x8c]
1120@ CHECK: msr	CPSR_fc, r6             @ encoding: [0x86,0xf3,0x00,0x89]
1121@ CHECK: msr	CPSR_c, r7              @ encoding: [0x87,0xf3,0x00,0x81]
1122@ CHECK: msr	CPSR_x, r8              @ encoding: [0x88,0xf3,0x00,0x82]
1123@ CHECK: msr	CPSR_fc, r9             @ encoding: [0x89,0xf3,0x00,0x89]
1124@ CHECK: msr	CPSR_fc, r11            @ encoding: [0x8b,0xf3,0x00,0x89]
1125@ CHECK: msr	CPSR_fsx, r12           @ encoding: [0x8c,0xf3,0x00,0x8e]
1126@ CHECK: msr	SPSR_fc, r0             @ encoding: [0x90,0xf3,0x00,0x89]
1127@ CHECK: msr	SPSR_fsxc, r5           @ encoding: [0x95,0xf3,0x00,0x8f]
1128@ CHECK: msr	CPSR_fsxc, r8           @ encoding: [0x88,0xf3,0x00,0x8f]
1129
1130
1131@------------------------------------------------------------------------------
1132@ MUL
1133@------------------------------------------------------------------------------
1134        muls r3, r4, r3
1135        mul r3, r4, r3
1136        mul r3, r4, r6
1137        it eq
1138        muleq r3, r4, r5
1139
1140@ CHECK: muls	r3, r4, r3              @ encoding: [0x63,0x43]
1141@ CHECK: mul	r3, r4, r3              @ encoding: [0x04,0xfb,0x03,0xf3]
1142@ CHECK: mul	r3, r4, r6              @ encoding: [0x04,0xfb,0x06,0xf3]
1143@ CHECK: it	eq                      @ encoding: [0x08,0xbf]
1144@ CHECK: muleq	r3, r4, r5              @ encoding: [0x04,0xfb,0x05,0xf3]
1145
1146
1147@------------------------------------------------------------------------------
1148@ MVN(immediate)
1149@------------------------------------------------------------------------------
1150        mvns r8, #21
1151        mvn r0, #0x3fc0000
1152        mvns r0, #0x3fc0000
1153        itte eq
1154        mvnseq r1, #12
1155        mvneq r1, #12
1156        mvnne r1, #12
1157
1158@ CHECK: mvns	r8, #21                 @ encoding: [0x7f,0xf0,0x15,0x08]
1159@ CHECK: mvn	r0, #66846720           @ encoding: [0x6f,0xf0,0x7f,0x70]
1160@ CHECK: mvns	r0, #66846720           @ encoding: [0x7f,0xf0,0x7f,0x70]
1161@ CHECK: itte	eq                      @ encoding: [0x06,0xbf]
1162@ CHECK: mvnseq	r1, #12                 @ encoding: [0x7f,0xf0,0x0c,0x01]
1163@ CHECK: mvneq	r1, #12                 @ encoding: [0x6f,0xf0,0x0c,0x01]
1164@ CHECK: mvnne	r1, #12                 @ encoding: [0x6f,0xf0,0x0c,0x01]
1165
1166
1167@------------------------------------------------------------------------------
1168@ MVN(register)
1169@------------------------------------------------------------------------------
1170        mvn r2, r3
1171        mvns r2, r3
1172        mvn r5, r6, lsl #19
1173        mvn r5, r6, lsr #9
1174        mvn r5, r6, asr #4
1175        mvn r5, r6, ror #6
1176        mvn r5, r6, rrx
1177        it eq
1178        mvneq r2, r3
1179
1180@ CHECK: mvn.w	r2, r3                  @ encoding: [0x6f,0xea,0x03,0x02]
1181@ CHECK: mvns	r2, r3                  @ encoding: [0xda,0x43]
1182@ CHECK: mvn.w	r5, r6, lsl #19         @ encoding: [0x6f,0xea,0xc6,0x45]
1183@ CHECK: mvn.w	r5, r6, lsr #9          @ encoding: [0x6f,0xea,0x56,0x25]
1184@ CHECK: mvn.w	r5, r6, asr #4          @ encoding: [0x6f,0xea,0x26,0x15]
1185@ CHECK: mvn.w	r5, r6, ror #6          @ encoding: [0x6f,0xea,0xb6,0x15]
1186@ CHECK: mvn.w	r5, r6, rrx             @ encoding: [0x6f,0xea,0x36,0x05]
1187@ CHECK: it	eq                      @ encoding: [0x08,0xbf]
1188@ CHECK: mvneq	r2, r3                  @ encoding: [0xda,0x43]
1189
1190@------------------------------------------------------------------------------
1191@ NOP
1192@------------------------------------------------------------------------------
1193        nop.w
1194
1195@ CHECK: nop.w                          @ encoding: [0xaf,0xf3,0x00,0x80]
1196
1197
1198@------------------------------------------------------------------------------
1199@ ORN
1200@------------------------------------------------------------------------------
1201        orn r4, r5, #0xf000
1202        orn r4, r5, r6
1203        orns r4, r5, r6
1204        orn r4, r5, r6, lsl #5
1205        orns r4, r5, r6, lsr #5
1206        orn r4, r5, r6, lsr #5
1207        orns r4, r5, r6, asr #5
1208        orn r4, r5, r6, ror #5
1209
1210@ CHECK: orn	r4, r5, #61440          @ encoding: [0x65,0xf4,0x70,0x44]
1211@ CHECK: orn	r4, r5, r6              @ encoding: [0x65,0xea,0x06,0x04]
1212@ CHECK: orns	r4, r5, r6              @ encoding: [0x75,0xea,0x06,0x04]
1213@ CHECK: orn	r4, r5, r6, lsl #5      @ encoding: [0x65,0xea,0x46,0x14]
1214@ CHECK: orns	r4, r5, r6, lsr #5      @ encoding: [0x75,0xea,0x56,0x14]
1215@ CHECK: orn	r4, r5, r6, lsr #5      @ encoding: [0x65,0xea,0x56,0x14]
1216@ CHECK: orns	r4, r5, r6, asr #5      @ encoding: [0x75,0xea,0x66,0x14]
1217@ CHECK: orn	r4, r5, r6, ror #5      @ encoding: [0x65,0xea,0x76,0x14]
1218
1219
1220@------------------------------------------------------------------------------
1221@ ORR
1222@------------------------------------------------------------------------------
1223        orr r4, r5, #0xf000
1224        orr r4, r5, r6
1225        orr r4, r5, r6, lsl #5
1226        orrs r4, r5, r6, lsr #5
1227        orr r4, r5, r6, lsr #5
1228        orrs r4, r5, r6, asr #5
1229        orr r4, r5, r6, ror #5
1230
1231@ CHECK: orr	r4, r5, #61440          @ encoding: [0x45,0xf4,0x70,0x44]
1232@ CHECK: orr.w	r4, r5, r6              @ encoding: [0x45,0xea,0x06,0x04]
1233@ CHECK: orr.w	r4, r5, r6, lsl #5      @ encoding: [0x45,0xea,0x46,0x14]
1234@ CHECK: orrs.w	r4, r5, r6, lsr #5      @ encoding: [0x55,0xea,0x56,0x14]
1235@ CHECK: orr.w	r4, r5, r6, lsr #5      @ encoding: [0x45,0xea,0x56,0x14]
1236@ CHECK: orrs.w	r4, r5, r6, asr #5      @ encoding: [0x55,0xea,0x66,0x14]
1237@ CHECK: orr.w	r4, r5, r6, ror #5      @ encoding: [0x45,0xea,0x76,0x14]
1238
1239
1240@------------------------------------------------------------------------------
1241@ PKH
1242@------------------------------------------------------------------------------
1243        pkhbt r2, r2, r3
1244        pkhbt r2, r2, r3, lsl #31
1245        pkhbt r2, r2, r3, lsl #0
1246        pkhbt r2, r2, r3, lsl #15
1247
1248        pkhtb r2, r2, r3
1249        pkhtb r2, r2, r3, asr #31
1250        pkhtb r2, r2, r3, asr #15
1251
1252@ CHECK: pkhbt	r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1253@ CHECK: pkhbt	r2, r2, r3, lsl #31     @ encoding: [0xc2,0xea,0xc3,0x72]
1254@ CHECK: pkhbt	r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1255@ CHECK: pkhbt	r2, r2, r3, lsl #15     @ encoding: [0xc2,0xea,0xc3,0x32]
1256
1257@ CHECK: pkhbt	r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1258@ CHECK: pkhtb	r2, r2, r3, asr #31     @ encoding: [0xc2,0xea,0xe3,0x72]
1259@ CHECK: pkhtb	r2, r2, r3, asr #15     @ encoding: [0xc2,0xea,0xe3,0x32]
1260
1261
1262@------------------------------------------------------------------------------
1263@ PLD(immediate)
1264@------------------------------------------------------------------------------
1265        pld [r5, #-4]
1266        pld [r6, #32]
1267        pld [r6, #33]
1268        pld [r6, #257]
1269        pld [r7, #257]
1270
1271@ CHECK: pld	[r5, #-4]               @ encoding: [0x15,0xf8,0x04,0xfc]
1272@ CHECK: pld	[r6, #32]               @ encoding: [0x96,0xf8,0x20,0xf0]
1273@ CHECK: pld	[r6, #33]               @ encoding: [0x96,0xf8,0x21,0xf0]
1274@ CHECK: pld	[r6, #257]              @ encoding: [0x96,0xf8,0x01,0xf1]
1275@ CHECK: pld	[r7, #257]              @ encoding: [0x97,0xf8,0x01,0xf1]
1276
1277
1278@------------------------------------------------------------------------------
1279@ PLD(literal)
1280@------------------------------------------------------------------------------
1281        pld  _foo
1282
1283@ CHECK: pld	_foo                    @ encoding: [0x9f'A',0xf8'A',A,0xf0'A']
1284            @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
1285
1286
1287@------------------------------------------------------------------------------
1288@ PLD(register)
1289@------------------------------------------------------------------------------
1290        pld [r8, r1]
1291        pld [r5, r2]
1292        pld [r0, r2, lsl #3]
1293        pld [r8, r2, lsl #2]
1294        pld [sp, r2, lsl #1]
1295        pld [sp, r2, lsl #0]
1296
1297@ CHECK: pld	[r8, r1]                @ encoding: [0x18,0xf8,0x01,0xf0]
1298@ CHECK: pld	[r5, r2]                @ encoding: [0x15,0xf8,0x02,0xf0]
1299@ CHECK: pld	[r0, r2, lsl #3]        @ encoding: [0x10,0xf8,0x32,0xf0]
1300@ CHECK: pld	[r8, r2, lsl #2]        @ encoding: [0x18,0xf8,0x22,0xf0]
1301@ CHECK: pld	[sp, r2, lsl #1]        @ encoding: [0x1d,0xf8,0x12,0xf0]
1302@ CHECK: pld	[sp, r2]                @ encoding: [0x1d,0xf8,0x02,0xf0]
1303
1304@------------------------------------------------------------------------------
1305@ PLI(immediate)
1306@------------------------------------------------------------------------------
1307        pli [r5, #-4]
1308        pli [r6, #32]
1309        pli [r6, #33]
1310        pli [r6, #257]
1311        pli [r7, #257]
1312
1313@ CHECK: pli	[r5, #-4]               @ encoding: [0x15,0xf9,0x04,0xfc]
1314@ CHECK: pli	[r6, #32]               @ encoding: [0x96,0xf9,0x20,0xf0]
1315@ CHECK: pli	[r6, #33]               @ encoding: [0x96,0xf9,0x21,0xf0]
1316@ CHECK: pli	[r6, #257]              @ encoding: [0x96,0xf9,0x01,0xf1]
1317@ CHECK: pli	[r7, #257]              @ encoding: [0x97,0xf9,0x01,0xf1]
1318
1319
1320@------------------------------------------------------------------------------
1321@ PLI(literal)
1322@------------------------------------------------------------------------------
1323        pli  _foo
1324
1325
1326@ CHECK: pli	_foo                    @ encoding: [0x9f'A',0xf9'A',A,0xf0'A']
1327           @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
1328
1329
1330@------------------------------------------------------------------------------
1331@ PLI(register)
1332@------------------------------------------------------------------------------
1333        pli [r8, r1]
1334        pli [r5, r2]
1335        pli [r0, r2, lsl #3]
1336        pli [r8, r2, lsl #2]
1337        pli [sp, r2, lsl #1]
1338        pli [sp, r2, lsl #0]
1339
1340@ CHECK: pli	[r8, r1]                @ encoding: [0x18,0xf9,0x01,0xf0]
1341@ CHECK: pli	[r5, r2]                @ encoding: [0x15,0xf9,0x02,0xf0]
1342@ CHECK: pli	[r0, r2, lsl #3]        @ encoding: [0x10,0xf9,0x32,0xf0]
1343@ CHECK: pli	[r8, r2, lsl #2]        @ encoding: [0x18,0xf9,0x22,0xf0]
1344@ CHECK: pli	[sp, r2, lsl #1]        @ encoding: [0x1d,0xf9,0x12,0xf0]
1345@ CHECK: pli	[sp, r2]                @ encoding: [0x1d,0xf9,0x02,0xf0]
1346
1347
1348@------------------------------------------------------------------------------
1349@ QADD/QADD16/QADD8
1350@------------------------------------------------------------------------------
1351        qadd r1, r2, r3
1352        qadd16 r1, r2, r3
1353        qadd8 r1, r2, r3
1354        itte gt
1355        qaddgt r1, r2, r3
1356        qadd16gt r1, r2, r3
1357        qadd8le r1, r2, r3
1358
1359@ CHECK: qadd	r1, r2, r3              @ encoding: [0x83,0xfa,0x82,0xf1]
1360@ CHECK: qadd16	r1, r2, r3              @ encoding: [0x92,0xfa,0x13,0xf1]
1361@ CHECK: qadd8	r1, r2, r3              @ encoding: [0x82,0xfa,0x13,0xf1]
1362@ CHECK: itte	gt                      @ encoding: [0xc6,0xbf]
1363@ CHECK: qaddgt	r1, r2, r3              @ encoding: [0x83,0xfa,0x82,0xf1]
1364@ CHECK: qadd16gt r1, r2, r3            @ encoding: [0x92,0xfa,0x13,0xf1]
1365@ CHECK: qadd8le r1, r2, r3             @ encoding: [0x82,0xfa,0x13,0xf1]
1366
1367
1368@------------------------------------------------------------------------------
1369@ QDADD/QDSUB
1370@------------------------------------------------------------------------------
1371        qdadd r6, r7, r8
1372        qdsub r6, r7, r8
1373        itt hi
1374        qdaddhi r6, r7, r8
1375        qdsubhi r6, r7, r8
1376
1377@ CHECK: qdadd	r6, r7, r8              @ encoding: [0x88,0xfa,0x97,0xf6]
1378@ CHECK: qdsub	r6, r7, r8              @ encoding: [0x88,0xfa,0xb7,0xf6]
1379@ CHECK: itt	hi                      @ encoding: [0x84,0xbf]
1380@ CHECK: qdaddhi r6, r7, r8             @ encoding: [0x88,0xfa,0x97,0xf6]
1381@ CHECK: qdsubhi r6, r7, r8             @ encoding: [0x88,0xfa,0xb7,0xf6]
1382
1383
1384@------------------------------------------------------------------------------
1385@ QSAX
1386@------------------------------------------------------------------------------
1387        qsax r9, r12, r0
1388        it eq
1389        qsaxeq r9, r12, r0
1390
1391@ CHECK: qsax	r9, r12, r0             @ encoding: [0xec,0xfa,0x10,0xf9]
1392@ CHECK: it	eq                      @ encoding: [0x08,0xbf]
1393@ CHECK: qsaxeq	r9, r12, r0             @ encoding: [0xec,0xfa,0x10,0xf9]
1394
1395
1396@------------------------------------------------------------------------------
1397@ QSUB/QSUB16/QSUB8
1398@------------------------------------------------------------------------------
1399        qsub r1, r2, r3
1400        qsub16 r1, r2, r3
1401        qsub8 r1, r2, r3
1402        itet le
1403        qsuble r1, r2, r3
1404        qsub16gt r1, r2, r3
1405        qsub8le r1, r2, r3
1406
1407@ CHECK: qsub	r1, r2, r3              @ encoding: [0x83,0xfa,0xa2,0xf1]
1408@ CHECK: qsub16	r1, r2, r3              @ encoding: [0xd2,0xfa,0x13,0xf1]
1409@ CHECK: qsub8	r1, r2, r3              @ encoding: [0xc2,0xfa,0x13,0xf1]
1410@ CHECK: itet	le                      @ encoding: [0xd6,0xbf]
1411@ CHECK: qsuble	r1, r2, r3              @ encoding: [0x83,0xfa,0xa2,0xf1]
1412@ CHECK: qsub16gt	r1, r2, r3      @ encoding: [0xd2,0xfa,0x13,0xf1]
1413@ CHECK: qsub8le r1, r2, r3             @ encoding: [0xc2,0xfa,0x13,0xf1]
1414
1415
1416@------------------------------------------------------------------------------
1417@ RBIT
1418@------------------------------------------------------------------------------
1419        rbit r1, r2
1420        it ne
1421        rbitne r1, r2
1422
1423@ CHECK: rbit	r1, r2                  @ encoding: [0x92,0xfa,0xa2,0xf1]
1424@ CHECK: it	ne                      @ encoding: [0x18,0xbf]
1425@ CHECK: rbitne	r1, r2                  @ encoding: [0x92,0xfa,0xa2,0xf1]
1426
1427
1428@------------------------------------------------------------------------------
1429@ REV
1430@------------------------------------------------------------------------------
1431        rev.w r1, r2
1432        rev r2, r8
1433        itt ne
1434        revne r1, r2
1435        revne r1, r8
1436
1437@ CHECK: rev.w	r1, r2                  @ encoding: [0x92,0xfa,0x82,0xf1]
1438@ CHECK: rev.w	r2, r8                  @ encoding: [0x98,0xfa,0x88,0xf2]
1439@ CHECK: itt	ne                      @ encoding: [0x1c,0xbf]
1440@ CHECK: revne	r1, r2                  @ encoding: [0x11,0xba]
1441@ CHECK: revne.w r1, r8                 @ encoding: [0x98,0xfa,0x88,0xf1]
1442
1443
1444@------------------------------------------------------------------------------
1445@ REV16
1446@------------------------------------------------------------------------------
1447        rev16.w r1, r2
1448        rev16 r2, r8
1449        itt ne
1450        rev16ne r1, r2
1451        rev16ne r1, r8
1452
1453	rev16.w	r1, r2                  @ encoding: [0x92,0xfa,0x92,0xf1]
1454	rev16.w	r2, r8                  @ encoding: [0x98,0xfa,0x98,0xf2]
1455	itt	ne                      @ encoding: [0x1c,0xbf]
1456	rev16ne	r1, r2                  @ encoding: [0x51,0xba]
1457	rev16ne.w	r1, r8          @ encoding: [0x98,0xfa,0x98,0xf1]
1458
1459
1460@------------------------------------------------------------------------------
1461@ REVSH
1462@------------------------------------------------------------------------------
1463        revsh.w r1, r2
1464        revsh r2, r8
1465        itt ne
1466        revshne r1, r2
1467        revshne r1, r8
1468
1469	revsh.w	r1, r2                  @ encoding: [0x92,0xfa,0xb2,0xf1]
1470	revsh.w	r2, r8                  @ encoding: [0x98,0xfa,0xb8,0xf2]
1471	itt	ne                      @ encoding: [0x1c,0xbf]
1472	revshne	r1, r2                  @ encoding: [0xd1,0xba]
1473	revshne.w	r1, r8          @ encoding: [0x98,0xfa,0xb8,0xf1]
1474
1475
1476@------------------------------------------------------------------------------
1477@ ROR (immediate)
1478@------------------------------------------------------------------------------
1479        ror r2, r3, #12
1480        rors r8, r3, #31
1481        rors.w r2, r3, #1
1482        ror r2, r3, #4
1483        rors r2, r12, #15
1484
1485        ror r3, #19
1486        rors r8, #2
1487        rors.w r7, #5
1488        ror.w r12, #21
1489
1490@ CHECK: ror.w	r2, r3, #12             @ encoding: [0x4f,0xea,0x33,0x32]
1491@ CHECK: rors.w	r8, r3, #31             @ encoding: [0x5f,0xea,0xf3,0x78]
1492@ CHECK: rors.w	r2, r3, #1              @ encoding: [0x5f,0xea,0x73,0x02]
1493@ CHECK: ror.w	r2, r3, #4              @ encoding: [0x4f,0xea,0x33,0x12]
1494@ CHECK: rors.w	r2, r12, #15            @ encoding: [0x5f,0xea,0xfc,0x32]
1495
1496@ CHECK: ror.w	r3, r3, #19             @ encoding: [0x4f,0xea,0xf3,0x43]
1497@ CHECK: rors.w	r8, r8, #2              @ encoding: [0x5f,0xea,0xb8,0x08]
1498@ CHECK: rors.w	r7, r7, #5              @ encoding: [0x5f,0xea,0x77,0x17]
1499@ CHECK: ror.w	r12, r12, #21           @ encoding: [0x4f,0xea,0x7c,0x5c]
1500
1501
1502@------------------------------------------------------------------------------
1503@ ROR (register)
1504@------------------------------------------------------------------------------
1505        ror r3, r4, r2
1506        ror.w r1, r2
1507        rors r3, r4, r8
1508
1509@ CHECK: ror.w	r3, r4, r2              @ encoding: [0x64,0xfa,0x02,0xf3]
1510@ CHECK: ror.w	r1, r1, r2              @ encoding: [0x61,0xfa,0x02,0xf1]
1511@ CHECK: rors.w	r3, r4, r8              @ encoding: [0x74,0xfa,0x08,0xf3]
1512
1513
1514@------------------------------------------------------------------------------
1515@ RRX
1516@------------------------------------------------------------------------------
1517        rrx r1, r2
1518        rrxs r1, r2
1519        ite lt
1520        rrxlt r9, r12
1521        rrxsge r8, r3
1522
1523@ CHECK: rrx	r1, r2                  @ encoding: [0x4f,0xea,0x32,0x01]
1524@ CHECK: rrxs	r1, r2                  @ encoding: [0x5f,0xea,0x32,0x01]
1525@ CHECK: ite	lt                      @ encoding: [0xb4,0xbf]
1526@ CHECK: rrxlt	r9, r12                 @ encoding: [0x4f,0xea,0x3c,0x09]
1527@ CHECK: rrxsge	r8, r3                  @ encoding: [0x5f,0xea,0x33,0x08]
1528
1529@------------------------------------------------------------------------------
1530@ RSB (immediate)
1531@------------------------------------------------------------------------------
1532        rsb r2, r5, #0xff000
1533        rsbs r3, r12, #0xf
1534        rsb r1, #0xff
1535        rsb r1, r1, #0xff
1536
1537@ CHECK: rsb.w	r2, r5, #1044480        @ encoding: [0xc5,0xf5,0x7f,0x22]
1538@ CHECK: rsbs.w	r3, r12, #15            @ encoding: [0xdc,0xf1,0x0f,0x03]
1539@ CHECK: rsb.w	r1, r1, #255            @ encoding: [0xc1,0xf1,0xff,0x01]
1540@ CHECK: rsb.w	r1, r1, #255            @ encoding: [0xc1,0xf1,0xff,0x01]
1541
1542
1543@------------------------------------------------------------------------------
1544@ RSB (register)
1545@------------------------------------------------------------------------------
1546        rsb r4, r8
1547        rsb r4, r9, r8
1548        rsb r1, r4, r8, asr #3
1549        rsbs r2, r1, r7, lsl #1
1550
1551@ CHECK: rsb	r4, r4, r8              @ encoding: [0xc4,0xeb,0x08,0x04]
1552@ CHECK: rsb	r4, r9, r8              @ encoding: [0xc9,0xeb,0x08,0x04]
1553@ CHECK: rsb	r1, r4, r8, asr #3      @ encoding: [0xc4,0xeb,0xe8,0x01]
1554@ CHECK: rsbs	r2, r1, r7, lsl #1      @ encoding: [0xd1,0xeb,0x47,0x02]
1555
1556
1557@------------------------------------------------------------------------------
1558@ SADD16
1559@------------------------------------------------------------------------------
1560        sadd16 r3, r4, r8
1561        it ne
1562        sadd16ne r3, r4, r8
1563
1564@ CHECK: sadd16	r3, r4, r8              @ encoding: [0x94,0xfa,0x08,0xf3]
1565@ CHECK: it	ne                      @ encoding: [0x18,0xbf]
1566@ CHECK: sadd16ne	r3, r4, r8      @ encoding: [0x94,0xfa,0x08,0xf3]
1567
1568
1569@------------------------------------------------------------------------------
1570@ SADD8
1571@------------------------------------------------------------------------------
1572        sadd8 r3, r4, r8
1573        it ne
1574        sadd8ne r3, r4, r8
1575
1576@ CHECK: sadd8	r3, r4, r8              @ encoding: [0x84,0xfa,0x08,0xf3]
1577@ CHECK: it	ne                      @ encoding: [0x18,0xbf]
1578@ CHECK: sadd8ne r3, r4, r8             @ encoding: [0x84,0xfa,0x08,0xf3]
1579
1580
1581@------------------------------------------------------------------------------
1582@ SUB (register)
1583@------------------------------------------------------------------------------
1584        sub.w r5, r2, r12, rrx
1585
1586@ CHECK: sub.w r5, r2, r12, rrx        @ encoding: [0xa2,0xeb,0x3c,0x05]
1587
1588