Added the B9.3.19 SUBS PC, LR, #imm (Thumb2) system instruction.
[oota-llvm.git] / test / MC / ARM / basic-thumb2-instructions.s
1 @ RUN: llvm-mc -triple=thumbv7-apple-darwin -mcpu=cortex-a8 -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         add r2, sp, ip
52
53 @ CHECK: adc.w  r4, r5, r6              @ encoding: [0x45,0xeb,0x06,0x04]
54 @ CHECK: adcs.w r4, r5, r6              @ encoding: [0x55,0xeb,0x06,0x04]
55 @ CHECK: adc.w  r9, r1, r3              @ encoding: [0x41,0xeb,0x03,0x09]
56 @ CHECK: adcs.w r9, r1, r3              @ encoding: [0x51,0xeb,0x03,0x09]
57 @ CHECK: adc.w  r0, r1, r3, ror #4      @ encoding: [0x41,0xeb,0x33,0x10]
58 @ CHECK: adcs.w r0, r1, r3, lsl #7      @ encoding: [0x51,0xeb,0xc3,0x10]
59 @ CHECK: adc.w  r0, r1, r3, lsr #31     @ encoding: [0x41,0xeb,0xd3,0x70]
60 @ CHECK: adcs.w r0, r1, r3, asr #32     @ encoding: [0x51,0xeb,0x23,0x00]
61 @ CHECK: add.w  r2, sp, r12             @ encoding: [0x0d,0xeb,0x0c,0x02]
62
63
64 @------------------------------------------------------------------------------
65 @ ADD (immediate)
66 @------------------------------------------------------------------------------
67         itet eq
68         addeq r1, r2, #4
69         addwne r5, r3, #1023
70         addeq r4, r5, #293
71         add r2, sp, #1024
72         add r2, r8, #0xff00
73         add r2, r3, #257
74         addw r2, r3, #257
75         add r12, r6, #0x100
76         addw r12, r6, #0x100
77         adds r1, r2, #0x1f0
78         add r2, #1
79         add r0, r0, #32
80         adds r2, r2, #56
81         adds r2, #56
82         add r1, r7, #0xcbcbcbcb
83
84         adds.w r2, #-16
85         adds.w r2, r2, #-16
86         addw r2, #-16
87         addw r2, #-16
88         addw r2, r2, #-16
89
90 @ CHECK: itet   eq                      @ encoding: [0x0a,0xbf]
91 @ CHECK: addeq  r1, r2, #4              @ encoding: [0x11,0x1d]
92 @ CHECK: addwne r5, r3, #1023           @ encoding: [0x03,0xf2,0xff,0x35]
93 @ CHECK: addweq r4, r5, #293            @ encoding: [0x05,0xf2,0x25,0x14]
94 @ CHECK: add.w  r2, sp, #1024           @ encoding: [0x0d,0xf5,0x80,0x62]
95 @ CHECK: add.w  r2, r8, #65280          @ encoding: [0x08,0xf5,0x7f,0x42]
96 @ CHECK: addw   r2, r3, #257            @ encoding: [0x03,0xf2,0x01,0x12]
97 @ CHECK: addw   r2, r3, #257            @ encoding: [0x03,0xf2,0x01,0x12]
98 @ CHECK: add.w  r12, r6, #256           @ encoding: [0x06,0xf5,0x80,0x7c]
99 @ CHECK: addw   r12, r6, #256           @ encoding: [0x06,0xf2,0x00,0x1c]
100 @ CHECK: adds.w r1, r2, #496            @ encoding: [0x12,0xf5,0xf8,0x71]
101 @ CHECK: add.w  r2, r2, #1              @ encoding: [0x02,0xf1,0x01,0x02]
102 @ CHECK: add.w  r0, r0, #32             @ encoding: [0x00,0xf1,0x20,0x00]
103 @ CHECK: adds   r2, #56                 @ encoding: [0x38,0x32]
104 @ CHECK: adds   r2, #56                 @ encoding: [0x38,0x32]
105 @ CHECK: add.w  r1, r7, #3419130827     @ encoding: [0x07,0xf1,0xcb,0x31]
106
107 @ CHECK: subs.w r2, r2, #16             @ encoding: [0xb2,0xf1,0x10,0x02]
108 @ CHECK: subs.w r2, r2, #16             @ encoding: [0xb2,0xf1,0x10,0x02]
109 @ CHECK: subw   r2, r2, #16             @ encoding: [0xa2,0xf2,0x10,0x02]
110 @ CHECK: subw   r2, r2, #16             @ encoding: [0xa2,0xf2,0x10,0x02]
111 @ CHECK: subw   r2, r2, #16             @ encoding: [0xa2,0xf2,0x10,0x02]
112
113
114 @------------------------------------------------------------------------------
115 @ ADD (register)
116 @------------------------------------------------------------------------------
117         add r1, r2, r8
118         add r5, r9, r2, asr #32
119         adds r7, r3, r1, lsl #31
120         adds.w r0, r3, r6, lsr #25
121         add.w r4, r8, r1, ror #12
122         add r10, r8
123         add r10, r10, r8
124
125 @ CHECK: add.w  r1, r2, r8              @ encoding: [0x02,0xeb,0x08,0x01]
126 @ CHECK: add.w  r5, r9, r2, asr #32     @ encoding: [0x09,0xeb,0x22,0x05]
127 @ CHECK: adds.w r7, r3, r1, lsl #31     @ encoding: [0x13,0xeb,0xc1,0x77]
128 @ CHECK: adds.w r0, r3, r6, lsr #25     @ encoding: [0x13,0xeb,0x56,0x60]
129 @ CHECK: add.w  r4, r8, r1, ror #12     @ encoding: [0x08,0xeb,0x31,0x34]
130 @ CHECK: add    r10, r8                 @ encoding: [0xc2,0x44]
131 @ CHECK: add    r10, r8                 @ encoding: [0xc2,0x44]
132
133
134 @------------------------------------------------------------------------------
135 @ FIXME: ADR
136 @------------------------------------------------------------------------------
137
138         subw r11, pc, #3270
139         adr.w r2, #3
140         adr.w r11, #-826
141         adr.w r1, #-0x0
142
143 @ CHECK: subw  r11, pc, #3270          @ encoding: [0xaf,0xf6,0xc6,0x4b]
144 @ CHECK: adr.w r2, #3                  @ encoding: [0x0f,0xf2,0x03,0x02]
145 @ CHECK: adr.w r11, #-826              @ encoding: [0xaf,0xf2,0x3a,0x3b]
146 @ CHECK: adr.w r1, #-0                 @ encoding: [0xaf,0xf2,0x00,0x01]
147
148 @------------------------------------------------------------------------------
149 @ AND (immediate)
150 @------------------------------------------------------------------------------
151         and r2, r5, #0xff000
152         ands r3, r12, #0xf
153         and r1, #0xff
154         and r1, r1, #0xff
155
156 @ CHECK: and    r2, r5, #1044480        @ encoding: [0x05,0xf4,0x7f,0x22]
157 @ CHECK: ands   r3, r12, #15            @ encoding: [0x1c,0xf0,0x0f,0x03]
158 @ CHECK: and    r1, r1, #255            @ encoding: [0x01,0xf0,0xff,0x01]
159 @ CHECK: and    r1, r1, #255            @ encoding: [0x01,0xf0,0xff,0x01]
160
161
162 @------------------------------------------------------------------------------
163 @ AND (register)
164 @------------------------------------------------------------------------------
165         and r4, r9, r8
166         and r1, r4, r8, asr #3
167         ands r2, r1, r7, lsl #1
168         ands.w r4, r5, r2, lsr #20
169         and.w r9, r12, r1, ror #17
170
171 @ CHECK: and.w  r4, r9, r8              @ encoding: [0x09,0xea,0x08,0x04]
172 @ CHECK: and.w  r1, r4, r8, asr #3      @ encoding: [0x04,0xea,0xe8,0x01]
173 @ CHECK: ands.w r2, r1, r7, lsl #1      @ encoding: [0x11,0xea,0x47,0x02]
174 @ CHECK: ands.w r4, r5, r2, lsr #20     @ encoding: [0x15,0xea,0x12,0x54]
175 @ CHECK: and.w  r9, r12, r1, ror #17    @ encoding: [0x0c,0xea,0x71,0x49]
176
177 @------------------------------------------------------------------------------
178 @ ASR (immediate)
179 @------------------------------------------------------------------------------
180         asr r2, r3, #12
181         asrs r8, r3, #32
182         asrs.w r2, r3, #1
183         asr r2, r3, #4
184         asrs r2, r12, #15
185
186         asr r3, #19
187         asrs r8, #2
188         asrs.w r7, #5
189         asr.w r12, #21
190
191 @ CHECK: asr.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x23,0x32]
192 @ CHECK: asrs.w r8, r3, #32             @ encoding: [0x5f,0xea,0x23,0x08]
193 @ CHECK: asrs.w r2, r3, #1              @ encoding: [0x5f,0xea,0x63,0x02]
194 @ CHECK: asr.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x23,0x12]
195 @ CHECK: asrs.w r2, r12, #15            @ encoding: [0x5f,0xea,0xec,0x32]
196
197 @ CHECK: asr.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xe3,0x43]
198 @ CHECK: asrs.w r8, r8, #2              @ encoding: [0x5f,0xea,0xa8,0x08]
199 @ CHECK: asrs.w r7, r7, #5              @ encoding: [0x5f,0xea,0x67,0x17]
200 @ CHECK: asr.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x6c,0x5c]
201
202
203 @------------------------------------------------------------------------------
204 @ ASR (register)
205 @------------------------------------------------------------------------------
206         asr r3, r4, r2
207         asr.w r1, r2
208         asrs r3, r4, r8
209
210 @ CHECK: asr.w  r3, r4, r2              @ encoding: [0x44,0xfa,0x02,0xf3]
211 @ CHECK: asr.w  r1, r1, r2              @ encoding: [0x41,0xfa,0x02,0xf1]
212 @ CHECK: asrs.w r3, r4, r8              @ encoding: [0x54,0xfa,0x08,0xf3]
213
214
215 @------------------------------------------------------------------------------
216 @ B
217 @------------------------------------------------------------------------------
218         b.w   _bar
219         beq.w   _bar
220         it eq
221         beq.w _bar
222         bmi.w   #-183396
223
224 @ CHECK: b.w    _bar                    @ encoding: [A,0xf0'A',A,0x90'A']
225           @   fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch
226 @ CHECK: beq.w  _bar                    @ encoding: [A,0xf0'A',A,0x80'A']
227           @   fixup A - offset: 0, value: _bar, kind: fixup_t2_condbranch
228 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
229 @ CHECK: beq.w  _bar                    @ encoding: [A,0xf0'A',A,0x90'A']
230           @   fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch
231 @ CHECK: bmi.w   #-183396                @ encoding: [0x13,0xf5,0xce,0xa9]
232
233
234 @------------------------------------------------------------------------------
235 @ BFC
236 @------------------------------------------------------------------------------
237         bfc r5, #3, #17
238         it lo
239         bfccc r5, #3, #17
240
241 @ CHECK: bfc    r5, #3, #17             @ encoding: [0x6f,0xf3,0xd3,0x05]
242 @ CHECK: it     lo                      @ encoding: [0x38,0xbf]
243 @ CHECK: bfclo  r5, #3, #17             @ encoding: [0x6f,0xf3,0xd3,0x05]
244
245
246 @------------------------------------------------------------------------------
247 @ BFI
248 @------------------------------------------------------------------------------
249         bfi r5, r2, #3, #17
250         it ne
251         bfine r5, r2, #3, #17
252
253 @ CHECK: bfi    r5, r2, #3, #17         @ encoding: [0x62,0xf3,0xd3,0x05]
254 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
255 @ CHECK: bfine  r5, r2, #3, #17         @ encoding: [0x62,0xf3,0xd3,0x05]
256
257
258 @------------------------------------------------------------------------------
259 @ BIC
260 @------------------------------------------------------------------------------
261         bic r10, r1, #0xf
262         bic r12, r3, r6
263         bic r11, r2, r6, lsl #12
264         bic r8, r4, r1, lsr #11
265         bic r7, r5, r7, lsr #15
266         bic r6, r7, r9, asr #32
267         bic r5, r6, r8, ror #1
268
269         @ destination register is optional
270         bic r1, #0xf
271         bic r1, r1
272         bic r4, r2, lsl #31
273         bic r6, r3, lsr #12
274         bic r7, r4, lsr #7
275         bic r8, r5, asr #15
276         bic r12, r6, ror #29
277
278 @ CHECK: bic    r10, r1, #15            @ encoding: [0x21,0xf0,0x0f,0x0a]
279 @ CHECK: bic.w  r12, r3, r6             @ encoding: [0x23,0xea,0x06,0x0c]
280 @ CHECK: bic.w  r11, r2, r6, lsl #12    @ encoding: [0x22,0xea,0x06,0x3b]
281 @ CHECK: bic.w  r8, r4, r1, lsr #11     @ encoding: [0x24,0xea,0xd1,0x28]
282 @ CHECK: bic.w  r7, r5, r7, lsr #15     @ encoding: [0x25,0xea,0xd7,0x37]
283 @ CHECK: bic.w  r6, r7, r9, asr #32     @ encoding: [0x27,0xea,0x29,0x06]
284 @ CHECK: bic.w  r5, r6, r8, ror #1      @ encoding: [0x26,0xea,0x78,0x05]
285
286 @ CHECK: bic    r1, r1, #15             @ encoding: [0x21,0xf0,0x0f,0x01]
287 @ CHECK: bic.w  r1, r1, r1              @ encoding: [0x21,0xea,0x01,0x01]
288 @ CHECK: bic.w  r4, r4, r2, lsl #31     @ encoding: [0x24,0xea,0xc2,0x74]
289 @ CHECK: bic.w  r6, r6, r3, lsr #12     @ encoding: [0x26,0xea,0x13,0x36]
290 @ CHECK: bic.w  r7, r7, r4, lsr #7      @ encoding: [0x27,0xea,0xd4,0x17]
291 @ CHECK: bic.w  r8, r8, r5, asr #15     @ encoding: [0x28,0xea,0xe5,0x38]
292 @ CHECK: bic.w  r12, r12, r6, ror #29   @ encoding: [0x2c,0xea,0x76,0x7c]
293
294 @------------------------------------------------------------------------------
295 @ BKPT
296 @------------------------------------------------------------------------------
297         it pl
298         bkpt #234
299
300 @ CHECK: it pl                      @ encoding: [0x58,0xbf]
301 @ CHECK: bkpt #234                    @ encoding: [0xea,0xbe]
302
303 @------------------------------------------------------------------------------
304 @ BXJ
305 @------------------------------------------------------------------------------
306         bxj r5
307         it ne
308         bxjne r7
309
310 @ CHECK: bxj    r5                      @ encoding: [0xc5,0xf3,0x00,0x8f]
311 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
312 @ CHECK: bxjne  r7                      @ encoding: [0xc7,0xf3,0x00,0x8f]
313
314
315 @------------------------------------------------------------------------------
316 @ CBZ/CBNZ
317 @------------------------------------------------------------------------------
318         cbnz    r7, #6
319         cbnz    r7, #12
320         cbz   r6, _bar
321         cbnz   r6, _bar
322
323 @ CHECK: cbnz    r7, #6                  @ encoding: [0x1f,0xb9]
324 @ CHECK: cbnz    r7, #12                 @ encoding: [0x37,0xb9]
325 @ CHECK: cbz    r6, _bar                @ encoding: [0x06'A',0xb1'A']
326            @   fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
327 @ CHECK: cbnz   r6, _bar                @ encoding: [0x06'A',0xb9'A']
328            @   fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
329
330
331 @------------------------------------------------------------------------------
332 @ CDP/CDP2
333 @------------------------------------------------------------------------------
334   cdp  p7, #1, c1, c1, c1, #4
335   cdp2  p7, #1, c1, c1, c1, #4
336
337 @ CHECK: cdp    p7, #1, c1, c1, c1, #4  @ encoding: [0x11,0xee,0x81,0x17]
338 @ CHECK: cdp2   p7, #1, c1, c1, c1, #4  @ encoding: [0x11,0xfe,0x81,0x17]
339
340
341 @------------------------------------------------------------------------------
342 @ CLREX
343 @------------------------------------------------------------------------------
344         clrex
345         it ne
346         clrexne
347
348 @ CHECK: clrex                           @ encoding: [0xbf,0xf3,0x2f,0x8f]
349 @ CHECK: it     ne                       @ encoding: [0x18,0xbf]
350 @ CHECK: clrexne                         @ encoding: [0xbf,0xf3,0x2f,0x8f]
351
352
353 @------------------------------------------------------------------------------
354 @ CLZ
355 @------------------------------------------------------------------------------
356         clz r1, r2
357         it eq
358         clzeq r1, r2
359
360 @ CHECK: clz    r1, r2                  @ encoding: [0xb2,0xfa,0x82,0xf1]
361 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
362 @ CHECK: clzeq  r1, r2                  @ encoding: [0xb2,0xfa,0x82,0xf1]
363
364
365 @------------------------------------------------------------------------------
366 @ CMN
367 @------------------------------------------------------------------------------
368         cmn r1, #0xf
369         cmn r8, r6
370         cmn r1, r6, lsl #10
371         cmn r1, r6, lsr #10
372         cmn sp, r6, lsr #10
373         cmn r1, r6, asr #10
374         cmn r1, r6, ror #10
375
376 @ CHECK: cmn.w  r1, #15                 @ encoding: [0x11,0xf1,0x0f,0x0f]
377 @ CHECK: cmn.w  r8, r6                  @ encoding: [0x18,0xeb,0x06,0x0f]
378 @ CHECK: cmn.w  r1, r6, lsl #10         @ encoding: [0x11,0xeb,0x86,0x2f]
379 @ CHECK: cmn.w  r1, r6, lsr #10         @ encoding: [0x11,0xeb,0x96,0x2f]
380 @ CHECK: cmn.w  sp, r6, lsr #10         @ encoding: [0x1d,0xeb,0x96,0x2f]
381 @ CHECK: cmn.w  r1, r6, asr #10         @ encoding: [0x11,0xeb,0xa6,0x2f]
382 @ CHECK: cmn.w  r1, r6, ror #10         @ encoding: [0x11,0xeb,0xb6,0x2f]
383
384
385 @------------------------------------------------------------------------------
386 @ CMP
387 @------------------------------------------------------------------------------
388         cmp r5, #0xff00
389         cmp.w r4, r12
390         cmp r9, r6, lsl #12
391         cmp r3, r7, lsr #31
392         cmp sp, r6, lsr #1
393         cmp r2, r5, asr #24
394         cmp r1, r4, ror #15
395         cmp r2, #-2
396         cmp r9, #1
397
398 @ CHECK: cmp.w  r5, #65280              @ encoding: [0xb5,0xf5,0x7f,0x4f]
399 @ CHECK: cmp.w  r4, r12                 @ encoding: [0xb4,0xeb,0x0c,0x0f]
400 @ CHECK: cmp.w  r9, r6, lsl #12         @ encoding: [0xb9,0xeb,0x06,0x3f]
401 @ CHECK: cmp.w  r3, r7, lsr #31         @ encoding: [0xb3,0xeb,0xd7,0x7f]
402 @ CHECK: cmp.w  sp, r6, lsr #1          @ encoding: [0xbd,0xeb,0x56,0x0f]
403 @ CHECK: cmp.w  r2, r5, asr #24         @ encoding: [0xb2,0xeb,0x25,0x6f]
404 @ CHECK: cmp.w  r1, r4, ror #15         @ encoding: [0xb1,0xeb,0xf4,0x3f]
405 @ CHECK: cmn.w  r2, #2                  @ encoding: [0x12,0xf1,0x02,0x0f]
406 @ CHECK: cmp.w  r9, #1                  @ encoding: [0xb9,0xf1,0x01,0x0f]
407
408
409 @------------------------------------------------------------------------------
410 @ DBG
411 @------------------------------------------------------------------------------
412         dbg #5
413         dbg #0
414         dbg #15
415
416 @ CHECK: dbg    #5                      @ encoding: [0xaf,0xf3,0xf5,0x80]
417 @ CHECK: dbg    #0                      @ encoding: [0xaf,0xf3,0xf0,0x80]
418 @ CHECK: dbg    #15                     @ encoding: [0xaf,0xf3,0xff,0x80]
419
420
421 @------------------------------------------------------------------------------
422 @ DMB
423 @------------------------------------------------------------------------------
424         dmb #0xf
425         dmb #0xe
426         dmb #0xd
427         dmb #0xc
428         dmb #0xb
429         dmb #0xa
430         dmb #0x9
431         dmb #0x8
432         dmb #0x7
433         dmb #0x6
434         dmb #0x5
435         dmb #0x4
436         dmb #0x3
437         dmb #0x2
438         dmb #0x1
439         dmb #0x0
440
441         dmb sy
442         dmb st
443         dmb sh
444         dmb ish
445         dmb shst
446         dmb ishst
447         dmb un
448         dmb nsh
449         dmb unst
450         dmb nshst
451         dmb osh
452         dmb oshst
453         dmb
454
455 @ CHECK: dmb    sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
456 @ CHECK: dmb    st                      @ encoding: [0xbf,0xf3,0x5e,0x8f]
457 @ CHECK: dmb    #0xd                    @ encoding: [0xbf,0xf3,0x5d,0x8f]
458 @ CHECK: dmb    #0xc                    @ encoding: [0xbf,0xf3,0x5c,0x8f]
459 @ CHECK: dmb    ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
460 @ CHECK: dmb    ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
461 @ CHECK: dmb    #0x9                    @ encoding: [0xbf,0xf3,0x59,0x8f]
462 @ CHECK: dmb    #0x8                    @ encoding: [0xbf,0xf3,0x58,0x8f]
463 @ CHECK: dmb    nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
464 @ CHECK: dmb    nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
465 @ CHECK: dmb    #0x5                    @ encoding: [0xbf,0xf3,0x55,0x8f]
466 @ CHECK: dmb    #0x4                    @ encoding: [0xbf,0xf3,0x54,0x8f]
467 @ CHECK: dmb    osh                     @ encoding: [0xbf,0xf3,0x53,0x8f]
468 @ CHECK: dmb    oshst                   @ encoding: [0xbf,0xf3,0x52,0x8f]
469 @ CHECK: dmb    #0x1                    @ encoding: [0xbf,0xf3,0x51,0x8f]
470 @ CHECK: dmb    #0x0                    @ encoding: [0xbf,0xf3,0x50,0x8f]
471
472 @ CHECK: dmb    sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
473 @ CHECK: dmb    st                      @ encoding: [0xbf,0xf3,0x5e,0x8f]
474 @ CHECK: dmb    ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
475 @ CHECK: dmb    ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
476 @ CHECK: dmb    ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
477 @ CHECK: dmb    ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
478 @ CHECK: dmb    nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
479 @ CHECK: dmb    nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
480 @ CHECK: dmb    nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
481 @ CHECK: dmb    nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
482 @ CHECK: dmb    osh                     @ encoding: [0xbf,0xf3,0x53,0x8f]
483 @ CHECK: dmb    oshst                   @ encoding: [0xbf,0xf3,0x52,0x8f]
484 @ CHECK: dmb    sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
485
486
487 @------------------------------------------------------------------------------
488 @ DSB
489 @------------------------------------------------------------------------------
490         dsb #0xf
491         dsb #0xe
492         dsb #0xd
493         dsb #0xc
494         dsb #0xb
495         dsb #0xa
496         dsb #0x9
497         dsb #0x8
498         dsb #0x7
499         dsb #0x6
500         dsb #0x5
501         dsb #0x4
502         dsb #0x3
503         dsb #0x2
504         dsb #0x1
505         dsb #0x0
506
507         dsb sy
508         dsb st
509         dsb sh
510         dsb ish
511         dsb shst
512         dsb ishst
513         dsb un
514         dsb nsh
515         dsb unst
516         dsb nshst
517         dsb osh
518         dsb oshst
519         dsb
520
521 @ CHECK: dsb    sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
522 @ CHECK: dsb    st                      @ encoding: [0xbf,0xf3,0x4e,0x8f]
523 @ CHECK: dsb    #0xd                    @ encoding: [0xbf,0xf3,0x4d,0x8f]
524 @ CHECK: dsb    #0xc                    @ encoding: [0xbf,0xf3,0x4c,0x8f]
525 @ CHECK: dsb    ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
526 @ CHECK: dsb    ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
527 @ CHECK: dsb    #0x9                    @ encoding: [0xbf,0xf3,0x49,0x8f]
528 @ CHECK: dsb    #0x8                    @ encoding: [0xbf,0xf3,0x48,0x8f]
529 @ CHECK: dsb    nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
530 @ CHECK: dsb    nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
531 @ CHECK: dsb    #0x5                    @ encoding: [0xbf,0xf3,0x45,0x8f]
532 @ CHECK: dsb    #0x4                    @ encoding: [0xbf,0xf3,0x44,0x8f]
533 @ CHECK: dsb    osh                     @ encoding: [0xbf,0xf3,0x43,0x8f]
534 @ CHECK: dsb    oshst                   @ encoding: [0xbf,0xf3,0x42,0x8f]
535 @ CHECK: dsb    #0x1                    @ encoding: [0xbf,0xf3,0x41,0x8f]
536 @ CHECK: dsb    #0x0                    @ encoding: [0xbf,0xf3,0x40,0x8f]
537
538 @ CHECK: dsb    sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
539 @ CHECK: dsb    st                      @ encoding: [0xbf,0xf3,0x4e,0x8f]
540 @ CHECK: dsb    ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
541 @ CHECK: dsb    ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
542 @ CHECK: dsb    ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
543 @ CHECK: dsb    ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
544 @ CHECK: dsb    nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
545 @ CHECK: dsb    nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
546 @ CHECK: dsb    nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
547 @ CHECK: dsb    nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
548 @ CHECK: dsb    osh                     @ encoding: [0xbf,0xf3,0x43,0x8f]
549 @ CHECK: dsb    oshst                   @ encoding: [0xbf,0xf3,0x42,0x8f]
550 @ CHECK: dsb    sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
551
552
553 @------------------------------------------------------------------------------
554 @ EOR
555 @------------------------------------------------------------------------------
556         eor r4, r5, #0xf000
557         eor r4, r5, r6
558         eor r4, r5, r6, lsl #5
559         eor r4, r5, r6, lsr #5
560         eor r4, r5, r6, lsr #5
561         eor r4, r5, r6, asr #5
562         eor r4, r5, r6, ror #5
563
564 @ CHECK: eor    r4, r5, #61440          @ encoding: [0x85,0xf4,0x70,0x44]
565 @ CHECK: eor.w  r4, r5, r6              @ encoding: [0x85,0xea,0x06,0x04]
566 @ CHECK: eor.w  r4, r5, r6, lsl #5      @ encoding: [0x85,0xea,0x46,0x14]
567 @ CHECK: eor.w  r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
568 @ CHECK: eor.w  r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
569 @ CHECK: eor.w  r4, r5, r6, asr #5      @ encoding: [0x85,0xea,0x66,0x14]
570 @ CHECK: eor.w  r4, r5, r6, ror #5      @ encoding: [0x85,0xea,0x76,0x14]
571
572
573 @------------------------------------------------------------------------------
574 @ ISB
575 @------------------------------------------------------------------------------
576         isb sy
577         isb
578         isb #15
579         isb #1
580
581 @ CHECK: isb    sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
582 @ CHECK: isb    sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
583 @ CHECK: isb    sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
584 @ CHECK: isb    #0x1                    @ encoding: [0xbf,0xf3,0x61,0x8f]
585
586
587 @------------------------------------------------------------------------------
588 @ IT
589 @------------------------------------------------------------------------------
590 @ Test encodings of a few full IT blocks, not just the IT instruction
591
592         iteet eq
593         addeq r0, r1, r2
594         nopne
595         subne r5, r6, r7
596         addeq r1, r2, #4
597
598 @ CHECK: iteet  eq                      @ encoding: [0x0d,0xbf]
599 @ CHECK: addeq  r0, r1, r2              @ encoding: [0x88,0x18]
600 @ CHECK: nopne                          @ encoding: [0x00,0xbf]
601 @ CHECK: subne  r5, r6, r7              @ encoding: [0xf5,0x1b]
602 @ CHECK: addeq  r1, r2, #4              @ encoding: [0x11,0x1d]
603
604 @ Should also work for UPPER CASE condition codes.
605
606         ITEET EQ
607         ADDEQ R0, R1, R2
608         NOPNE
609         SUBNE R5, R6, R7
610         ADDEQ R1, R2, #4
611
612 @ CHECK: iteet  eq                      @ encoding: [0x0d,0xbf]
613 @ CHECK: addeq  r0, r1, r2              @ encoding: [0x88,0x18]
614 @ CHECK: nopne                          @ encoding: [0x00,0xbf]
615 @ CHECK: subne  r5, r6, r7              @ encoding: [0xf5,0x1b]
616 @ CHECK: addeq  r1, r2, #4              @ encoding: [0x11,0x1d]
617
618 @------------------------------------------------------------------------------
619 @ LDC{L}/LDC2{L}
620 @------------------------------------------------------------------------------
621         ldc2 p0, c8, [r1, #4]
622         ldc2 p1, c7, [r2]
623         ldc2 p2, c6, [r3, #-224]
624         ldc2 p3, c5, [r4, #-120]!
625         ldc2 p4, c4, [r5], #16
626         ldc2 p5, c3, [r6], #-72
627         ldc2l p6, c2, [r7, #4]
628         ldc2l p7, c1, [r8]
629         ldc2l p8, c0, [r9, #-224]
630         ldc2l p9, c1, [r10, #-120]!
631         ldc2l p10, c2, [r11], #16
632         ldc2l p11, c3, [r12], #-72
633
634         ldc p12, c4, [r0, #4]
635         ldc p13, c5, [r1]
636         ldc p14, c6, [r2, #-224]
637         ldc p15, c7, [r3, #-120]!
638         ldc p5, c8, [r4], #16
639         ldc p4, c9, [r5], #-72
640         ldcl p3, c10, [r6, #4]
641         ldcl p2, c11, [r7]
642         ldcl p1, c12, [r8, #-224]
643         ldcl p0, c13, [r9, #-120]!
644         ldcl p6, c14, [r10], #16
645         ldcl p7, c15, [r11], #-72
646
647         ldc2 p2, c8, [r1], { 25 }
648
649 @ CHECK: ldc2   p0, c8, [r1, #4]        @ encoding: [0x91,0xfd,0x01,0x80]
650 @ CHECK: ldc2   p1, c7, [r2]            @ encoding: [0x92,0xfd,0x00,0x71]
651 @ CHECK: ldc2   p2, c6, [r3, #-224]     @ encoding: [0x13,0xfd,0x38,0x62]
652 @ CHECK: ldc2   p3, c5, [r4, #-120]!    @ encoding: [0x34,0xfd,0x1e,0x53]
653 @ CHECK: ldc2   p4, c4, [r5], #16       @ encoding: [0xb5,0xfc,0x04,0x44]
654 @ CHECK: ldc2   p5, c3, [r6], #-72      @ encoding: [0x36,0xfc,0x12,0x35]
655 @ CHECK: ldc2l  p6, c2, [r7, #4]        @ encoding: [0xd7,0xfd,0x01,0x26]
656 @ CHECK: ldc2l  p7, c1, [r8]            @ encoding: [0xd8,0xfd,0x00,0x17]
657 @ CHECK: ldc2l  p8, c0, [r9, #-224]     @ encoding: [0x59,0xfd,0x38,0x08]
658 @ CHECK: ldc2l  p9, c1, [r10, #-120]!   @ encoding: [0x7a,0xfd,0x1e,0x19]
659 @ CHECK: ldc2l  p10, c2, [r11], #16     @ encoding: [0xfb,0xfc,0x04,0x2a]
660 @ CHECK: ldc2l  p11, c3, [r12], #-72    @ encoding: [0x7c,0xfc,0x12,0x3b]
661
662 @ CHECK: ldc    p12, c4, [r0, #4]       @ encoding: [0x90,0xed,0x01,0x4c]
663 @ CHECK: ldc    p13, c5, [r1]           @ encoding: [0x91,0xed,0x00,0x5d]
664 @ CHECK: ldc    p14, c6, [r2, #-224]    @ encoding: [0x12,0xed,0x38,0x6e]
665 @ CHECK: ldc    p15, c7, [r3, #-120]!   @ encoding: [0x33,0xed,0x1e,0x7f]
666 @ CHECK: ldc    p5, c8, [r4], #16       @ encoding: [0xb4,0xec,0x04,0x85]
667 @ CHECK: ldc    p4, c9, [r5], #-72      @ encoding: [0x35,0xec,0x12,0x94]
668 @ CHECK: ldcl   p3, c10, [r6, #4]       @ encoding: [0xd6,0xed,0x01,0xa3]
669 @ CHECK: ldcl   p2, c11, [r7]           @ encoding: [0xd7,0xed,0x00,0xb2]
670 @ CHECK: ldcl   p1, c12, [r8, #-224]    @ encoding: [0x58,0xed,0x38,0xc1]
671 @ CHECK: ldcl   p0, c13, [r9, #-120]!   @ encoding: [0x79,0xed,0x1e,0xd0]
672 @ CHECK: ldcl   p6, c14, [r10], #16     @ encoding: [0xfa,0xec,0x04,0xe6]
673 @ CHECK: ldcl   p7, c15, [r11], #-72    @ encoding: [0x7b,0xec,0x12,0xf7]
674
675 @ CHECK: ldc2   p2, c8, [r1], {25}      @ encoding: [0x91,0xfc,0x19,0x82]
676
677
678 @------------------------------------------------------------------------------
679 @ LDMIA
680 @------------------------------------------------------------------------------
681         ldmia.w r4, {r4, r5, r8, r9}
682         ldmia.w r4, {r5, r6}
683         ldmia.w r5!, {r3, r8}
684         ldm.w r4, {r4, r5, r8, r9}
685         ldm.w r4, {r5, r6}
686         ldm.w r5!, {r3, r8}
687         ldm.w r5!, {r1, r2}
688         ldm.w r2, {r1, r2}
689
690         ldmia r4, {r4, r5, r8, r9}
691         ldmia r4, {r5, r6}
692         ldmia r5!, {r3, r8}
693         ldm r4, {r4, r5, r8, r9}
694         ldm r4, {r5, r6}
695         ldm r5!, {r3, r8}
696         ldmfd r5!, {r3, r8}
697         ldmia sp!, {r4-r11, pc}
698
699 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
700 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
701 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
702 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
703 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
704 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
705 @ CHECK: ldm.w  r5!, {r1, r2}           @ encoding: [0xb5,0xe8,0x06,0x00]
706 @ CHECK: ldm.w  r2, {r1, r2}            @ encoding: [0x92,0xe8,0x06,0x00]
707
708 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
709 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
710 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
711 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
712 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
713 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
714 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
715 @ CHECK: pop.w  {r4, r5, r6, r7, r8, r9, r10, r11, pc} @ encoding: [0xbd,0xe8,0xf0,0x8f]
716
717
718 @------------------------------------------------------------------------------
719 @ LDMDB
720 @------------------------------------------------------------------------------
721         ldmdb r4, {r4, r5, r8, r9}
722         ldmdb r4, {r5, r6}
723         ldmdb r5!, {r3, r8}
724         ldmea r5!, {r3, r8}
725         ldmdb.w r4, {r5, r6}
726         ldmdb.w r5!, {r3, r8}
727
728 @ CHECK: ldmdb  r4, {r4, r5, r8, r9}    @ encoding: [0x14,0xe9,0x30,0x03]
729 @ CHECK: ldmdb  r4, {r5, r6}            @ encoding: [0x14,0xe9,0x60,0x00]
730 @ CHECK: ldmdb  r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
731 @ CHECK: ldmdb  r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
732 @ CHECK: ldmdb  r4, {r5, r6}            @ encoding: [0x14,0xe9,0x60,0x00]
733 @ CHECK: ldmdb  r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
734
735
736 @------------------------------------------------------------------------------
737 @ LDR(immediate)
738 @------------------------------------------------------------------------------
739         ldr r5, [r5, #-4]
740         ldr r5, [r6, #32]
741         ldr r5, [r6, #33]
742         ldr r5, [r6, #257]
743         ldr.w pc, [r7, #257]
744         ldr r2, [r4, #255]!
745         ldr r8, [sp, #4]!
746         ldr lr, [sp, #-4]!
747         ldr r2, [r4], #255
748         ldr r8, [sp], #4
749         ldr lr, [sp], #-4
750
751 @ CHECK: ldr    r5, [r5, #-4]           @ encoding: [0x55,0xf8,0x04,0x5c]
752 @ CHECK: ldr    r5, [r6, #32]           @ encoding: [0x35,0x6a]
753 @ CHECK: ldr.w  r5, [r6, #33]           @ encoding: [0xd6,0xf8,0x21,0x50]
754 @ CHECK: ldr.w  r5, [r6, #257]          @ encoding: [0xd6,0xf8,0x01,0x51]
755 @ CHECK: ldr.w  pc, [r7, #257]          @ encoding: [0xd7,0xf8,0x01,0xf1]
756 @ CHECK: ldr    r2, [r4, #255]!         @ encoding: [0x54,0xf8,0xff,0x2f]
757 @ CHECK: ldr    r8, [sp, #4]!           @ encoding: [0x5d,0xf8,0x04,0x8f]
758 @ CHECK: ldr    lr, [sp, #-4]!          @ encoding: [0x5d,0xf8,0x04,0xed]
759 @ CHECK: ldr    r2, [r4], #255          @ encoding: [0x54,0xf8,0xff,0x2b]
760 @ CHECK: ldr    r8, [sp], #4            @ encoding: [0x5d,0xf8,0x04,0x8b]
761 @ CHECK: ldr    lr, [sp], #-4           @ encoding: [0x5d,0xf8,0x04,0xe9]
762
763
764 @------------------------------------------------------------------------------
765 @ LDR(literal)
766 @------------------------------------------------------------------------------
767         ldr.w r5, _foo
768         ldr   lr, (_strcmp-4)
769
770 @ CHECK: ldr.w  r5, _foo                @ encoding: [0x5f'A',0xf8'A',A,0x50'A']
771 @ CHECK: @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
772 @ CHECK: ldr.w  lr, _strcmp-4           @ encoding: [0x5f'A',0xf8'A',A,0xe0'A']
773 @ CHECK: @   fixup A - offset: 0, value: _strcmp-4, kind: fixup_t2_ldst_pcrel_12
774
775         ldr r4, [pc, #1020]
776         ldr r3, [pc, #-1020]
777         ldr r6, [pc, #1024]
778         ldr r0, [pc, #-1024]
779         ldr r2, [pc, #4095]
780         ldr r1, [pc, #-4095]
781         ldr.n r8, [pc, #132]
782         ldr.w r8, [pc, #132]
783
784 @ CHECK: ldr    r4, [pc, #1020]       @ encoding: [0xff,0x4c]
785 @ CHECK: ldr    r3, [pc, #-1020]      @ encoding: [0x01,0x4b]
786 @ CHECK: ldr.w  r6, [pc, #1024]       @ encoding: [0xdf,0xf8,0x00,0x64]
787 @ CHECK: ldr.w  r0, [pc, #-1024]      @ encoding: [0x5f,0xf8,0x00,0x04]
788 @ CHECK: ldr.w  r2, [pc, #4095]       @ encoding: [0xdf,0xf8,0xff,0x2f]
789 @ CHECK: ldr.w  r1, [pc, #-4095]      @ encoding: [0x5f,0xf8,0xff,0x1f]
790 @ CHECK: ldr    r8, [pc, #132]        @ encoding: [0x21,0x48]
791 @ CHECK: ldr.w  r8, [pc, #132]        @ encoding: [0xdf,0xf8,0x84,0x80]
792
793 @------------------------------------------------------------------------------
794 @ LDR(register)
795 @------------------------------------------------------------------------------
796         ldr r1, [r8, r1]
797         ldr.w r4, [r5, r2]
798         ldr r6, [r0, r2, lsl #3]
799         ldr r8, [r8, r2, lsl #2]
800         ldr r7, [sp, r2, lsl #1]
801         ldr r7, [sp, r2, lsl #0]
802
803 @ CHECK: ldr.w  r1, [r8, r1]            @ encoding: [0x58,0xf8,0x01,0x10]
804 @ CHECK: ldr.w  r4, [r5, r2]            @ encoding: [0x55,0xf8,0x02,0x40]
805 @ CHECK: ldr.w  r6, [r0, r2, lsl #3]    @ encoding: [0x50,0xf8,0x32,0x60]
806 @ CHECK: ldr.w  r8, [r8, r2, lsl #2]    @ encoding: [0x58,0xf8,0x22,0x80]
807 @ CHECK: ldr.w  r7, [sp, r2, lsl #1]    @ encoding: [0x5d,0xf8,0x12,0x70]
808 @ CHECK: ldr.w  r7, [sp, r2]            @ encoding: [0x5d,0xf8,0x02,0x70]
809
810
811 @------------------------------------------------------------------------------
812 @ LDRB(immediate)
813 @------------------------------------------------------------------------------
814         ldrb r5, [r5, #-4]
815         ldrb r5, [r6, #32]
816         ldrb r5, [r6, #33]
817         ldrb r5, [r6, #257]
818         ldrb.w lr, [r7, #257]
819         ldrb r5, [r8, #255]!
820         ldrb r2, [r5, #4]!
821         ldrb r1, [r4, #-4]!
822         ldrb lr, [r3], #255
823         ldrb r9, [r2], #4
824         ldrb r3, [sp], #-4
825
826 @ CHECK: ldrb   r5, [r5, #-4]           @ encoding: [0x15,0xf8,0x04,0x5c]
827 @ CHECK: ldrb.w r5, [r6, #32]           @ encoding: [0x96,0xf8,0x20,0x50]
828 @ CHECK: ldrb.w r5, [r6, #33]           @ encoding: [0x96,0xf8,0x21,0x50]
829 @ CHECK: ldrb.w r5, [r6, #257]          @ encoding: [0x96,0xf8,0x01,0x51]
830 @ CHECK: ldrb.w lr, [r7, #257]          @ encoding: [0x97,0xf8,0x01,0xe1]
831 @ CHECK: ldrb   r5, [r8, #255]!         @ encoding: [0x18,0xf8,0xff,0x5f]
832 @ CHECK: ldrb   r2, [r5, #4]!           @ encoding: [0x15,0xf8,0x04,0x2f]
833 @ CHECK: ldrb   r1, [r4, #-4]!          @ encoding: [0x14,0xf8,0x04,0x1d]
834 @ CHECK: ldrb   lr, [r3], #255          @ encoding: [0x13,0xf8,0xff,0xeb]
835 @ CHECK: ldrb   r9, [r2], #4            @ encoding: [0x12,0xf8,0x04,0x9b]
836 @ CHECK: ldrb   r3, [sp], #-4           @ encoding: [0x1d,0xf8,0x04,0x39]
837
838
839 @------------------------------------------------------------------------------
840 @ LDRB(register)
841 @------------------------------------------------------------------------------
842         ldrb r1, [r8, r1]
843         ldrb.w r4, [r5, r2]
844         ldrb r6, [r0, r2, lsl #3]
845         ldrb r8, [r8, r2, lsl #2]
846         ldrb r7, [sp, r2, lsl #1]
847         ldrb r7, [sp, r2, lsl #0]
848
849 @ CHECK: ldrb.w r1, [r8, r1]            @ encoding: [0x18,0xf8,0x01,0x10]
850 @ CHECK: ldrb.w r4, [r5, r2]            @ encoding: [0x15,0xf8,0x02,0x40]
851 @ CHECK: ldrb.w r6, [r0, r2, lsl #3]    @ encoding: [0x10,0xf8,0x32,0x60]
852 @ CHECK: ldrb.w r8, [r8, r2, lsl #2]    @ encoding: [0x18,0xf8,0x22,0x80]
853 @ CHECK: ldrb.w r7, [sp, r2, lsl #1]    @ encoding: [0x1d,0xf8,0x12,0x70]
854 @ CHECK: ldrb.w r7, [sp, r2]            @ encoding: [0x1d,0xf8,0x02,0x70]
855
856
857 @------------------------------------------------------------------------------
858 @ LDRBT
859 @------------------------------------------------------------------------------
860         ldrbt r1, [r2]
861         ldrbt r1, [r8, #0]
862         ldrbt r1, [r8, #3]
863         ldrbt r1, [r8, #255]
864
865 @ CHECK: ldrbt  r1, [r2]                @ encoding: [0x12,0xf8,0x00,0x1e]
866 @ CHECK: ldrbt  r1, [r8]                @ encoding: [0x18,0xf8,0x00,0x1e]
867 @ CHECK: ldrbt  r1, [r8, #3]            @ encoding: [0x18,0xf8,0x03,0x1e]
868 @ CHECK: ldrbt  r1, [r8, #255]          @ encoding: [0x18,0xf8,0xff,0x1e]
869
870
871 @------------------------------------------------------------------------------
872 @ LDRD
873 @------------------------------------------------------------------------------
874         ldrd r3, r5, [r6, #24]
875         ldrd r3, r5, [r6, #24]!
876         ldrd r3, r5, [r6], #4
877         ldrd r3, r5, [r6], #-8
878         ldrd r3, r5, [r6]
879         ldrd r8, r1, [r3, #0]
880         ldrd r0, r1, [r2, #-0]
881         ldrd r0, r1, [r2, #-0]!
882         ldrd r0, r1, [r2], #-0
883
884 @ CHECK: ldrd   r3, r5, [r6, #24]       @ encoding: [0xd6,0xe9,0x06,0x35]
885 @ CHECK: ldrd   r3, r5, [r6, #24]!      @ encoding: [0xf6,0xe9,0x06,0x35]
886 @ CHECK: ldrd   r3, r5, [r6], #4        @ encoding: [0xf6,0xe8,0x01,0x35]
887 @ CHECK: ldrd   r3, r5, [r6], #-8       @ encoding: [0x76,0xe8,0x02,0x35]
888 @ CHECK: ldrd   r3, r5, [r6]            @ encoding: [0xd6,0xe9,0x00,0x35]
889 @ CHECK: ldrd   r8, r1, [r3]            @ encoding: [0xd3,0xe9,0x00,0x81]
890 @ CHECK: ldrd   r0, r1, [r2, #-0]       @ encoding: [0x52,0xe9,0x00,0x01]
891 @ CHECK: ldrd   r0, r1, [r2, #-0]!      @ encoding: [0x72,0xe9,0x00,0x01]
892 @ CHECK: ldrd   r0, r1, [r2], #-0       @ encoding: [0x72,0xe8,0x00,0x01]
893
894
895 @------------------------------------------------------------------------------
896 @ FIXME: LDRD(literal)
897 @------------------------------------------------------------------------------
898
899
900 @------------------------------------------------------------------------------
901 @ LDREX/LDREXB/LDREXH/LDREXD
902 @------------------------------------------------------------------------------
903         ldrex r1, [r4]
904         ldrex r8, [r4, #0]
905         ldrex r2, [sp, #128]
906         ldrexb r5, [r7]
907         ldrexh r9, [r12]
908         ldrexd r9, r3, [r4]
909
910 @ CHECK: ldrex  r1, [r4]                @ encoding: [0x54,0xe8,0x00,0x1f]
911 @ CHECK: ldrex  r8, [r4]                @ encoding: [0x54,0xe8,0x00,0x8f]
912 @ CHECK: ldrex  r2, [sp, #128]          @ encoding: [0x5d,0xe8,0x20,0x2f]
913 @ CHECK: ldrexb r5, [r7]                @ encoding: [0xd7,0xe8,0x4f,0x5f]
914 @ CHECK: ldrexh r9, [r12]               @ encoding: [0xdc,0xe8,0x5f,0x9f]
915 @ CHECK: ldrexd r9, r3, [r4]            @ encoding: [0xd4,0xe8,0x7f,0x93]
916
917
918 @------------------------------------------------------------------------------
919 @ LDRH(immediate)
920 @------------------------------------------------------------------------------
921         ldrh r5, [r5, #-4]
922         ldrh r5, [r6, #32]
923         ldrh r5, [r6, #33]
924         ldrh r5, [r6, #257]
925         ldrh.w lr, [r7, #257]
926         ldrh r5, [r8, #255]!
927         ldrh r2, [r5, #4]!
928         ldrh r1, [r4, #-4]!
929         ldrh lr, [r3], #255
930         ldrh r9, [r2], #4
931         ldrh r3, [sp], #-4
932
933 @ CHECK: ldrh   r5, [r5, #-4]           @ encoding: [0x35,0xf8,0x04,0x5c]
934 @ CHECK: ldrh   r5, [r6, #32]           @ encoding: [0x35,0x8c]
935 @ CHECK: ldrh.w r5, [r6, #33]           @ encoding: [0xb6,0xf8,0x21,0x50]
936 @ CHECK: ldrh.w r5, [r6, #257]          @ encoding: [0xb6,0xf8,0x01,0x51]
937 @ CHECK: ldrh.w lr, [r7, #257]          @ encoding: [0xb7,0xf8,0x01,0xe1]
938 @ CHECK: ldrh   r5, [r8, #255]!         @ encoding: [0x38,0xf8,0xff,0x5f]
939 @ CHECK: ldrh   r2, [r5, #4]!           @ encoding: [0x35,0xf8,0x04,0x2f]
940 @ CHECK: ldrh   r1, [r4, #-4]!          @ encoding: [0x34,0xf8,0x04,0x1d]
941 @ CHECK: ldrh   lr, [r3], #255          @ encoding: [0x33,0xf8,0xff,0xeb]
942 @ CHECK: ldrh   r9, [r2], #4            @ encoding: [0x32,0xf8,0x04,0x9b]
943 @ CHECK: ldrh   r3, [sp], #-4           @ encoding: [0x3d,0xf8,0x04,0x39]
944
945
946 @------------------------------------------------------------------------------
947 @ LDRH(register)
948 @------------------------------------------------------------------------------
949         ldrh r1, [r8, r1]
950         ldrh.w r4, [r5, r2]
951         ldrh r6, [r0, r2, lsl #3]
952         ldrh r8, [r8, r2, lsl #2]
953         ldrh r7, [sp, r2, lsl #1]
954         ldrh r7, [sp, r2, lsl #0]
955
956 @ CHECK: ldrh.w r1, [r8, r1]            @ encoding: [0x38,0xf8,0x01,0x10]
957 @ CHECK: ldrh.w r4, [r5, r2]            @ encoding: [0x35,0xf8,0x02,0x40]
958 @ CHECK: ldrh.w r6, [r0, r2, lsl #3]    @ encoding: [0x30,0xf8,0x32,0x60]
959 @ CHECK: ldrh.w r8, [r8, r2, lsl #2]    @ encoding: [0x38,0xf8,0x22,0x80]
960 @ CHECK: ldrh.w r7, [sp, r2, lsl #1]    @ encoding: [0x3d,0xf8,0x12,0x70]
961 @ CHECK: ldrh.w r7, [sp, r2]            @ encoding: [0x3d,0xf8,0x02,0x70]
962
963
964 @------------------------------------------------------------------------------
965 @ LDRH(literal)
966 @------------------------------------------------------------------------------
967         ldrh r5, _bar
968
969 @ CHECK: ldrh.w r5, _bar                @ encoding: [0x3f'A',0xf8'A',A,0x50'A']
970 @ CHECK:     @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
971
972
973 @------------------------------------------------------------------------------
974 @ LDRHT
975 @------------------------------------------------------------------------------
976         ldrht r1, [r2]
977         ldrht r1, [r8, #0]
978         ldrht r1, [r8, #3]
979         ldrht r1, [r8, #255]
980
981 @ CHECK: ldrht  r1, [r2]                @ encoding: [0x32,0xf8,0x00,0x1e]
982 @ CHECK: ldrht  r1, [r8]                @ encoding: [0x38,0xf8,0x00,0x1e]
983 @ CHECK: ldrht  r1, [r8, #3]            @ encoding: [0x38,0xf8,0x03,0x1e]
984 @ CHECK: ldrht  r1, [r8, #255]          @ encoding: [0x38,0xf8,0xff,0x1e]
985
986
987 @------------------------------------------------------------------------------
988 @ LDRSB(immediate)
989 @------------------------------------------------------------------------------
990         ldrsb r5, [r5, #-4]
991         ldrsb r5, [r6, #32]
992         ldrsb r5, [r6, #33]
993         ldrsb r5, [r6, #257]
994         ldrsb.w lr, [r7, #257]
995
996 @ CHECK: ldrsb  r5, [r5, #-4]            @ encoding: [0x15,0xf9,0x04,0x5c]
997 @ CHECK: ldrsb.w r5, [r6, #32]           @ encoding: [0x96,0xf9,0x20,0x50]
998 @ CHECK: ldrsb.w r5, [r6, #33]           @ encoding: [0x96,0xf9,0x21,0x50]
999 @ CHECK: ldrsb.w r5, [r6, #257]          @ encoding: [0x96,0xf9,0x01,0x51]
1000 @ CHECK: ldrsb.w lr, [r7, #257]          @ encoding: [0x97,0xf9,0x01,0xe1]
1001
1002
1003 @------------------------------------------------------------------------------
1004 @ LDRSB(register)
1005 @------------------------------------------------------------------------------
1006         ldrsb r1, [r8, r1]
1007         ldrsb.w r4, [r5, r2]
1008         ldrsb r6, [r0, r2, lsl #3]
1009         ldrsb r8, [r8, r2, lsl #2]
1010         ldrsb r7, [sp, r2, lsl #1]
1011         ldrsb r7, [sp, r2, lsl #0]
1012         ldrsb r5, [r8, #255]!
1013         ldrsb r2, [r5, #4]!
1014         ldrsb r1, [r4, #-4]!
1015         ldrsb lr, [r3], #255
1016         ldrsb r9, [r2], #4
1017         ldrsb r3, [sp], #-4
1018
1019 @ CHECK: ldrsb.w r1, [r8, r1]           @ encoding: [0x18,0xf9,0x01,0x10]
1020 @ CHECK: ldrsb.w r4, [r5, r2]           @ encoding: [0x15,0xf9,0x02,0x40]
1021 @ CHECK: ldrsb.w r6, [r0, r2, lsl #3]   @ encoding: [0x10,0xf9,0x32,0x60]
1022 @ CHECK: ldrsb.w r8, [r8, r2, lsl #2]   @ encoding: [0x18,0xf9,0x22,0x80]
1023 @ CHECK: ldrsb.w r7, [sp, r2, lsl #1]   @ encoding: [0x1d,0xf9,0x12,0x70]
1024 @ CHECK: ldrsb.w r7, [sp, r2]           @ encoding: [0x1d,0xf9,0x02,0x70]
1025 @ CHECK: ldrsb  r5, [r8, #255]!         @ encoding: [0x18,0xf9,0xff,0x5f]
1026 @ CHECK: ldrsb  r2, [r5, #4]!           @ encoding: [0x15,0xf9,0x04,0x2f]
1027 @ CHECK: ldrsb  r1, [r4, #-4]!          @ encoding: [0x14,0xf9,0x04,0x1d]
1028 @ CHECK: ldrsb  lr, [r3], #255          @ encoding: [0x13,0xf9,0xff,0xeb]
1029 @ CHECK: ldrsb  r9, [r2], #4            @ encoding: [0x12,0xf9,0x04,0x9b]
1030 @ CHECK: ldrsb  r3, [sp], #-4           @ encoding: [0x1d,0xf9,0x04,0x39]
1031
1032
1033 @------------------------------------------------------------------------------
1034 @ LDRSB(literal)
1035 @------------------------------------------------------------------------------
1036         ldrsb r5, _bar
1037
1038 @ CHECK: ldrsb.w r5, _bar               @ encoding: [0x1f'A',0xf9'A',A,0x50'A']
1039 @ CHECK:      @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
1040
1041
1042 @------------------------------------------------------------------------------
1043 @ LDRSBT
1044 @------------------------------------------------------------------------------
1045         ldrsbt r1, [r2]
1046         ldrsbt r1, [r8, #0]
1047         ldrsbt r1, [r8, #3]
1048         ldrsbt r1, [r8, #255]
1049
1050 @ CHECK: ldrsbt r1, [r2]                @ encoding: [0x12,0xf9,0x00,0x1e]
1051 @ CHECK: ldrsbt r1, [r8]                @ encoding: [0x18,0xf9,0x00,0x1e]
1052 @ CHECK: ldrsbt r1, [r8, #3]            @ encoding: [0x18,0xf9,0x03,0x1e]
1053 @ CHECK: ldrsbt r1, [r8, #255]          @ encoding: [0x18,0xf9,0xff,0x1e]
1054
1055
1056 @------------------------------------------------------------------------------
1057 @ LDRSH(immediate)
1058 @------------------------------------------------------------------------------
1059         ldrsh r5, [r5, #-4]
1060         ldrsh r5, [r6, #32]
1061         ldrsh r5, [r6, #33]
1062         ldrsh r5, [r6, #257]
1063         ldrsh.w lr, [r7, #257]
1064
1065 @ CHECK: ldrsh  r5, [r5, #-4]           @ encoding: [0x35,0xf9,0x04,0x5c]
1066 @ CHECK: ldrsh.w r5, [r6, #32]          @ encoding: [0xb6,0xf9,0x20,0x50]
1067 @ CHECK: ldrsh.w r5, [r6, #33]          @ encoding: [0xb6,0xf9,0x21,0x50]
1068 @ CHECK: ldrsh.w r5, [r6, #257]         @ encoding: [0xb6,0xf9,0x01,0x51]
1069 @ CHECK: ldrsh.w lr, [r7, #257]         @ encoding: [0xb7,0xf9,0x01,0xe1]
1070
1071
1072 @------------------------------------------------------------------------------
1073 @ LDRSH(register)
1074 @------------------------------------------------------------------------------
1075         ldrsh r1, [r8, r1]
1076         ldrsh.w r4, [r5, r2]
1077         ldrsh r6, [r0, r2, lsl #3]
1078         ldrsh r8, [r8, r2, lsl #2]
1079         ldrsh r7, [sp, r2, lsl #1]
1080         ldrsh r7, [sp, r2, lsl #0]
1081         ldrsh r5, [r8, #255]!
1082         ldrsh r2, [r5, #4]!
1083         ldrsh r1, [r4, #-4]!
1084         ldrsh lr, [r3], #255
1085         ldrsh r9, [r2], #4
1086         ldrsh r3, [sp], #-4
1087
1088 @ CHECK: ldrsh.w r1, [r8, r1]           @ encoding: [0x38,0xf9,0x01,0x10]
1089 @ CHECK: ldrsh.w r4, [r5, r2]           @ encoding: [0x35,0xf9,0x02,0x40]
1090 @ CHECK: ldrsh.w r6, [r0, r2, lsl #3]   @ encoding: [0x30,0xf9,0x32,0x60]
1091 @ CHECK: ldrsh.w r8, [r8, r2, lsl #2]   @ encoding: [0x38,0xf9,0x22,0x80]
1092 @ CHECK: ldrsh.w r7, [sp, r2, lsl #1]   @ encoding: [0x3d,0xf9,0x12,0x70]
1093 @ CHECK: ldrsh.w r7, [sp, r2]           @ encoding: [0x3d,0xf9,0x02,0x70]
1094 @ CHECK: ldrsh  r5, [r8, #255]!         @ encoding: [0x38,0xf9,0xff,0x5f]
1095 @ CHECK: ldrsh  r2, [r5, #4]!           @ encoding: [0x35,0xf9,0x04,0x2f]
1096 @ CHECK: ldrsh  r1, [r4, #-4]!          @ encoding: [0x34,0xf9,0x04,0x1d]
1097 @ CHECK: ldrsh  lr, [r3], #255          @ encoding: [0x33,0xf9,0xff,0xeb]
1098 @ CHECK: ldrsh  r9, [r2], #4            @ encoding: [0x32,0xf9,0x04,0x9b]
1099 @ CHECK: ldrsh  r3, [sp], #-4           @ encoding: [0x3d,0xf9,0x04,0x39]
1100
1101
1102 @------------------------------------------------------------------------------
1103 @ LDRSH(literal)
1104 @------------------------------------------------------------------------------
1105         ldrsh r5, _bar
1106
1107 @ CHECK: ldrsh.w r5, _bar               @ encoding: [0x3f'A',0xf9'A',A,0x50'A']
1108 @ CHECK:      @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
1109
1110 @ TEMPORARILY DISABLED:
1111 @        ldrsh.w r4, [pc, #1435]
1112 @      : ldrsh.w r4, [pc, #1435]               @ encoding: [0x3f,0xf9,0x9b,0x45]
1113
1114 @------------------------------------------------------------------------------
1115 @ LDRSHT
1116 @------------------------------------------------------------------------------
1117         ldrsht r1, [r2]
1118         ldrsht r1, [r8, #0]
1119         ldrsht r1, [r8, #3]
1120         ldrsht r1, [r8, #255]
1121
1122 @ CHECK: ldrsht r1, [r2]                @ encoding: [0x32,0xf9,0x00,0x1e]
1123 @ CHECK: ldrsht r1, [r8]                @ encoding: [0x38,0xf9,0x00,0x1e]
1124 @ CHECK: ldrsht r1, [r8, #3]            @ encoding: [0x38,0xf9,0x03,0x1e]
1125 @ CHECK: ldrsht r1, [r8, #255]          @ encoding: [0x38,0xf9,0xff,0x1e]
1126
1127
1128 @------------------------------------------------------------------------------
1129 @ LDRT
1130 @------------------------------------------------------------------------------
1131         ldrt r1, [r2]
1132         ldrt r2, [r6, #0]
1133         ldrt r3, [r7, #3]
1134         ldrt r4, [r9, #255]
1135
1136 @ CHECK: ldrt   r1, [r2]                @ encoding: [0x52,0xf8,0x00,0x1e]
1137 @ CHECK: ldrt   r2, [r6]                @ encoding: [0x56,0xf8,0x00,0x2e]
1138 @ CHECK: ldrt   r3, [r7, #3]            @ encoding: [0x57,0xf8,0x03,0x3e]
1139 @ CHECK: ldrt   r4, [r9, #255]          @ encoding: [0x59,0xf8,0xff,0x4e]
1140
1141
1142 @------------------------------------------------------------------------------
1143 @ LSL (immediate)
1144 @------------------------------------------------------------------------------
1145         lsl r2, r3, #12
1146         lsls r8, r3, #31
1147         lsls.w r2, r3, #1
1148         lsl r2, r3, #4
1149         lsls r2, r12, #15
1150
1151         lsl r3, #19
1152         lsls r8, #2
1153         lsls.w r7, #5
1154         lsl.w r12, #21
1155
1156 @ CHECK: lsl.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x03,0x32]
1157 @ CHECK: lsls.w r8, r3, #31             @ encoding: [0x5f,0xea,0xc3,0x78]
1158 @ CHECK: lsls.w r2, r3, #1              @ encoding: [0x5f,0xea,0x43,0x02]
1159 @ CHECK: lsl.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x03,0x12]
1160 @ CHECK: lsls.w r2, r12, #15            @ encoding: [0x5f,0xea,0xcc,0x32]
1161
1162 @ CHECK: lsl.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xc3,0x43]
1163 @ CHECK: lsls.w r8, r8, #2              @ encoding: [0x5f,0xea,0x88,0x08]
1164 @ CHECK: lsls.w r7, r7, #5              @ encoding: [0x5f,0xea,0x47,0x17]
1165 @ CHECK: lsl.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x4c,0x5c]
1166
1167
1168 @------------------------------------------------------------------------------
1169 @ LSL (register)
1170 @------------------------------------------------------------------------------
1171         lsl r3, r4, r2
1172         lsl.w r1, r2
1173         lsls r3, r4, r8
1174
1175 @ CHECK: lsl.w  r3, r4, r2              @ encoding: [0x04,0xfa,0x02,0xf3]
1176 @ CHECK: lsl.w  r1, r1, r2              @ encoding: [0x01,0xfa,0x02,0xf1]
1177 @ CHECK: lsls.w r3, r4, r8              @ encoding: [0x14,0xfa,0x08,0xf3]
1178
1179
1180 @------------------------------------------------------------------------------
1181 @ LSR (immediate)
1182 @------------------------------------------------------------------------------
1183         lsr r2, r3, #12
1184         lsrs r8, r3, #32
1185         lsrs.w r2, r3, #1
1186         lsr r2, r3, #4
1187         lsrs r2, r12, #15
1188
1189         lsr r3, #19
1190         lsrs r8, #2
1191         lsrs.w r7, #5
1192         lsr.w r12, #21
1193
1194 @ CHECK: lsr.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x13,0x32]
1195 @ CHECK: lsrs.w r8, r3, #32             @ encoding: [0x5f,0xea,0x13,0x08]
1196 @ CHECK: lsrs.w r2, r3, #1              @ encoding: [0x5f,0xea,0x53,0x02]
1197 @ CHECK: lsr.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x13,0x12]
1198 @ CHECK: lsrs.w r2, r12, #15            @ encoding: [0x5f,0xea,0xdc,0x32]
1199
1200 @ CHECK: lsr.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xd3,0x43]
1201 @ CHECK: lsrs.w r8, r8, #2              @ encoding: [0x5f,0xea,0x98,0x08]
1202 @ CHECK: lsrs.w r7, r7, #5              @ encoding: [0x5f,0xea,0x57,0x17]
1203 @ CHECK: lsr.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x5c,0x5c]
1204
1205
1206 @------------------------------------------------------------------------------
1207 @ LSR (register)
1208 @------------------------------------------------------------------------------
1209         lsr r3, r4, r2
1210         lsr.w r1, r2
1211         lsrs r3, r4, r8
1212
1213 @ CHECK: lsr.w  r3, r4, r2              @ encoding: [0x24,0xfa,0x02,0xf3]
1214 @ CHECK: lsr.w  r1, r1, r2              @ encoding: [0x21,0xfa,0x02,0xf1]
1215 @ CHECK: lsrs.w r3, r4, r8              @ encoding: [0x34,0xfa,0x08,0xf3]
1216
1217 @------------------------------------------------------------------------------
1218 @ MCR/MCR2
1219 @------------------------------------------------------------------------------
1220         mcr  p7, #1, r5, c1, c1, #4
1221         mcr2  p7, #1, r5, c1, c1, #4
1222         mcr p14, #0, r4, c0, c5
1223         mcr2 p4, #2, r2, c1, c3
1224
1225 @ CHECK: mcr    p7, #1, r5, c1, c1, #4  @ encoding: [0x21,0xee,0x91,0x57]
1226 @ CHECK: mcr2   p7, #1, r5, c1, c1, #4  @ encoding: [0x21,0xfe,0x91,0x57]
1227 @ CHECK: mcr    p14, #0, r4, c0, c5, #0 @ encoding: [0x00,0xee,0x15,0x4e]
1228 @ CHECK: mcr2   p4, #2, r2, c1, c3, #0  @ encoding: [0x41,0xfe,0x13,0x24]
1229
1230
1231 @------------------------------------------------------------------------------
1232 @ MCRR/MCRR2
1233 @------------------------------------------------------------------------------
1234         mcrr  p7, #15, r5, r4, c1
1235         mcrr2  p7, #15, r5, r4, c1
1236
1237 @ CHECK: mcrr   p7, #15, r5, r4, c1     @ encoding: [0x44,0xec,0xf1,0x57]
1238 @ CHECK: mcrr2  p7, #15, r5, r4, c1     @ encoding: [0x44,0xfc,0xf1,0x57]
1239
1240
1241 @------------------------------------------------------------------------------
1242 @ MLA/MLS
1243 @------------------------------------------------------------------------------
1244         mla  r1,r2,r3,r4
1245         mls  r1,r2,r3,r4
1246
1247 @ CHECK: mla    r1, r2, r3, r4          @ encoding: [0x02,0xfb,0x03,0x41]
1248 @ CHECK: mls    r1, r2, r3, r4          @ encoding: [0x02,0xfb,0x13,0x41]
1249
1250
1251 @------------------------------------------------------------------------------
1252 @ MOV(immediate)
1253 @------------------------------------------------------------------------------
1254         movs r1, #21
1255         movs.w r1, #21
1256         movs r8, #21
1257         movw r0, #65535
1258         movw r1, #43777
1259         movw r1, #43792
1260         mov.w r0, #0x3fc0000
1261         mov r0, #0x3fc0000
1262         movs.w r0, #0x3fc0000
1263         itte eq
1264         movseq r1, #12
1265         moveq r1, #12
1266         movne.w r1, #12
1267         mov.w r6, #450
1268         it lo
1269         movlo r1, #-1
1270
1271         @ alias for mvn
1272         mov r3, #-3
1273
1274
1275 @ CHECK: movs   r1, #21                 @ encoding: [0x15,0x21]
1276 @ CHECK: movs.w r1, #21                 @ encoding: [0x5f,0xf0,0x15,0x01]
1277 @ CHECK: movs.w r8, #21                 @ encoding: [0x5f,0xf0,0x15,0x08]
1278 @ CHECK: movw   r0, #65535              @ encoding: [0x4f,0xf6,0xff,0x70]
1279 @ CHECK: movw   r1, #43777              @ encoding: [0x4a,0xf6,0x01,0x31]
1280 @ CHECK: movw   r1, #43792              @ encoding: [0x4a,0xf6,0x10,0x31]
1281 @ CHECK: mov.w  r0, #66846720           @ encoding: [0x4f,0xf0,0x7f,0x70]
1282 @ CHECK: mov.w  r0, #66846720           @ encoding: [0x4f,0xf0,0x7f,0x70]
1283 @ CHECK: movs.w r0, #66846720           @ encoding: [0x5f,0xf0,0x7f,0x70]
1284 @ CHECK: itte   eq                      @ encoding: [0x06,0xbf]
1285 @ CHECK: movseq.w       r1, #12         @ encoding: [0x5f,0xf0,0x0c,0x01]
1286 @ CHECK: moveq  r1, #12                 @ encoding: [0x0c,0x21]
1287 @ CHECK: movne.w r1, #12                @ encoding: [0x4f,0xf0,0x0c,0x01]
1288 @ CHECK: mov.w  r6, #450                @ encoding: [0x4f,0xf4,0xe1,0x76]
1289 @ CHECK: it     lo                      @ encoding: [0x38,0xbf]
1290 @ CHECK: movlo.w        r1, #-1         @ encoding: [0x4f,0xf0,0xff,0x31]
1291 @ CHECK: mvn    r3, #2                  @ encoding: [0x6f,0xf0,0x02,0x03]
1292
1293 @------------------------------------------------------------------------------
1294 @ MOV(shifted register)
1295 @------------------------------------------------------------------------------
1296         mov r6, r2, lsl #16
1297         mov r6, r2, lsr #16
1298         movs r6, r2, asr #32
1299         movs r6, r2, ror #5
1300         movs r4, r4, lsl r5
1301         movs r4, r4, lsr r5
1302         movs r4, r4, asr r5
1303         movs r4, r4, ror r5
1304         mov r4, r4, lsl r5
1305         movs r4, r4, ror r8
1306         movs r4, r5, lsr r6
1307         itttt eq
1308         moveq r4, r4, lsl r5
1309         moveq r4, r4, lsr r5
1310         moveq r4, r4, asr r5
1311         moveq r4, r4, ror r5
1312         mov r4, r4, rrx
1313
1314 @ CHECK: lsl.w  r6, r2, #16             @ encoding: [0x4f,0xea,0x02,0x46]
1315 @ CHECK: lsr.w  r6, r2, #16             @ encoding: [0x4f,0xea,0x12,0x46]
1316 @ CHECK: asrs   r6, r2, #32             @ encoding: [0x16,0x10]
1317 @ CHECK: rors.w r6, r2, #5              @ encoding: [0x5f,0xea,0x72,0x16]
1318 @ CHECK: lsls   r4, r5                  @ encoding: [0xac,0x40]
1319 @ CHECK: lsrs   r4, r5                  @ encoding: [0xec,0x40]
1320 @ CHECK: asrs   r4, r5                  @ encoding: [0x2c,0x41]
1321 @ CHECK: rors   r4, r5                  @ encoding: [0xec,0x41]
1322 @ CHECK: lsl.w  r4, r4, r5              @ encoding: [0x04,0xfa,0x05,0xf4]
1323 @ CHECK: rors.w r4, r4, r8              @ encoding: [0x74,0xfa,0x08,0xf4]
1324 @ CHECK: lsrs.w r4, r5, r6              @ encoding: [0x35,0xfa,0x06,0xf4]
1325 @ CHECK: itttt  eq                      @ encoding: [0x01,0xbf]
1326 @ CHECK: lsleq  r4, r5                  @ encoding: [0xac,0x40]
1327 @ CHECK: lsreq  r4, r5                  @ encoding: [0xec,0x40]
1328 @ CHECK: asreq  r4, r5                  @ encoding: [0x2c,0x41]
1329 @ CHECK: roreq  r4, r5                  @ encoding: [0xec,0x41]
1330 @ CHECK: rrx    r4, r4                  @ encoding: [0x4f,0xea,0x34,0x04]
1331
1332
1333 @------------------------------------------------------------------------------
1334 @ MOVT
1335 @------------------------------------------------------------------------------
1336         movt r3, #7
1337         movt r6, #0xffff
1338         it eq
1339         movteq r4, #0xff0
1340
1341 @ CHECK: movt   r3, #7                  @ encoding: [0xc0,0xf2,0x07,0x03]
1342 @ CHECK: movt   r6, #65535              @ encoding: [0xcf,0xf6,0xff,0x76]
1343 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1344 @ CHECK: movteq r4, #4080               @ encoding: [0xc0,0xf6,0xf0,0x74]
1345
1346 @------------------------------------------------------------------------------
1347 @ MRC/MRC2
1348 @------------------------------------------------------------------------------
1349         mrc  p14, #0, r1, c1, c2, #4
1350         mrc2  p14, #0, r1, c1, c2, #4
1351         mrc p11, #1, r1, c2, c2
1352         mrc2 p12, #3, r3, c3, c4
1353
1354 @ CHECK: mrc    p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xee,0x92,0x1e]
1355 @ CHECK: mrc2   p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xfe,0x92,0x1e]
1356 @ CHECK: mrc    p11, #1, r1, c2, c2, #0 @ encoding: [0x32,0xee,0x12,0x1b]
1357 @ CHECK: mrc2   p12, #3, r3, c3, c4, #0 @ encoding: [0x73,0xfe,0x14,0x3c]
1358
1359
1360 @------------------------------------------------------------------------------
1361 @ MRRC/MRRC2
1362 @------------------------------------------------------------------------------
1363         mrrc  p7, #1, r5, r4, c1
1364         mrrc2  p7, #1, r5, r4, c1
1365
1366 @ CHECK: mrrc   p7, #1, r5, r4, c1      @ encoding: [0x54,0xec,0x11,0x57]
1367 @ CHECK: mrrc2  p7, #1, r5, r4, c1      @ encoding: [0x54,0xfc,0x11,0x57]
1368
1369
1370 @------------------------------------------------------------------------------
1371 @ MRS
1372 @------------------------------------------------------------------------------
1373         mrs  r8, apsr
1374         mrs  r8, cpsr
1375         mrs  r8, spsr
1376
1377 @ CHECK: mrs    r8, apsr                @ encoding: [0xef,0xf3,0x00,0x88]
1378 @ CHECK: mrs    r8, apsr                @ encoding: [0xef,0xf3,0x00,0x88]
1379 @ CHECK: mrs    r8, spsr                @ encoding: [0xff,0xf3,0x00,0x88]
1380
1381
1382 @------------------------------------------------------------------------------
1383 @ MSR
1384 @------------------------------------------------------------------------------
1385         msr  apsr, r1
1386         msr  apsr_g, r2
1387         msr  apsr_nzcvq, r3
1388         msr  APSR_nzcvq, r4
1389         msr  apsr_nzcvqg, r5
1390         msr  cpsr_fc, r6
1391         msr  cpsr_c, r7
1392         msr  cpsr_x, r8
1393         msr  cpsr_fc, r9
1394         msr  cpsr_all, r11
1395         msr  cpsr_fsx, r12
1396         msr  spsr_fc, r0
1397         msr  SPSR_fsxc, r5
1398         msr  cpsr_fsxc, r8
1399         msr  cpsr, r3
1400
1401 @ CHECK: msr    APSR_nzcvq, r1          @ encoding: [0x81,0xf3,0x00,0x88]
1402 @ CHECK: msr    APSR_g, r2              @ encoding: [0x82,0xf3,0x00,0x84]
1403 @ CHECK: msr    APSR_nzcvq, r3          @ encoding: [0x83,0xf3,0x00,0x88]
1404 @ CHECK: msr    APSR_nzcvq, r4          @ encoding: [0x84,0xf3,0x00,0x88]
1405 @ CHECK: msr    APSR_nzcvqg, r5         @ encoding: [0x85,0xf3,0x00,0x8c]
1406 @ CHECK: msr    CPSR_fc, r6             @ encoding: [0x86,0xf3,0x00,0x89]
1407 @ CHECK: msr    CPSR_c, r7              @ encoding: [0x87,0xf3,0x00,0x81]
1408 @ CHECK: msr    CPSR_x, r8              @ encoding: [0x88,0xf3,0x00,0x82]
1409 @ CHECK: msr    CPSR_fc, r9             @ encoding: [0x89,0xf3,0x00,0x89]
1410 @ CHECK: msr    CPSR_fc, r11            @ encoding: [0x8b,0xf3,0x00,0x89]
1411 @ CHECK: msr    CPSR_fsx, r12           @ encoding: [0x8c,0xf3,0x00,0x8e]
1412 @ CHECK: msr    SPSR_fc, r0             @ encoding: [0x90,0xf3,0x00,0x89]
1413 @ CHECK: msr    SPSR_fsxc, r5           @ encoding: [0x95,0xf3,0x00,0x8f]
1414 @ CHECK: msr    CPSR_fsxc, r8           @ encoding: [0x88,0xf3,0x00,0x8f]
1415 @ CHECK: msr    CPSR_fc, r3             @ encoding: [0x83,0xf3,0x00,0x89]
1416
1417
1418 @------------------------------------------------------------------------------
1419 @ MUL
1420 @------------------------------------------------------------------------------
1421         muls r3, r4, r3
1422         mul r3, r4, r3
1423         mul r3, r4, r6
1424         it eq
1425         muleq r3, r4, r5
1426         it le
1427         mulle r4, r4, r8
1428         mul r5, r6
1429
1430 @ CHECK: muls   r3, r4, r3              @ encoding: [0x63,0x43]
1431 @ CHECK: mul    r3, r4, r3              @ encoding: [0x04,0xfb,0x03,0xf3]
1432 @ CHECK: mul    r3, r4, r6              @ encoding: [0x04,0xfb,0x06,0xf3]
1433 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1434 @ CHECK: muleq  r3, r4, r5              @ encoding: [0x04,0xfb,0x05,0xf3]
1435 @ CHECK: it     le                      @ encoding: [0xd8,0xbf]
1436 @ CHECK: mulle  r4, r4, r8              @ encoding: [0x04,0xfb,0x08,0xf4]
1437 @ CHECK: mul    r5, r6, r5              @ encoding: [0x06,0xfb,0x05,0xf5]
1438
1439
1440 @------------------------------------------------------------------------------
1441 @ MVN(immediate)
1442 @------------------------------------------------------------------------------
1443         mvns r8, #21
1444         mvn r0, #0x3fc0000
1445         mvns r0, #0x3fc0000
1446         itte eq
1447         mvnseq r1, #12
1448         mvneq.w r1, #12
1449         mvnne r1, #12
1450
1451 @ CHECK: mvns   r8, #21                 @ encoding: [0x7f,0xf0,0x15,0x08]
1452 @ CHECK: mvn    r0, #66846720           @ encoding: [0x6f,0xf0,0x7f,0x70]
1453 @ CHECK: mvns   r0, #66846720           @ encoding: [0x7f,0xf0,0x7f,0x70]
1454 @ CHECK: itte   eq                      @ encoding: [0x06,0xbf]
1455 @ CHECK: mvnseq r1, #12                 @ encoding: [0x7f,0xf0,0x0c,0x01]
1456 @ CHECK: mvneq  r1, #12                 @ encoding: [0x6f,0xf0,0x0c,0x01]
1457 @ CHECK: mvnne  r1, #12                 @ encoding: [0x6f,0xf0,0x0c,0x01]
1458
1459
1460 @------------------------------------------------------------------------------
1461 @ MVN(register)
1462 @------------------------------------------------------------------------------
1463         mvn r2, r3
1464         mvns r2, r3
1465         mvn r5, r6, lsl #19
1466         mvn r5, r6, lsr #9
1467         mvn.w r5, r6, asr #4
1468         mvn r5, r6, ror #6
1469         mvn r5, r6, rrx
1470         it eq
1471         mvneq r2, r3
1472
1473 @ CHECK: mvn.w  r2, r3                  @ encoding: [0x6f,0xea,0x03,0x02]
1474 @ CHECK: mvns   r2, r3                  @ encoding: [0xda,0x43]
1475 @ CHECK: mvn.w  r5, r6, lsl #19         @ encoding: [0x6f,0xea,0xc6,0x45]
1476 @ CHECK: mvn.w  r5, r6, lsr #9          @ encoding: [0x6f,0xea,0x56,0x25]
1477 @ CHECK: mvn.w  r5, r6, asr #4          @ encoding: [0x6f,0xea,0x26,0x15]
1478 @ CHECK: mvn.w  r5, r6, ror #6          @ encoding: [0x6f,0xea,0xb6,0x15]
1479 @ CHECK: mvn.w  r5, r6, rrx             @ encoding: [0x6f,0xea,0x36,0x05]
1480 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1481 @ CHECK: mvneq  r2, r3                  @ encoding: [0xda,0x43]
1482
1483 @------------------------------------------------------------------------------
1484 @ NEG
1485 @------------------------------------------------------------------------------
1486         neg r5, r2
1487         neg r5, r8
1488
1489 @ CHECK: rsb.w  r5, r2, #0              @ encoding: [0xc2,0xf1,0x00,0x05]
1490 @ CHECK: rsb.w  r5, r8, #0              @ encoding: [0xc8,0xf1,0x00,0x05]
1491
1492
1493 @------------------------------------------------------------------------------
1494 @ NOP
1495 @------------------------------------------------------------------------------
1496         nop.w
1497
1498 @ CHECK: nop.w                          @ encoding: [0xaf,0xf3,0x00,0x80]
1499
1500
1501 @------------------------------------------------------------------------------
1502 @ ORN
1503 @------------------------------------------------------------------------------
1504         orn r4, r5, #0xf000
1505         orn r4, r5, r6
1506         orns r4, r5, r6
1507         orn r4, r5, r6, lsl #5
1508         orns r4, r5, r6, lsr #5
1509         orn r4, r5, r6, lsr #5
1510         orns r4, r5, r6, asr #5
1511         orn r4, r5, r6, ror #5
1512
1513 @ CHECK: orn    r4, r5, #61440          @ encoding: [0x65,0xf4,0x70,0x44]
1514 @ CHECK: orn    r4, r5, r6              @ encoding: [0x65,0xea,0x06,0x04]
1515 @ CHECK: orns   r4, r5, r6              @ encoding: [0x75,0xea,0x06,0x04]
1516 @ CHECK: orn    r4, r5, r6, lsl #5      @ encoding: [0x65,0xea,0x46,0x14]
1517 @ CHECK: orns   r4, r5, r6, lsr #5      @ encoding: [0x75,0xea,0x56,0x14]
1518 @ CHECK: orn    r4, r5, r6, lsr #5      @ encoding: [0x65,0xea,0x56,0x14]
1519 @ CHECK: orns   r4, r5, r6, asr #5      @ encoding: [0x75,0xea,0x66,0x14]
1520 @ CHECK: orn    r4, r5, r6, ror #5      @ encoding: [0x65,0xea,0x76,0x14]
1521
1522
1523 @------------------------------------------------------------------------------
1524 @ ORR
1525 @------------------------------------------------------------------------------
1526         orr r4, r5, #0xf000
1527         orr r4, r5, r6
1528         orr r4, r5, r6, lsl #5
1529         orrs r4, r5, r6, lsr #5
1530         orr r4, r5, r6, lsr #5
1531         orrs r4, r5, r6, asr #5
1532         orr r4, r5, r6, ror #5
1533
1534 @ CHECK: orr    r4, r5, #61440          @ encoding: [0x45,0xf4,0x70,0x44]
1535 @ CHECK: orr.w  r4, r5, r6              @ encoding: [0x45,0xea,0x06,0x04]
1536 @ CHECK: orr.w  r4, r5, r6, lsl #5      @ encoding: [0x45,0xea,0x46,0x14]
1537 @ CHECK: orrs.w r4, r5, r6, lsr #5      @ encoding: [0x55,0xea,0x56,0x14]
1538 @ CHECK: orr.w  r4, r5, r6, lsr #5      @ encoding: [0x45,0xea,0x56,0x14]
1539 @ CHECK: orrs.w r4, r5, r6, asr #5      @ encoding: [0x55,0xea,0x66,0x14]
1540 @ CHECK: orr.w  r4, r5, r6, ror #5      @ encoding: [0x45,0xea,0x76,0x14]
1541
1542
1543 @------------------------------------------------------------------------------
1544 @ PKH
1545 @------------------------------------------------------------------------------
1546         pkhbt r2, r2, r3
1547         pkhbt r2, r2, r3, lsl #31
1548         pkhbt r2, r2, r3, lsl #0
1549         pkhbt r2, r2, r3, lsl #15
1550
1551         pkhtb r2, r2, r3
1552         pkhtb r2, r2, r3, asr #31
1553         pkhtb r2, r2, r3, asr #15
1554
1555 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1556 @ CHECK: pkhbt  r2, r2, r3, lsl #31     @ encoding: [0xc2,0xea,0xc3,0x72]
1557 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1558 @ CHECK: pkhbt  r2, r2, r3, lsl #15     @ encoding: [0xc2,0xea,0xc3,0x32]
1559
1560 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1561 @ CHECK: pkhtb  r2, r2, r3, asr #31     @ encoding: [0xc2,0xea,0xe3,0x72]
1562 @ CHECK: pkhtb  r2, r2, r3, asr #15     @ encoding: [0xc2,0xea,0xe3,0x32]
1563
1564
1565 @------------------------------------------------------------------------------
1566 @ PLD(immediate)
1567 @------------------------------------------------------------------------------
1568         pld [r5, #-4]
1569         pld [r6, #32]
1570         pld [r6, #33]
1571         pld [r6, #257]
1572         pld [r7, #257]
1573         pld [r1, #0]
1574         pld [r1, #-0]
1575
1576 @ CHECK: pld    [r5, #-4]               @ encoding: [0x15,0xf8,0x04,0xfc]
1577 @ CHECK: pld    [r6, #32]               @ encoding: [0x96,0xf8,0x20,0xf0]
1578 @ CHECK: pld    [r6, #33]               @ encoding: [0x96,0xf8,0x21,0xf0]
1579 @ CHECK: pld    [r6, #257]              @ encoding: [0x96,0xf8,0x01,0xf1]
1580 @ CHECK: pld    [r7, #257]              @ encoding: [0x97,0xf8,0x01,0xf1]
1581 @ CHECK: pld    [r1]                    @ encoding: [0x91,0xf8,0x00,0xf0]
1582 @ CHECK: pld    [r1, #-0]               @ encoding: [0x11,0xf8,0x00,0xfc]
1583
1584
1585 @------------------------------------------------------------------------------
1586 @ PLD(literal)
1587 @------------------------------------------------------------------------------
1588 @        pld  _foo
1589
1590 @ FIXME: pld    _foo                    @ encoding: [0x9f'A',0xf8'A',A,0xf0'A']
1591             @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
1592
1593         pld [pc,#-4095]
1594 @ CHECK: pld [pc, #-4095]            @ encoding: [0x1f,0xf8,0xff,0xff]
1595
1596
1597 @------------------------------------------------------------------------------
1598 @ PLD(register)
1599 @------------------------------------------------------------------------------
1600         pld [r8, r1]
1601         pld [r5, r2]
1602         pld [r0, r2, lsl #3]
1603         pld [r8, r2, lsl #2]
1604         pld [sp, r2, lsl #1]
1605         pld [sp, r2, lsl #0]
1606
1607 @ CHECK: pld    [r8, r1]                @ encoding: [0x18,0xf8,0x01,0xf0]
1608 @ CHECK: pld    [r5, r2]                @ encoding: [0x15,0xf8,0x02,0xf0]
1609 @ CHECK: pld    [r0, r2, lsl #3]        @ encoding: [0x10,0xf8,0x32,0xf0]
1610 @ CHECK: pld    [r8, r2, lsl #2]        @ encoding: [0x18,0xf8,0x22,0xf0]
1611 @ CHECK: pld    [sp, r2, lsl #1]        @ encoding: [0x1d,0xf8,0x12,0xf0]
1612 @ CHECK: pld    [sp, r2]                @ encoding: [0x1d,0xf8,0x02,0xf0]
1613
1614 @------------------------------------------------------------------------------
1615 @ PLI(immediate)
1616 @------------------------------------------------------------------------------
1617         pli [r5, #-4]
1618         pli [r6, #32]
1619         pli [r6, #33]
1620         pli [r6, #257]
1621         pli [r7, #257]
1622         pli [pc, #+4095]
1623         pli [pc, #-4095]
1624
1625 @ CHECK: pli    [r5, #-4]               @ encoding: [0x15,0xf9,0x04,0xfc]
1626 @ CHECK: pli    [r6, #32]               @ encoding: [0x96,0xf9,0x20,0xf0]
1627 @ CHECK: pli    [r6, #33]               @ encoding: [0x96,0xf9,0x21,0xf0]
1628 @ CHECK: pli    [r6, #257]              @ encoding: [0x96,0xf9,0x01,0xf1]
1629 @ CHECK: pli    [r7, #257]              @ encoding: [0x97,0xf9,0x01,0xf1]
1630 @ CHECK: pli    [pc, #4095]             @ encoding: [0x9f,0xf9,0xff,0xff]
1631 @ CHECK: pli    [pc, #-4095]            @ encoding: [0x1f,0xf9,0xff,0xff]
1632
1633
1634 @------------------------------------------------------------------------------
1635 @ PLI(literal)
1636 @------------------------------------------------------------------------------
1637 @        pli  _foo
1638
1639
1640 @ FIXME: pli    _foo                    @ encoding: [0x9f'A',0xf9'A',A,0xf0'A']
1641            @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
1642
1643
1644 @------------------------------------------------------------------------------
1645 @ PLI(register)
1646 @------------------------------------------------------------------------------
1647         pli [r8, r1]
1648         pli [r5, r2]
1649         pli [r0, r2, lsl #3]
1650         pli [r8, r2, lsl #2]
1651         pli [sp, r2, lsl #1]
1652         pli [sp, r2, lsl #0]
1653
1654 @ CHECK: pli    [r8, r1]                @ encoding: [0x18,0xf9,0x01,0xf0]
1655 @ CHECK: pli    [r5, r2]                @ encoding: [0x15,0xf9,0x02,0xf0]
1656 @ CHECK: pli    [r0, r2, lsl #3]        @ encoding: [0x10,0xf9,0x32,0xf0]
1657 @ CHECK: pli    [r8, r2, lsl #2]        @ encoding: [0x18,0xf9,0x22,0xf0]
1658 @ CHECK: pli    [sp, r2, lsl #1]        @ encoding: [0x1d,0xf9,0x12,0xf0]
1659 @ CHECK: pli    [sp, r2]                @ encoding: [0x1d,0xf9,0x02,0xf0]
1660
1661 @------------------------------------------------------------------------------
1662 @ POP (alias)
1663 @------------------------------------------------------------------------------
1664         pop {r2, r9}
1665
1666 @ CHECK: pop.w  {r2, r9}                @ encoding: [0xbd,0xe8,0x04,0x02]
1667
1668
1669 @------------------------------------------------------------------------------
1670 @ PUSH (alias)
1671 @------------------------------------------------------------------------------
1672         push {r2, r9}
1673
1674 @ CHECK: push.w {r2, r9}                @ encoding: [0x2d,0xe9,0x04,0x02]
1675
1676
1677 @------------------------------------------------------------------------------
1678 @ QADD/QADD16/QADD8
1679 @------------------------------------------------------------------------------
1680         qadd r1, r2, r3
1681         qadd16 r1, r2, r3
1682         qadd8 r1, r2, r3
1683         itte gt
1684         qaddgt r1, r2, r3
1685         qadd16gt r1, r2, r3
1686         qadd8le r1, r2, r3
1687
1688 @ CHECK: qadd   r1, r2, r3              @ encoding: [0x83,0xfa,0x82,0xf1]
1689 @ CHECK: qadd16 r1, r2, r3              @ encoding: [0x92,0xfa,0x13,0xf1]
1690 @ CHECK: qadd8  r1, r2, r3              @ encoding: [0x82,0xfa,0x13,0xf1]
1691 @ CHECK: itte   gt                      @ encoding: [0xc6,0xbf]
1692 @ CHECK: qaddgt r1, r2, r3              @ encoding: [0x83,0xfa,0x82,0xf1]
1693 @ CHECK: qadd16gt r1, r2, r3            @ encoding: [0x92,0xfa,0x13,0xf1]
1694 @ CHECK: qadd8le r1, r2, r3             @ encoding: [0x82,0xfa,0x13,0xf1]
1695
1696
1697 @------------------------------------------------------------------------------
1698 @ QDADD/QDSUB
1699 @------------------------------------------------------------------------------
1700         qdadd r6, r7, r8
1701         qdsub r6, r7, r8
1702         itt hi
1703         qdaddhi r6, r7, r8
1704         qdsubhi r6, r7, r8
1705
1706 @ CHECK: qdadd  r6, r7, r8              @ encoding: [0x88,0xfa,0x97,0xf6]
1707 @ CHECK: qdsub  r6, r7, r8              @ encoding: [0x88,0xfa,0xb7,0xf6]
1708 @ CHECK: itt    hi                      @ encoding: [0x84,0xbf]
1709 @ CHECK: qdaddhi r6, r7, r8             @ encoding: [0x88,0xfa,0x97,0xf6]
1710 @ CHECK: qdsubhi r6, r7, r8             @ encoding: [0x88,0xfa,0xb7,0xf6]
1711
1712
1713 @------------------------------------------------------------------------------
1714 @ QSAX
1715 @------------------------------------------------------------------------------
1716         qsax r9, r12, r0
1717         it eq
1718         qsaxeq r9, r12, r0
1719
1720 @ CHECK: qsax   r9, r12, r0             @ encoding: [0xec,0xfa,0x10,0xf9]
1721 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1722 @ CHECK: qsaxeq r9, r12, r0             @ encoding: [0xec,0xfa,0x10,0xf9]
1723
1724
1725 @------------------------------------------------------------------------------
1726 @ QSUB/QSUB16/QSUB8
1727 @------------------------------------------------------------------------------
1728         qsub r1, r2, r3
1729         qsub16 r1, r2, r3
1730         qsub8 r1, r2, r3
1731         itet le
1732         qsuble r1, r2, r3
1733         qsub16gt r1, r2, r3
1734         qsub8le r1, r2, r3
1735
1736 @ CHECK: qsub   r1, r2, r3              @ encoding: [0x83,0xfa,0xa2,0xf1]
1737 @ CHECK: qsub16 r1, r2, r3              @ encoding: [0xd2,0xfa,0x13,0xf1]
1738 @ CHECK: qsub8  r1, r2, r3              @ encoding: [0xc2,0xfa,0x13,0xf1]
1739 @ CHECK: itet   le                      @ encoding: [0xd6,0xbf]
1740 @ CHECK: qsuble r1, r2, r3              @ encoding: [0x83,0xfa,0xa2,0xf1]
1741 @ CHECK: qsub16gt       r1, r2, r3      @ encoding: [0xd2,0xfa,0x13,0xf1]
1742 @ CHECK: qsub8le r1, r2, r3             @ encoding: [0xc2,0xfa,0x13,0xf1]
1743
1744
1745 @------------------------------------------------------------------------------
1746 @ RBIT
1747 @------------------------------------------------------------------------------
1748         rbit r1, r2
1749         it ne
1750         rbitne r1, r2
1751
1752 @ CHECK: rbit   r1, r2                  @ encoding: [0x92,0xfa,0xa2,0xf1]
1753 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1754 @ CHECK: rbitne r1, r2                  @ encoding: [0x92,0xfa,0xa2,0xf1]
1755
1756
1757 @------------------------------------------------------------------------------
1758 @ REV
1759 @------------------------------------------------------------------------------
1760         rev.w r1, r2
1761         rev r2, r8
1762         itt ne
1763         revne r1, r2
1764         revne r1, r8
1765
1766 @ CHECK: rev.w  r1, r2                  @ encoding: [0x92,0xfa,0x82,0xf1]
1767 @ CHECK: rev.w  r2, r8                  @ encoding: [0x98,0xfa,0x88,0xf2]
1768 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
1769 @ CHECK: revne  r1, r2                  @ encoding: [0x11,0xba]
1770 @ CHECK: revne.w r1, r8                 @ encoding: [0x98,0xfa,0x88,0xf1]
1771
1772
1773 @------------------------------------------------------------------------------
1774 @ REV16
1775 @------------------------------------------------------------------------------
1776         rev16.w r1, r2
1777         rev16 r2, r8
1778         itt ne
1779         rev16ne r1, r2
1780         rev16ne r1, r8
1781
1782 @ CHECK: rev16.w r1, r2                 @ encoding: [0x92,0xfa,0x92,0xf1]
1783 @ CHECK: rev16.w r2, r8                 @ encoding: [0x98,0xfa,0x98,0xf2]
1784 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
1785 @ CHECK: rev16ne r1, r2                 @ encoding: [0x51,0xba]
1786 @ CHECK: rev16ne.w      r1, r8          @ encoding: [0x98,0xfa,0x98,0xf1]
1787
1788
1789 @------------------------------------------------------------------------------
1790 @ REVSH
1791 @------------------------------------------------------------------------------
1792         revsh.w r1, r2
1793         revsh r2, r8
1794         itt ne
1795         revshne r1, r2
1796         revshne r1, r8
1797
1798 @ CHECK: revsh.w r1, r2                 @ encoding: [0x92,0xfa,0xb2,0xf1]
1799 @ CHECK: revsh.w r2, r8                 @ encoding: [0x98,0xfa,0xb8,0xf2]
1800 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
1801 @ CHECK: revshne r1, r2                 @ encoding: [0xd1,0xba]
1802 @ CHECK: revshne.w      r1, r8          @ encoding: [0x98,0xfa,0xb8,0xf1]
1803
1804
1805 @------------------------------------------------------------------------------
1806 @ ROR (immediate)
1807 @------------------------------------------------------------------------------
1808         ror r2, r3, #12
1809         rors r8, r3, #31
1810         rors.w r2, r3, #1
1811         ror r2, r3, #4
1812         rors r2, r12, #15
1813
1814         ror r3, #19
1815         rors r8, #2
1816         rors.w r7, #5
1817         ror.w r12, #21
1818
1819 @ CHECK: ror.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x33,0x32]
1820 @ CHECK: rors.w r8, r3, #31             @ encoding: [0x5f,0xea,0xf3,0x78]
1821 @ CHECK: rors.w r2, r3, #1              @ encoding: [0x5f,0xea,0x73,0x02]
1822 @ CHECK: ror.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x33,0x12]
1823 @ CHECK: rors.w r2, r12, #15            @ encoding: [0x5f,0xea,0xfc,0x32]
1824
1825 @ CHECK: ror.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xf3,0x43]
1826 @ CHECK: rors.w r8, r8, #2              @ encoding: [0x5f,0xea,0xb8,0x08]
1827 @ CHECK: rors.w r7, r7, #5              @ encoding: [0x5f,0xea,0x77,0x17]
1828 @ CHECK: ror.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x7c,0x5c]
1829
1830
1831 @------------------------------------------------------------------------------
1832 @ ROR (register)
1833 @------------------------------------------------------------------------------
1834         ror r3, r4, r2
1835         ror.w r1, r2
1836         rors r3, r4, r8
1837
1838 @ CHECK: ror.w  r3, r4, r2              @ encoding: [0x64,0xfa,0x02,0xf3]
1839 @ CHECK: ror.w  r1, r1, r2              @ encoding: [0x61,0xfa,0x02,0xf1]
1840 @ CHECK: rors.w r3, r4, r8              @ encoding: [0x74,0xfa,0x08,0xf3]
1841
1842
1843 @------------------------------------------------------------------------------
1844 @ RRX
1845 @------------------------------------------------------------------------------
1846         rrx r1, r2
1847         rrxs r1, r2
1848         ite lt
1849         rrxlt r9, r12
1850         rrxsge r8, r3
1851
1852 @ CHECK: rrx    r1, r2                  @ encoding: [0x4f,0xea,0x32,0x01]
1853 @ CHECK: rrxs   r1, r2                  @ encoding: [0x5f,0xea,0x32,0x01]
1854 @ CHECK: ite    lt                      @ encoding: [0xb4,0xbf]
1855 @ CHECK: rrxlt  r9, r12                 @ encoding: [0x4f,0xea,0x3c,0x09]
1856 @ CHECK: rrxsge r8, r3                  @ encoding: [0x5f,0xea,0x33,0x08]
1857
1858 @------------------------------------------------------------------------------
1859 @ RSB (immediate)
1860 @------------------------------------------------------------------------------
1861         rsb r2, r5, #0xff000
1862         rsbs r3, r12, #0xf
1863         rsb r1, #0xff
1864         rsb r1, r1, #0xff
1865         rsb r11, r11, #0
1866         rsb r9, #0
1867         rsbs r3, r1, #0
1868         rsb r3, r1, #0
1869
1870 @ CHECK: rsb.w  r2, r5, #1044480        @ encoding: [0xc5,0xf5,0x7f,0x22]
1871 @ CHECK: rsbs.w r3, r12, #15            @ encoding: [0xdc,0xf1,0x0f,0x03]
1872 @ CHECK: rsb.w  r1, r1, #255            @ encoding: [0xc1,0xf1,0xff,0x01]
1873 @ CHECK: rsb.w  r1, r1, #255            @ encoding: [0xc1,0xf1,0xff,0x01]
1874 @ CHECK: rsb.w  r11, r11, #0            @ encoding: [0xcb,0xf1,0x00,0x0b]
1875 @ CHECK: rsb.w  r9, r9, #0              @ encoding: [0xc9,0xf1,0x00,0x09]
1876 @ CHECK: rsbs   r3, r1, #0              @ encoding: [0x4b,0x42]
1877 @ CHECK: rsb.w  r3, r1, #0              @ encoding: [0xc1,0xf1,0x00,0x03]
1878
1879
1880 @------------------------------------------------------------------------------
1881 @ RSB (register)
1882 @------------------------------------------------------------------------------
1883         rsb r4, r8
1884         rsb r4, r9, r8
1885         rsb r1, r4, r8, asr #3
1886         rsbs r2, r1, r7, lsl #1
1887
1888 @ CHECK: rsb    r4, r4, r8              @ encoding: [0xc4,0xeb,0x08,0x04]
1889 @ CHECK: rsb    r4, r9, r8              @ encoding: [0xc9,0xeb,0x08,0x04]
1890 @ CHECK: rsb    r1, r4, r8, asr #3      @ encoding: [0xc4,0xeb,0xe8,0x01]
1891 @ CHECK: rsbs   r2, r1, r7, lsl #1      @ encoding: [0xd1,0xeb,0x47,0x02]
1892
1893
1894 @------------------------------------------------------------------------------
1895 @ SADD16
1896 @------------------------------------------------------------------------------
1897         sadd16 r3, r4, r8
1898         it ne
1899         sadd16ne r3, r4, r8
1900
1901 @ CHECK: sadd16 r3, r4, r8              @ encoding: [0x94,0xfa,0x08,0xf3]
1902 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1903 @ CHECK: sadd16ne       r3, r4, r8      @ encoding: [0x94,0xfa,0x08,0xf3]
1904
1905
1906 @------------------------------------------------------------------------------
1907 @ SADD8
1908 @------------------------------------------------------------------------------
1909         sadd8 r3, r4, r8
1910         it ne
1911         sadd8ne r3, r4, r8
1912
1913 @ CHECK: sadd8  r3, r4, r8              @ encoding: [0x84,0xfa,0x08,0xf3]
1914 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1915 @ CHECK: sadd8ne r3, r4, r8             @ encoding: [0x84,0xfa,0x08,0xf3]
1916
1917
1918 @------------------------------------------------------------------------------
1919 @ SASX
1920 @------------------------------------------------------------------------------
1921         saddsubx r9, r2, r7
1922         it ne
1923         saddsubxne r2, r5, r6
1924         sasx r9, r2, r7
1925         it ne
1926         sasxne r2, r5, r6
1927
1928 @ CHECK: sasx   r9, r2, r7              @ encoding: [0xa2,0xfa,0x07,0xf9]
1929 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1930 @ CHECK: sasxne r2, r5, r6              @ encoding: [0xa5,0xfa,0x06,0xf2]
1931 @ CHECK: sasx   r9, r2, r7              @ encoding: [0xa2,0xfa,0x07,0xf9]
1932 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1933 @ CHECK: sasxne r2, r5, r6              @ encoding: [0xa5,0xfa,0x06,0xf2]
1934
1935
1936 @------------------------------------------------------------------------------
1937 @ SBC (immediate)
1938 @------------------------------------------------------------------------------
1939         sbc r0, r1, #4
1940         sbcs r0, r1, #0
1941         sbc r1, r2, #255
1942         sbc r3, r7, #0x00550055
1943         sbc r8, r12, #0xaa00aa00
1944         sbc r9, r7, #0xa5a5a5a5
1945         sbc r5, r3, #0x87000000
1946         sbc r4, r2, #0x7f800000
1947         sbc r4, r2, #0x00000680
1948
1949 @ CHECK: sbc    r0, r1, #4              @ encoding: [0x61,0xf1,0x04,0x00]
1950 @ CHECK: sbcs   r0, r1, #0              @ encoding: [0x71,0xf1,0x00,0x00]
1951 @ CHECK: sbc    r1, r2, #255            @ encoding: [0x62,0xf1,0xff,0x01]
1952 @ CHECK: sbc    r3, r7, #5570645        @ encoding: [0x67,0xf1,0x55,0x13]
1953 @ CHECK: sbc    r8, r12, #2852170240    @ encoding: [0x6c,0xf1,0xaa,0x28]
1954 @ CHECK: sbc    r9, r7, #2779096485     @ encoding: [0x67,0xf1,0xa5,0x39]
1955 @ CHECK: sbc    r5, r3, #2264924160     @ encoding: [0x63,0xf1,0x07,0x45]
1956 @ CHECK: sbc    r4, r2, #2139095040     @ encoding: [0x62,0xf1,0xff,0x44]
1957 @ CHECK: sbc    r4, r2, #1664           @ encoding: [0x62,0xf5,0xd0,0x64]
1958
1959
1960 @------------------------------------------------------------------------------
1961 @ SBC (register)
1962 @------------------------------------------------------------------------------
1963         sbc r4, r5, r6
1964         sbcs r4, r5, r6
1965         sbc.w r9, r1, r3
1966         sbcs.w r9, r1, r3
1967         sbc     r0, r1, r3, ror #4
1968         sbcs    r0, r1, r3, lsl #7
1969         sbc.w   r0, r1, r3, lsr #31
1970         sbcs.w  r0, r1, r3, asr #32
1971
1972 @ CHECK: sbc.w  r4, r5, r6              @ encoding: [0x65,0xeb,0x06,0x04]
1973 @ CHECK: sbcs.w r4, r5, r6              @ encoding: [0x75,0xeb,0x06,0x04]
1974 @ CHECK: sbc.w  r9, r1, r3              @ encoding: [0x61,0xeb,0x03,0x09]
1975 @ CHECK: sbcs.w r9, r1, r3              @ encoding: [0x71,0xeb,0x03,0x09]
1976 @ CHECK: sbc.w  r0, r1, r3, ror #4      @ encoding: [0x61,0xeb,0x33,0x10]
1977 @ CHECK: sbcs.w r0, r1, r3, lsl #7      @ encoding: [0x71,0xeb,0xc3,0x10]
1978 @ CHECK: sbc.w  r0, r1, r3, lsr #31     @ encoding: [0x61,0xeb,0xd3,0x70]
1979 @ CHECK: sbcs.w r0, r1, r3, asr #32     @ encoding: [0x71,0xeb,0x23,0x00]
1980
1981
1982 @------------------------------------------------------------------------------
1983 @ SBFX
1984 @------------------------------------------------------------------------------
1985         sbfx r4, r5, #16, #1
1986         it gt
1987         sbfxgt r4, r5, #16, #16
1988
1989 @ CHECK: sbfx   r4, r5, #16, #1         @ encoding: [0x45,0xf3,0x00,0x44]
1990 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
1991 @ CHECK: sbfxgt r4, r5, #16, #16        @ encoding: [0x45,0xf3,0x0f,0x44]
1992
1993
1994 @------------------------------------------------------------------------------
1995 @ SEL
1996 @------------------------------------------------------------------------------
1997         sel r5, r9, r2
1998         it le
1999         selle r5, r9, r2
2000
2001 @ CHECK: sel    r5, r9, r2              @ encoding: [0xa9,0xfa,0x82,0xf5]
2002 @ CHECK: it     le                      @ encoding: [0xd8,0xbf]
2003 @ CHECK: selle  r5, r9, r2              @ encoding: [0xa9,0xfa,0x82,0xf5]
2004
2005
2006 @------------------------------------------------------------------------------
2007 @ SEV
2008 @------------------------------------------------------------------------------
2009         sev.w
2010         it eq
2011         seveq.w
2012
2013 @ CHECK: sev.w                           @ encoding: [0xaf,0xf3,0x04,0x80]
2014 @ CHECK: it     eq                       @ encoding: [0x08,0xbf]
2015 @ CHECK: seveq.w                         @ encoding: [0xaf,0xf3,0x04,0x80]
2016
2017
2018 @------------------------------------------------------------------------------
2019 @ SADD16/SADD8
2020 @------------------------------------------------------------------------------
2021         sadd16 r1, r2, r3
2022         sadd8 r1, r2, r3
2023         ite gt
2024         sadd16gt r1, r2, r3
2025         sadd8le r1, r2, r3
2026
2027 @ CHECK: sadd16 r1, r2, r3              @ encoding: [0x92,0xfa,0x03,0xf1]
2028 @ CHECK: sadd8  r1, r2, r3              @ encoding: [0x82,0xfa,0x03,0xf1]
2029 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
2030 @ CHECK: sadd16gt       r1, r2, r3      @ encoding: [0x92,0xfa,0x03,0xf1]
2031 @ CHECK: sadd8le r1, r2, r3             @ encoding: [0x82,0xfa,0x03,0xf1]
2032
2033
2034 @------------------------------------------------------------------------------
2035 @ SHASX
2036 @------------------------------------------------------------------------------
2037         shasx r4, r8, r2
2038         it gt
2039         shasxgt r4, r8, r2
2040         shaddsubx r4, r8, r2
2041         it gt
2042         shaddsubxgt r4, r8, r2
2043
2044 @ CHECK: shasx  r4, r8, r2              @ encoding: [0xa8,0xfa,0x22,0xf4]
2045 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
2046 @ CHECK: shasxgt r4, r8, r2             @ encoding: [0xa8,0xfa,0x22,0xf4]
2047 @ CHECK: shasx  r4, r8, r2              @ encoding: [0xa8,0xfa,0x22,0xf4]
2048 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
2049 @ CHECK: shasxgt r4, r8, r2             @ encoding: [0xa8,0xfa,0x22,0xf4]
2050
2051
2052 @------------------------------------------------------------------------------
2053 @ SHASX
2054 @------------------------------------------------------------------------------
2055         shsax r4, r8, r2
2056         it gt
2057         shsaxgt r4, r8, r2
2058         shsubaddx r4, r8, r2
2059         it gt
2060         shsubaddxgt r4, r8, r2
2061
2062 @ CHECK: shsax  r4, r8, r2              @ encoding: [0xe8,0xfa,0x22,0xf4]
2063 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
2064 @ CHECK: shsaxgt r4, r8, r2             @ encoding: [0xe8,0xfa,0x22,0xf4]
2065 @ CHECK: shsax  r4, r8, r2              @ encoding: [0xe8,0xfa,0x22,0xf4]
2066 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
2067 @ CHECK: shsaxgt r4, r8, r2             @ encoding: [0xe8,0xfa,0x22,0xf4]
2068
2069
2070 @------------------------------------------------------------------------------
2071 @ SHSUB16/SHSUB8
2072 @------------------------------------------------------------------------------
2073         shsub16 r4, r8, r2
2074         shsub8 r4, r8, r2
2075         itt gt
2076         shsub16gt r4, r8, r2
2077         shsub8gt r4, r8, r2
2078
2079 @ CHECK: shsub16 r4, r8, r2             @ encoding: [0xd8,0xfa,0x22,0xf4]
2080 @ CHECK: shsub8 r4, r8, r2              @ encoding: [0xc8,0xfa,0x22,0xf4]
2081 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
2082 @ CHECK: shsub16gt      r4, r8, r2      @ encoding: [0xd8,0xfa,0x22,0xf4]
2083 @ CHECK: shsub8gt       r4, r8, r2      @ encoding: [0xc8,0xfa,0x22,0xf4]
2084
2085
2086 @------------------------------------------------------------------------------
2087 @ SMLABB/SMLABT/SMLATB/SMLATT
2088 @------------------------------------------------------------------------------
2089         smlabb r3, r1, r9, r0
2090         smlabt r5, r6, r4, r1
2091         smlatb r4, r2, r3, r2
2092         smlatt r8, r3, r8, r4
2093         itete gt
2094         smlabbgt r3, r1, r9, r0
2095         smlabtle r5, r6, r4, r1
2096         smlatbgt r4, r2, r3, r2
2097         smlattle r8, r3, r8, r4
2098
2099 @ CHECK: smlabb r3, r1, r9, r0          @ encoding: [0x11,0xfb,0x09,0x03]
2100 @ CHECK: smlabt r5, r6, r4, r1          @ encoding: [0x16,0xfb,0x14,0x15]
2101 @ CHECK: smlatb r4, r2, r3, r2          @ encoding: [0x12,0xfb,0x23,0x24]
2102 @ CHECK: smlatt r8, r3, r8, r4          @ encoding: [0x13,0xfb,0x38,0x48]
2103 @ CHECK: itete  gt                      @ encoding: [0xcb,0xbf]
2104 @ CHECK: smlabbgt       r3, r1, r9, r0  @ encoding: [0x11,0xfb,0x09,0x03]
2105 @ CHECK: smlabtle       r5, r6, r4, r1  @ encoding: [0x16,0xfb,0x14,0x15]
2106 @ CHECK: smlatbgt       r4, r2, r3, r2  @ encoding: [0x12,0xfb,0x23,0x24]
2107 @ CHECK: smlattle       r8, r3, r8, r4  @ encoding: [0x13,0xfb,0x38,0x48]
2108
2109
2110 @------------------------------------------------------------------------------
2111 @ SMLAD/SMLADX
2112 @------------------------------------------------------------------------------
2113         smlad r2, r3, r5, r8
2114         smladx r2, r3, r5, r8
2115         itt hi
2116         smladhi r2, r3, r5, r8
2117         smladxhi r2, r3, r5, r8
2118
2119 @ CHECK: smlad  r2, r3, r5, r8          @ encoding: [0x23,0xfb,0x05,0x82]
2120 @ CHECK: smladx r2, r3, r5, r8          @ encoding: [0x23,0xfb,0x15,0x82]
2121 @ CHECK: itt    hi                      @ encoding: [0x84,0xbf]
2122 @ CHECK: smladhi r2, r3, r5, r8         @ encoding: [0x23,0xfb,0x05,0x82]
2123 @ CHECK: smladxhi       r2, r3, r5, r8  @ encoding: [0x23,0xfb,0x15,0x82]
2124
2125
2126 @------------------------------------------------------------------------------
2127 @ SMLAL
2128 @------------------------------------------------------------------------------
2129         smlal r2, r3, r5, r8
2130         it eq
2131         smlaleq r2, r3, r5, r8
2132
2133 @ CHECK: smlal  r2, r3, r5, r8          @ encoding: [0xc5,0xfb,0x08,0x23]
2134 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
2135 @ CHECK: smlaleq r2, r3, r5, r8         @ encoding: [0xc5,0xfb,0x08,0x23]
2136
2137
2138 @------------------------------------------------------------------------------
2139 @ SMLALBB/SMLALBT/SMLALTB/SMLALTT
2140 @------------------------------------------------------------------------------
2141         smlalbb r3, r1, r9, r0
2142         smlalbt r5, r6, r4, r1
2143         smlaltb r4, r2, r3, r2
2144         smlaltt r8, r3, r8, r4
2145         iteet ge
2146         smlalbbge r3, r1, r9, r0
2147         smlalbtlt r5, r6, r4, r1
2148         smlaltblt r4, r2, r3, r2
2149         smlalttge r8, r3, r8, r4
2150
2151 @ CHECK: smlalbb r3, r1, r9, r0         @ encoding: [0xc9,0xfb,0x80,0x31]
2152 @ CHECK: smlalbt r5, r6, r4, r1         @ encoding: [0xc4,0xfb,0x91,0x56]
2153 @ CHECK: smlaltb r4, r2, r3, r2         @ encoding: [0xc3,0xfb,0xa2,0x42]
2154 @ CHECK: smlaltt r8, r3, r8, r4         @ encoding: [0xc8,0xfb,0xb4,0x83]
2155 @ CHECK: iteet  ge                      @ encoding: [0xad,0xbf]
2156 @ CHECK: smlalbbge      r3, r1, r9, r0  @ encoding: [0xc9,0xfb,0x80,0x31]
2157 @ CHECK: smlalbtlt      r5, r6, r4, r1  @ encoding: [0xc4,0xfb,0x91,0x56]
2158 @ CHECK: smlaltblt      r4, r2, r3, r2  @ encoding: [0xc3,0xfb,0xa2,0x42]
2159 @ CHECK: smlalttge      r8, r3, r8, r4  @ encoding: [0xc8,0xfb,0xb4,0x83]
2160
2161
2162 @------------------------------------------------------------------------------
2163 @ SMLALD/SMLALDX
2164 @------------------------------------------------------------------------------
2165         smlald r2, r3, r5, r8
2166         smlaldx r2, r3, r5, r8
2167         ite eq
2168         smlaldeq r2, r3, r5, r8
2169         smlaldxne r2, r3, r5, r8
2170
2171 @ CHECK: smlald r2, r3, r5, r8          @ encoding: [0xc5,0xfb,0xc8,0x23]
2172 @ CHECK: smlaldx r2, r3, r5, r8         @ encoding: [0xc5,0xfb,0xd8,0x23]
2173 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
2174 @ CHECK: smlaldeq       r2, r3, r5, r8  @ encoding: [0xc5,0xfb,0xc8,0x23]
2175 @ CHECK: smlaldxne      r2, r3, r5, r8  @ encoding: [0xc5,0xfb,0xd8,0x23]
2176
2177
2178 @------------------------------------------------------------------------------
2179 @ SMLAWB/SMLAWT
2180 @------------------------------------------------------------------------------
2181         smlawb r2, r3, r10, r8
2182         smlawt r8, r3, r5, r9
2183         ite eq
2184         smlawbeq r2, r7, r5, r8
2185         smlawtne r1, r3, r0, r8
2186
2187 @ CHECK: smlawb r2, r3, r10, r8         @ encoding: [0x33,0xfb,0x0a,0x82]
2188 @ CHECK: smlawt r8, r3, r5, r9          @ encoding: [0x33,0xfb,0x15,0x98]
2189 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
2190 @ CHECK: smlawbeq       r2, r7, r5, r8  @ encoding: [0x37,0xfb,0x05,0x82]
2191 @ CHECK: smlawtne       r1, r3, r0, r8  @ encoding: [0x33,0xfb,0x10,0x81]
2192
2193
2194 @------------------------------------------------------------------------------
2195 @ SMLSD/SMLSDX
2196 @------------------------------------------------------------------------------
2197         smlsd r2, r3, r5, r8
2198         smlsdx r2, r3, r5, r8
2199         ite le
2200         smlsdle r2, r3, r5, r8
2201         smlsdxgt r2, r3, r5, r8
2202
2203 @ CHECK: smlsd  r2, r3, r5, r8          @ encoding: [0x43,0xfb,0x05,0x82]
2204 @ CHECK: smlsdx r2, r3, r5, r8          @ encoding: [0x43,0xfb,0x15,0x82]
2205 @ CHECK: ite    le                      @ encoding: [0xd4,0xbf]
2206 @ CHECK: smlsdle        r2, r3, r5, r8  @ encoding: [0x43,0xfb,0x05,0x82]
2207 @ CHECK: smlsdxgt       r2, r3, r5, r8  @ encoding: [0x43,0xfb,0x15,0x82]
2208
2209
2210 @------------------------------------------------------------------------------
2211 @ SMLSLD/SMLSLDX
2212 @------------------------------------------------------------------------------
2213         smlsld r2, r9, r5, r1
2214         smlsldx r4, r11, r2, r8
2215         ite ge
2216         smlsldge r8, r2, r5, r6
2217         smlsldxlt r1, r0, r3, r8
2218
2219 @ CHECK: smlsld r2, r9, r5, r1          @ encoding: [0xd5,0xfb,0xc1,0x29]
2220 @ CHECK: smlsldx        r4, r11, r2, r8 @ encoding: [0xd2,0xfb,0xd8,0x4b]
2221 @ CHECK: ite    ge                      @ encoding: [0xac,0xbf]
2222 @ CHECK: smlsldge       r8, r2, r5, r6  @ encoding: [0xd5,0xfb,0xc6,0x82]
2223 @ CHECK: smlsldxlt      r1, r0, r3, r8  @ encoding: [0xd3,0xfb,0xd8,0x10]
2224
2225
2226 @------------------------------------------------------------------------------
2227 @ SMMLA/SMMLAR
2228 @------------------------------------------------------------------------------
2229         smmla r1, r2, r3, r4
2230         smmlar r4, r3, r2, r1
2231         ite lo
2232         smmlalo r1, r2, r3, r4
2233         smmlarcs r4, r3, r2, r1
2234
2235 @ CHECK: smmla  r1, r2, r3, r4          @ encoding: [0x52,0xfb,0x03,0x41]
2236 @ CHECK: smmlar r4, r3, r2, r1          @ encoding: [0x53,0xfb,0x12,0x14]
2237 @ CHECK: ite    lo                      @ encoding: [0x34,0xbf]
2238 @ CHECK: smmlalo        r1, r2, r3, r4  @ encoding: [0x52,0xfb,0x03,0x41]
2239 @ CHECK: smmlarhs       r4, r3, r2, r1  @ encoding: [0x53,0xfb,0x12,0x14]
2240
2241
2242 @------------------------------------------------------------------------------
2243 @ SMMLS/SMMLSR
2244 @------------------------------------------------------------------------------
2245         smmls r1, r2, r3, r4
2246         smmlsr r4, r3, r2, r1
2247         ite lo
2248         smmlslo r1, r2, r3, r4
2249         smmlsrcs r4, r3, r2, r1
2250
2251 @ CHECK: smmls  r1, r2, r3, r4          @ encoding: [0x62,0xfb,0x03,0x41]
2252 @ CHECK: smmlsr r4, r3, r2, r1          @ encoding: [0x63,0xfb,0x12,0x14]
2253 @ CHECK: ite    lo                      @ encoding: [0x34,0xbf]
2254 @ CHECK: smmlslo        r1, r2, r3, r4  @ encoding: [0x62,0xfb,0x03,0x41]
2255 @ CHECK: smmlsrhs       r4, r3, r2, r1  @ encoding: [0x63,0xfb,0x12,0x14]
2256
2257
2258 @------------------------------------------------------------------------------
2259 @ SMMUL/SMMULR
2260 @------------------------------------------------------------------------------
2261         smmul r2, r3, r4
2262         smmulr r3, r2, r1
2263         ite cc
2264         smmulcc r2, r3, r4
2265         smmulrhs r3, r2, r1
2266
2267 @ CHECK: smmul  r2, r3, r4              @ encoding: [0x53,0xfb,0x04,0xf2]
2268 @ CHECK: smmulr r3, r2, r1              @ encoding: [0x52,0xfb,0x11,0xf3]
2269 @ CHECK: ite    lo                      @ encoding: [0x34,0xbf]
2270 @ CHECK: smmullo        r2, r3, r4      @ encoding: [0x53,0xfb,0x04,0xf2]
2271 @ CHECK: smmulrhs       r3, r2, r1      @ encoding: [0x52,0xfb,0x11,0xf3]
2272
2273
2274 @------------------------------------------------------------------------------
2275 @ SMUAD/SMUADX
2276 @------------------------------------------------------------------------------
2277         smuad r2, r3, r4
2278         smuadx r3, r2, r1
2279         ite lt
2280         smuadlt r2, r3, r4
2281         smuadxge r3, r2, r1
2282
2283 @ CHECK: smuad  r2, r3, r4              @ encoding: [0x23,0xfb,0x04,0xf2]
2284 @ CHECK: smuadx r3, r2, r1              @ encoding: [0x22,0xfb,0x11,0xf3]
2285 @ CHECK: ite    lt                      @ encoding: [0xb4,0xbf]
2286 @ CHECK: smuadlt        r2, r3, r4      @ encoding: [0x23,0xfb,0x04,0xf2]
2287 @ CHECK: smuadxge       r3, r2, r1      @ encoding: [0x22,0xfb,0x11,0xf3]
2288
2289
2290 @------------------------------------------------------------------------------
2291 @ SMULBB/SMULBT/SMULTB/SMULTT
2292 @------------------------------------------------------------------------------
2293         smulbb r3, r9, r0
2294         smulbt r5, r4, r1
2295         smultb r4, r2, r2
2296         smultt r8, r3, r4
2297         itete ge
2298         smulbbge r1, r9, r0
2299         smulbtlt r5, r6, r4
2300         smultbge r2, r3, r2
2301         smulttlt r8, r3, r4
2302
2303 @ CHECK: smulbb r3, r9, r0              @ encoding: [0x19,0xfb,0x00,0xf3]
2304 @ CHECK: smulbt r5, r4, r1              @ encoding: [0x14,0xfb,0x11,0xf5]
2305 @ CHECK: smultb r4, r2, r2              @ encoding: [0x12,0xfb,0x22,0xf4]
2306 @ CHECK: smultt r8, r3, r4              @ encoding: [0x13,0xfb,0x34,0xf8]
2307 @ CHECK: itete  ge                      @ encoding: [0xab,0xbf]
2308 @ CHECK: smulbbge       r1, r9, r0      @ encoding: [0x19,0xfb,0x00,0xf1]
2309 @ CHECK: smulbtlt       r5, r6, r4      @ encoding: [0x16,0xfb,0x14,0xf5]
2310 @ CHECK: smultbge       r2, r3, r2      @ encoding: [0x13,0xfb,0x22,0xf2]
2311 @ CHECK: smulttlt       r8, r3, r4      @ encoding: [0x13,0xfb,0x34,0xf8]
2312
2313
2314 @------------------------------------------------------------------------------
2315 @ SMULL
2316 @------------------------------------------------------------------------------
2317         smull r3, r9, r0, r1
2318         it eq
2319         smulleq r8, r3, r4, r5
2320
2321 @ CHECK: smull  r3, r9, r0, r1          @ encoding: [0x80,0xfb,0x01,0x39]
2322 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
2323 @ CHECK: smulleq r8, r3, r4, r5         @ encoding: [0x84,0xfb,0x05,0x83]
2324
2325
2326 @------------------------------------------------------------------------------
2327 @ SMULWB/SMULWT
2328 @------------------------------------------------------------------------------
2329         smulwb r3, r9, r0
2330         smulwt r3, r9, r2
2331         ite gt
2332         smulwbgt r3, r9, r0
2333         smulwtle r3, r9, r2
2334
2335 @ CHECK: smulwb r3, r9, r0              @ encoding: [0x39,0xfb,0x00,0xf3]
2336 @ CHECK: smulwt r3, r9, r2              @ encoding: [0x39,0xfb,0x12,0xf3]
2337 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
2338 @ CHECK: smulwbgt       r3, r9, r0      @ encoding: [0x39,0xfb,0x00,0xf3]
2339 @ CHECK: smulwtle       r3, r9, r2      @ encoding: [0x39,0xfb,0x12,0xf3]
2340
2341
2342 @------------------------------------------------------------------------------
2343 @ SMUSD/SMUSDX
2344 @------------------------------------------------------------------------------
2345         smusd r3, r0, r1
2346         smusdx r3, r9, r2
2347         ite eq
2348         smusdeq r8, r3, r2
2349         smusdxne r7, r4, r3
2350
2351 @ CHECK: smusd  r3, r0, r1              @ encoding: [0x40,0xfb,0x01,0xf3]
2352 @ CHECK: smusdx r3, r9, r2              @ encoding: [0x49,0xfb,0x12,0xf3]
2353 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
2354 @ CHECK: smusdeq        r8, r3, r2      @ encoding: [0x43,0xfb,0x02,0xf8]
2355 @ CHECK: smusdxne       r7, r4, r3      @ encoding: [0x44,0xfb,0x13,0xf7]
2356
2357
2358 @------------------------------------------------------------------------------
2359 @ SRS
2360 @------------------------------------------------------------------------------
2361         srsdb sp, #1
2362         srsia sp, #0
2363
2364         srsdb sp!, #19
2365         srsia sp!, #2
2366
2367         srsea sp, #10
2368         srsfd sp, #9
2369
2370         srsea sp!, #5
2371         srsfd sp!, #5
2372
2373         srs sp, #5
2374         srs sp!, #5
2375
2376 @ CHECK: srsdb  sp, #1                  @ encoding: [0x0d,0xe8,0x01,0xc0]
2377 @ CHECK: srsia  sp, #0                  @ encoding: [0x8d,0xe9,0x00,0xc0]
2378 @ CHECK: srsdb  sp!, #19                @ encoding: [0x2d,0xe8,0x13,0xc0]
2379 @ CHECK: srsia  sp!, #2                 @ encoding: [0xad,0xe9,0x02,0xc0]
2380 @ CHECK: srsia  sp, #10                 @ encoding: [0x8d,0xe9,0x0a,0xc0]
2381 @ CHECK: srsdb  sp, #9                  @ encoding: [0x0d,0xe8,0x09,0xc0]
2382 @ CHECK: srsia  sp!, #5                 @ encoding: [0xad,0xe9,0x05,0xc0]
2383 @ CHECK: srsdb  sp!, #5                 @ encoding: [0x2d,0xe8,0x05,0xc0]
2384 @ CHECK: srsia  sp, #5                  @ encoding: [0x8d,0xe9,0x05,0xc0]
2385 @ CHECK: srsia  sp!, #5                 @ encoding: [0xad,0xe9,0x05,0xc0]
2386
2387         srsdb #1
2388         srsia #0
2389
2390         srsdb #19!
2391         srsia #2!
2392
2393         srsea #10
2394         srsfd #9
2395
2396         srsea #5!
2397         srsfd #5!
2398
2399         srs #5
2400         srs #5!
2401
2402 @ CHECK: srsdb  sp, #1                  @ encoding: [0x0d,0xe8,0x01,0xc0]
2403 @ CHECK: srsia  sp, #0                  @ encoding: [0x8d,0xe9,0x00,0xc0]
2404 @ CHECK: srsdb  sp!, #19                @ encoding: [0x2d,0xe8,0x13,0xc0]
2405 @ CHECK: srsia  sp!, #2                 @ encoding: [0xad,0xe9,0x02,0xc0]
2406 @ CHECK: srsia  sp, #10                 @ encoding: [0x8d,0xe9,0x0a,0xc0]
2407 @ CHECK: srsdb  sp, #9                  @ encoding: [0x0d,0xe8,0x09,0xc0]
2408 @ CHECK: srsia  sp!, #5                 @ encoding: [0xad,0xe9,0x05,0xc0]
2409 @ CHECK: srsdb  sp!, #5                 @ encoding: [0x2d,0xe8,0x05,0xc0]
2410 @ CHECK: srsia  sp, #5                  @ encoding: [0x8d,0xe9,0x05,0xc0]
2411 @ CHECK: srsia  sp!, #5                 @ encoding: [0xad,0xe9,0x05,0xc0]
2412
2413
2414 @------------------------------------------------------------------------------
2415 @ SSAT
2416 @------------------------------------------------------------------------------
2417         ssat    r8, #1, r10
2418         ssat    r8, #1, r10, lsl #0
2419         ssat    r8, #1, r10, lsl #31
2420         ssat    r8, #1, r10, asr #1
2421
2422 @ CHECK: ssat   r8, #1, r10             @ encoding: [0x0a,0xf3,0x00,0x08]
2423 @ CHECK: ssat   r8, #1, r10             @ encoding: [0x0a,0xf3,0x00,0x08]
2424 @ CHECK: ssat   r8, #1, r10, lsl #31    @ encoding: [0x0a,0xf3,0xc0,0x78]
2425 @ CHECK: ssat   r8, #1, r10, asr #1     @ encoding: [0x2a,0xf3,0x40,0x08]
2426
2427
2428 @------------------------------------------------------------------------------
2429 @ SSAT16
2430 @------------------------------------------------------------------------------
2431         ssat16  r2, #1, r7
2432         ssat16  r3, #16, r5
2433
2434 @ CHECK: ssat16 r2, #1, r7              @ encoding: [0x27,0xf3,0x00,0x02]
2435 @ CHECK: ssat16 r3, #16, r5             @ encoding: [0x25,0xf3,0x0f,0x03]
2436
2437
2438 @------------------------------------------------------------------------------
2439 @ SSAX
2440 @------------------------------------------------------------------------------
2441         ssubaddx r2, r3, r4
2442         it lt
2443         ssubaddxlt r2, r3, r4
2444         ssax r2, r3, r4
2445         it lt
2446         ssaxlt r2, r3, r4
2447
2448 @ CHECK: ssax   r2, r3, r4              @ encoding: [0xe3,0xfa,0x04,0xf2]
2449 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
2450 @ CHECK: ssaxlt r2, r3, r4              @ encoding: [0xe3,0xfa,0x04,0xf2]
2451 @ CHECK: ssax   r2, r3, r4              @ encoding: [0xe3,0xfa,0x04,0xf2]
2452 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
2453 @ CHECK: ssaxlt r2, r3, r4              @ encoding: [0xe3,0xfa,0x04,0xf2]
2454
2455
2456 @------------------------------------------------------------------------------
2457 @ SSUB16/SSUB8
2458 @------------------------------------------------------------------------------
2459         ssub16 r1, r0, r6
2460         ssub8 r9, r2, r4
2461         ite ne
2462         ssub16ne r5, r3, r2
2463         ssub8eq r5, r1, r2
2464
2465 @ CHECK: ssub16 r1, r0, r6              @ encoding: [0xd0,0xfa,0x06,0xf1]
2466 @ CHECK: ssub8  r9, r2, r4              @ encoding: [0xc2,0xfa,0x04,0xf9]
2467 @ CHECK: ite    ne                      @ encoding: [0x14,0xbf]
2468 @ CHECK: ssub16ne       r5, r3, r2      @ encoding: [0xd3,0xfa,0x02,0xf5]
2469 @ CHECK: ssub8eq        r5, r1, r2      @ encoding: [0xc1,0xfa,0x02,0xf5]
2470
2471
2472 @------------------------------------------------------------------------------
2473 @ STC{L}/STC2{L}
2474 @------------------------------------------------------------------------------
2475         stc2 p0, c8, [r1, #4]
2476         stc2 p1, c7, [r2]
2477         stc2 p2, c6, [r3, #-224]
2478         stc2 p3, c5, [r4, #-120]!
2479         stc2 p4, c4, [r5], #16
2480         stc2 p5, c3, [r6], #-72
2481         stc2l p6, c2, [r7, #4]
2482         stc2l p7, c1, [r8]
2483         stc2l p8, c0, [r9, #-224]
2484         stc2l p9, c1, [r10, #-120]!
2485         stc2l p10, c2, [r11], #16
2486         stc2l p11, c3, [r12], #-72
2487
2488         stc p12, c4, [r0, #4]
2489         stc p13, c5, [r1]
2490         stc p14, c6, [r2, #-224]
2491         stc p15, c7, [r3, #-120]!
2492         stc p5, c8, [r4], #16
2493         stc p4, c9, [r5], #-72
2494         stcl p3, c10, [r6, #4]
2495         stcl p2, c11, [r7]
2496         stcl p1, c12, [r8, #-224]
2497         stcl p0, c13, [r9, #-120]!
2498         stcl p6, c14, [r10], #16
2499         stcl p7, c15, [r11], #-72
2500
2501         stc2 p2, c8, [r1], { 25 }
2502
2503 @ CHECK: stc2   p0, c8, [r1, #4]        @ encoding: [0x81,0xfd,0x01,0x80]
2504 @ CHECK: stc2   p1, c7, [r2]            @ encoding: [0x82,0xfd,0x00,0x71]
2505 @ CHECK: stc2   p2, c6, [r3, #-224]     @ encoding: [0x03,0xfd,0x38,0x62]
2506 @ CHECK: stc2   p3, c5, [r4, #-120]!    @ encoding: [0x24,0xfd,0x1e,0x53]
2507 @ CHECK: stc2   p4, c4, [r5], #16       @ encoding: [0xa5,0xfc,0x04,0x44]
2508 @ CHECK: stc2   p5, c3, [r6], #-72      @ encoding: [0x26,0xfc,0x12,0x35]
2509 @ CHECK: stc2l  p6, c2, [r7, #4]        @ encoding: [0xc7,0xfd,0x01,0x26]
2510 @ CHECK: stc2l  p7, c1, [r8]            @ encoding: [0xc8,0xfd,0x00,0x17]
2511 @ CHECK: stc2l  p8, c0, [r9, #-224]     @ encoding: [0x49,0xfd,0x38,0x08]
2512 @ CHECK: stc2l  p9, c1, [r10, #-120]!   @ encoding: [0x6a,0xfd,0x1e,0x19]
2513 @ CHECK: stc2l  p10, c2, [r11], #16     @ encoding: [0xeb,0xfc,0x04,0x2a]
2514 @ CHECK: stc2l  p11, c3, [r12], #-72    @ encoding: [0x6c,0xfc,0x12,0x3b]
2515
2516 @ CHECK: stc    p12, c4, [r0, #4]       @ encoding: [0x80,0xed,0x01,0x4c]
2517 @ CHECK: stc    p13, c5, [r1]           @ encoding: [0x81,0xed,0x00,0x5d]
2518 @ CHECK: stc    p14, c6, [r2, #-224]    @ encoding: [0x02,0xed,0x38,0x6e]
2519 @ CHECK: stc    p15, c7, [r3, #-120]!   @ encoding: [0x23,0xed,0x1e,0x7f]
2520 @ CHECK: stc    p5, c8, [r4], #16       @ encoding: [0xa4,0xec,0x04,0x85]
2521 @ CHECK: stc    p4, c9, [r5], #-72      @ encoding: [0x25,0xec,0x12,0x94]
2522 @ CHECK: stcl   p3, c10, [r6, #4]       @ encoding: [0xc6,0xed,0x01,0xa3]
2523 @ CHECK: stcl   p2, c11, [r7]           @ encoding: [0xc7,0xed,0x00,0xb2]
2524 @ CHECK: stcl   p1, c12, [r8, #-224]    @ encoding: [0x48,0xed,0x38,0xc1]
2525 @ CHECK: stcl   p0, c13, [r9, #-120]!   @ encoding: [0x69,0xed,0x1e,0xd0]
2526 @ CHECK: stcl   p6, c14, [r10], #16     @ encoding: [0xea,0xec,0x04,0xe6]
2527 @ CHECK: stcl   p7, c15, [r11], #-72    @ encoding: [0x6b,0xec,0x12,0xf7]
2528
2529 @ CHECK: stc2   p2, c8, [r1], {25}      @ encoding: [0x81,0xfc,0x19,0x82]
2530
2531
2532 @------------------------------------------------------------------------------
2533 @ STMIA
2534 @------------------------------------------------------------------------------
2535         stmia.w r4, {r4, r5, r8, r9}
2536         stmia.w r4, {r5, r6}
2537         stmia.w r5!, {r3, r8}
2538         stm.w r4, {r4, r5, r8, r9}
2539         stm.w r4, {r5, r6}
2540         stm.w r5!, {r3, r8}
2541         stm.w r5!, {r1, r2}
2542         stm.w r2, {r1, r2}
2543
2544         stmia r4, {r4, r5, r8, r9}
2545         stmia r4, {r5, r6}
2546         stmia r5!, {r3, r8}
2547         stm r4, {r4, r5, r8, r9}
2548         stm r4, {r5, r6}
2549         stm r5!, {r3, r8}
2550         stmea r5!, {r3, r8}
2551
2552 @ CHECK: stm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x84,0xe8,0x30,0x03]
2553 @ CHECK: stm.w  r4, {r5, r6}            @ encoding: [0x84,0xe8,0x60,0x00]
2554 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2555 @ CHECK: stm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x84,0xe8,0x30,0x03]
2556 @ CHECK: stm.w  r4, {r5, r6}            @ encoding: [0x84,0xe8,0x60,0x00]
2557 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2558 @ CHECK: stm.w  r5!, {r1, r2}           @ encoding: [0xa5,0xe8,0x06,0x00]
2559 @ CHECK: stm.w  r2, {r1, r2}            @ encoding: [0x82,0xe8,0x06,0x00]
2560
2561 @ CHECK: stm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x84,0xe8,0x30,0x03]
2562 @ CHECK: stm.w  r4, {r5, r6}            @ encoding: [0x84,0xe8,0x60,0x00]
2563 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2564 @ CHECK: stm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x84,0xe8,0x30,0x03]
2565 @ CHECK: stm.w  r4, {r5, r6}            @ encoding: [0x84,0xe8,0x60,0x00]
2566 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2567 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2568
2569
2570 @------------------------------------------------------------------------------
2571 @ STMDB
2572 @------------------------------------------------------------------------------
2573         stmdb r4, {r4, r5, r8, r9}
2574         stmdb r4, {r5, r6}
2575         stmdb r5!, {r3, r8}
2576         stmea r5!, {r3, r8}
2577         stmdb.w r5, {r0, r1}
2578
2579 @ CHECK: stmdb  r4, {r4, r5, r8, r9}    @ encoding: [0x04,0xe9,0x30,0x03]
2580 @ CHECK: stmdb  r4, {r5, r6}            @ encoding: [0x04,0xe9,0x60,0x00]
2581 @ CHECK: stmdb  r5!, {r3, r8}           @ encoding: [0x25,0xe9,0x08,0x01]
2582 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2583 @ CHECK: stmdb  r5, {r0, r1}            @ encoding: [0x05,0xe9,0x03,0x00]
2584
2585
2586 @------------------------------------------------------------------------------
2587 @ STR(immediate)
2588 @------------------------------------------------------------------------------
2589         str r5, [r5, #-4]
2590         str r5, [r6, #32]
2591         str r5, [r6, #33]
2592         str r5, [r6, #257]
2593         str.w pc, [r7, #257]
2594         str r2, [r4, #255]!
2595         str r8, [sp, #4]!
2596         str lr, [sp, #-4]!
2597         str r2, [r4], #255
2598         str r8, [sp], #4
2599         str lr, [sp], #-4
2600
2601 @ CHECK: str    r5, [r5, #-4]           @ encoding: [0x45,0xf8,0x04,0x5c]
2602 @ CHECK: str    r5, [r6, #32]           @ encoding: [0x35,0x62]
2603 @ CHECK: str.w  r5, [r6, #33]           @ encoding: [0xc6,0xf8,0x21,0x50]
2604 @ CHECK: str.w  r5, [r6, #257]          @ encoding: [0xc6,0xf8,0x01,0x51]
2605 @ CHECK: str.w  pc, [r7, #257]          @ encoding: [0xc7,0xf8,0x01,0xf1]
2606 @ CHECK: str    r2, [r4, #255]!         @ encoding: [0x44,0xf8,0xff,0x2f]
2607 @ CHECK: str    r8, [sp, #4]!           @ encoding: [0x4d,0xf8,0x04,0x8f]
2608 @ CHECK: str    lr, [sp, #-4]!          @ encoding: [0x4d,0xf8,0x04,0xed]
2609 @ CHECK: str    r2, [r4], #255          @ encoding: [0x44,0xf8,0xff,0x2b]
2610 @ CHECK: str    r8, [sp], #4            @ encoding: [0x4d,0xf8,0x04,0x8b]
2611 @ CHECK: str    lr, [sp], #-4           @ encoding: [0x4d,0xf8,0x04,0xe9]
2612
2613
2614 @------------------------------------------------------------------------------
2615 @ STR(register)
2616 @------------------------------------------------------------------------------
2617         str r1, [r8, r1]
2618         str.w r4, [r5, r2]
2619         str r6, [r0, r2, lsl #3]
2620         str r8, [r8, r2, lsl #2]
2621         str r7, [sp, r2, lsl #1]
2622         str r7, [sp, r2, lsl #0]
2623
2624 @ CHECK: str.w  r1, [r8, r1]            @ encoding: [0x48,0xf8,0x01,0x10]
2625 @ CHECK: str.w  r4, [r5, r2]            @ encoding: [0x45,0xf8,0x02,0x40]
2626 @ CHECK: str.w  r6, [r0, r2, lsl #3]    @ encoding: [0x40,0xf8,0x32,0x60]
2627 @ CHECK: str.w  r8, [r8, r2, lsl #2]    @ encoding: [0x48,0xf8,0x22,0x80]
2628 @ CHECK: str.w  r7, [sp, r2, lsl #1]    @ encoding: [0x4d,0xf8,0x12,0x70]
2629 @ CHECK: str.w  r7, [sp, r2]            @ encoding: [0x4d,0xf8,0x02,0x70]
2630
2631
2632 @------------------------------------------------------------------------------
2633 @ STRB(immediate)
2634 @------------------------------------------------------------------------------
2635         strb r5, [r5, #-4]
2636         strb r5, [r6, #32]
2637         strb r5, [r6, #33]
2638         strb r5, [r6, #257]
2639         strb.w lr, [r7, #257]
2640         strb r5, [r8, #255]!
2641         strb r2, [r5, #4]!
2642         strb r1, [r4, #-4]!
2643         strb lr, [r3], #255
2644         strb r9, [r2], #4
2645         strb r3, [sp], #-4
2646         strb r4, [r8, #-0]!
2647         strb r1, [r0], #-0
2648
2649 @ CHECK: strb   r5, [r5, #-4]           @ encoding: [0x05,0xf8,0x04,0x5c]
2650 @ CHECK: strb.w r5, [r6, #32]           @ encoding: [0x86,0xf8,0x20,0x50]
2651 @ CHECK: strb.w r5, [r6, #33]           @ encoding: [0x86,0xf8,0x21,0x50]
2652 @ CHECK: strb.w r5, [r6, #257]          @ encoding: [0x86,0xf8,0x01,0x51]
2653 @ CHECK: strb.w lr, [r7, #257]          @ encoding: [0x87,0xf8,0x01,0xe1]
2654 @ CHECK: strb   r5, [r8, #255]!         @ encoding: [0x08,0xf8,0xff,0x5f]
2655 @ CHECK: strb   r2, [r5, #4]!           @ encoding: [0x05,0xf8,0x04,0x2f]
2656 @ CHECK: strb   r1, [r4, #-4]!          @ encoding: [0x04,0xf8,0x04,0x1d]
2657 @ CHECK: strb   lr, [r3], #255          @ encoding: [0x03,0xf8,0xff,0xeb]
2658 @ CHECK: strb   r9, [r2], #4            @ encoding: [0x02,0xf8,0x04,0x9b]
2659 @ CHECK: strb   r3, [sp], #-4           @ encoding: [0x0d,0xf8,0x04,0x39]
2660 @ CHECK: strb   r4, [r8, #-0]!          @ encoding: [0x08,0xf8,0x00,0x4d]
2661 @ CHECK: strb   r1, [r0], #-0           @ encoding: [0x00,0xf8,0x00,0x19]
2662
2663
2664 @------------------------------------------------------------------------------
2665 @ STRB(register)
2666 @------------------------------------------------------------------------------
2667         strb r1, [r8, r1]
2668         strb.w r4, [r5, r2]
2669         strb r6, [r0, r2, lsl #3]
2670         strb r8, [r8, r2, lsl #2]
2671         strb r7, [sp, r2, lsl #1]
2672         strb r7, [sp, r2, lsl #0]
2673
2674 @ CHECK: strb.w r1, [r8, r1]            @ encoding: [0x08,0xf8,0x01,0x10]
2675 @ CHECK: strb.w r4, [r5, r2]            @ encoding: [0x05,0xf8,0x02,0x40]
2676 @ CHECK: strb.w r6, [r0, r2, lsl #3]    @ encoding: [0x00,0xf8,0x32,0x60]
2677 @ CHECK: strb.w r8, [r8, r2, lsl #2]    @ encoding: [0x08,0xf8,0x22,0x80]
2678 @ CHECK: strb.w r7, [sp, r2, lsl #1]    @ encoding: [0x0d,0xf8,0x12,0x70]
2679 @ CHECK: strb.w r7, [sp, r2]            @ encoding: [0x0d,0xf8,0x02,0x70]
2680
2681
2682 @------------------------------------------------------------------------------
2683 @ STRBT
2684 @------------------------------------------------------------------------------
2685         strbt r1, [r2]
2686         strbt r1, [r8, #0]
2687         strbt r1, [r8, #3]
2688         strbt r1, [r8, #255]
2689
2690 @ CHECK: strbt  r1, [r2]                @ encoding: [0x02,0xf8,0x00,0x1e]
2691 @ CHECK: strbt  r1, [r8]                @ encoding: [0x08,0xf8,0x00,0x1e]
2692 @ CHECK: strbt  r1, [r8, #3]            @ encoding: [0x08,0xf8,0x03,0x1e]
2693 @ CHECK: strbt  r1, [r8, #255]          @ encoding: [0x08,0xf8,0xff,0x1e]
2694
2695
2696 @------------------------------------------------------------------------------
2697 @ STRD
2698 @------------------------------------------------------------------------------
2699         strd r3, r5, [r6, #24]
2700         strd r3, r5, [r6, #24]!
2701         strd r3, r5, [r6], #4
2702         strd r3, r5, [r6], #-8
2703         strd r3, r5, [r6]
2704         strd r8, r1, [r3, #0]
2705         strd r0, r1, [r2, #-0]
2706         strd r0, r1, [r2, #-0]!
2707         strd r0, r1, [r2], #-0
2708
2709 @ CHECK: strd   r3, r5, [r6, #24]       @ encoding: [0xc6,0xe9,0x06,0x35]
2710 @ CHECK: strd   r3, r5, [r6, #24]!      @ encoding: [0xe6,0xe9,0x06,0x35]
2711 @ CHECK: strd   r3, r5, [r6], #4        @ encoding: [0xe6,0xe8,0x01,0x35]
2712 @ CHECK: strd   r3, r5, [r6], #-8       @ encoding: [0x66,0xe8,0x02,0x35]
2713 @ CHECK: strd   r3, r5, [r6]            @ encoding: [0xc6,0xe9,0x00,0x35]
2714 @ CHECK: strd   r8, r1, [r3]            @ encoding: [0xc3,0xe9,0x00,0x81]
2715 @ CHECK: strd   r0, r1, [r2, #-0]       @ encoding: [0x42,0xe9,0x00,0x01]
2716 @ CHECK: strd   r0, r1, [r2, #-0]!      @ encoding: [0x62,0xe9,0x00,0x01]
2717 @ CHECK: strd   r0, r1, [r2], #-0       @ encoding: [0x62,0xe8,0x00,0x01]
2718
2719
2720 @------------------------------------------------------------------------------
2721 @ STREX/STREXB/STREXH/STREXD
2722 @------------------------------------------------------------------------------
2723         strex r1, r8, [r4]
2724         strex r8, r2, [r4, #0]
2725         strex r2, r12, [sp, #128]
2726         strexb r5, r1, [r7]
2727         strexh r9, r7, [r12]
2728         strexd r9, r3, r6, [r4]
2729
2730 @ CHECK: strex  r1, r8, [r4]            @ encoding: [0x44,0xe8,0x00,0x81]
2731 @ CHECK: strex  r8, r2, [r4]            @ encoding: [0x44,0xe8,0x00,0x28]
2732 @ CHECK: strex  r2, r12, [sp, #128]     @ encoding: [0x4d,0xe8,0x20,0xc2]
2733 @ CHECK: strexb r5, r1, [r7]            @ encoding: [0xc7,0xe8,0x45,0x1f]
2734 @ CHECK: strexh r9, r7, [r12]           @ encoding: [0xcc,0xe8,0x59,0x7f]
2735 @ CHECK: strexd r9, r3, r6, [r4]        @ encoding: [0xc4,0xe8,0x79,0x36]
2736
2737
2738 @------------------------------------------------------------------------------
2739 @ STRH(immediate)
2740 @------------------------------------------------------------------------------
2741         strh r5, [r5, #-4]
2742         strh r5, [r6, #32]
2743         strh r5, [r6, #33]
2744         strh r5, [r6, #257]
2745         strh.w lr, [r7, #257]
2746         strh r5, [r8, #255]!
2747         strh r2, [r5, #4]!
2748         strh r1, [r4, #-4]!
2749         strh lr, [r3], #255
2750         strh r9, [r2], #4
2751         strh r3, [sp], #-4
2752
2753 @ CHECK: strh   r5, [r5, #-4]           @ encoding: [0x25,0xf8,0x04,0x5c]
2754 @ CHECK: strh   r5, [r6, #32]           @ encoding: [0x35,0x84]
2755 @ CHECK: strh.w r5, [r6, #33]           @ encoding: [0xa6,0xf8,0x21,0x50]
2756 @ CHECK: strh.w r5, [r6, #257]          @ encoding: [0xa6,0xf8,0x01,0x51]
2757 @ CHECK: strh.w lr, [r7, #257]          @ encoding: [0xa7,0xf8,0x01,0xe1]
2758 @ CHECK: strh   r5, [r8, #255]!         @ encoding: [0x28,0xf8,0xff,0x5f]
2759 @ CHECK: strh   r2, [r5, #4]!           @ encoding: [0x25,0xf8,0x04,0x2f]
2760 @ CHECK: strh   r1, [r4, #-4]!          @ encoding: [0x24,0xf8,0x04,0x1d]
2761 @ CHECK: strh   lr, [r3], #255          @ encoding: [0x23,0xf8,0xff,0xeb]
2762 @ CHECK: strh   r9, [r2], #4            @ encoding: [0x22,0xf8,0x04,0x9b]
2763 @ CHECK: strh   r3, [sp], #-4           @ encoding: [0x2d,0xf8,0x04,0x39]
2764
2765
2766 @------------------------------------------------------------------------------
2767 @ STRH(register)
2768 @------------------------------------------------------------------------------
2769         strh r1, [r8, r1]
2770         strh.w r4, [r5, r2]
2771         strh r6, [r0, r2, lsl #3]
2772         strh r8, [r8, r2, lsl #2]
2773         strh r7, [sp, r2, lsl #1]
2774         strh r7, [sp, r2, lsl #0]
2775
2776 @ CHECK: strh.w r1, [r8, r1]            @ encoding: [0x28,0xf8,0x01,0x10]
2777 @ CHECK: strh.w r4, [r5, r2]            @ encoding: [0x25,0xf8,0x02,0x40]
2778 @ CHECK: strh.w r6, [r0, r2, lsl #3]    @ encoding: [0x20,0xf8,0x32,0x60]
2779 @ CHECK: strh.w r8, [r8, r2, lsl #2]    @ encoding: [0x28,0xf8,0x22,0x80]
2780 @ CHECK: strh.w r7, [sp, r2, lsl #1]    @ encoding: [0x2d,0xf8,0x12,0x70]
2781 @ CHECK: strh.w r7, [sp, r2]            @ encoding: [0x2d,0xf8,0x02,0x70]
2782
2783
2784 @------------------------------------------------------------------------------
2785 @ STRHT
2786 @------------------------------------------------------------------------------
2787         strht r1, [r2]
2788         strht r1, [r8, #0]
2789         strht r1, [r8, #3]
2790         strht r1, [r8, #255]
2791
2792 @ CHECK: strht  r1, [r2]                @ encoding: [0x22,0xf8,0x00,0x1e]
2793 @ CHECK: strht  r1, [r8]                @ encoding: [0x28,0xf8,0x00,0x1e]
2794 @ CHECK: strht  r1, [r8, #3]            @ encoding: [0x28,0xf8,0x03,0x1e]
2795 @ CHECK: strht  r1, [r8, #255]          @ encoding: [0x28,0xf8,0xff,0x1e]
2796
2797
2798 @------------------------------------------------------------------------------
2799 @ STRT
2800 @------------------------------------------------------------------------------
2801         strt r1, [r2]
2802         strt r1, [r8, #0]
2803         strt r1, [r8, #3]
2804         strt r1, [r8, #255]
2805
2806 @ CHECK: strt   r1, [r2]                @ encoding: [0x42,0xf8,0x00,0x1e]
2807 @ CHECK: strt   r1, [r8]                @ encoding: [0x48,0xf8,0x00,0x1e]
2808 @ CHECK: strt   r1, [r8, #3]            @ encoding: [0x48,0xf8,0x03,0x1e]
2809 @ CHECK: strt   r1, [r8, #255]          @ encoding: [0x48,0xf8,0xff,0x1e]
2810
2811
2812 @------------------------------------------------------------------------------
2813 @ SUB (immediate)
2814 @------------------------------------------------------------------------------
2815         itet eq
2816         subeq r1, r2, #4
2817         subwne r5, r3, #1023
2818         subeq r4, r5, #293
2819         sub r2, sp, #1024
2820         sub r2, r8, #0xff00
2821         sub r2, r3, #257
2822         subw r2, r3, #257
2823         sub r12, r6, #0x100
2824         subw r12, r6, #0x100
2825         subs r1, r2, #0x1f0
2826         sub r2, #1
2827         sub r0, r0, #32
2828         subs r2, r2, #56
2829         subs r2, #56
2830
2831 @ CHECK: itet   eq                      @ encoding: [0x0a,0xbf]
2832 @ CHECK: subeq  r1, r2, #4              @ encoding: [0x11,0x1f]
2833 @ CHECK: subwne r5, r3, #1023           @ encoding: [0xa3,0xf2,0xff,0x35]
2834 @ CHECK: subweq r4, r5, #293            @ encoding: [0xa5,0xf2,0x25,0x14]
2835 @ CHECK: sub.w  r2, sp, #1024           @ encoding: [0xad,0xf5,0x80,0x62]
2836 @ CHECK: sub.w  r2, r8, #65280          @ encoding: [0xa8,0xf5,0x7f,0x42]
2837 @ CHECK: subw   r2, r3, #257            @ encoding: [0xa3,0xf2,0x01,0x12]
2838 @ CHECK: subw   r2, r3, #257            @ encoding: [0xa3,0xf2,0x01,0x12]
2839 @ CHECK: sub.w  r12, r6, #256           @ encoding: [0xa6,0xf5,0x80,0x7c]
2840 @ CHECK: subw   r12, r6, #256           @ encoding: [0xa6,0xf2,0x00,0x1c]
2841 @ CHECK: subs.w r1, r2, #496            @ encoding: [0xb2,0xf5,0xf8,0x71]
2842 @ CHECK: sub.w  r2, r2, #1              @ encoding: [0xa2,0xf1,0x01,0x02]
2843 @ CHECK: sub.w  r0, r0, #32             @ encoding: [0xa0,0xf1,0x20,0x00]
2844 @ CHECK: subs   r2, #56                 @ encoding: [0x38,0x3a]
2845 @ CHECK: subs   r2, #56                 @ encoding: [0x38,0x3a]
2846
2847
2848 @------------------------------------------------------------------------------
2849 @ SUB (register)
2850 @------------------------------------------------------------------------------
2851         sub r4, r5, r6
2852         sub r4, r5, r6, lsl #5
2853         sub r4, r5, r6, lsr #5
2854         sub.w r4, r5, r6, lsr #5
2855         sub r4, r5, r6, asr #5
2856         sub r4, r5, r6, ror #5
2857         sub.w r5, r2, r12, rrx
2858         sub r2, sp, ip
2859         sub sp, sp, ip
2860         sub sp, ip
2861         sub.w r2, sp, ip
2862         sub.w sp, sp, ip
2863         sub.w sp, ip
2864
2865 @ CHECK: sub.w  r4, r5, r6              @ encoding: [0xa5,0xeb,0x06,0x04]
2866 @ CHECK: sub.w  r4, r5, r6, lsl #5      @ encoding: [0xa5,0xeb,0x46,0x14]
2867 @ CHECK: sub.w  r4, r5, r6, lsr #5      @ encoding: [0xa5,0xeb,0x56,0x14]
2868 @ CHECK: sub.w  r4, r5, r6, lsr #5      @ encoding: [0xa5,0xeb,0x56,0x14]
2869 @ CHECK: sub.w  r4, r5, r6, asr #5      @ encoding: [0xa5,0xeb,0x66,0x14]
2870 @ CHECK: sub.w  r4, r5, r6, ror #5      @ encoding: [0xa5,0xeb,0x76,0x14]
2871 @ CHECK: sub.w r5, r2, r12, rrx         @ encoding: [0xa2,0xeb,0x3c,0x05]
2872 @ CHECK: sub.w  r2, sp, r12             @ encoding: [0xad,0xeb,0x0c,0x02]
2873 @ CHECK: sub.w  sp, sp, r12             @ encoding: [0xad,0xeb,0x0c,0x0d]
2874 @ CHECK: sub.w  sp, sp, r12             @ encoding: [0xad,0xeb,0x0c,0x0d]
2875 @ CHECK: sub.w  r2, sp, r12             @ encoding: [0xad,0xeb,0x0c,0x02]
2876 @ CHECK: sub.w  sp, sp, r12             @ encoding: [0xad,0xeb,0x0c,0x0d]
2877 @ CHECK: sub.w  sp, sp, r12             @ encoding: [0xad,0xeb,0x0c,0x0d]
2878
2879
2880 @------------------------------------------------------------------------------
2881 @ SVC
2882 @------------------------------------------------------------------------------
2883         svc #0
2884         ite eq
2885         svceq #255
2886         swine #33
2887
2888 @ CHECK: svc    #0                      @ encoding: [0x00,0xdf]
2889 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
2890 @ CHECK: svceq  #255                    @ encoding: [0xff,0xdf]
2891 @ CHECK: svcne  #33                     @ encoding: [0x21,0xdf]
2892
2893
2894 @------------------------------------------------------------------------------
2895 @ SXTAB
2896 @------------------------------------------------------------------------------
2897         sxtab r2, r3, r4
2898         sxtab r4, r5, r6, ror #0
2899         it lt
2900         sxtablt r6, r2, r9, ror #8
2901         sxtab r5, r1, r4, ror #16
2902         sxtab r7, r8, r3, ror #24
2903
2904 @ CHECK: sxtab  r2, r3, r4              @ encoding: [0x43,0xfa,0x84,0xf2]
2905 @ CHECK: sxtab  r4, r5, r6              @ encoding: [0x45,0xfa,0x86,0xf4]
2906 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
2907 @ CHECK: sxtablt r6, r2, r9, ror #8     @ encoding: [0x42,0xfa,0x99,0xf6]
2908 @ CHECK: sxtab  r5, r1, r4, ror #16     @ encoding: [0x41,0xfa,0xa4,0xf5]
2909 @ CHECK: sxtab  r7, r8, r3, ror #24     @ encoding: [0x48,0xfa,0xb3,0xf7]
2910
2911
2912 @------------------------------------------------------------------------------
2913 @ SXTAB16
2914 @------------------------------------------------------------------------------
2915         sxtab16 r6, r2, r7, ror #0
2916         sxtab16 r3, r5, r8, ror #8
2917         sxtab16 r3, r2, r1, ror #16
2918         ite ne
2919         sxtab16ne r0, r1, r4
2920         sxtab16eq r1, r2, r3, ror #24
2921
2922 @ CHECK: sxtab16 r6, r2, r7             @ encoding: [0x22,0xfa,0x87,0xf6]
2923 @ CHECK: sxtab16 r3, r5, r8, ror #8     @ encoding: [0x25,0xfa,0x98,0xf3]
2924 @ CHECK: sxtab16 r3, r2, r1, ror #16    @ encoding: [0x22,0xfa,0xa1,0xf3]
2925 @ CHECK: ite    ne                      @ encoding: [0x14,0xbf]
2926 @ CHECK: sxtab16ne r0, r1, r4           @ encoding: [0x21,0xfa,0x84,0xf0]
2927 @ CHECK: sxtab16eq r1, r2, r3, ror #24  @ encoding: [0x22,0xfa,0xb3,0xf1]
2928
2929
2930 @------------------------------------------------------------------------------
2931 @ SXTAH
2932 @------------------------------------------------------------------------------
2933         sxtah r1, r3, r9
2934         sxtah r3, r8, r3, ror #8
2935         sxtah r9, r3, r3, ror #24
2936         ite hi
2937         sxtahhi r6, r1, r6, ror #0
2938         sxtahls r2, r2, r4, ror #16
2939
2940 @ CHECK: sxtah  r1, r3, r9              @ encoding: [0x03,0xfa,0x89,0xf1]
2941 @ CHECK: sxtah  r3, r8, r3, ror #8      @ encoding: [0x08,0xfa,0x93,0xf3]
2942 @ CHECK: sxtah  r9, r3, r3, ror #24     @ encoding: [0x03,0xfa,0xb3,0xf9]
2943 @ CHECK: ite    hi                      @ encoding: [0x8c,0xbf]
2944 @ CHECK: sxtahhi r6, r1, r6             @ encoding: [0x01,0xfa,0x86,0xf6]
2945 @ CHECK: sxtahls r2, r2, r4, ror #16    @ encoding: [0x02,0xfa,0xa4,0xf2]
2946
2947
2948 @------------------------------------------------------------------------------
2949 @ SXTB
2950 @------------------------------------------------------------------------------
2951         sxtb r5, r6, ror #0
2952         sxtb r6, r9, ror #8
2953         sxtb r8, r3, ror #24
2954         ite ge
2955         sxtbge r2, r4
2956         sxtblt r5, r1, ror #16
2957         sxtb.w  r7, r8
2958
2959 @ CHECK: sxtb   r5, r6                  @ encoding: [0x75,0xb2]
2960 @ CHECK: sxtb.w r6, r9, ror #8          @ encoding: [0x4f,0xfa,0x99,0xf6]
2961 @ CHECK: sxtb.w r8, r3, ror #24         @ encoding: [0x4f,0xfa,0xb3,0xf8]
2962 @ CHECK: ite    ge                      @ encoding: [0xac,0xbf]
2963 @ CHECK: sxtbge r2, r4                  @ encoding: [0x62,0xb2]
2964 @ CHECK: sxtblt.w       r5, r1, ror #16 @ encoding: [0x4f,0xfa,0xa1,0xf5]
2965 @ CHECK: sxtb.w r7, r8                  @ encoding: [0x4f,0xfa,0x88,0xf7]
2966
2967
2968 @------------------------------------------------------------------------------
2969 @ SXTB16
2970 @------------------------------------------------------------------------------
2971         sxtb16 r1, r4
2972         sxtb16 r6, r7, ror #0
2973         sxtb16 r3, r1, ror #16
2974         ite cs
2975         sxtb16cs r3, r5, ror #8
2976         sxtb16lo r2, r3, ror #24
2977
2978 @ CHECK: sxtb16 r1, r4                  @ encoding: [0x2f,0xfa,0x84,0xf1]
2979 @ CHECK: sxtb16 r6, r7                  @ encoding: [0x2f,0xfa,0x87,0xf6]
2980 @ CHECK: sxtb16 r3, r1, ror #16         @ encoding: [0x2f,0xfa,0xa1,0xf3]
2981 @ CHECK: ite    hs                      @ encoding: [0x2c,0xbf]
2982 @ CHECK: sxtb16hs       r3, r5, ror #8  @ encoding: [0x2f,0xfa,0x95,0xf3]
2983 @ CHECK: sxtb16lo       r2, r3, ror #24 @ encoding: [0x2f,0xfa,0xb3,0xf2]
2984
2985
2986 @------------------------------------------------------------------------------
2987 @ SXTH
2988 @------------------------------------------------------------------------------
2989         sxth r1, r6, ror #0
2990         sxth r3, r8, ror #8
2991         sxth r9, r3, ror #24
2992         itt ne
2993         sxthne r3, r9
2994         sxthne r2, r2, ror #16
2995         sxth.w  r7, r8
2996
2997 @ CHECK: sxth   r1, r6                  @ encoding: [0x31,0xb2]
2998 @ CHECK: sxth.w r3, r8, ror #8          @ encoding: [0x0f,0xfa,0x98,0xf3]
2999 @ CHECK: sxth.w r9, r3, ror #24         @ encoding: [0x0f,0xfa,0xb3,0xf9]
3000 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
3001 @ CHECK: sxthne.w       r3, r9          @ encoding: [0x0f,0xfa,0x89,0xf3]
3002 @ CHECK: sxthne.w       r2, r2, ror #16 @ encoding: [0x0f,0xfa,0xa2,0xf2]
3003 @ CHECK: sxth.w r7, r8                  @ encoding: [0x0f,0xfa,0x88,0xf7]
3004
3005
3006 @------------------------------------------------------------------------------
3007 @ SXTB
3008 @------------------------------------------------------------------------------
3009         sxtb r5, r6, ror #0
3010         sxtb.w r6, r9, ror #8
3011         sxtb r8, r3, ror #24
3012         ite ge
3013         sxtbge r2, r4
3014         sxtblt r5, r1, ror #16
3015
3016 @ CHECK: sxtb   r5, r6                  @ encoding: [0x75,0xb2]
3017 @ CHECK: sxtb.w r6, r9, ror #8          @ encoding: [0x4f,0xfa,0x99,0xf6]
3018 @ CHECK: sxtb.w r8, r3, ror #24         @ encoding: [0x4f,0xfa,0xb3,0xf8]
3019 @ CHECK: ite    ge                      @ encoding: [0xac,0xbf]
3020 @ CHECK: sxtbge r2, r4                  @ encoding: [0x62,0xb2]
3021 @ CHECK: sxtblt.w       r5, r1, ror #16 @ encoding: [0x4f,0xfa,0xa1,0xf5]
3022
3023
3024 @------------------------------------------------------------------------------
3025 @ SXTB16
3026 @------------------------------------------------------------------------------
3027         sxtb16 r1, r4
3028         sxtb16 r6, r7, ror #0
3029         sxtb16 r3, r1, ror #16
3030         ite cs
3031         sxtb16cs r3, r5, ror #8
3032         sxtb16lo r2, r3, ror #24
3033
3034 @ CHECK: sxtb16 r1, r4                  @ encoding: [0x2f,0xfa,0x84,0xf1]
3035 @ CHECK: sxtb16 r6, r7                  @ encoding: [0x2f,0xfa,0x87,0xf6]
3036 @ CHECK: sxtb16 r3, r1, ror #16         @ encoding: [0x2f,0xfa,0xa1,0xf3]
3037 @ CHECK: ite    hs                      @ encoding: [0x2c,0xbf]
3038 @ CHECK: sxtb16hs       r3, r5, ror #8  @ encoding: [0x2f,0xfa,0x95,0xf3]
3039 @ CHECK: sxtb16lo       r2, r3, ror #24 @ encoding: [0x2f,0xfa,0xb3,0xf2]
3040
3041
3042 @------------------------------------------------------------------------------
3043 @ SXTH
3044 @------------------------------------------------------------------------------
3045         sxth r1, r6, ror #0
3046         sxth.w r3, r8, ror #8
3047         sxth r9, r3, ror #24
3048         itt ne
3049         sxthne r3, r9
3050         sxthne r2, r2, ror #16
3051
3052 @ CHECK: sxth   r1, r6                  @ encoding: [0x31,0xb2]
3053 @ CHECK: sxth.w r3, r8, ror #8          @ encoding: [0x0f,0xfa,0x98,0xf3]
3054 @ CHECK: sxth.w r9, r3, ror #24         @ encoding: [0x0f,0xfa,0xb3,0xf9]
3055 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
3056 @ CHECK: sxthne.w       r3, r9          @ encoding: [0x0f,0xfa,0x89,0xf3]
3057 @ CHECK: sxthne.w       r2, r2, ror #16 @ encoding: [0x0f,0xfa,0xa2,0xf2]
3058
3059
3060 @------------------------------------------------------------------------------
3061 @ TBB/TBH
3062 @------------------------------------------------------------------------------
3063         tbb [r3, r8]
3064         tbh [r3, r8, lsl #1]
3065         it eq
3066         tbbeq [r3, r8]
3067         it cs
3068         tbhcs [r3, r8, lsl #1]
3069
3070 @ CHECK: tbb    [r3, r8]                @ encoding: [0xd3,0xe8,0x08,0xf0]
3071 @ CHECK: tbh    [r3, r8, lsl #1]        @ encoding: [0xd3,0xe8,0x18,0xf0]
3072 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
3073 @ CHECK: tbbeq  [r3, r8]                @ encoding: [0xd3,0xe8,0x08,0xf0]
3074 @ CHECK: it     hs                      @ encoding: [0x28,0xbf]
3075 @ CHECK: tbhhs  [r3, r8, lsl #1]        @ encoding: [0xd3,0xe8,0x18,0xf0]
3076
3077
3078 @------------------------------------------------------------------------------
3079 @ TEQ
3080 @------------------------------------------------------------------------------
3081         teq r5, #0xf000
3082         teq r4, r5
3083         teq r4, r5, lsl #5
3084         teq r4, r5, lsr #5
3085         teq r4, r5, lsr #5
3086         teq r4, r5, asr #5
3087         teq r4, r5, ror #5
3088
3089 @ CHECK: teq.w  r5, #61440              @ encoding: [0x95,0xf4,0x70,0x4f]
3090 @ CHECK: teq.w  r4, r5                  @ encoding: [0x94,0xea,0x05,0x0f]
3091 @ CHECK: teq.w  r4, r5, lsl #5          @ encoding: [0x94,0xea,0x45,0x1f]
3092 @ CHECK: teq.w  r4, r5, lsr #5          @ encoding: [0x94,0xea,0x55,0x1f]
3093 @ CHECK: teq.w  r4, r5, lsr #5          @ encoding: [0x94,0xea,0x55,0x1f]
3094 @ CHECK: teq.w  r4, r5, asr #5          @ encoding: [0x94,0xea,0x65,0x1f]
3095 @ CHECK: teq.w  r4, r5, ror #5          @ encoding: [0x94,0xea,0x75,0x1f]
3096
3097
3098 @------------------------------------------------------------------------------
3099 @ TST
3100 @------------------------------------------------------------------------------
3101         tst r5, #0xf000
3102         tst r2, r5
3103         tst r3, r12, lsl #5
3104         tst r4, r11, lsr #4
3105         tst r5, r10, lsr #12
3106         tst r6, r9, asr #30
3107         tst r7, r8, ror #2
3108
3109 @ CHECK: tst.w  r5, #61440              @ encoding: [0x15,0xf4,0x70,0x4f]
3110 @ CHECK: tst    r2, r5                  @ encoding: [0x2a,0x42]
3111 @ CHECK: tst.w  r3, r12, lsl #5         @ encoding: [0x13,0xea,0x4c,0x1f]
3112 @ CHECK: tst.w  r4, r11, lsr #4         @ encoding: [0x14,0xea,0x1b,0x1f]
3113 @ CHECK: tst.w  r5, r10, lsr #12        @ encoding: [0x15,0xea,0x1a,0x3f]
3114 @ CHECK: tst.w  r6, r9, asr #30         @ encoding: [0x16,0xea,0xa9,0x7f]
3115 @ CHECK: tst.w  r7, r8, ror #2          @ encoding: [0x17,0xea,0xb8,0x0f]
3116
3117
3118 @------------------------------------------------------------------------------
3119 @ UADD16/UADD8
3120 @------------------------------------------------------------------------------
3121         uadd16 r1, r2, r3
3122         uadd8 r1, r2, r3
3123         ite gt
3124         uadd16gt r1, r2, r3
3125         uadd8le r1, r2, r3
3126
3127 @ CHECK: uadd16 r1, r2, r3              @ encoding: [0x92,0xfa,0x43,0xf1]
3128 @ CHECK: uadd8  r1, r2, r3              @ encoding: [0x82,0xfa,0x43,0xf1]
3129 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3130 @ CHECK: uadd16gt       r1, r2, r3      @ encoding: [0x92,0xfa,0x43,0xf1]
3131 @ CHECK: uadd8le        r1, r2, r3      @ encoding: [0x82,0xfa,0x43,0xf1]
3132
3133
3134 @------------------------------------------------------------------------------
3135 @ UASX
3136 @------------------------------------------------------------------------------
3137         uasx r9, r12, r0
3138         it eq
3139         uasxeq r9, r12, r0
3140         uaddsubx r9, r12, r0
3141         it eq
3142         uaddsubxeq r9, r12, r0
3143
3144 @ CHECK: uasx   r9, r12, r0             @ encoding: [0xac,0xfa,0x40,0xf9]
3145 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
3146 @ CHECK: uasxeq r9, r12, r0             @ encoding: [0xac,0xfa,0x40,0xf9]
3147 @ CHECK: uasx   r9, r12, r0             @ encoding: [0xac,0xfa,0x40,0xf9]
3148 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
3149 @ CHECK: uasxeq r9, r12, r0             @ encoding: [0xac,0xfa,0x40,0xf9]
3150
3151
3152 @------------------------------------------------------------------------------
3153 @ UBFX
3154 @------------------------------------------------------------------------------
3155         ubfx r4, r5, #16, #1
3156         it gt
3157         ubfxgt r4, r5, #16, #16
3158
3159 @ CHECK: ubfx   r4, r5, #16, #1         @ encoding: [0xc5,0xf3,0x00,0x44]
3160 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
3161 @ CHECK: ubfxgt r4, r5, #16, #16        @ encoding: [0xc5,0xf3,0x0f,0x44]
3162
3163
3164 @------------------------------------------------------------------------------
3165 @ UHADD16/UHADD8
3166 @------------------------------------------------------------------------------
3167         uhadd16 r4, r8, r2
3168         uhadd8 r4, r8, r2
3169         itt gt
3170         uhadd16gt r4, r8, r2
3171         uhadd8gt r4, r8, r2
3172
3173 @ CHECK: uhadd16        r4, r8, r2      @ encoding: [0x98,0xfa,0x62,0xf4]
3174 @ CHECK: uhadd8 r4, r8, r2              @ encoding: [0x88,0xfa,0x62,0xf4]
3175 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
3176 @ CHECK: uhadd16gt      r4, r8, r2      @ encoding: [0x98,0xfa,0x62,0xf4]
3177 @ CHECK: uhadd8gt       r4, r8, r2      @ encoding: [0x88,0xfa,0x62,0xf4]
3178
3179
3180 @------------------------------------------------------------------------------
3181 @ UHASX/UHSAX
3182 @------------------------------------------------------------------------------
3183         uhasx r4, r1, r5
3184         uhsax r5, r6, r6
3185         itt gt
3186         uhasxgt r6, r9, r8
3187         uhsaxgt r7, r8, r12
3188         uhaddsubx r4, r1, r5
3189         uhsubaddx r5, r6, r6
3190         itt gt
3191         uhaddsubxgt r6, r9, r8
3192         uhsubaddxgt r7, r8, r12
3193
3194 @ CHECK: uhasx  r4, r1, r5              @ encoding: [0xa1,0xfa,0x65,0xf4]
3195 @ CHECK: uhsax  r5, r6, r6              @ encoding: [0xe6,0xfa,0x66,0xf5]
3196 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
3197 @ CHECK: uhasxgt r6, r9, r8             @ encoding: [0xa9,0xfa,0x68,0xf6]
3198 @ CHECK: uhsaxgt r7, r8, r12            @ encoding: [0xe8,0xfa,0x6c,0xf7]
3199 @ CHECK: uhasx  r4, r1, r5              @ encoding: [0xa1,0xfa,0x65,0xf4]
3200 @ CHECK: uhsax  r5, r6, r6              @ encoding: [0xe6,0xfa,0x66,0xf5]
3201 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
3202 @ CHECK: uhasxgt r6, r9, r8             @ encoding: [0xa9,0xfa,0x68,0xf6]
3203 @ CHECK: uhsaxgt r7, r8, r12            @ encoding: [0xe8,0xfa,0x6c,0xf7]
3204
3205
3206 @------------------------------------------------------------------------------
3207 @ UHSUB16/UHSUB8
3208 @------------------------------------------------------------------------------
3209         uhsub16 r5, r8, r3
3210         uhsub8 r1, r7, r6
3211         itt lt
3212         uhsub16lt r4, r9, r12
3213         uhsub8lt r3, r1, r5
3214
3215 @ CHECK: uhsub16        r5, r8, r3      @ encoding: [0xd8,0xfa,0x63,0xf5]
3216 @ CHECK: uhsub8 r1, r7, r6              @ encoding: [0xc7,0xfa,0x66,0xf1]
3217 @ CHECK: itt    lt                      @ encoding: [0xbc,0xbf]
3218 @ CHECK: uhsub16lt      r4, r9, r12     @ encoding: [0xd9,0xfa,0x6c,0xf4]
3219 @ CHECK: uhsub8lt       r3, r1, r5      @ encoding: [0xc1,0xfa,0x65,0xf3]
3220
3221
3222 @------------------------------------------------------------------------------
3223 @ UMAAL
3224 @------------------------------------------------------------------------------
3225         umaal r3, r4, r5, r6
3226         it lt
3227         umaallt r3, r4, r5, r6
3228
3229 @ CHECK: umaal  r3, r4, r5, r6          @ encoding: [0xe5,0xfb,0x66,0x34]
3230 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
3231 @ CHECK: umaallt        r3, r4, r5, r6  @ encoding: [0xe5,0xfb,0x66,0x34]
3232
3233
3234 @------------------------------------------------------------------------------
3235 @ UMLAL
3236 @------------------------------------------------------------------------------
3237         umlal r2, r4, r6, r8
3238         it gt
3239         umlalgt r6, r1, r2, r6
3240
3241 @ CHECK: umlal  r2, r4, r6, r8          @ encoding: [0xe6,0xfb,0x08,0x24]
3242 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
3243 @ CHECK: umlalgt        r6, r1, r2, r6  @ encoding: [0xe2,0xfb,0x06,0x61]
3244
3245
3246 @------------------------------------------------------------------------------
3247 @ UMULL
3248 @------------------------------------------------------------------------------
3249         umull r2, r4, r6, r8
3250         it gt
3251         umullgt r6, r1, r2, r6
3252
3253 @ CHECK: umull  r2, r4, r6, r8          @ encoding: [0xa6,0xfb,0x08,0x24]
3254 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
3255 @ CHECK: umullgt        r6, r1, r2, r6  @ encoding: [0xa2,0xfb,0x06,0x61]
3256
3257
3258 @------------------------------------------------------------------------------
3259 @ UQADD16/UQADD8
3260 @------------------------------------------------------------------------------
3261         uqadd16 r1, r2, r3
3262         uqadd8 r3, r4, r8
3263         ite gt
3264         uqadd16gt r4, r7, r9
3265         uqadd8le r8, r1, r2
3266
3267 @ CHECK: uqadd16        r1, r2, r3      @ encoding: [0x92,0xfa,0x53,0xf1]
3268 @ CHECK: uqadd8 r3, r4, r8              @ encoding: [0x84,0xfa,0x58,0xf3]
3269 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3270 @ CHECK: uqadd16gt      r4, r7, r9      @ encoding: [0x97,0xfa,0x59,0xf4]
3271 @ CHECK: uqadd8le       r8, r1, r2      @ encoding: [0x81,0xfa,0x52,0xf8]
3272
3273
3274 @------------------------------------------------------------------------------
3275 @ UQASX/UQSAX
3276 @------------------------------------------------------------------------------
3277         uqasx r1, r2, r3
3278         uqsax r3, r4, r8
3279         ite gt
3280         uqasxgt r4, r7, r9
3281         uqsaxle r8, r1, r2
3282
3283         uqaddsubx r1, r2, r3
3284         uqsubaddx r3, r4, r8
3285         ite gt
3286         uqaddsubxgt r4, r7, r9
3287         uqsubaddxle r8, r1, r2
3288
3289 @ CHECK: uqasx  r1, r2, r3              @ encoding: [0xa2,0xfa,0x53,0xf1]
3290 @ CHECK: uqsax  r3, r4, r8              @ encoding: [0xe4,0xfa,0x58,0xf3]
3291 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3292 @ CHECK: uqasxgt r4, r7, r9             @ encoding: [0xa7,0xfa,0x59,0xf4]
3293 @ CHECK: uqsaxle r8, r1, r2             @ encoding: [0xe1,0xfa,0x52,0xf8]
3294
3295 @ CHECK: uqasx  r1, r2, r3              @ encoding: [0xa2,0xfa,0x53,0xf1]
3296 @ CHECK: uqsax  r3, r4, r8              @ encoding: [0xe4,0xfa,0x58,0xf3]
3297 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3298 @ CHECK: uqasxgt r4, r7, r9             @ encoding: [0xa7,0xfa,0x59,0xf4]
3299 @ CHECK: uqsaxle r8, r1, r2             @ encoding: [0xe1,0xfa,0x52,0xf8]
3300
3301
3302 @------------------------------------------------------------------------------
3303 @ UQSUB16/UQSUB8
3304 @------------------------------------------------------------------------------
3305         uqsub8 r8, r2, r9
3306         uqsub16 r1, r9, r7
3307         ite gt
3308         uqsub8gt r3, r1, r6
3309         uqsub16le r4, r6, r4
3310
3311 @ CHECK: uqsub8 r8, r2, r9              @ encoding: [0xc2,0xfa,0x59,0xf8]
3312 @ CHECK: uqsub16 r1, r9, r7             @ encoding: [0xd9,0xfa,0x57,0xf1]
3313 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3314 @ CHECK: uqsub8gt       r3, r1, r6      @ encoding: [0xc1,0xfa,0x56,0xf3]
3315 @ CHECK: uqsub16le      r4, r6, r4      @ encoding: [0xd6,0xfa,0x54,0xf4]
3316
3317
3318 @------------------------------------------------------------------------------
3319 @ UQSUB16/UQSUB8
3320 @------------------------------------------------------------------------------
3321         usad8 r1, r9, r7
3322         usada8 r8, r2, r9, r12
3323         ite gt
3324         usada8gt r3, r1, r6, r9
3325         usad8le r4, r6, r4
3326
3327 @ CHECK: usad8  r1, r9, r7              @ encoding: [0x79,0xfb,0x07,0xf1]
3328 @ CHECK: usada8 r8, r2, r9, r12         @ encoding: [0x72,0xfb,0x09,0xc8]
3329 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3330 @ CHECK: usada8gt       r3, r1, r6, r9  @ encoding: [0x71,0xfb,0x06,0x93]
3331 @ CHECK: usad8le        r4, r6, r4      @ encoding: [0x76,0xfb,0x04,0xf4]
3332
3333
3334 @------------------------------------------------------------------------------
3335 @ USAT
3336 @------------------------------------------------------------------------------
3337         usat    r8, #1, r10
3338         usat    r8, #4, r10, lsl #0
3339         usat    r8, #5, r10, lsl #31
3340         usat    r8, #16, r10, asr #1
3341
3342 @ CHECK: usat   r8, #1, r10             @ encoding: [0x8a,0xf3,0x01,0x08]
3343 @ CHECK: usat   r8, #4, r10             @ encoding: [0x8a,0xf3,0x04,0x08]
3344 @ CHECK: usat   r8, #5, r10, lsl #31    @ encoding: [0x8a,0xf3,0xc5,0x78]
3345 @ CHECK: usat   r8, #16, r10, asr #1    @ encoding: [0xaa,0xf3,0x50,0x08]
3346
3347
3348 @------------------------------------------------------------------------------
3349 @ USAT16
3350 @------------------------------------------------------------------------------
3351         usat16  r2, #2, r7
3352         usat16  r3, #15, r5
3353
3354 @ CHECK: usat16 r2, #2, r7              @ encoding: [0xa7,0xf3,0x02,0x02]
3355 @ CHECK: usat16 r3, #15, r5             @ encoding: [0xa5,0xf3,0x0f,0x03]
3356
3357
3358 @------------------------------------------------------------------------------
3359 @ USAX
3360 @------------------------------------------------------------------------------
3361         usax r2, r3, r4
3362         it ne
3363         usaxne r6, r1, r9
3364         usubaddx r2, r3, r4
3365         it ne
3366         usubaddxne r6, r1, r9
3367
3368 @ CHECK: usax   r2, r3, r4              @ encoding: [0xe3,0xfa,0x44,0xf2]
3369 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
3370 @ CHECK: usaxne r6, r1, r9              @ encoding: [0xe1,0xfa,0x49,0xf6]
3371 @ CHECK: usax   r2, r3, r4              @ encoding: [0xe3,0xfa,0x44,0xf2]
3372 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
3373 @ CHECK: usaxne r6, r1, r9              @ encoding: [0xe1,0xfa,0x49,0xf6]
3374
3375
3376 @------------------------------------------------------------------------------
3377 @ USUB16/USUB8
3378 @------------------------------------------------------------------------------
3379         usub16 r4, r2, r7
3380         usub8 r1, r8, r5
3381         ite hi
3382         usub16hi r1, r1, r3
3383         usub8ls r9, r2, r3
3384
3385 @ CHECK: usub16 r4, r2, r7              @ encoding: [0xd2,0xfa,0x47,0xf4]
3386 @ CHECK: usub8  r1, r8, r5              @ encoding: [0xc8,0xfa,0x45,0xf1]
3387 @ CHECK: ite    hi                      @ encoding: [0x8c,0xbf]
3388 @ CHECK: usub16hi       r1, r1, r3      @ encoding: [0xd1,0xfa,0x43,0xf1]
3389 @ CHECK: usub8ls        r9, r2, r3      @ encoding: [0xc2,0xfa,0x43,0xf9]
3390
3391
3392 @------------------------------------------------------------------------------
3393 @ UXTAB
3394 @------------------------------------------------------------------------------
3395         uxtab r2, r3, r4
3396         uxtab r4, r5, r6, ror #0
3397         it lt
3398         uxtablt r6, r2, r9, ror #8
3399         uxtab r5, r1, r4, ror #16
3400         uxtab r7, r8, r3, ror #24
3401
3402 @ CHECK: uxtab  r2, r3, r4              @ encoding: [0x53,0xfa,0x84,0xf2]
3403 @ CHECK: uxtab  r4, r5, r6              @ encoding: [0x55,0xfa,0x86,0xf4]
3404 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
3405 @ CHECK: uxtablt r6, r2, r9, ror #8     @ encoding: [0x52,0xfa,0x99,0xf6]
3406 @ CHECK: uxtab  r5, r1, r4, ror #16     @ encoding: [0x51,0xfa,0xa4,0xf5]
3407 @ CHECK: uxtab  r7, r8, r3, ror #24     @ encoding: [0x58,0xfa,0xb3,0xf7]
3408
3409
3410 @------------------------------------------------------------------------------
3411 @ UXTAB16
3412 @------------------------------------------------------------------------------
3413         it ge
3414         uxtab16ge r0, r1, r4
3415         uxtab16 r6, r2, r7, ror #0
3416         uxtab16 r3, r5, r8, ror #8
3417         uxtab16 r3, r2, r1, ror #16
3418         it eq
3419         uxtab16eq r1, r2, r3, ror #24
3420
3421 @ CHECK: it     ge                      @ encoding: [0xa8,0xbf]
3422 @ CHECK: uxtab16ge      r0, r1, r4      @ encoding: [0x31,0xfa,0x84,0xf0]
3423 @ CHECK: uxtab16 r6, r2, r7             @ encoding: [0x32,0xfa,0x87,0xf6]
3424 @ CHECK: uxtab16 r3, r5, r8, ror #8     @ encoding: [0x35,0xfa,0x98,0xf3]
3425 @ CHECK: uxtab16 r3, r2, r1, ror #16    @ encoding: [0x32,0xfa,0xa1,0xf3]
3426 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
3427 @ CHECK: uxtab16eq r1, r2, r3, ror #24  @ encoding: [0x32,0xfa,0xb3,0xf1]
3428
3429
3430 @------------------------------------------------------------------------------
3431 @ UXTAH
3432 @------------------------------------------------------------------------------
3433         uxtah r1, r3, r9
3434         it hi
3435         uxtahhi r6, r1, r6, ror #0
3436         uxtah r3, r8, r3, ror #8
3437         it lo
3438         uxtahlo r2, r2, r4, ror #16
3439         uxtah r9, r3, r3, ror #24
3440
3441 @ CHECK: uxtah  r1, r3, r9              @ encoding: [0x13,0xfa,0x89,0xf1]
3442 @ CHECK: it     hi                      @ encoding: [0x88,0xbf]
3443 @ CHECK: uxtahhi r6, r1, r6             @ encoding: [0x11,0xfa,0x86,0xf6]
3444 @ CHECK: uxtah  r3, r8, r3, ror #8      @ encoding: [0x18,0xfa,0x93,0xf3]
3445 @ CHECK: it     lo                      @ encoding: [0x38,0xbf]
3446 @ CHECK: uxtahlo r2, r2, r4, ror #16    @ encoding: [0x12,0xfa,0xa4,0xf2]
3447 @ CHECK: uxtah  r9, r3, r3, ror #24     @ encoding: [0x13,0xfa,0xb3,0xf9]
3448
3449
3450 @------------------------------------------------------------------------------
3451 @ UXTB
3452 @------------------------------------------------------------------------------
3453         it ge
3454         uxtbge r2, r4
3455         uxtb r5, r6, ror #0
3456         uxtb r6, r9, ror #8
3457         it cc
3458         uxtbcc r5, r1, ror #16
3459         uxtb r8, r3, ror #24
3460         uxtb.w  r7, r8
3461
3462 @ CHECK: it     ge                      @ encoding: [0xa8,0xbf]
3463 @ CHECK: uxtbge r2, r4                  @ encoding: [0xe2,0xb2]
3464 @ CHECK: uxtb   r5, r6                  @ encoding: [0xf5,0xb2]
3465 @ CHECK: uxtb.w r6, r9, ror #8          @ encoding: [0x5f,0xfa,0x99,0xf6]
3466 @ CHECK: it     lo                      @ encoding: [0x38,0xbf]
3467 @ CHECK: uxtblo.w       r5, r1, ror #16 @ encoding: [0x5f,0xfa,0xa1,0xf5]
3468 @ CHECK: uxtb.w r8, r3, ror #24         @ encoding: [0x5f,0xfa,0xb3,0xf8]
3469 @ CHECK: uxtb.w r7, r8                  @ encoding: [0x5f,0xfa,0x88,0xf7]
3470
3471
3472 @------------------------------------------------------------------------------
3473 @ UXTB16
3474 @------------------------------------------------------------------------------
3475         uxtb16 r1, r4
3476         uxtb16 r6, r7, ror #0
3477         it cs
3478         uxtb16cs r3, r5, ror #8
3479         uxtb16 r3, r1, ror #16
3480         it ge
3481         uxtb16ge r2, r3, ror #24
3482
3483 @ CHECK: uxtb16 r1, r4                  @ encoding: [0x3f,0xfa,0x84,0xf1]
3484 @ CHECK: uxtb16 r6, r7                  @ encoding: [0x3f,0xfa,0x87,0xf6]
3485 @ CHECK: it     hs                      @ encoding: [0x28,0xbf]
3486 @ CHECK: uxtb16hs       r3, r5, ror #8  @ encoding: [0x3f,0xfa,0x95,0xf3]
3487 @ CHECK: uxtb16 r3, r1, ror #16         @ encoding: [0x3f,0xfa,0xa1,0xf3]
3488 @ CHECK: it     ge                      @ encoding: [0xa8,0xbf]
3489 @ CHECK: uxtb16ge       r2, r3, ror #24 @ encoding: [0x3f,0xfa,0xb3,0xf2]
3490
3491
3492 @------------------------------------------------------------------------------
3493 @ UXTH
3494 @------------------------------------------------------------------------------
3495         it ne
3496         uxthne r3, r9
3497         uxth r1, r6, ror #0
3498         uxth r3, r8, ror #8
3499         it le
3500         uxthle r2, r2, ror #16
3501         uxth r9, r3, ror #24
3502         uxth.w  r7, r8
3503
3504 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
3505 @ CHECK: uxthne.w       r3, r9          @ encoding: [0x1f,0xfa,0x89,0xf3]
3506 @ CHECK: uxth   r1, r6                  @ encoding: [0xb1,0xb2]
3507 @ CHECK: uxth.w r3, r8, ror #8          @ encoding: [0x1f,0xfa,0x98,0xf3]
3508 @ CHECK: it     le                      @ encoding: [0xd8,0xbf]
3509 @ CHECK: uxthle.w       r2, r2, ror #16 @ encoding: [0x1f,0xfa,0xa2,0xf2]
3510 @ CHECK: uxth.w r9, r3, ror #24         @ encoding: [0x1f,0xfa,0xb3,0xf9]
3511 @ CHECK: uxth.w r7, r8                  @ encoding: [0x1f,0xfa,0x88,0xf7]
3512
3513 @------------------------------------------------------------------------------
3514 @ WFE/WFI/YIELD/HINT
3515 @------------------------------------------------------------------------------
3516         wfe
3517         wfi
3518         yield
3519         itet lt
3520         wfelt
3521         wfige
3522         yieldlt
3523         hint.w #4
3524         hint #3
3525         hint #2
3526         hint #1
3527         hint #0
3528
3529 @ CHECK: wfe                            @ encoding: [0x20,0xbf]
3530 @ CHECK: wfi                            @ encoding: [0x30,0xbf]
3531 @ CHECK: yield                          @ encoding: [0x10,0xbf]
3532 @ CHECK: itet   lt                      @ encoding: [0xb6,0xbf]
3533 @ CHECK: wfelt                          @ encoding: [0x20,0xbf]
3534 @ CHECK: wfige                          @ encoding: [0x30,0xbf]
3535 @ CHECK: yieldlt                        @ encoding: [0x10,0xbf]
3536 @ CHECK: sev.w                          @ encoding: [0xaf,0xf3,0x04,0x80]
3537 @ CHECK: wfi.w                          @ encoding: [0xaf,0xf3,0x03,0x80]
3538 @ CHECK: wfe.w                          @ encoding: [0xaf,0xf3,0x02,0x80]
3539 @ CHECK: yield.w                        @ encoding: [0xaf,0xf3,0x01,0x80]
3540 @ CHECK: nop.w                          @ encoding: [0xaf,0xf3,0x00,0x80]
3541
3542
3543 @------------------------------------------------------------------------------
3544 @ Alternate syntax for LDR*(literal) encodings
3545 @------------------------------------------------------------------------------
3546         ldrb r11, [pc, #22]
3547         ldrh r11, [pc, #22]
3548         ldrsb r11, [pc, #22]
3549         ldrsh r11, [pc, #22]
3550         ldr.w r11, [pc, #22]
3551         ldrb.w r11, [pc, #22]
3552         ldrh.w r11, [pc, #22]
3553         ldrsb.w r11, [pc, #22]
3554         ldrsh.w r11, [pc, #22]
3555
3556 @ CHECK: ldrb.w r11, [pc, #22]        @ encoding: [0x9f,0xf8,0x16,0xb0]
3557 @ CHECK: ldrh.w r11, [pc, #22]        @ encoding: [0xbf,0xf8,0x16,0xb0]
3558 @ CHECK: ldrsb.w r11, [pc, #22]       @ encoding: [0x9f,0xf9,0x16,0xb0]
3559 @ CHECK: ldrsh.w r11, [pc, #22]       @ encoding: [0xbf,0xf9,0x16,0xb0]
3560 @ CHECK: ldr.w r11, [pc, #22]         @ encoding: [0xdf,0xf8,0x16,0xb0]
3561 @ CHECK: ldrb.w r11, [pc, #22]        @ encoding: [0x9f,0xf8,0x16,0xb0]
3562 @ CHECK: ldrh.w r11, [pc, #22]        @ encoding: [0xbf,0xf8,0x16,0xb0]
3563 @ CHECK: ldrsb.w r11, [pc, #22]       @ encoding: [0x9f,0xf9,0x16,0xb0]
3564 @ CHECK: ldrsh.w r11, [pc, #22]       @ encoding: [0xbf,0xf9,0x16,0xb0]
3565
3566         ldr r11, [pc, #-22]
3567         ldrb r11, [pc, #-22]
3568         ldrh r11, [pc, #-22]
3569         ldrsb r11, [pc, #-22]
3570         ldrsh r11, [pc, #-22]
3571         ldr.w r11, [pc, #-22]
3572         ldrb.w r11, [pc, #-22]
3573         ldrh.w r11, [pc, #-22]
3574         ldrsb.w r11, [pc, #-22]
3575         ldrsh.w r11, [pc, #-22]
3576
3577 @ CHECK: ldr.w  r11, [pc, #-22]         @ encoding: [0x5f,0xf8,0x16,0xb0]
3578 @ CHECK: ldrb.w r11, [pc, #-22]         @ encoding: [0x1f,0xf8,0x16,0xb0]
3579 @ CHECK: ldrh.w r11, [pc, #-22]         @ encoding: [0x3f,0xf8,0x16,0xb0]
3580 @ CHECK: ldrsb.w r11, [pc, #-22]        @ encoding: [0x1f,0xf9,0x16,0xb0]
3581 @ CHECK: ldrsh.w r11, [pc, #-22]        @ encoding: [0x3f,0xf9,0x16,0xb0]
3582 @ CHECK: ldr.w  r11, [pc, #-22]         @ encoding: [0x5f,0xf8,0x16,0xb0]
3583 @ CHECK: ldrb.w r11, [pc, #-22]         @ encoding: [0x1f,0xf8,0x16,0xb0]
3584 @ CHECK: ldrh.w r11, [pc, #-22]         @ encoding: [0x3f,0xf8,0x16,0xb0]
3585 @ CHECK: ldrsb.w r11, [pc, #-22]        @ encoding: [0x1f,0xf9,0x16,0xb0]
3586 @ CHECK: ldrsh.w r11, [pc, #-22]        @ encoding: [0x3f,0xf9,0x16,0xb0]
3587
3588 @ rdar://12596361
3589          ldr r1, [pc, #12]
3590 @ CHECK: ldr r1, [pc, #12]              @ encoding: [0x03,0x49]
3591
3592 @ rdar://14214063
3593          subs pc, lr, #4
3594 @ CHECK: subs pc, lr, #4                @ encoding: [0xde,0xf3,0x04,0x8f]