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