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