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