Thumb2 assembly parsing and encoding for MVN.
[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 @ 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 @ LDMIA
481 @------------------------------------------------------------------------------
482         ldmia.w r4, {r4, r5, r8, r9}
483         ldmia.w r4, {r5, r6}
484         ldmia.w r5!, {r3, r8}
485         ldm.w r4, {r4, r5, r8, r9}
486         ldm.w r4, {r5, r6}
487         ldm.w r5!, {r3, r8}
488         ldm.w r5!, {r1, r2}
489         ldm.w r2, {r1, r2}
490
491         ldmia r4, {r4, r5, r8, r9}
492         ldmia r4, {r5, r6}
493         ldmia r5!, {r3, r8}
494         ldm r4, {r4, r5, r8, r9}
495         ldm r4, {r5, r6}
496         ldm r5!, {r3, r8}
497         ldmfd r5!, {r3, r8}
498
499 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
500 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
501 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
502 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
503 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
504 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
505 @ CHECK: ldm.w  r5!, {r1, r2}           @ encoding: [0xb5,0xe8,0x06,0x00]
506 @ CHECK: ldm.w  r2, {r1, r2}            @ encoding: [0x92,0xe8,0x06,0x00]
507
508 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
509 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
510 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
511 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
512 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
513 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
514 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
515
516
517 @------------------------------------------------------------------------------
518 @ LDMDB
519 @------------------------------------------------------------------------------
520         ldmdb r4, {r4, r5, r8, r9}
521         ldmdb r4, {r5, r6}
522         ldmdb r5!, {r3, r8}
523         ldmea r5!, {r3, r8}
524
525 @ CHECK: ldmdb  r4, {r4, r5, r8, r9}    @ encoding: [0x14,0xe9,0x30,0x03]
526 @ CHECK: ldmdb  r4, {r5, r6}            @ encoding: [0x14,0xe9,0x60,0x00]
527 @ CHECK: ldmdb  r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
528 @ CHECK: ldmdb  r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
529
530
531 @------------------------------------------------------------------------------
532 @ LDR(immediate)
533 @------------------------------------------------------------------------------
534         ldr r5, [r5, #-4]
535         ldr r5, [r6, #32]
536         ldr r5, [r6, #33]
537         ldr r5, [r6, #257]
538         ldr.w pc, [r7, #257]
539
540 @ CHECK: ldr    r5, [r5, #-4]           @ encoding: [0x55,0xf8,0x04,0x5c]
541 @ CHECK: ldr    r5, [r6, #32]           @ encoding: [0x35,0x6a]
542 @ CHECK: ldr.w  r5, [r6, #33]           @ encoding: [0xd6,0xf8,0x21,0x50]
543 @ CHECK: ldr.w  r5, [r6, #257]          @ encoding: [0xd6,0xf8,0x01,0x51]
544 @ CHECK: ldr.w  pc, [r7, #257]          @ encoding: [0xd7,0xf8,0x01,0xf1]
545
546
547 @------------------------------------------------------------------------------
548 @ LDR(literal)
549 @------------------------------------------------------------------------------
550         ldr.w r5, _foo
551
552 @ CHECK: ldr.w  r5, _foo                @ encoding: [0x5f'A',0xf8'A',A,0x50'A']
553             @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
554
555
556 @------------------------------------------------------------------------------
557 @ LDR(register)
558 @------------------------------------------------------------------------------
559         ldr r1, [r8, r1]
560         ldr.w r4, [r5, r2]
561         ldr r6, [r0, r2, lsl #3]
562         ldr r8, [r8, r2, lsl #2]
563         ldr r7, [sp, r2, lsl #1]
564         ldr r7, [sp, r2, lsl #0]
565         ldr r2, [r4, #255]!
566         ldr r8, [sp, #4]!
567         ldr lr, [sp, #-4]!
568         ldr r2, [r4], #255
569         ldr r8, [sp], #4
570         ldr lr, [sp], #-4
571
572 @ CHECK: ldr.w  r1, [r8, r1]            @ encoding: [0x58,0xf8,0x01,0x10]
573 @ CHECK: ldr.w  r4, [r5, r2]            @ encoding: [0x55,0xf8,0x02,0x40]
574 @ CHECK: ldr.w  r6, [r0, r2, lsl #3]    @ encoding: [0x50,0xf8,0x32,0x60]
575 @ CHECK: ldr.w  r8, [r8, r2, lsl #2]    @ encoding: [0x58,0xf8,0x22,0x80]
576 @ CHECK: ldr.w  r7, [sp, r2, lsl #1]    @ encoding: [0x5d,0xf8,0x12,0x70]
577 @ CHECK: ldr.w  r7, [sp, r2]            @ encoding: [0x5d,0xf8,0x02,0x70]
578 @ CHECK: ldr    r2, [r4, #255]!         @ encoding: [0x54,0xf8,0xff,0x2f]
579 @ CHECK: ldr    r8, [sp, #4]!           @ encoding: [0x5d,0xf8,0x04,0x8f]
580 @ CHECK: ldr    lr, [sp, #-4]!          @ encoding: [0x5d,0xf8,0x04,0xed]
581 @ CHECK: ldr    r2, [r4], #255          @ encoding: [0x54,0xf8,0xff,0x2b]
582 @ CHECK: ldr    r8, [sp], #4            @ encoding: [0x5d,0xf8,0x04,0x8b]
583 @ CHECK: ldr    lr, [sp], #-4           @ encoding: [0x5d,0xf8,0x04,0xe9]
584
585
586 @------------------------------------------------------------------------------
587 @ LDRB(immediate)
588 @------------------------------------------------------------------------------
589         ldrb r5, [r5, #-4]
590         ldrb r5, [r6, #32]
591         ldrb r5, [r6, #33]
592         ldrb r5, [r6, #257]
593         ldrb.w lr, [r7, #257]
594
595 @ CHECK: ldrb   r5, [r5, #-4]           @ encoding: [0x15,0xf8,0x04,0x5c]
596 @ CHECK: ldrb.w r5, [r6, #32]           @ encoding: [0x96,0xf8,0x20,0x50]
597 @ CHECK: ldrb.w r5, [r6, #33]           @ encoding: [0x96,0xf8,0x21,0x50]
598 @ CHECK: ldrb.w r5, [r6, #257]          @ encoding: [0x96,0xf8,0x01,0x51]
599 @ CHECK: ldrb.w lr, [r7, #257]          @ encoding: [0x97,0xf8,0x01,0xe1]
600
601
602 @------------------------------------------------------------------------------
603 @ LDRB(register)
604 @------------------------------------------------------------------------------
605         ldrb r1, [r8, r1]
606         ldrb.w r4, [r5, r2]
607         ldrb r6, [r0, r2, lsl #3]
608         ldrb r8, [r8, r2, lsl #2]
609         ldrb r7, [sp, r2, lsl #1]
610         ldrb r7, [sp, r2, lsl #0]
611         ldrb r5, [r8, #255]!
612         ldrb r2, [r5, #4]!
613         ldrb r1, [r4, #-4]!
614         ldrb lr, [r3], #255
615         ldrb r9, [r2], #4
616         ldrb r3, [sp], #-4
617
618 @ CHECK: ldrb.w r1, [r8, r1]            @ encoding: [0x18,0xf8,0x01,0x10]
619 @ CHECK: ldrb.w r4, [r5, r2]            @ encoding: [0x15,0xf8,0x02,0x40]
620 @ CHECK: ldrb.w r6, [r0, r2, lsl #3]    @ encoding: [0x10,0xf8,0x32,0x60]
621 @ CHECK: ldrb.w r8, [r8, r2, lsl #2]    @ encoding: [0x18,0xf8,0x22,0x80]
622 @ CHECK: ldrb.w r7, [sp, r2, lsl #1]    @ encoding: [0x1d,0xf8,0x12,0x70]
623 @ CHECK: ldrb.w r7, [sp, r2]            @ encoding: [0x1d,0xf8,0x02,0x70]
624 @ CHECK: ldrb   r5, [r8, #255]!         @ encoding: [0x18,0xf8,0xff,0x5f]
625 @ CHECK: ldrb   r2, [r5, #4]!           @ encoding: [0x15,0xf8,0x04,0x2f]
626 @ CHECK: ldrb   r1, [r4, #-4]!          @ encoding: [0x14,0xf8,0x04,0x1d]
627 @ CHECK: ldrb   lr, [r3], #255          @ encoding: [0x13,0xf8,0xff,0xeb]
628 @ CHECK: ldrb   r9, [r2], #4            @ encoding: [0x12,0xf8,0x04,0x9b]
629 @ CHECK: ldrb   r3, [sp], #-4           @ encoding: [0x1d,0xf8,0x04,0x39]
630
631
632 @------------------------------------------------------------------------------
633 @ LDRBT
634 @------------------------------------------------------------------------------
635         ldrbt r1, [r2]
636         ldrbt r1, [r8, #0]
637         ldrbt r1, [r8, #3]
638         ldrbt r1, [r8, #255]
639
640 @ CHECK: ldrbt  r1, [r2]                @ encoding: [0x12,0xf8,0x00,0x1e]
641 @ CHECK: ldrbt  r1, [r8]                @ encoding: [0x18,0xf8,0x00,0x1e]
642 @ CHECK: ldrbt  r1, [r8, #3]            @ encoding: [0x18,0xf8,0x03,0x1e]
643 @ CHECK: ldrbt  r1, [r8, #255]          @ encoding: [0x18,0xf8,0xff,0x1e]
644
645
646 @------------------------------------------------------------------------------
647 @ LDRD(immediate)
648 @------------------------------------------------------------------------------
649         ldrd r3, r5, [r6, #24]
650         ldrd r3, r5, [r6, #24]!
651         ldrd r3, r5, [r6], #4
652         ldrd r3, r5, [r6], #-8
653         ldrd r3, r5, [r6]
654         ldrd r8, r1, [r3, #0]
655
656 @ CHECK: ldrd   r3, r5, [r6, #24]       @ encoding: [0xd6,0xe9,0x06,0x35]
657 @ CHECK: ldrd   r3, r5, [r6, #24]!      @ encoding: [0xf6,0xe9,0x06,0x35]
658 @ CHECK: ldrd   r3, r5, [r6], #4        @ encoding: [0xf6,0xe8,0x01,0x35]
659 @ CHECK: ldrd   r3, r5, [r6], #-8       @ encoding: [0x76,0xe8,0x02,0x35]
660 @ CHECK: ldrd   r3, r5, [r6]            @ encoding: [0xd6,0xe9,0x00,0x35]
661 @ CHECK: ldrd   r8, r1, [r3]            @ encoding: [0xd3,0xe9,0x00,0x81]
662
663
664 @------------------------------------------------------------------------------
665 @ FIXME: LDRD(literal)
666 @------------------------------------------------------------------------------
667
668
669 @------------------------------------------------------------------------------
670 @ LDREX/LDREXB/LDREXH/LDREXD
671 @------------------------------------------------------------------------------
672         ldrex r1, [r4]
673         ldrex r8, [r4, #0]
674         ldrex r2, [sp, #128]
675         ldrexb r5, [r7]
676         ldrexh r9, [r12]
677         ldrexd r9, r3, [r4]
678
679 @ CHECK: ldrex  r1, [r4]                @ encoding: [0x54,0xe8,0x00,0x1f]
680 @ CHECK: ldrex  r8, [r4]                @ encoding: [0x54,0xe8,0x00,0x8f]
681 @ CHECK: ldrex  r2, [sp, #128]          @ encoding: [0x5d,0xe8,0x20,0x2f]
682 @ CHECK: ldrexb r5, [r7]                @ encoding: [0xd7,0xe8,0x4f,0x5f]
683 @ CHECK: ldrexh r9, [r12]               @ encoding: [0xdc,0xe8,0x5f,0x9f]
684 @ CHECK: ldrexd r9, r3, [r4]            @ encoding: [0xd4,0xe8,0x7f,0x93]
685
686
687 @------------------------------------------------------------------------------
688 @ LDRH(immediate)
689 @------------------------------------------------------------------------------
690         ldrh r5, [r5, #-4]
691         ldrh r5, [r6, #32]
692         ldrh r5, [r6, #33]
693         ldrh r5, [r6, #257]
694         ldrh.w lr, [r7, #257]
695
696 @ CHECK: ldrh   r5, [r5, #-4]           @ encoding: [0x35,0xf8,0x04,0x5c]
697 @ CHECK: ldrh   r5, [r6, #32]           @ encoding: [0x35,0x8c]
698 @ CHECK: ldrh.w r5, [r6, #33]           @ encoding: [0xb6,0xf8,0x21,0x50]
699 @ CHECK: ldrh.w r5, [r6, #257]          @ encoding: [0xb6,0xf8,0x01,0x51]
700 @ CHECK: ldrh.w lr, [r7, #257]          @ encoding: [0xb7,0xf8,0x01,0xe1]
701
702
703 @------------------------------------------------------------------------------
704 @ LDRH(register)
705 @------------------------------------------------------------------------------
706         ldrh r1, [r8, r1]
707         ldrh.w r4, [r5, r2]
708         ldrh r6, [r0, r2, lsl #3]
709         ldrh r8, [r8, r2, lsl #2]
710         ldrh r7, [sp, r2, lsl #1]
711         ldrh r7, [sp, r2, lsl #0]
712         ldrh r5, [r8, #255]!
713         ldrh r2, [r5, #4]!
714         ldrh r1, [r4, #-4]!
715         ldrh lr, [r3], #255
716         ldrh r9, [r2], #4
717         ldrh r3, [sp], #-4
718
719 @ CHECK: ldrh.w r1, [r8, r1]            @ encoding: [0x38,0xf8,0x01,0x10]
720 @ CHECK: ldrh.w r4, [r5, r2]            @ encoding: [0x35,0xf8,0x02,0x40]
721 @ CHECK: ldrh.w r6, [r0, r2, lsl #3]    @ encoding: [0x30,0xf8,0x32,0x60]
722 @ CHECK: ldrh.w r8, [r8, r2, lsl #2]    @ encoding: [0x38,0xf8,0x22,0x80]
723 @ CHECK: ldrh.w r7, [sp, r2, lsl #1]    @ encoding: [0x3d,0xf8,0x12,0x70]
724 @ CHECK: ldrh.w r7, [sp, r2]            @ encoding: [0x3d,0xf8,0x02,0x70]
725 @ CHECK: ldrh   r5, [r8, #255]!         @ encoding: [0x38,0xf8,0xff,0x5f]
726 @ CHECK: ldrh   r2, [r5, #4]!           @ encoding: [0x35,0xf8,0x04,0x2f]
727 @ CHECK: ldrh   r1, [r4, #-4]!          @ encoding: [0x34,0xf8,0x04,0x1d]
728 @ CHECK: ldrh   lr, [r3], #255          @ encoding: [0x33,0xf8,0xff,0xeb]
729 @ CHECK: ldrh   r9, [r2], #4            @ encoding: [0x32,0xf8,0x04,0x9b]
730 @ CHECK: ldrh   r3, [sp], #-4           @ encoding: [0x3d,0xf8,0x04,0x39]
731
732
733 @------------------------------------------------------------------------------
734 @ LDRH(literal)
735 @------------------------------------------------------------------------------
736         ldrh r5, _bar
737
738 @ CHECK: ldrh.w r5, _bar                @ encoding: [0xbf'A',0xf8'A',A,0x50'A']
739 @ CHECK:     @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
740
741
742 @------------------------------------------------------------------------------
743 @ LDRSB(immediate)
744 @------------------------------------------------------------------------------
745         ldrsb r5, [r5, #-4]
746         ldrsb r5, [r6, #32]
747         ldrsb r5, [r6, #33]
748         ldrsb r5, [r6, #257]
749         ldrsb.w lr, [r7, #257]
750
751 @ CHECK: ldrsb  r5, [r5, #-4]            @ encoding: [0x15,0xf9,0x04,0x5c]
752 @ CHECK: ldrsb.w r5, [r6, #32]           @ encoding: [0x96,0xf9,0x20,0x50]
753 @ CHECK: ldrsb.w r5, [r6, #33]           @ encoding: [0x96,0xf9,0x21,0x50]
754 @ CHECK: ldrsb.w r5, [r6, #257]          @ encoding: [0x96,0xf9,0x01,0x51]
755 @ CHECK: ldrsb.w lr, [r7, #257]          @ encoding: [0x97,0xf9,0x01,0xe1]
756
757
758 @------------------------------------------------------------------------------
759 @ LDRSB(register)
760 @------------------------------------------------------------------------------
761         ldrsb r1, [r8, r1]
762         ldrsb.w r4, [r5, r2]
763         ldrsb r6, [r0, r2, lsl #3]
764         ldrsb r8, [r8, r2, lsl #2]
765         ldrsb r7, [sp, r2, lsl #1]
766         ldrsb r7, [sp, r2, lsl #0]
767         ldrsb r5, [r8, #255]!
768         ldrsb r2, [r5, #4]!
769         ldrsb r1, [r4, #-4]!
770         ldrsb lr, [r3], #255
771         ldrsb r9, [r2], #4
772         ldrsb r3, [sp], #-4
773
774 @ CHECK: ldrsb.w r1, [r8, r1]           @ encoding: [0x18,0xf9,0x01,0x10]
775 @ CHECK: ldrsb.w r4, [r5, r2]           @ encoding: [0x15,0xf9,0x02,0x40]
776 @ CHECK: ldrsb.w r6, [r0, r2, lsl #3]   @ encoding: [0x10,0xf9,0x32,0x60]
777 @ CHECK: ldrsb.w r8, [r8, r2, lsl #2]   @ encoding: [0x18,0xf9,0x22,0x80]
778 @ CHECK: ldrsb.w r7, [sp, r2, lsl #1]   @ encoding: [0x1d,0xf9,0x12,0x70]
779 @ CHECK: ldrsb.w r7, [sp, r2]           @ encoding: [0x1d,0xf9,0x02,0x70]
780 @ CHECK: ldrsb  r5, [r8, #255]!         @ encoding: [0x18,0xf9,0xff,0x5f]
781 @ CHECK: ldrsb  r2, [r5, #4]!           @ encoding: [0x15,0xf9,0x04,0x2f]
782 @ CHECK: ldrsb  r1, [r4, #-4]!          @ encoding: [0x14,0xf9,0x04,0x1d]
783 @ CHECK: ldrsb  lr, [r3], #255          @ encoding: [0x13,0xf9,0xff,0xeb]
784 @ CHECK: ldrsb  r9, [r2], #4            @ encoding: [0x12,0xf9,0x04,0x9b]
785 @ CHECK: ldrsb  r3, [sp], #-4           @ encoding: [0x1d,0xf9,0x04,0x39]
786
787
788 @------------------------------------------------------------------------------
789 @ LDRSB(literal)
790 @------------------------------------------------------------------------------
791         ldrsb r5, _bar
792
793 @ CHECK: ldrsb.w r5, _bar               @ encoding: [0x9f'A',0xf9'A',A,0x50'A']
794 @ CHECK:      @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
795
796
797 @------------------------------------------------------------------------------
798 @ LDRSBT
799 @------------------------------------------------------------------------------
800         ldrsbt r1, [r2]
801         ldrsbt r1, [r8, #0]
802         ldrsbt r1, [r8, #3]
803         ldrsbt r1, [r8, #255]
804
805 @ CHECK: ldrsbt r1, [r2]                @ encoding: [0x12,0xf9,0x00,0x1e]
806 @ CHECK: ldrsbt r1, [r8]                @ encoding: [0x18,0xf9,0x00,0x1e]
807 @ CHECK: ldrsbt r1, [r8, #3]            @ encoding: [0x18,0xf9,0x03,0x1e]
808 @ CHECK: ldrsbt r1, [r8, #255]          @ encoding: [0x18,0xf9,0xff,0x1e]
809
810
811 @------------------------------------------------------------------------------
812 @ LDRSH(immediate)
813 @------------------------------------------------------------------------------
814         ldrsh r5, [r5, #-4]
815         ldrsh r5, [r6, #32]
816         ldrsh r5, [r6, #33]
817         ldrsh r5, [r6, #257]
818         ldrsh.w lr, [r7, #257]
819
820 @ CHECK: ldrsh  r5, [r5, #-4]           @ encoding: [0x35,0xf9,0x04,0x5c]
821 @ CHECK: ldrsh.w r5, [r6, #32]          @ encoding: [0xb6,0xf9,0x20,0x50]
822 @ CHECK: ldrsh.w r5, [r6, #33]          @ encoding: [0xb6,0xf9,0x21,0x50]
823 @ CHECK: ldrsh.w r5, [r6, #257]         @ encoding: [0xb6,0xf9,0x01,0x51]
824 @ CHECK: ldrsh.w lr, [r7, #257]         @ encoding: [0xb7,0xf9,0x01,0xe1]
825
826
827 @------------------------------------------------------------------------------
828 @ LDRSH(register)
829 @------------------------------------------------------------------------------
830         ldrsh r1, [r8, r1]
831         ldrsh.w r4, [r5, r2]
832         ldrsh r6, [r0, r2, lsl #3]
833         ldrsh r8, [r8, r2, lsl #2]
834         ldrsh r7, [sp, r2, lsl #1]
835         ldrsh r7, [sp, r2, lsl #0]
836         ldrsh r5, [r8, #255]!
837         ldrsh r2, [r5, #4]!
838         ldrsh r1, [r4, #-4]!
839         ldrsh lr, [r3], #255
840         ldrsh r9, [r2], #4
841         ldrsh r3, [sp], #-4
842
843 @ CHECK: ldrsh.w r1, [r8, r1]           @ encoding: [0x38,0xf9,0x01,0x10]
844 @ CHECK: ldrsh.w r4, [r5, r2]           @ encoding: [0x35,0xf9,0x02,0x40]
845 @ CHECK: ldrsh.w r6, [r0, r2, lsl #3]   @ encoding: [0x30,0xf9,0x32,0x60]
846 @ CHECK: ldrsh.w r8, [r8, r2, lsl #2]   @ encoding: [0x38,0xf9,0x22,0x80]
847 @ CHECK: ldrsh.w r7, [sp, r2, lsl #1]   @ encoding: [0x3d,0xf9,0x12,0x70]
848 @ CHECK: ldrsh.w r7, [sp, r2]           @ encoding: [0x3d,0xf9,0x02,0x70]
849 @ CHECK: ldrsh  r5, [r8, #255]!         @ encoding: [0x38,0xf9,0xff,0x5f]
850 @ CHECK: ldrsh  r2, [r5, #4]!           @ encoding: [0x35,0xf9,0x04,0x2f]
851 @ CHECK: ldrsh  r1, [r4, #-4]!          @ encoding: [0x34,0xf9,0x04,0x1d]
852 @ CHECK: ldrsh  lr, [r3], #255          @ encoding: [0x33,0xf9,0xff,0xeb]
853 @ CHECK: ldrsh  r9, [r2], #4            @ encoding: [0x32,0xf9,0x04,0x9b]
854 @ CHECK: ldrsh  r3, [sp], #-4           @ encoding: [0x3d,0xf9,0x04,0x39]
855
856
857 @------------------------------------------------------------------------------
858 @ LDRSH(literal)
859 @------------------------------------------------------------------------------
860         ldrsh r5, _bar
861         ldrsh.w r4, #1435
862
863 @ CHECK: ldrsh.w r5, _bar               @ encoding: [0xbf'A',0xf9'A',A,0x50'A']
864 @ CHECK:      @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
865 @ CHECK: ldrsh.w r4, #1435               @ encoding: [0x3f,0xf9,0x9b,0x45]
866
867 @------------------------------------------------------------------------------
868 @ LDRSHT
869 @------------------------------------------------------------------------------
870         ldrsht r1, [r2]
871         ldrsht r1, [r8, #0]
872         ldrsht r1, [r8, #3]
873         ldrsht r1, [r8, #255]
874
875 @ CHECK: ldrsht r1, [r2]                @ encoding: [0x32,0xf9,0x00,0x1e]
876 @ CHECK: ldrsht r1, [r8]                @ encoding: [0x38,0xf9,0x00,0x1e]
877 @ CHECK: ldrsht r1, [r8, #3]            @ encoding: [0x38,0xf9,0x03,0x1e]
878 @ CHECK: ldrsht r1, [r8, #255]          @ encoding: [0x38,0xf9,0xff,0x1e]
879
880
881 @------------------------------------------------------------------------------
882 @ LDRT
883 @------------------------------------------------------------------------------
884         ldrt r1, [r2]
885         ldrt r2, [r6, #0]
886         ldrt r3, [r7, #3]
887         ldrt r4, [r9, #255]
888
889 @ CHECK: ldrt   r1, [r2]                @ encoding: [0x52,0xf8,0x00,0x1e]
890 @ CHECK: ldrt   r2, [r6]                @ encoding: [0x56,0xf8,0x00,0x2e]
891 @ CHECK: ldrt   r3, [r7, #3]            @ encoding: [0x57,0xf8,0x03,0x3e]
892 @ CHECK: ldrt   r4, [r9, #255]          @ encoding: [0x59,0xf8,0xff,0x4e]
893
894
895 @------------------------------------------------------------------------------
896 @ LSL (immediate)
897 @------------------------------------------------------------------------------
898         lsl r2, r3, #12
899         lsls r8, r3, #31
900         lsls.w r2, r3, #1
901         lsl r2, r3, #4
902         lsls r2, r12, #15
903
904         lsl r3, #19
905         lsls r8, #2
906         lsls.w r7, #5
907         lsl.w r12, #21
908
909 @ CHECK: lsl.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x03,0x32]
910 @ CHECK: lsls.w r8, r3, #31             @ encoding: [0x5f,0xea,0xc3,0x78]
911 @ CHECK: lsls.w r2, r3, #1              @ encoding: [0x5f,0xea,0x43,0x02]
912 @ CHECK: lsl.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x03,0x12]
913 @ CHECK: lsls.w r2, r12, #15            @ encoding: [0x5f,0xea,0xcc,0x32]
914
915 @ CHECK: lsl.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xc3,0x43]
916 @ CHECK: lsls.w r8, r8, #2              @ encoding: [0x5f,0xea,0x88,0x08]
917 @ CHECK: lsls.w r7, r7, #5              @ encoding: [0x5f,0xea,0x47,0x17]
918 @ CHECK: lsl.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x4c,0x5c]
919
920
921 @------------------------------------------------------------------------------
922 @ LSL (register)
923 @------------------------------------------------------------------------------
924         lsl r3, r4, r2
925         lsl.w r1, r2
926         lsls r3, r4, r8
927
928 @ CHECK: lsl.w  r3, r4, r2              @ encoding: [0x04,0xfa,0x02,0xf3]
929 @ CHECK: lsl.w  r1, r1, r2              @ encoding: [0x01,0xfa,0x02,0xf1]
930 @ CHECK: lsls.w r3, r4, r8              @ encoding: [0x14,0xfa,0x08,0xf3]
931
932
933 @------------------------------------------------------------------------------
934 @ LSR (immediate)
935 @------------------------------------------------------------------------------
936         lsr r2, r3, #12
937         lsrs r8, r3, #32
938         lsrs.w r2, r3, #1
939         lsr r2, r3, #4
940         lsrs r2, r12, #15
941
942         lsr r3, #19
943         lsrs r8, #2
944         lsrs.w r7, #5
945         lsr.w r12, #21
946
947 @ CHECK: lsr.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x13,0x32]
948 @ CHECK: lsrs.w r8, r3, #32             @ encoding: [0x5f,0xea,0x13,0x08]
949 @ CHECK: lsrs.w r2, r3, #1              @ encoding: [0x5f,0xea,0x53,0x02]
950 @ CHECK: lsr.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x13,0x12]
951 @ CHECK: lsrs.w r2, r12, #15            @ encoding: [0x5f,0xea,0xdc,0x32]
952
953 @ CHECK: lsr.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xd3,0x43]
954 @ CHECK: lsrs.w r8, r8, #2              @ encoding: [0x5f,0xea,0x98,0x08]
955 @ CHECK: lsrs.w r7, r7, #5              @ encoding: [0x5f,0xea,0x57,0x17]
956 @ CHECK: lsr.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x5c,0x5c]
957
958
959 @------------------------------------------------------------------------------
960 @ LSR (register)
961 @------------------------------------------------------------------------------
962         lsr r3, r4, r2
963         lsr.w r1, r2
964         lsrs r3, r4, r8
965
966 @ CHECK: lsr.w  r3, r4, r2              @ encoding: [0x24,0xfa,0x02,0xf3]
967 @ CHECK: lsr.w  r1, r1, r2              @ encoding: [0x21,0xfa,0x02,0xf1]
968 @ CHECK: lsrs.w r3, r4, r8              @ encoding: [0x34,0xfa,0x08,0xf3]
969
970 @------------------------------------------------------------------------------
971 @ MCR/MCR2
972 @------------------------------------------------------------------------------
973         mcr  p7, #1, r5, c1, c1, #4
974         mcr2  p7, #1, r5, c1, c1, #4
975
976 @ CHECK: mcr    p7, #1, r5, c1, c1, #4  @ encoding: [0x21,0xee,0x91,0x57]
977 @ CHECK: mcr2   p7, #1, r5, c1, c1, #4  @ encoding: [0x21,0xfe,0x91,0x57]
978
979
980 @------------------------------------------------------------------------------
981 @ MCRR/MCRR2
982 @------------------------------------------------------------------------------
983         mcrr  p7, #15, r5, r4, c1
984         mcrr2  p7, #15, r5, r4, c1
985
986 @ CHECK: mcrr   p7, #15, r5, r4, c1     @ encoding: [0x44,0xec,0xf1,0x57]
987 @ CHECK: mcrr2  p7, #15, r5, r4, c1     @ encoding: [0x44,0xfc,0xf1,0x57]
988
989
990 @------------------------------------------------------------------------------
991 @ MLA/MLS
992 @------------------------------------------------------------------------------
993         mla  r1,r2,r3,r4
994         mls  r1,r2,r3,r4
995
996 @ CHECK: mla    r1, r2, r3, r4          @ encoding: [0x02,0xfb,0x03,0x41]
997 @ CHECK: mls    r1, r2, r3, r4          @ encoding: [0x02,0xfb,0x13,0x41]
998
999
1000 @------------------------------------------------------------------------------
1001 @ MOV(immediate)
1002 @------------------------------------------------------------------------------
1003         movs r1, #21
1004         movs.w r1, #21
1005         movs r8, #21
1006         movw r0, #65535
1007         movw r1, #43777
1008         movw r1, #43792
1009         mov.w r0, #0x3fc0000
1010         mov r0, #0x3fc0000
1011         movs.w r0, #0x3fc0000
1012         itte eq
1013         movseq r1, #12
1014         moveq r1, #12
1015         movne.w r1, #12
1016
1017 @ CHECK: movs   r1, #21                 @ encoding: [0x15,0x21]
1018 @ CHECK: movs.w r1, #21                 @ encoding: [0x5f,0xf0,0x15,0x01]
1019 @ CHECK: movs.w r8, #21                 @ encoding: [0x5f,0xf0,0x15,0x08]
1020 @ CHECK: movw   r0, #65535              @ encoding: [0x4f,0xf6,0xff,0x70]
1021 @ CHECK: movw   r1, #43777              @ encoding: [0x4a,0xf6,0x01,0x31]
1022 @ CHECK: movw   r1, #43792              @ encoding: [0x4a,0xf6,0x10,0x31]
1023 @ CHECK: mov.w  r0, #66846720           @ encoding: [0x4f,0xf0,0x7f,0x70]
1024 @ CHECK: mov.w  r0, #66846720           @ encoding: [0x4f,0xf0,0x7f,0x70]
1025 @ CHECK: movs.w r0, #66846720           @ encoding: [0x5f,0xf0,0x7f,0x70]
1026 @ CHECK: itte   eq                      @ encoding: [0x06,0xbf]
1027 @ CHECK: movseq.w       r1, #12         @ encoding: [0x5f,0xf0,0x0c,0x01]
1028 @ CHECK: moveq  r1, #12                 @ encoding: [0x0c,0x21]
1029 @ CHECK: movne.w r1, #12                @ encoding: [0x4f,0xf0,0x0c,0x01]
1030
1031
1032 @------------------------------------------------------------------------------
1033 @ MOVT
1034 @------------------------------------------------------------------------------
1035         movt r3, #7
1036         movt r6, #0xffff
1037         it eq
1038         movteq r4, #0xff0
1039
1040 @ CHECK: movt   r3, #7                  @ encoding: [0xc0,0xf2,0x07,0x03]
1041 @ CHECK: movt   r6, #65535              @ encoding: [0xcf,0xf6,0xff,0x76]
1042 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1043 @ CHECK: movteq r4, #4080               @ encoding: [0xc0,0xf6,0xf0,0x74]
1044
1045 @------------------------------------------------------------------------------
1046 @ MRC/MRC2
1047 @------------------------------------------------------------------------------
1048         mrc  p14, #0, r1, c1, c2, #4
1049         mrc2  p14, #0, r1, c1, c2, #4
1050
1051 @ CHECK: mrc    p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xee,0x92,0x1e]
1052 @ CHECK: mrc2   p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xfe,0x92,0x1e]
1053
1054
1055 @------------------------------------------------------------------------------
1056 @ MRRC/MRRC2
1057 @------------------------------------------------------------------------------
1058         mrrc  p7, #1, r5, r4, c1
1059         mrrc2  p7, #1, r5, r4, c1
1060
1061 @ CHECK: mrrc   p7, #1, r5, r4, c1      @ encoding: [0x54,0xec,0x11,0x57]
1062 @ CHECK: mrrc2  p7, #1, r5, r4, c1      @ encoding: [0x54,0xfc,0x11,0x57]
1063
1064
1065 @------------------------------------------------------------------------------
1066 @ MRS
1067 @------------------------------------------------------------------------------
1068         mrs  r8, apsr
1069         mrs  r8, cpsr
1070         mrs  r8, spsr
1071
1072 @ CHECK: mrs    r8, apsr                @ encoding: [0xef,0xf3,0x00,0x88]
1073 @ CHECK: mrs    r8, apsr                @ encoding: [0xef,0xf3,0x00,0x88]
1074 @ CHECK: mrs    r8, spsr                @ encoding: [0xff,0xf3,0x00,0x88]
1075
1076
1077 @------------------------------------------------------------------------------
1078 @ MSR
1079 @------------------------------------------------------------------------------
1080         msr  apsr, r1
1081         msr  apsr_g, r2
1082         msr  apsr_nzcvq, r3
1083         msr  APSR_nzcvq, r4
1084         msr  apsr_nzcvqg, r5
1085         msr  cpsr_fc, r6
1086         msr  cpsr_c, r7
1087         msr  cpsr_x, r8
1088         msr  cpsr_fc, r9
1089         msr  cpsr_all, r11
1090         msr  cpsr_fsx, r12
1091         msr  spsr_fc, r0
1092         msr  SPSR_fsxc, r5
1093         msr  cpsr_fsxc, r8
1094
1095 @ CHECK: msr    APSR_nzcvq, r1          @ encoding: [0x81,0xf3,0x00,0x88]
1096 @ CHECK: msr    APSR_g, r2              @ encoding: [0x82,0xf3,0x00,0x84]
1097 @ CHECK: msr    APSR_nzcvq, r3          @ encoding: [0x83,0xf3,0x00,0x88]
1098 @ CHECK: msr    APSR_nzcvq, r4          @ encoding: [0x84,0xf3,0x00,0x88]
1099 @ CHECK: msr    APSR_nzcvqg, r5         @ encoding: [0x85,0xf3,0x00,0x8c]
1100 @ CHECK: msr    CPSR_fc, r6             @ encoding: [0x86,0xf3,0x00,0x89]
1101 @ CHECK: msr    CPSR_c, r7              @ encoding: [0x87,0xf3,0x00,0x81]
1102 @ CHECK: msr    CPSR_x, r8              @ encoding: [0x88,0xf3,0x00,0x82]
1103 @ CHECK: msr    CPSR_fc, r9             @ encoding: [0x89,0xf3,0x00,0x89]
1104 @ CHECK: msr    CPSR_fc, r11            @ encoding: [0x8b,0xf3,0x00,0x89]
1105 @ CHECK: msr    CPSR_fsx, r12           @ encoding: [0x8c,0xf3,0x00,0x8e]
1106 @ CHECK: msr    SPSR_fc, r0             @ encoding: [0x90,0xf3,0x00,0x89]
1107 @ CHECK: msr    SPSR_fsxc, r5           @ encoding: [0x95,0xf3,0x00,0x8f]
1108 @ CHECK: msr    CPSR_fsxc, r8           @ encoding: [0x88,0xf3,0x00,0x8f]
1109
1110
1111 @------------------------------------------------------------------------------
1112 @ MUL
1113 @------------------------------------------------------------------------------
1114         muls r3, r4, r3
1115         mul r3, r4, r3
1116         mul r3, r4, r6
1117         it eq
1118         muleq r3, r4, r5
1119
1120 @ CHECK: muls   r3, r4, r3              @ encoding: [0x63,0x43]
1121 @ CHECK: mul    r3, r4, r3              @ encoding: [0x04,0xfb,0x03,0xf3]
1122 @ CHECK: mul    r3, r4, r6              @ encoding: [0x04,0xfb,0x06,0xf3]
1123 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1124 @ CHECK: muleq  r3, r4, r5              @ encoding: [0x04,0xfb,0x05,0xf3]
1125
1126
1127 @------------------------------------------------------------------------------
1128 @ MVN(immediate)
1129 @------------------------------------------------------------------------------
1130         mvns r8, #21
1131         mvn r0, #0x3fc0000
1132         mvns r0, #0x3fc0000
1133         itte eq
1134         mvnseq r1, #12
1135         mvneq r1, #12
1136         mvnne r1, #12
1137
1138 @ CHECK: mvns   r8, #21                 @ encoding: [0x7f,0xf0,0x15,0x08]
1139 @ CHECK: mvn    r0, #66846720           @ encoding: [0x6f,0xf0,0x7f,0x70]
1140 @ CHECK: mvns   r0, #66846720           @ encoding: [0x7f,0xf0,0x7f,0x70]
1141 @ CHECK: itte   eq                      @ encoding: [0x06,0xbf]
1142 @ CHECK: mvnseq r1, #12                 @ encoding: [0x7f,0xf0,0x0c,0x01]
1143 @ CHECK: mvneq  r1, #12                 @ encoding: [0x6f,0xf0,0x0c,0x01]
1144 @ CHECK: mvnne  r1, #12                 @ encoding: [0x6f,0xf0,0x0c,0x01]
1145
1146
1147 @------------------------------------------------------------------------------
1148 @ MVN(register)
1149 @------------------------------------------------------------------------------
1150         mvn r2, r3
1151         mvns r2, r3
1152         mvn r5, r6, lsl #19
1153         mvn r5, r6, lsr #9
1154         mvn r5, r6, asr #4
1155         mvn r5, r6, ror #6
1156         mvn r5, r6, rrx
1157         it eq
1158         mvneq r2, r3
1159
1160 @ CHECK: mvn.w  r2, r3                  @ encoding: [0x6f,0xea,0x03,0x02]
1161 @ CHECK: mvns   r2, r3                  @ encoding: [0xda,0x43]
1162 @ CHECK: mvn.w  r5, r6, lsl #19         @ encoding: [0x6f,0xea,0xc6,0x45]
1163 @ CHECK: mvn.w  r5, r6, lsr #9          @ encoding: [0x6f,0xea,0x56,0x25]
1164 @ CHECK: mvn.w  r5, r6, asr #4          @ encoding: [0x6f,0xea,0x26,0x15]
1165 @ CHECK: mvn.w  r5, r6, ror #6          @ encoding: [0x6f,0xea,0xb6,0x15]
1166 @ CHECK: mvn.w  r5, r6, rrx             @ encoding: [0x6f,0xea,0x36,0x05]
1167 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1168 @ CHECK: mvneq  r2, r3                  @ encoding: [0xda,0x43]
1169
1170
1171 @------------------------------------------------------------------------------
1172 @ IT
1173 @------------------------------------------------------------------------------
1174 @ Test encodings of a few full IT blocks, not just the IT instruction
1175
1176         iteet eq
1177         addeq r0, r1, r2
1178         nopne
1179         subne r5, r6, r7
1180         addeq r1, r2, #4
1181
1182 @ CHECK: iteet  eq                      @ encoding: [0x0d,0xbf]
1183 @ CHECK: addeq  r0, r1, r2              @ encoding: [0x88,0x18]
1184 @ CHECK: nopne                          @ encoding: [0x00,0xbf]
1185 @ CHECK: subne  r5, r6, r7              @ encoding: [0xf5,0x1b]
1186 @ CHECK: addeq  r1, r2, #4              @ encoding: [0x11,0x1d]
1187
1188 @------------------------------------------------------------------------------
1189 @ SUB (register)
1190 @------------------------------------------------------------------------------
1191         sub.w r5, r2, r12, rrx
1192
1193 @ CHECK: sub.w r5, r2, r12, rrx        @ encoding: [0xa2,0xeb,0x3c,0x05]
1194