Support APSR_nzcv as operand for Thumb2 mrc. Deprecate pre-UAL syntax (pc instead...
[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         mrc  p15, #7, apsr_nzcv, c15, c6, #6
1351         mrc  p11, #1, r1, c2, c2
1352         mrc2 p12, #3, r3, c3, c4
1353         mrc2 p14, #0, r1, c1, c2, #4
1354         mrc2 p10, #7, apsr_nzcv, c15, c0, #1
1355  
1356 @ CHECK: mrc  p14, #0, r1, c1, c2, #4            @ encoding: [0x11,0xee,0x92,0x1e]
1357 @ CHECK: mrc  p15, #7, apsr_nzcv, c15, c6, #6    @ encoding: [0xff,0xee,0xd6,0xff]
1358 @ CHECK: mrc  p11, #1, r1, c2, c2, #0            @ encoding: [0x32,0xee,0x12,0x1b]
1359 @ CHECK: mrc2 p12, #3, r3, c3, c4, #0            @ encoding: [0x73,0xfe,0x14,0x3c]
1360 @ CHECK: mrc2 p14, #0, r1, c1, c2, #4            @ encoding: [0x11,0xfe,0x92,0x1e]
1361 @ CHECK: mrc2 p10, #7, apsr_nzcv, c15, c0, #1    @ encoding: [0xff,0xfe,0x30,0xfa]
1362  
1363 @------------------------------------------------------------------------------
1364 @ MRRC/MRRC2
1365 @------------------------------------------------------------------------------
1366         mrrc  p7, #1, r5, r4, c1
1367         mrrc2  p7, #1, r5, r4, c1
1368
1369 @ CHECK: mrrc   p7, #1, r5, r4, c1      @ encoding: [0x54,0xec,0x11,0x57]
1370 @ CHECK: mrrc2  p7, #1, r5, r4, c1      @ encoding: [0x54,0xfc,0x11,0x57]
1371
1372
1373 @------------------------------------------------------------------------------
1374 @ MRS
1375 @------------------------------------------------------------------------------
1376         mrs  r8, apsr
1377         mrs  r8, cpsr
1378         mrs  r8, spsr
1379
1380 @ CHECK: mrs    r8, apsr                @ encoding: [0xef,0xf3,0x00,0x88]
1381 @ CHECK: mrs    r8, apsr                @ encoding: [0xef,0xf3,0x00,0x88]
1382 @ CHECK: mrs    r8, spsr                @ encoding: [0xff,0xf3,0x00,0x88]
1383
1384
1385 @------------------------------------------------------------------------------
1386 @ MSR
1387 @------------------------------------------------------------------------------
1388         msr  apsr, r1
1389         msr  apsr_g, r2
1390         msr  apsr_nzcvq, r3
1391         msr  APSR_nzcvq, r4
1392         msr  apsr_nzcvqg, r5
1393         msr  cpsr_fc, r6
1394         msr  cpsr_c, r7
1395         msr  cpsr_x, r8
1396         msr  cpsr_fc, r9
1397         msr  cpsr_all, r11
1398         msr  cpsr_fsx, r12
1399         msr  spsr_fc, r0
1400         msr  SPSR_fsxc, r5
1401         msr  cpsr_fsxc, r8
1402         msr  cpsr, r3
1403
1404 @ CHECK: msr    APSR_nzcvq, r1          @ encoding: [0x81,0xf3,0x00,0x88]
1405 @ CHECK: msr    APSR_g, r2              @ encoding: [0x82,0xf3,0x00,0x84]
1406 @ CHECK: msr    APSR_nzcvq, r3          @ encoding: [0x83,0xf3,0x00,0x88]
1407 @ CHECK: msr    APSR_nzcvq, r4          @ encoding: [0x84,0xf3,0x00,0x88]
1408 @ CHECK: msr    APSR_nzcvqg, r5         @ encoding: [0x85,0xf3,0x00,0x8c]
1409 @ CHECK: msr    CPSR_fc, r6             @ encoding: [0x86,0xf3,0x00,0x89]
1410 @ CHECK: msr    CPSR_c, r7              @ encoding: [0x87,0xf3,0x00,0x81]
1411 @ CHECK: msr    CPSR_x, r8              @ encoding: [0x88,0xf3,0x00,0x82]
1412 @ CHECK: msr    CPSR_fc, r9             @ encoding: [0x89,0xf3,0x00,0x89]
1413 @ CHECK: msr    CPSR_fc, r11            @ encoding: [0x8b,0xf3,0x00,0x89]
1414 @ CHECK: msr    CPSR_fsx, r12           @ encoding: [0x8c,0xf3,0x00,0x8e]
1415 @ CHECK: msr    SPSR_fc, r0             @ encoding: [0x90,0xf3,0x00,0x89]
1416 @ CHECK: msr    SPSR_fsxc, r5           @ encoding: [0x95,0xf3,0x00,0x8f]
1417 @ CHECK: msr    CPSR_fsxc, r8           @ encoding: [0x88,0xf3,0x00,0x8f]
1418 @ CHECK: msr    CPSR_fc, r3             @ encoding: [0x83,0xf3,0x00,0x89]
1419
1420
1421 @------------------------------------------------------------------------------
1422 @ MUL
1423 @------------------------------------------------------------------------------
1424         muls r3, r4, r3
1425         mul r3, r4, r3
1426         mul r3, r4, r6
1427         it eq
1428         muleq r3, r4, r5
1429         it le
1430         mulle r4, r4, r8
1431         mul r5, r6
1432
1433 @ CHECK: muls   r3, r4, r3              @ encoding: [0x63,0x43]
1434 @ CHECK: mul    r3, r4, r3              @ encoding: [0x04,0xfb,0x03,0xf3]
1435 @ CHECK: mul    r3, r4, r6              @ encoding: [0x04,0xfb,0x06,0xf3]
1436 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1437 @ CHECK: muleq  r3, r4, r5              @ encoding: [0x04,0xfb,0x05,0xf3]
1438 @ CHECK: it     le                      @ encoding: [0xd8,0xbf]
1439 @ CHECK: mulle  r4, r4, r8              @ encoding: [0x04,0xfb,0x08,0xf4]
1440 @ CHECK: mul    r5, r6, r5              @ encoding: [0x06,0xfb,0x05,0xf5]
1441
1442
1443 @------------------------------------------------------------------------------
1444 @ MVN(immediate)
1445 @------------------------------------------------------------------------------
1446         mvns r8, #21
1447         mvn r0, #0x3fc0000
1448         mvns r0, #0x3fc0000
1449         itte eq
1450         mvnseq r1, #12
1451         mvneq.w r1, #12
1452         mvnne r1, #12
1453
1454 @ CHECK: mvns   r8, #21                 @ encoding: [0x7f,0xf0,0x15,0x08]
1455 @ CHECK: mvn    r0, #66846720           @ encoding: [0x6f,0xf0,0x7f,0x70]
1456 @ CHECK: mvns   r0, #66846720           @ encoding: [0x7f,0xf0,0x7f,0x70]
1457 @ CHECK: itte   eq                      @ encoding: [0x06,0xbf]
1458 @ CHECK: mvnseq r1, #12                 @ encoding: [0x7f,0xf0,0x0c,0x01]
1459 @ CHECK: mvneq  r1, #12                 @ encoding: [0x6f,0xf0,0x0c,0x01]
1460 @ CHECK: mvnne  r1, #12                 @ encoding: [0x6f,0xf0,0x0c,0x01]
1461
1462
1463 @------------------------------------------------------------------------------
1464 @ MVN(register)
1465 @------------------------------------------------------------------------------
1466         mvn r2, r3
1467         mvns r2, r3
1468         mvn r5, r6, lsl #19
1469         mvn r5, r6, lsr #9
1470         mvn.w r5, r6, asr #4
1471         mvn r5, r6, ror #6
1472         mvn r5, r6, rrx
1473         it eq
1474         mvneq r2, r3
1475
1476 @ CHECK: mvn.w  r2, r3                  @ encoding: [0x6f,0xea,0x03,0x02]
1477 @ CHECK: mvns   r2, r3                  @ encoding: [0xda,0x43]
1478 @ CHECK: mvn.w  r5, r6, lsl #19         @ encoding: [0x6f,0xea,0xc6,0x45]
1479 @ CHECK: mvn.w  r5, r6, lsr #9          @ encoding: [0x6f,0xea,0x56,0x25]
1480 @ CHECK: mvn.w  r5, r6, asr #4          @ encoding: [0x6f,0xea,0x26,0x15]
1481 @ CHECK: mvn.w  r5, r6, ror #6          @ encoding: [0x6f,0xea,0xb6,0x15]
1482 @ CHECK: mvn.w  r5, r6, rrx             @ encoding: [0x6f,0xea,0x36,0x05]
1483 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1484 @ CHECK: mvneq  r2, r3                  @ encoding: [0xda,0x43]
1485
1486 @------------------------------------------------------------------------------
1487 @ NEG
1488 @------------------------------------------------------------------------------
1489         neg r5, r2
1490         neg r5, r8
1491
1492 @ CHECK: rsb.w  r5, r2, #0              @ encoding: [0xc2,0xf1,0x00,0x05]
1493 @ CHECK: rsb.w  r5, r8, #0              @ encoding: [0xc8,0xf1,0x00,0x05]
1494
1495
1496 @------------------------------------------------------------------------------
1497 @ NOP
1498 @------------------------------------------------------------------------------
1499         nop.w
1500
1501 @ CHECK: nop.w                          @ encoding: [0xaf,0xf3,0x00,0x80]
1502
1503
1504 @------------------------------------------------------------------------------
1505 @ ORN
1506 @------------------------------------------------------------------------------
1507         orn r4, r5, #0xf000
1508         orn r4, r5, r6
1509         orns r4, r5, r6
1510         orn r4, r5, r6, lsl #5
1511         orns r4, r5, r6, lsr #5
1512         orn r4, r5, r6, lsr #5
1513         orns r4, r5, r6, asr #5
1514         orn r4, r5, r6, ror #5
1515
1516 @ CHECK: orn    r4, r5, #61440          @ encoding: [0x65,0xf4,0x70,0x44]
1517 @ CHECK: orn    r4, r5, r6              @ encoding: [0x65,0xea,0x06,0x04]
1518 @ CHECK: orns   r4, r5, r6              @ encoding: [0x75,0xea,0x06,0x04]
1519 @ CHECK: orn    r4, r5, r6, lsl #5      @ encoding: [0x65,0xea,0x46,0x14]
1520 @ CHECK: orns   r4, r5, r6, lsr #5      @ encoding: [0x75,0xea,0x56,0x14]
1521 @ CHECK: orn    r4, r5, r6, lsr #5      @ encoding: [0x65,0xea,0x56,0x14]
1522 @ CHECK: orns   r4, r5, r6, asr #5      @ encoding: [0x75,0xea,0x66,0x14]
1523 @ CHECK: orn    r4, r5, r6, ror #5      @ encoding: [0x65,0xea,0x76,0x14]
1524
1525
1526 @------------------------------------------------------------------------------
1527 @ ORR
1528 @------------------------------------------------------------------------------
1529         orr r4, r5, #0xf000
1530         orr r4, r5, r6
1531         orr r4, r5, r6, lsl #5
1532         orrs r4, r5, r6, lsr #5
1533         orr r4, r5, r6, lsr #5
1534         orrs r4, r5, r6, asr #5
1535         orr r4, r5, r6, ror #5
1536
1537 @ CHECK: orr    r4, r5, #61440          @ encoding: [0x45,0xf4,0x70,0x44]
1538 @ CHECK: orr.w  r4, r5, r6              @ encoding: [0x45,0xea,0x06,0x04]
1539 @ CHECK: orr.w  r4, r5, r6, lsl #5      @ encoding: [0x45,0xea,0x46,0x14]
1540 @ CHECK: orrs.w r4, r5, r6, lsr #5      @ encoding: [0x55,0xea,0x56,0x14]
1541 @ CHECK: orr.w  r4, r5, r6, lsr #5      @ encoding: [0x45,0xea,0x56,0x14]
1542 @ CHECK: orrs.w r4, r5, r6, asr #5      @ encoding: [0x55,0xea,0x66,0x14]
1543 @ CHECK: orr.w  r4, r5, r6, ror #5      @ encoding: [0x45,0xea,0x76,0x14]
1544
1545
1546 @------------------------------------------------------------------------------
1547 @ PKH
1548 @------------------------------------------------------------------------------
1549         pkhbt r2, r2, r3
1550         pkhbt r2, r2, r3, lsl #31
1551         pkhbt r2, r2, r3, lsl #0
1552         pkhbt r2, r2, r3, lsl #15
1553
1554         pkhtb r2, r2, r3
1555         pkhtb r2, r2, r3, asr #31
1556         pkhtb r2, r2, r3, asr #15
1557
1558 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1559 @ CHECK: pkhbt  r2, r2, r3, lsl #31     @ encoding: [0xc2,0xea,0xc3,0x72]
1560 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1561 @ CHECK: pkhbt  r2, r2, r3, lsl #15     @ encoding: [0xc2,0xea,0xc3,0x32]
1562
1563 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1564 @ CHECK: pkhtb  r2, r2, r3, asr #31     @ encoding: [0xc2,0xea,0xe3,0x72]
1565 @ CHECK: pkhtb  r2, r2, r3, asr #15     @ encoding: [0xc2,0xea,0xe3,0x32]
1566
1567
1568 @------------------------------------------------------------------------------
1569 @ PLD(immediate)
1570 @------------------------------------------------------------------------------
1571         pld [r5, #-4]
1572         pld [r6, #32]
1573         pld [r6, #33]
1574         pld [r6, #257]
1575         pld [r7, #257]
1576         pld [r1, #0]
1577         pld [r1, #-0]
1578
1579 @ CHECK: pld    [r5, #-4]               @ encoding: [0x15,0xf8,0x04,0xfc]
1580 @ CHECK: pld    [r6, #32]               @ encoding: [0x96,0xf8,0x20,0xf0]
1581 @ CHECK: pld    [r6, #33]               @ encoding: [0x96,0xf8,0x21,0xf0]
1582 @ CHECK: pld    [r6, #257]              @ encoding: [0x96,0xf8,0x01,0xf1]
1583 @ CHECK: pld    [r7, #257]              @ encoding: [0x97,0xf8,0x01,0xf1]
1584 @ CHECK: pld    [r1]                    @ encoding: [0x91,0xf8,0x00,0xf0]
1585 @ CHECK: pld    [r1, #-0]               @ encoding: [0x11,0xf8,0x00,0xfc]
1586
1587
1588 @------------------------------------------------------------------------------
1589 @ PLD(literal)
1590 @------------------------------------------------------------------------------
1591 @        pld  _foo
1592
1593 @ FIXME: pld    _foo                    @ encoding: [0x9f'A',0xf8'A',A,0xf0'A']
1594             @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
1595
1596         pld [pc,#-4095]
1597 @ CHECK: pld [pc, #-4095]            @ encoding: [0x1f,0xf8,0xff,0xff]
1598
1599
1600 @------------------------------------------------------------------------------
1601 @ PLD(register)
1602 @------------------------------------------------------------------------------
1603         pld [r8, r1]
1604         pld [r5, r2]
1605         pld [r0, r2, lsl #3]
1606         pld [r8, r2, lsl #2]
1607         pld [sp, r2, lsl #1]
1608         pld [sp, r2, lsl #0]
1609
1610 @ CHECK: pld    [r8, r1]                @ encoding: [0x18,0xf8,0x01,0xf0]
1611 @ CHECK: pld    [r5, r2]                @ encoding: [0x15,0xf8,0x02,0xf0]
1612 @ CHECK: pld    [r0, r2, lsl #3]        @ encoding: [0x10,0xf8,0x32,0xf0]
1613 @ CHECK: pld    [r8, r2, lsl #2]        @ encoding: [0x18,0xf8,0x22,0xf0]
1614 @ CHECK: pld    [sp, r2, lsl #1]        @ encoding: [0x1d,0xf8,0x12,0xf0]
1615 @ CHECK: pld    [sp, r2]                @ encoding: [0x1d,0xf8,0x02,0xf0]
1616
1617 @------------------------------------------------------------------------------
1618 @ PLI(immediate)
1619 @------------------------------------------------------------------------------
1620         pli [r5, #-4]
1621         pli [r6, #32]
1622         pli [r6, #33]
1623         pli [r6, #257]
1624         pli [r7, #257]
1625         pli [pc, #+4095]
1626         pli [pc, #-4095]
1627
1628 @ CHECK: pli    [r5, #-4]               @ encoding: [0x15,0xf9,0x04,0xfc]
1629 @ CHECK: pli    [r6, #32]               @ encoding: [0x96,0xf9,0x20,0xf0]
1630 @ CHECK: pli    [r6, #33]               @ encoding: [0x96,0xf9,0x21,0xf0]
1631 @ CHECK: pli    [r6, #257]              @ encoding: [0x96,0xf9,0x01,0xf1]
1632 @ CHECK: pli    [r7, #257]              @ encoding: [0x97,0xf9,0x01,0xf1]
1633 @ CHECK: pli    [pc, #4095]             @ encoding: [0x9f,0xf9,0xff,0xff]
1634 @ CHECK: pli    [pc, #-4095]            @ encoding: [0x1f,0xf9,0xff,0xff]
1635
1636
1637 @------------------------------------------------------------------------------
1638 @ PLI(literal)
1639 @------------------------------------------------------------------------------
1640 @        pli  _foo
1641
1642
1643 @ FIXME: pli    _foo                    @ encoding: [0x9f'A',0xf9'A',A,0xf0'A']
1644            @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
1645
1646
1647 @------------------------------------------------------------------------------
1648 @ PLI(register)
1649 @------------------------------------------------------------------------------
1650         pli [r8, r1]
1651         pli [r5, r2]
1652         pli [r0, r2, lsl #3]
1653         pli [r8, r2, lsl #2]
1654         pli [sp, r2, lsl #1]
1655         pli [sp, r2, lsl #0]
1656
1657 @ CHECK: pli    [r8, r1]                @ encoding: [0x18,0xf9,0x01,0xf0]
1658 @ CHECK: pli    [r5, r2]                @ encoding: [0x15,0xf9,0x02,0xf0]
1659 @ CHECK: pli    [r0, r2, lsl #3]        @ encoding: [0x10,0xf9,0x32,0xf0]
1660 @ CHECK: pli    [r8, r2, lsl #2]        @ encoding: [0x18,0xf9,0x22,0xf0]
1661 @ CHECK: pli    [sp, r2, lsl #1]        @ encoding: [0x1d,0xf9,0x12,0xf0]
1662 @ CHECK: pli    [sp, r2]                @ encoding: [0x1d,0xf9,0x02,0xf0]
1663
1664 @------------------------------------------------------------------------------
1665 @ POP (alias)
1666 @------------------------------------------------------------------------------
1667         pop {r2, r9}
1668
1669 @ CHECK: pop.w  {r2, r9}                @ encoding: [0xbd,0xe8,0x04,0x02]
1670
1671
1672 @------------------------------------------------------------------------------
1673 @ PUSH (alias)
1674 @------------------------------------------------------------------------------
1675         push {r2, r9}
1676
1677 @ CHECK: push.w {r2, r9}                @ encoding: [0x2d,0xe9,0x04,0x02]
1678
1679
1680 @------------------------------------------------------------------------------
1681 @ QADD/QADD16/QADD8
1682 @------------------------------------------------------------------------------
1683         qadd r1, r2, r3
1684         qadd16 r1, r2, r3
1685         qadd8 r1, r2, r3
1686         itte gt
1687         qaddgt r1, r2, r3
1688         qadd16gt r1, r2, r3
1689         qadd8le r1, r2, r3
1690
1691 @ CHECK: qadd   r1, r2, r3              @ encoding: [0x83,0xfa,0x82,0xf1]
1692 @ CHECK: qadd16 r1, r2, r3              @ encoding: [0x92,0xfa,0x13,0xf1]
1693 @ CHECK: qadd8  r1, r2, r3              @ encoding: [0x82,0xfa,0x13,0xf1]
1694 @ CHECK: itte   gt                      @ encoding: [0xc6,0xbf]
1695 @ CHECK: qaddgt r1, r2, r3              @ encoding: [0x83,0xfa,0x82,0xf1]
1696 @ CHECK: qadd16gt r1, r2, r3            @ encoding: [0x92,0xfa,0x13,0xf1]
1697 @ CHECK: qadd8le r1, r2, r3             @ encoding: [0x82,0xfa,0x13,0xf1]
1698
1699
1700 @------------------------------------------------------------------------------
1701 @ QDADD/QDSUB
1702 @------------------------------------------------------------------------------
1703         qdadd r6, r7, r8
1704         qdsub r6, r7, r8
1705         itt hi
1706         qdaddhi r6, r7, r8
1707         qdsubhi r6, r7, r8
1708
1709 @ CHECK: qdadd  r6, r7, r8              @ encoding: [0x88,0xfa,0x97,0xf6]
1710 @ CHECK: qdsub  r6, r7, r8              @ encoding: [0x88,0xfa,0xb7,0xf6]
1711 @ CHECK: itt    hi                      @ encoding: [0x84,0xbf]
1712 @ CHECK: qdaddhi r6, r7, r8             @ encoding: [0x88,0xfa,0x97,0xf6]
1713 @ CHECK: qdsubhi r6, r7, r8             @ encoding: [0x88,0xfa,0xb7,0xf6]
1714
1715
1716 @------------------------------------------------------------------------------
1717 @ QSAX
1718 @------------------------------------------------------------------------------
1719         qsax r9, r12, r0
1720         it eq
1721         qsaxeq r9, r12, r0
1722
1723 @ CHECK: qsax   r9, r12, r0             @ encoding: [0xec,0xfa,0x10,0xf9]
1724 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1725 @ CHECK: qsaxeq r9, r12, r0             @ encoding: [0xec,0xfa,0x10,0xf9]
1726
1727
1728 @------------------------------------------------------------------------------
1729 @ QSUB/QSUB16/QSUB8
1730 @------------------------------------------------------------------------------
1731         qsub r1, r2, r3
1732         qsub16 r1, r2, r3
1733         qsub8 r1, r2, r3
1734         itet le
1735         qsuble r1, r2, r3
1736         qsub16gt r1, r2, r3
1737         qsub8le r1, r2, r3
1738
1739 @ CHECK: qsub   r1, r2, r3              @ encoding: [0x83,0xfa,0xa2,0xf1]
1740 @ CHECK: qsub16 r1, r2, r3              @ encoding: [0xd2,0xfa,0x13,0xf1]
1741 @ CHECK: qsub8  r1, r2, r3              @ encoding: [0xc2,0xfa,0x13,0xf1]
1742 @ CHECK: itet   le                      @ encoding: [0xd6,0xbf]
1743 @ CHECK: qsuble r1, r2, r3              @ encoding: [0x83,0xfa,0xa2,0xf1]
1744 @ CHECK: qsub16gt       r1, r2, r3      @ encoding: [0xd2,0xfa,0x13,0xf1]
1745 @ CHECK: qsub8le r1, r2, r3             @ encoding: [0xc2,0xfa,0x13,0xf1]
1746
1747
1748 @------------------------------------------------------------------------------
1749 @ RBIT
1750 @------------------------------------------------------------------------------
1751         rbit r1, r2
1752         it ne
1753         rbitne r1, r2
1754
1755 @ CHECK: rbit   r1, r2                  @ encoding: [0x92,0xfa,0xa2,0xf1]
1756 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1757 @ CHECK: rbitne r1, r2                  @ encoding: [0x92,0xfa,0xa2,0xf1]
1758
1759
1760 @------------------------------------------------------------------------------
1761 @ REV
1762 @------------------------------------------------------------------------------
1763         rev.w r1, r2
1764         rev r2, r8
1765         itt ne
1766         revne r1, r2
1767         revne r1, r8
1768
1769 @ CHECK: rev.w  r1, r2                  @ encoding: [0x92,0xfa,0x82,0xf1]
1770 @ CHECK: rev.w  r2, r8                  @ encoding: [0x98,0xfa,0x88,0xf2]
1771 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
1772 @ CHECK: revne  r1, r2                  @ encoding: [0x11,0xba]
1773 @ CHECK: revne.w r1, r8                 @ encoding: [0x98,0xfa,0x88,0xf1]
1774
1775
1776 @------------------------------------------------------------------------------
1777 @ REV16
1778 @------------------------------------------------------------------------------
1779         rev16.w r1, r2
1780         rev16 r2, r8
1781         itt ne
1782         rev16ne r1, r2
1783         rev16ne r1, r8
1784
1785 @ CHECK: rev16.w r1, r2                 @ encoding: [0x92,0xfa,0x92,0xf1]
1786 @ CHECK: rev16.w r2, r8                 @ encoding: [0x98,0xfa,0x98,0xf2]
1787 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
1788 @ CHECK: rev16ne r1, r2                 @ encoding: [0x51,0xba]
1789 @ CHECK: rev16ne.w      r1, r8          @ encoding: [0x98,0xfa,0x98,0xf1]
1790
1791
1792 @------------------------------------------------------------------------------
1793 @ REVSH
1794 @------------------------------------------------------------------------------
1795         revsh.w r1, r2
1796         revsh r2, r8
1797         itt ne
1798         revshne r1, r2
1799         revshne r1, r8
1800
1801 @ CHECK: revsh.w r1, r2                 @ encoding: [0x92,0xfa,0xb2,0xf1]
1802 @ CHECK: revsh.w r2, r8                 @ encoding: [0x98,0xfa,0xb8,0xf2]
1803 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
1804 @ CHECK: revshne r1, r2                 @ encoding: [0xd1,0xba]
1805 @ CHECK: revshne.w      r1, r8          @ encoding: [0x98,0xfa,0xb8,0xf1]
1806
1807
1808 @------------------------------------------------------------------------------
1809 @ ROR (immediate)
1810 @------------------------------------------------------------------------------
1811         ror r2, r3, #12
1812         rors r8, r3, #31
1813         rors.w r2, r3, #1
1814         ror r2, r3, #4
1815         rors r2, r12, #15
1816
1817         ror r3, #19
1818         rors r8, #2
1819         rors.w r7, #5
1820         ror.w r12, #21
1821
1822 @ CHECK: ror.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x33,0x32]
1823 @ CHECK: rors.w r8, r3, #31             @ encoding: [0x5f,0xea,0xf3,0x78]
1824 @ CHECK: rors.w r2, r3, #1              @ encoding: [0x5f,0xea,0x73,0x02]
1825 @ CHECK: ror.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x33,0x12]
1826 @ CHECK: rors.w r2, r12, #15            @ encoding: [0x5f,0xea,0xfc,0x32]
1827
1828 @ CHECK: ror.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xf3,0x43]
1829 @ CHECK: rors.w r8, r8, #2              @ encoding: [0x5f,0xea,0xb8,0x08]
1830 @ CHECK: rors.w r7, r7, #5              @ encoding: [0x5f,0xea,0x77,0x17]
1831 @ CHECK: ror.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x7c,0x5c]
1832
1833
1834 @------------------------------------------------------------------------------
1835 @ ROR (register)
1836 @------------------------------------------------------------------------------
1837         ror r3, r4, r2
1838         ror.w r1, r2
1839         rors r3, r4, r8
1840
1841 @ CHECK: ror.w  r3, r4, r2              @ encoding: [0x64,0xfa,0x02,0xf3]
1842 @ CHECK: ror.w  r1, r1, r2              @ encoding: [0x61,0xfa,0x02,0xf1]
1843 @ CHECK: rors.w r3, r4, r8              @ encoding: [0x74,0xfa,0x08,0xf3]
1844
1845
1846 @------------------------------------------------------------------------------
1847 @ RRX
1848 @------------------------------------------------------------------------------
1849         rrx r1, r2
1850         rrxs r1, r2
1851         ite lt
1852         rrxlt r9, r12
1853         rrxsge r8, r3
1854
1855 @ CHECK: rrx    r1, r2                  @ encoding: [0x4f,0xea,0x32,0x01]
1856 @ CHECK: rrxs   r1, r2                  @ encoding: [0x5f,0xea,0x32,0x01]
1857 @ CHECK: ite    lt                      @ encoding: [0xb4,0xbf]
1858 @ CHECK: rrxlt  r9, r12                 @ encoding: [0x4f,0xea,0x3c,0x09]
1859 @ CHECK: rrxsge r8, r3                  @ encoding: [0x5f,0xea,0x33,0x08]
1860
1861 @------------------------------------------------------------------------------
1862 @ RSB (immediate)
1863 @------------------------------------------------------------------------------
1864         rsb r2, r5, #0xff000
1865         rsbs r3, r12, #0xf
1866         rsb r1, #0xff
1867         rsb r1, r1, #0xff
1868         rsb r11, r11, #0
1869         rsb r9, #0
1870         rsbs r3, r1, #0
1871         rsb r3, r1, #0
1872
1873 @ CHECK: rsb.w  r2, r5, #1044480        @ encoding: [0xc5,0xf5,0x7f,0x22]
1874 @ CHECK: rsbs.w r3, r12, #15            @ encoding: [0xdc,0xf1,0x0f,0x03]
1875 @ CHECK: rsb.w  r1, r1, #255            @ encoding: [0xc1,0xf1,0xff,0x01]
1876 @ CHECK: rsb.w  r1, r1, #255            @ encoding: [0xc1,0xf1,0xff,0x01]
1877 @ CHECK: rsb.w  r11, r11, #0            @ encoding: [0xcb,0xf1,0x00,0x0b]
1878 @ CHECK: rsb.w  r9, r9, #0              @ encoding: [0xc9,0xf1,0x00,0x09]
1879 @ CHECK: rsbs   r3, r1, #0              @ encoding: [0x4b,0x42]
1880 @ CHECK: rsb.w  r3, r1, #0              @ encoding: [0xc1,0xf1,0x00,0x03]
1881
1882
1883 @------------------------------------------------------------------------------
1884 @ RSB (register)
1885 @------------------------------------------------------------------------------
1886         rsb r4, r8
1887         rsb r4, r9, r8
1888         rsb r1, r4, r8, asr #3
1889         rsbs r2, r1, r7, lsl #1
1890
1891 @ CHECK: rsb    r4, r4, r8              @ encoding: [0xc4,0xeb,0x08,0x04]
1892 @ CHECK: rsb    r4, r9, r8              @ encoding: [0xc9,0xeb,0x08,0x04]
1893 @ CHECK: rsb    r1, r4, r8, asr #3      @ encoding: [0xc4,0xeb,0xe8,0x01]
1894 @ CHECK: rsbs   r2, r1, r7, lsl #1      @ encoding: [0xd1,0xeb,0x47,0x02]
1895
1896
1897 @------------------------------------------------------------------------------
1898 @ SADD16
1899 @------------------------------------------------------------------------------
1900         sadd16 r3, r4, r8
1901         it ne
1902         sadd16ne r3, r4, r8
1903
1904 @ CHECK: sadd16 r3, r4, r8              @ encoding: [0x94,0xfa,0x08,0xf3]
1905 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1906 @ CHECK: sadd16ne       r3, r4, r8      @ encoding: [0x94,0xfa,0x08,0xf3]
1907
1908
1909 @------------------------------------------------------------------------------
1910 @ SADD8
1911 @------------------------------------------------------------------------------
1912         sadd8 r3, r4, r8
1913         it ne
1914         sadd8ne r3, r4, r8
1915
1916 @ CHECK: sadd8  r3, r4, r8              @ encoding: [0x84,0xfa,0x08,0xf3]
1917 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1918 @ CHECK: sadd8ne r3, r4, r8             @ encoding: [0x84,0xfa,0x08,0xf3]
1919
1920
1921 @------------------------------------------------------------------------------
1922 @ SASX
1923 @------------------------------------------------------------------------------
1924         saddsubx r9, r2, r7
1925         it ne
1926         saddsubxne r2, r5, r6
1927         sasx r9, r2, r7
1928         it ne
1929         sasxne r2, r5, r6
1930
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 @ CHECK: sasx   r9, r2, r7              @ encoding: [0xa2,0xfa,0x07,0xf9]
1935 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1936 @ CHECK: sasxne r2, r5, r6              @ encoding: [0xa5,0xfa,0x06,0xf2]
1937
1938
1939 @------------------------------------------------------------------------------
1940 @ SBC (immediate)
1941 @------------------------------------------------------------------------------
1942         sbc r0, r1, #4
1943         sbcs r0, r1, #0
1944         sbc r1, r2, #255
1945         sbc r3, r7, #0x00550055
1946         sbc r8, r12, #0xaa00aa00
1947         sbc r9, r7, #0xa5a5a5a5
1948         sbc r5, r3, #0x87000000
1949         sbc r4, r2, #0x7f800000
1950         sbc r4, r2, #0x00000680
1951
1952 @ CHECK: sbc    r0, r1, #4              @ encoding: [0x61,0xf1,0x04,0x00]
1953 @ CHECK: sbcs   r0, r1, #0              @ encoding: [0x71,0xf1,0x00,0x00]
1954 @ CHECK: sbc    r1, r2, #255            @ encoding: [0x62,0xf1,0xff,0x01]
1955 @ CHECK: sbc    r3, r7, #5570645        @ encoding: [0x67,0xf1,0x55,0x13]
1956 @ CHECK: sbc    r8, r12, #2852170240    @ encoding: [0x6c,0xf1,0xaa,0x28]
1957 @ CHECK: sbc    r9, r7, #2779096485     @ encoding: [0x67,0xf1,0xa5,0x39]
1958 @ CHECK: sbc    r5, r3, #2264924160     @ encoding: [0x63,0xf1,0x07,0x45]
1959 @ CHECK: sbc    r4, r2, #2139095040     @ encoding: [0x62,0xf1,0xff,0x44]
1960 @ CHECK: sbc    r4, r2, #1664           @ encoding: [0x62,0xf5,0xd0,0x64]
1961
1962
1963 @------------------------------------------------------------------------------
1964 @ SBC (register)
1965 @------------------------------------------------------------------------------
1966         sbc r4, r5, r6
1967         sbcs r4, r5, r6
1968         sbc.w r9, r1, r3
1969         sbcs.w r9, r1, r3
1970         sbc     r0, r1, r3, ror #4
1971         sbcs    r0, r1, r3, lsl #7
1972         sbc.w   r0, r1, r3, lsr #31
1973         sbcs.w  r0, r1, r3, asr #32
1974
1975 @ CHECK: sbc.w  r4, r5, r6              @ encoding: [0x65,0xeb,0x06,0x04]
1976 @ CHECK: sbcs.w r4, r5, r6              @ encoding: [0x75,0xeb,0x06,0x04]
1977 @ CHECK: sbc.w  r9, r1, r3              @ encoding: [0x61,0xeb,0x03,0x09]
1978 @ CHECK: sbcs.w r9, r1, r3              @ encoding: [0x71,0xeb,0x03,0x09]
1979 @ CHECK: sbc.w  r0, r1, r3, ror #4      @ encoding: [0x61,0xeb,0x33,0x10]
1980 @ CHECK: sbcs.w r0, r1, r3, lsl #7      @ encoding: [0x71,0xeb,0xc3,0x10]
1981 @ CHECK: sbc.w  r0, r1, r3, lsr #31     @ encoding: [0x61,0xeb,0xd3,0x70]
1982 @ CHECK: sbcs.w r0, r1, r3, asr #32     @ encoding: [0x71,0xeb,0x23,0x00]
1983
1984
1985 @------------------------------------------------------------------------------
1986 @ SBFX
1987 @------------------------------------------------------------------------------
1988         sbfx r4, r5, #16, #1
1989         it gt
1990         sbfxgt r4, r5, #16, #16
1991
1992 @ CHECK: sbfx   r4, r5, #16, #1         @ encoding: [0x45,0xf3,0x00,0x44]
1993 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
1994 @ CHECK: sbfxgt r4, r5, #16, #16        @ encoding: [0x45,0xf3,0x0f,0x44]
1995
1996
1997 @------------------------------------------------------------------------------
1998 @ SEL
1999 @------------------------------------------------------------------------------
2000         sel r5, r9, r2
2001         it le
2002         selle r5, r9, r2
2003
2004 @ CHECK: sel    r5, r9, r2              @ encoding: [0xa9,0xfa,0x82,0xf5]
2005 @ CHECK: it     le                      @ encoding: [0xd8,0xbf]
2006 @ CHECK: selle  r5, r9, r2              @ encoding: [0xa9,0xfa,0x82,0xf5]
2007
2008
2009 @------------------------------------------------------------------------------
2010 @ SEV
2011 @------------------------------------------------------------------------------
2012         sev.w
2013         it eq
2014         seveq.w
2015
2016 @ CHECK: sev.w                           @ encoding: [0xaf,0xf3,0x04,0x80]
2017 @ CHECK: it     eq                       @ encoding: [0x08,0xbf]
2018 @ CHECK: seveq.w                         @ encoding: [0xaf,0xf3,0x04,0x80]
2019
2020
2021 @------------------------------------------------------------------------------
2022 @ SADD16/SADD8
2023 @------------------------------------------------------------------------------
2024         sadd16 r1, r2, r3
2025         sadd8 r1, r2, r3
2026         ite gt
2027         sadd16gt r1, r2, r3
2028         sadd8le r1, r2, r3
2029
2030 @ CHECK: sadd16 r1, r2, r3              @ encoding: [0x92,0xfa,0x03,0xf1]
2031 @ CHECK: sadd8  r1, r2, r3              @ encoding: [0x82,0xfa,0x03,0xf1]
2032 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
2033 @ CHECK: sadd16gt       r1, r2, r3      @ encoding: [0x92,0xfa,0x03,0xf1]
2034 @ CHECK: sadd8le r1, r2, r3             @ encoding: [0x82,0xfa,0x03,0xf1]
2035
2036
2037 @------------------------------------------------------------------------------
2038 @ SHASX
2039 @------------------------------------------------------------------------------
2040         shasx r4, r8, r2
2041         it gt
2042         shasxgt r4, r8, r2
2043         shaddsubx r4, r8, r2
2044         it gt
2045         shaddsubxgt r4, r8, r2
2046
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 @ CHECK: shasx  r4, r8, r2              @ encoding: [0xa8,0xfa,0x22,0xf4]
2051 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
2052 @ CHECK: shasxgt r4, r8, r2             @ encoding: [0xa8,0xfa,0x22,0xf4]
2053
2054
2055 @------------------------------------------------------------------------------
2056 @ SHASX
2057 @------------------------------------------------------------------------------
2058         shsax r4, r8, r2
2059         it gt
2060         shsaxgt r4, r8, r2
2061         shsubaddx r4, r8, r2
2062         it gt
2063         shsubaddxgt r4, r8, r2
2064
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 @ CHECK: shsax  r4, r8, r2              @ encoding: [0xe8,0xfa,0x22,0xf4]
2069 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
2070 @ CHECK: shsaxgt r4, r8, r2             @ encoding: [0xe8,0xfa,0x22,0xf4]
2071
2072
2073 @------------------------------------------------------------------------------
2074 @ SHSUB16/SHSUB8
2075 @------------------------------------------------------------------------------
2076         shsub16 r4, r8, r2
2077         shsub8 r4, r8, r2
2078         itt gt
2079         shsub16gt r4, r8, r2
2080         shsub8gt r4, r8, r2
2081
2082 @ CHECK: shsub16 r4, r8, r2             @ encoding: [0xd8,0xfa,0x22,0xf4]
2083 @ CHECK: shsub8 r4, r8, r2              @ encoding: [0xc8,0xfa,0x22,0xf4]
2084 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
2085 @ CHECK: shsub16gt      r4, r8, r2      @ encoding: [0xd8,0xfa,0x22,0xf4]
2086 @ CHECK: shsub8gt       r4, r8, r2      @ encoding: [0xc8,0xfa,0x22,0xf4]
2087
2088
2089 @------------------------------------------------------------------------------
2090 @ SMLABB/SMLABT/SMLATB/SMLATT
2091 @------------------------------------------------------------------------------
2092         smlabb r3, r1, r9, r0
2093         smlabt r5, r6, r4, r1
2094         smlatb r4, r2, r3, r2
2095         smlatt r8, r3, r8, r4
2096         itete gt
2097         smlabbgt r3, r1, r9, r0
2098         smlabtle r5, r6, r4, r1
2099         smlatbgt r4, r2, r3, r2
2100         smlattle r8, r3, r8, r4
2101
2102 @ CHECK: smlabb r3, r1, r9, r0          @ encoding: [0x11,0xfb,0x09,0x03]
2103 @ CHECK: smlabt r5, r6, r4, r1          @ encoding: [0x16,0xfb,0x14,0x15]
2104 @ CHECK: smlatb r4, r2, r3, r2          @ encoding: [0x12,0xfb,0x23,0x24]
2105 @ CHECK: smlatt r8, r3, r8, r4          @ encoding: [0x13,0xfb,0x38,0x48]
2106 @ CHECK: itete  gt                      @ encoding: [0xcb,0xbf]
2107 @ CHECK: smlabbgt       r3, r1, r9, r0  @ encoding: [0x11,0xfb,0x09,0x03]
2108 @ CHECK: smlabtle       r5, r6, r4, r1  @ encoding: [0x16,0xfb,0x14,0x15]
2109 @ CHECK: smlatbgt       r4, r2, r3, r2  @ encoding: [0x12,0xfb,0x23,0x24]
2110 @ CHECK: smlattle       r8, r3, r8, r4  @ encoding: [0x13,0xfb,0x38,0x48]
2111
2112
2113 @------------------------------------------------------------------------------
2114 @ SMLAD/SMLADX
2115 @------------------------------------------------------------------------------
2116         smlad r2, r3, r5, r8
2117         smladx r2, r3, r5, r8
2118         itt hi
2119         smladhi r2, r3, r5, r8
2120         smladxhi r2, r3, r5, r8
2121
2122 @ CHECK: smlad  r2, r3, r5, r8          @ encoding: [0x23,0xfb,0x05,0x82]
2123 @ CHECK: smladx r2, r3, r5, r8          @ encoding: [0x23,0xfb,0x15,0x82]
2124 @ CHECK: itt    hi                      @ encoding: [0x84,0xbf]
2125 @ CHECK: smladhi r2, r3, r5, r8         @ encoding: [0x23,0xfb,0x05,0x82]
2126 @ CHECK: smladxhi       r2, r3, r5, r8  @ encoding: [0x23,0xfb,0x15,0x82]
2127
2128
2129 @------------------------------------------------------------------------------
2130 @ SMLAL
2131 @------------------------------------------------------------------------------
2132         smlal r2, r3, r5, r8
2133         it eq
2134         smlaleq r2, r3, r5, r8
2135
2136 @ CHECK: smlal  r2, r3, r5, r8          @ encoding: [0xc5,0xfb,0x08,0x23]
2137 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
2138 @ CHECK: smlaleq r2, r3, r5, r8         @ encoding: [0xc5,0xfb,0x08,0x23]
2139
2140
2141 @------------------------------------------------------------------------------
2142 @ SMLALBB/SMLALBT/SMLALTB/SMLALTT
2143 @------------------------------------------------------------------------------
2144         smlalbb r3, r1, r9, r0
2145         smlalbt r5, r6, r4, r1
2146         smlaltb r4, r2, r3, r2
2147         smlaltt r8, r3, r8, r4
2148         iteet ge
2149         smlalbbge r3, r1, r9, r0
2150         smlalbtlt r5, r6, r4, r1
2151         smlaltblt r4, r2, r3, r2
2152         smlalttge r8, r3, r8, r4
2153
2154 @ CHECK: smlalbb r3, r1, r9, r0         @ encoding: [0xc9,0xfb,0x80,0x31]
2155 @ CHECK: smlalbt r5, r6, r4, r1         @ encoding: [0xc4,0xfb,0x91,0x56]
2156 @ CHECK: smlaltb r4, r2, r3, r2         @ encoding: [0xc3,0xfb,0xa2,0x42]
2157 @ CHECK: smlaltt r8, r3, r8, r4         @ encoding: [0xc8,0xfb,0xb4,0x83]
2158 @ CHECK: iteet  ge                      @ encoding: [0xad,0xbf]
2159 @ CHECK: smlalbbge      r3, r1, r9, r0  @ encoding: [0xc9,0xfb,0x80,0x31]
2160 @ CHECK: smlalbtlt      r5, r6, r4, r1  @ encoding: [0xc4,0xfb,0x91,0x56]
2161 @ CHECK: smlaltblt      r4, r2, r3, r2  @ encoding: [0xc3,0xfb,0xa2,0x42]
2162 @ CHECK: smlalttge      r8, r3, r8, r4  @ encoding: [0xc8,0xfb,0xb4,0x83]
2163
2164
2165 @------------------------------------------------------------------------------
2166 @ SMLALD/SMLALDX
2167 @------------------------------------------------------------------------------
2168         smlald r2, r3, r5, r8
2169         smlaldx r2, r3, r5, r8
2170         ite eq
2171         smlaldeq r2, r3, r5, r8
2172         smlaldxne r2, r3, r5, r8
2173
2174 @ CHECK: smlald r2, r3, r5, r8          @ encoding: [0xc5,0xfb,0xc8,0x23]
2175 @ CHECK: smlaldx r2, r3, r5, r8         @ encoding: [0xc5,0xfb,0xd8,0x23]
2176 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
2177 @ CHECK: smlaldeq       r2, r3, r5, r8  @ encoding: [0xc5,0xfb,0xc8,0x23]
2178 @ CHECK: smlaldxne      r2, r3, r5, r8  @ encoding: [0xc5,0xfb,0xd8,0x23]
2179
2180
2181 @------------------------------------------------------------------------------
2182 @ SMLAWB/SMLAWT
2183 @------------------------------------------------------------------------------
2184         smlawb r2, r3, r10, r8
2185         smlawt r8, r3, r5, r9
2186         ite eq
2187         smlawbeq r2, r7, r5, r8
2188         smlawtne r1, r3, r0, r8
2189
2190 @ CHECK: smlawb r2, r3, r10, r8         @ encoding: [0x33,0xfb,0x0a,0x82]
2191 @ CHECK: smlawt r8, r3, r5, r9          @ encoding: [0x33,0xfb,0x15,0x98]
2192 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
2193 @ CHECK: smlawbeq       r2, r7, r5, r8  @ encoding: [0x37,0xfb,0x05,0x82]
2194 @ CHECK: smlawtne       r1, r3, r0, r8  @ encoding: [0x33,0xfb,0x10,0x81]
2195
2196
2197 @------------------------------------------------------------------------------
2198 @ SMLSD/SMLSDX
2199 @------------------------------------------------------------------------------
2200         smlsd r2, r3, r5, r8
2201         smlsdx r2, r3, r5, r8
2202         ite le
2203         smlsdle r2, r3, r5, r8
2204         smlsdxgt r2, r3, r5, r8
2205
2206 @ CHECK: smlsd  r2, r3, r5, r8          @ encoding: [0x43,0xfb,0x05,0x82]
2207 @ CHECK: smlsdx r2, r3, r5, r8          @ encoding: [0x43,0xfb,0x15,0x82]
2208 @ CHECK: ite    le                      @ encoding: [0xd4,0xbf]
2209 @ CHECK: smlsdle        r2, r3, r5, r8  @ encoding: [0x43,0xfb,0x05,0x82]
2210 @ CHECK: smlsdxgt       r2, r3, r5, r8  @ encoding: [0x43,0xfb,0x15,0x82]
2211
2212
2213 @------------------------------------------------------------------------------
2214 @ SMLSLD/SMLSLDX
2215 @------------------------------------------------------------------------------
2216         smlsld r2, r9, r5, r1
2217         smlsldx r4, r11, r2, r8
2218         ite ge
2219         smlsldge r8, r2, r5, r6
2220         smlsldxlt r1, r0, r3, r8
2221
2222 @ CHECK: smlsld r2, r9, r5, r1          @ encoding: [0xd5,0xfb,0xc1,0x29]
2223 @ CHECK: smlsldx        r4, r11, r2, r8 @ encoding: [0xd2,0xfb,0xd8,0x4b]
2224 @ CHECK: ite    ge                      @ encoding: [0xac,0xbf]
2225 @ CHECK: smlsldge       r8, r2, r5, r6  @ encoding: [0xd5,0xfb,0xc6,0x82]
2226 @ CHECK: smlsldxlt      r1, r0, r3, r8  @ encoding: [0xd3,0xfb,0xd8,0x10]
2227
2228
2229 @------------------------------------------------------------------------------
2230 @ SMMLA/SMMLAR
2231 @------------------------------------------------------------------------------
2232         smmla r1, r2, r3, r4
2233         smmlar r4, r3, r2, r1
2234         ite lo
2235         smmlalo r1, r2, r3, r4
2236         smmlarcs r4, r3, r2, r1
2237
2238 @ CHECK: smmla  r1, r2, r3, r4          @ encoding: [0x52,0xfb,0x03,0x41]
2239 @ CHECK: smmlar r4, r3, r2, r1          @ encoding: [0x53,0xfb,0x12,0x14]
2240 @ CHECK: ite    lo                      @ encoding: [0x34,0xbf]
2241 @ CHECK: smmlalo        r1, r2, r3, r4  @ encoding: [0x52,0xfb,0x03,0x41]
2242 @ CHECK: smmlarhs       r4, r3, r2, r1  @ encoding: [0x53,0xfb,0x12,0x14]
2243
2244
2245 @------------------------------------------------------------------------------
2246 @ SMMLS/SMMLSR
2247 @------------------------------------------------------------------------------
2248         smmls r1, r2, r3, r4
2249         smmlsr r4, r3, r2, r1
2250         ite lo
2251         smmlslo r1, r2, r3, r4
2252         smmlsrcs r4, r3, r2, r1
2253
2254 @ CHECK: smmls  r1, r2, r3, r4          @ encoding: [0x62,0xfb,0x03,0x41]
2255 @ CHECK: smmlsr r4, r3, r2, r1          @ encoding: [0x63,0xfb,0x12,0x14]
2256 @ CHECK: ite    lo                      @ encoding: [0x34,0xbf]
2257 @ CHECK: smmlslo        r1, r2, r3, r4  @ encoding: [0x62,0xfb,0x03,0x41]
2258 @ CHECK: smmlsrhs       r4, r3, r2, r1  @ encoding: [0x63,0xfb,0x12,0x14]
2259
2260
2261 @------------------------------------------------------------------------------
2262 @ SMMUL/SMMULR
2263 @------------------------------------------------------------------------------
2264         smmul r2, r3, r4
2265         smmulr r3, r2, r1
2266         ite cc
2267         smmulcc r2, r3, r4
2268         smmulrhs r3, r2, r1
2269
2270 @ CHECK: smmul  r2, r3, r4              @ encoding: [0x53,0xfb,0x04,0xf2]
2271 @ CHECK: smmulr r3, r2, r1              @ encoding: [0x52,0xfb,0x11,0xf3]
2272 @ CHECK: ite    lo                      @ encoding: [0x34,0xbf]
2273 @ CHECK: smmullo        r2, r3, r4      @ encoding: [0x53,0xfb,0x04,0xf2]
2274 @ CHECK: smmulrhs       r3, r2, r1      @ encoding: [0x52,0xfb,0x11,0xf3]
2275
2276
2277 @------------------------------------------------------------------------------
2278 @ SMUAD/SMUADX
2279 @------------------------------------------------------------------------------
2280         smuad r2, r3, r4
2281         smuadx r3, r2, r1
2282         ite lt
2283         smuadlt r2, r3, r4
2284         smuadxge r3, r2, r1
2285
2286 @ CHECK: smuad  r2, r3, r4              @ encoding: [0x23,0xfb,0x04,0xf2]
2287 @ CHECK: smuadx r3, r2, r1              @ encoding: [0x22,0xfb,0x11,0xf3]
2288 @ CHECK: ite    lt                      @ encoding: [0xb4,0xbf]
2289 @ CHECK: smuadlt        r2, r3, r4      @ encoding: [0x23,0xfb,0x04,0xf2]
2290 @ CHECK: smuadxge       r3, r2, r1      @ encoding: [0x22,0xfb,0x11,0xf3]
2291
2292
2293 @------------------------------------------------------------------------------
2294 @ SMULBB/SMULBT/SMULTB/SMULTT
2295 @------------------------------------------------------------------------------
2296         smulbb r3, r9, r0
2297         smulbt r5, r4, r1
2298         smultb r4, r2, r2
2299         smultt r8, r3, r4
2300         itete ge
2301         smulbbge r1, r9, r0
2302         smulbtlt r5, r6, r4
2303         smultbge r2, r3, r2
2304         smulttlt r8, r3, r4
2305
2306 @ CHECK: smulbb r3, r9, r0              @ encoding: [0x19,0xfb,0x00,0xf3]
2307 @ CHECK: smulbt r5, r4, r1              @ encoding: [0x14,0xfb,0x11,0xf5]
2308 @ CHECK: smultb r4, r2, r2              @ encoding: [0x12,0xfb,0x22,0xf4]
2309 @ CHECK: smultt r8, r3, r4              @ encoding: [0x13,0xfb,0x34,0xf8]
2310 @ CHECK: itete  ge                      @ encoding: [0xab,0xbf]
2311 @ CHECK: smulbbge       r1, r9, r0      @ encoding: [0x19,0xfb,0x00,0xf1]
2312 @ CHECK: smulbtlt       r5, r6, r4      @ encoding: [0x16,0xfb,0x14,0xf5]
2313 @ CHECK: smultbge       r2, r3, r2      @ encoding: [0x13,0xfb,0x22,0xf2]
2314 @ CHECK: smulttlt       r8, r3, r4      @ encoding: [0x13,0xfb,0x34,0xf8]
2315
2316
2317 @------------------------------------------------------------------------------
2318 @ SMULL
2319 @------------------------------------------------------------------------------
2320         smull r3, r9, r0, r1
2321         it eq
2322         smulleq r8, r3, r4, r5
2323
2324 @ CHECK: smull  r3, r9, r0, r1          @ encoding: [0x80,0xfb,0x01,0x39]
2325 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
2326 @ CHECK: smulleq r8, r3, r4, r5         @ encoding: [0x84,0xfb,0x05,0x83]
2327
2328
2329 @------------------------------------------------------------------------------
2330 @ SMULWB/SMULWT
2331 @------------------------------------------------------------------------------
2332         smulwb r3, r9, r0
2333         smulwt r3, r9, r2
2334         ite gt
2335         smulwbgt r3, r9, r0
2336         smulwtle r3, r9, r2
2337
2338 @ CHECK: smulwb r3, r9, r0              @ encoding: [0x39,0xfb,0x00,0xf3]
2339 @ CHECK: smulwt r3, r9, r2              @ encoding: [0x39,0xfb,0x12,0xf3]
2340 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
2341 @ CHECK: smulwbgt       r3, r9, r0      @ encoding: [0x39,0xfb,0x00,0xf3]
2342 @ CHECK: smulwtle       r3, r9, r2      @ encoding: [0x39,0xfb,0x12,0xf3]
2343
2344
2345 @------------------------------------------------------------------------------
2346 @ SMUSD/SMUSDX
2347 @------------------------------------------------------------------------------
2348         smusd r3, r0, r1
2349         smusdx r3, r9, r2
2350         ite eq
2351         smusdeq r8, r3, r2
2352         smusdxne r7, r4, r3
2353
2354 @ CHECK: smusd  r3, r0, r1              @ encoding: [0x40,0xfb,0x01,0xf3]
2355 @ CHECK: smusdx r3, r9, r2              @ encoding: [0x49,0xfb,0x12,0xf3]
2356 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
2357 @ CHECK: smusdeq        r8, r3, r2      @ encoding: [0x43,0xfb,0x02,0xf8]
2358 @ CHECK: smusdxne       r7, r4, r3      @ encoding: [0x44,0xfb,0x13,0xf7]
2359
2360
2361 @------------------------------------------------------------------------------
2362 @ SRS
2363 @------------------------------------------------------------------------------
2364         srsdb sp, #1
2365         srsia sp, #0
2366
2367         srsdb sp!, #19
2368         srsia sp!, #2
2369
2370         srsea sp, #10
2371         srsfd sp, #9
2372
2373         srsea sp!, #5
2374         srsfd sp!, #5
2375
2376         srs sp, #5
2377         srs sp!, #5
2378
2379 @ CHECK: srsdb  sp, #1                  @ encoding: [0x0d,0xe8,0x01,0xc0]
2380 @ CHECK: srsia  sp, #0                  @ encoding: [0x8d,0xe9,0x00,0xc0]
2381 @ CHECK: srsdb  sp!, #19                @ encoding: [0x2d,0xe8,0x13,0xc0]
2382 @ CHECK: srsia  sp!, #2                 @ encoding: [0xad,0xe9,0x02,0xc0]
2383 @ CHECK: srsia  sp, #10                 @ encoding: [0x8d,0xe9,0x0a,0xc0]
2384 @ CHECK: srsdb  sp, #9                  @ encoding: [0x0d,0xe8,0x09,0xc0]
2385 @ CHECK: srsia  sp!, #5                 @ encoding: [0xad,0xe9,0x05,0xc0]
2386 @ CHECK: srsdb  sp!, #5                 @ encoding: [0x2d,0xe8,0x05,0xc0]
2387 @ CHECK: srsia  sp, #5                  @ encoding: [0x8d,0xe9,0x05,0xc0]
2388 @ CHECK: srsia  sp!, #5                 @ encoding: [0xad,0xe9,0x05,0xc0]
2389
2390         srsdb #1
2391         srsia #0
2392
2393         srsdb #19!
2394         srsia #2!
2395
2396         srsea #10
2397         srsfd #9
2398
2399         srsea #5!
2400         srsfd #5!
2401
2402         srs #5
2403         srs #5!
2404
2405 @ CHECK: srsdb  sp, #1                  @ encoding: [0x0d,0xe8,0x01,0xc0]
2406 @ CHECK: srsia  sp, #0                  @ encoding: [0x8d,0xe9,0x00,0xc0]
2407 @ CHECK: srsdb  sp!, #19                @ encoding: [0x2d,0xe8,0x13,0xc0]
2408 @ CHECK: srsia  sp!, #2                 @ encoding: [0xad,0xe9,0x02,0xc0]
2409 @ CHECK: srsia  sp, #10                 @ encoding: [0x8d,0xe9,0x0a,0xc0]
2410 @ CHECK: srsdb  sp, #9                  @ encoding: [0x0d,0xe8,0x09,0xc0]
2411 @ CHECK: srsia  sp!, #5                 @ encoding: [0xad,0xe9,0x05,0xc0]
2412 @ CHECK: srsdb  sp!, #5                 @ encoding: [0x2d,0xe8,0x05,0xc0]
2413 @ CHECK: srsia  sp, #5                  @ encoding: [0x8d,0xe9,0x05,0xc0]
2414 @ CHECK: srsia  sp!, #5                 @ encoding: [0xad,0xe9,0x05,0xc0]
2415
2416
2417 @------------------------------------------------------------------------------
2418 @ SSAT
2419 @------------------------------------------------------------------------------
2420         ssat    r8, #1, r10
2421         ssat    r8, #1, r10, lsl #0
2422         ssat    r8, #1, r10, lsl #31
2423         ssat    r8, #1, r10, asr #1
2424
2425 @ CHECK: ssat   r8, #1, r10             @ encoding: [0x0a,0xf3,0x00,0x08]
2426 @ CHECK: ssat   r8, #1, r10             @ encoding: [0x0a,0xf3,0x00,0x08]
2427 @ CHECK: ssat   r8, #1, r10, lsl #31    @ encoding: [0x0a,0xf3,0xc0,0x78]
2428 @ CHECK: ssat   r8, #1, r10, asr #1     @ encoding: [0x2a,0xf3,0x40,0x08]
2429
2430
2431 @------------------------------------------------------------------------------
2432 @ SSAT16
2433 @------------------------------------------------------------------------------
2434         ssat16  r2, #1, r7
2435         ssat16  r3, #16, r5
2436
2437 @ CHECK: ssat16 r2, #1, r7              @ encoding: [0x27,0xf3,0x00,0x02]
2438 @ CHECK: ssat16 r3, #16, r5             @ encoding: [0x25,0xf3,0x0f,0x03]
2439
2440
2441 @------------------------------------------------------------------------------
2442 @ SSAX
2443 @------------------------------------------------------------------------------
2444         ssubaddx r2, r3, r4
2445         it lt
2446         ssubaddxlt r2, r3, r4
2447         ssax r2, r3, r4
2448         it lt
2449         ssaxlt r2, r3, r4
2450
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 @ CHECK: ssax   r2, r3, r4              @ encoding: [0xe3,0xfa,0x04,0xf2]
2455 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
2456 @ CHECK: ssaxlt r2, r3, r4              @ encoding: [0xe3,0xfa,0x04,0xf2]
2457
2458
2459 @------------------------------------------------------------------------------
2460 @ SSUB16/SSUB8
2461 @------------------------------------------------------------------------------
2462         ssub16 r1, r0, r6
2463         ssub8 r9, r2, r4
2464         ite ne
2465         ssub16ne r5, r3, r2
2466         ssub8eq r5, r1, r2
2467
2468 @ CHECK: ssub16 r1, r0, r6              @ encoding: [0xd0,0xfa,0x06,0xf1]
2469 @ CHECK: ssub8  r9, r2, r4              @ encoding: [0xc2,0xfa,0x04,0xf9]
2470 @ CHECK: ite    ne                      @ encoding: [0x14,0xbf]
2471 @ CHECK: ssub16ne       r5, r3, r2      @ encoding: [0xd3,0xfa,0x02,0xf5]
2472 @ CHECK: ssub8eq        r5, r1, r2      @ encoding: [0xc1,0xfa,0x02,0xf5]
2473
2474
2475 @------------------------------------------------------------------------------
2476 @ STC{L}/STC2{L}
2477 @------------------------------------------------------------------------------
2478         stc2 p0, c8, [r1, #4]
2479         stc2 p1, c7, [r2]
2480         stc2 p2, c6, [r3, #-224]
2481         stc2 p3, c5, [r4, #-120]!
2482         stc2 p4, c4, [r5], #16
2483         stc2 p5, c3, [r6], #-72
2484         stc2l p6, c2, [r7, #4]
2485         stc2l p7, c1, [r8]
2486         stc2l p8, c0, [r9, #-224]
2487         stc2l p9, c1, [r10, #-120]!
2488         stc2l p10, c2, [r11], #16
2489         stc2l p11, c3, [r12], #-72
2490
2491         stc p12, c4, [r0, #4]
2492         stc p13, c5, [r1]
2493         stc p14, c6, [r2, #-224]
2494         stc p15, c7, [r3, #-120]!
2495         stc p5, c8, [r4], #16
2496         stc p4, c9, [r5], #-72
2497         stcl p3, c10, [r6, #4]
2498         stcl p2, c11, [r7]
2499         stcl p1, c12, [r8, #-224]
2500         stcl p0, c13, [r9, #-120]!
2501         stcl p6, c14, [r10], #16
2502         stcl p7, c15, [r11], #-72
2503
2504         stc2 p2, c8, [r1], { 25 }
2505
2506 @ CHECK: stc2   p0, c8, [r1, #4]        @ encoding: [0x81,0xfd,0x01,0x80]
2507 @ CHECK: stc2   p1, c7, [r2]            @ encoding: [0x82,0xfd,0x00,0x71]
2508 @ CHECK: stc2   p2, c6, [r3, #-224]     @ encoding: [0x03,0xfd,0x38,0x62]
2509 @ CHECK: stc2   p3, c5, [r4, #-120]!    @ encoding: [0x24,0xfd,0x1e,0x53]
2510 @ CHECK: stc2   p4, c4, [r5], #16       @ encoding: [0xa5,0xfc,0x04,0x44]
2511 @ CHECK: stc2   p5, c3, [r6], #-72      @ encoding: [0x26,0xfc,0x12,0x35]
2512 @ CHECK: stc2l  p6, c2, [r7, #4]        @ encoding: [0xc7,0xfd,0x01,0x26]
2513 @ CHECK: stc2l  p7, c1, [r8]            @ encoding: [0xc8,0xfd,0x00,0x17]
2514 @ CHECK: stc2l  p8, c0, [r9, #-224]     @ encoding: [0x49,0xfd,0x38,0x08]
2515 @ CHECK: stc2l  p9, c1, [r10, #-120]!   @ encoding: [0x6a,0xfd,0x1e,0x19]
2516 @ CHECK: stc2l  p10, c2, [r11], #16     @ encoding: [0xeb,0xfc,0x04,0x2a]
2517 @ CHECK: stc2l  p11, c3, [r12], #-72    @ encoding: [0x6c,0xfc,0x12,0x3b]
2518
2519 @ CHECK: stc    p12, c4, [r0, #4]       @ encoding: [0x80,0xed,0x01,0x4c]
2520 @ CHECK: stc    p13, c5, [r1]           @ encoding: [0x81,0xed,0x00,0x5d]
2521 @ CHECK: stc    p14, c6, [r2, #-224]    @ encoding: [0x02,0xed,0x38,0x6e]
2522 @ CHECK: stc    p15, c7, [r3, #-120]!   @ encoding: [0x23,0xed,0x1e,0x7f]
2523 @ CHECK: stc    p5, c8, [r4], #16       @ encoding: [0xa4,0xec,0x04,0x85]
2524 @ CHECK: stc    p4, c9, [r5], #-72      @ encoding: [0x25,0xec,0x12,0x94]
2525 @ CHECK: stcl   p3, c10, [r6, #4]       @ encoding: [0xc6,0xed,0x01,0xa3]
2526 @ CHECK: stcl   p2, c11, [r7]           @ encoding: [0xc7,0xed,0x00,0xb2]
2527 @ CHECK: stcl   p1, c12, [r8, #-224]    @ encoding: [0x48,0xed,0x38,0xc1]
2528 @ CHECK: stcl   p0, c13, [r9, #-120]!   @ encoding: [0x69,0xed,0x1e,0xd0]
2529 @ CHECK: stcl   p6, c14, [r10], #16     @ encoding: [0xea,0xec,0x04,0xe6]
2530 @ CHECK: stcl   p7, c15, [r11], #-72    @ encoding: [0x6b,0xec,0x12,0xf7]
2531
2532 @ CHECK: stc2   p2, c8, [r1], {25}      @ encoding: [0x81,0xfc,0x19,0x82]
2533
2534
2535 @------------------------------------------------------------------------------
2536 @ STMIA
2537 @------------------------------------------------------------------------------
2538         stmia.w r4, {r4, r5, r8, r9}
2539         stmia.w r4, {r5, r6}
2540         stmia.w r5!, {r3, r8}
2541         stm.w r4, {r4, r5, r8, r9}
2542         stm.w r4, {r5, r6}
2543         stm.w r5!, {r3, r8}
2544         stm.w r5!, {r1, r2}
2545         stm.w r2, {r1, r2}
2546
2547         stmia r4, {r4, r5, r8, r9}
2548         stmia r4, {r5, r6}
2549         stmia r5!, {r3, r8}
2550         stm r4, {r4, r5, r8, r9}
2551         stm r4, {r5, r6}
2552         stm r5!, {r3, r8}
2553         stmea r5!, {r3, r8}
2554
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  r4, {r4, r5, r8, r9}    @ encoding: [0x84,0xe8,0x30,0x03]
2559 @ CHECK: stm.w  r4, {r5, r6}            @ encoding: [0x84,0xe8,0x60,0x00]
2560 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2561 @ CHECK: stm.w  r5!, {r1, r2}           @ encoding: [0xa5,0xe8,0x06,0x00]
2562 @ CHECK: stm.w  r2, {r1, r2}            @ encoding: [0x82,0xe8,0x06,0x00]
2563
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  r4, {r4, r5, r8, r9}    @ encoding: [0x84,0xe8,0x30,0x03]
2568 @ CHECK: stm.w  r4, {r5, r6}            @ encoding: [0x84,0xe8,0x60,0x00]
2569 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2570 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2571
2572
2573 @------------------------------------------------------------------------------
2574 @ STMDB
2575 @------------------------------------------------------------------------------
2576         stmdb r4, {r4, r5, r8, r9}
2577         stmdb r4, {r5, r6}
2578         stmdb r5!, {r3, r8}
2579         stmea r5!, {r3, r8}
2580         stmdb.w r5, {r0, r1}
2581
2582 @ CHECK: stmdb  r4, {r4, r5, r8, r9}    @ encoding: [0x04,0xe9,0x30,0x03]
2583 @ CHECK: stmdb  r4, {r5, r6}            @ encoding: [0x04,0xe9,0x60,0x00]
2584 @ CHECK: stmdb  r5!, {r3, r8}           @ encoding: [0x25,0xe9,0x08,0x01]
2585 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2586 @ CHECK: stmdb  r5, {r0, r1}            @ encoding: [0x05,0xe9,0x03,0x00]
2587
2588
2589 @------------------------------------------------------------------------------
2590 @ STR(immediate)
2591 @------------------------------------------------------------------------------
2592         str r5, [r5, #-4]
2593         str r5, [r6, #32]
2594         str r5, [r6, #33]
2595         str r5, [r6, #257]
2596         str.w pc, [r7, #257]
2597         str r2, [r4, #255]!
2598         str r8, [sp, #4]!
2599         str lr, [sp, #-4]!
2600         str r2, [r4], #255
2601         str r8, [sp], #4
2602         str lr, [sp], #-4
2603
2604 @ CHECK: str    r5, [r5, #-4]           @ encoding: [0x45,0xf8,0x04,0x5c]
2605 @ CHECK: str    r5, [r6, #32]           @ encoding: [0x35,0x62]
2606 @ CHECK: str.w  r5, [r6, #33]           @ encoding: [0xc6,0xf8,0x21,0x50]
2607 @ CHECK: str.w  r5, [r6, #257]          @ encoding: [0xc6,0xf8,0x01,0x51]
2608 @ CHECK: str.w  pc, [r7, #257]          @ encoding: [0xc7,0xf8,0x01,0xf1]
2609 @ CHECK: str    r2, [r4, #255]!         @ encoding: [0x44,0xf8,0xff,0x2f]
2610 @ CHECK: str    r8, [sp, #4]!           @ encoding: [0x4d,0xf8,0x04,0x8f]
2611 @ CHECK: str    lr, [sp, #-4]!          @ encoding: [0x4d,0xf8,0x04,0xed]
2612 @ CHECK: str    r2, [r4], #255          @ encoding: [0x44,0xf8,0xff,0x2b]
2613 @ CHECK: str    r8, [sp], #4            @ encoding: [0x4d,0xf8,0x04,0x8b]
2614 @ CHECK: str    lr, [sp], #-4           @ encoding: [0x4d,0xf8,0x04,0xe9]
2615
2616
2617 @------------------------------------------------------------------------------
2618 @ STR(register)
2619 @------------------------------------------------------------------------------
2620         str r1, [r8, r1]
2621         str.w r4, [r5, r2]
2622         str r6, [r0, r2, lsl #3]
2623         str r8, [r8, r2, lsl #2]
2624         str r7, [sp, r2, lsl #1]
2625         str r7, [sp, r2, lsl #0]
2626
2627 @ CHECK: str.w  r1, [r8, r1]            @ encoding: [0x48,0xf8,0x01,0x10]
2628 @ CHECK: str.w  r4, [r5, r2]            @ encoding: [0x45,0xf8,0x02,0x40]
2629 @ CHECK: str.w  r6, [r0, r2, lsl #3]    @ encoding: [0x40,0xf8,0x32,0x60]
2630 @ CHECK: str.w  r8, [r8, r2, lsl #2]    @ encoding: [0x48,0xf8,0x22,0x80]
2631 @ CHECK: str.w  r7, [sp, r2, lsl #1]    @ encoding: [0x4d,0xf8,0x12,0x70]
2632 @ CHECK: str.w  r7, [sp, r2]            @ encoding: [0x4d,0xf8,0x02,0x70]
2633
2634
2635 @------------------------------------------------------------------------------
2636 @ STRB(immediate)
2637 @------------------------------------------------------------------------------
2638         strb r5, [r5, #-4]
2639         strb r5, [r6, #32]
2640         strb r5, [r6, #33]
2641         strb r5, [r6, #257]
2642         strb.w lr, [r7, #257]
2643         strb r5, [r8, #255]!
2644         strb r2, [r5, #4]!
2645         strb r1, [r4, #-4]!
2646         strb lr, [r3], #255
2647         strb r9, [r2], #4
2648         strb r3, [sp], #-4
2649         strb r4, [r8, #-0]!
2650         strb r1, [r0], #-0
2651
2652 @ CHECK: strb   r5, [r5, #-4]           @ encoding: [0x05,0xf8,0x04,0x5c]
2653 @ CHECK: strb.w r5, [r6, #32]           @ encoding: [0x86,0xf8,0x20,0x50]
2654 @ CHECK: strb.w r5, [r6, #33]           @ encoding: [0x86,0xf8,0x21,0x50]
2655 @ CHECK: strb.w r5, [r6, #257]          @ encoding: [0x86,0xf8,0x01,0x51]
2656 @ CHECK: strb.w lr, [r7, #257]          @ encoding: [0x87,0xf8,0x01,0xe1]
2657 @ CHECK: strb   r5, [r8, #255]!         @ encoding: [0x08,0xf8,0xff,0x5f]
2658 @ CHECK: strb   r2, [r5, #4]!           @ encoding: [0x05,0xf8,0x04,0x2f]
2659 @ CHECK: strb   r1, [r4, #-4]!          @ encoding: [0x04,0xf8,0x04,0x1d]
2660 @ CHECK: strb   lr, [r3], #255          @ encoding: [0x03,0xf8,0xff,0xeb]
2661 @ CHECK: strb   r9, [r2], #4            @ encoding: [0x02,0xf8,0x04,0x9b]
2662 @ CHECK: strb   r3, [sp], #-4           @ encoding: [0x0d,0xf8,0x04,0x39]
2663 @ CHECK: strb   r4, [r8, #-0]!          @ encoding: [0x08,0xf8,0x00,0x4d]
2664 @ CHECK: strb   r1, [r0], #-0           @ encoding: [0x00,0xf8,0x00,0x19]
2665
2666
2667 @------------------------------------------------------------------------------
2668 @ STRB(register)
2669 @------------------------------------------------------------------------------
2670         strb r1, [r8, r1]
2671         strb.w r4, [r5, r2]
2672         strb r6, [r0, r2, lsl #3]
2673         strb r8, [r8, r2, lsl #2]
2674         strb r7, [sp, r2, lsl #1]
2675         strb r7, [sp, r2, lsl #0]
2676
2677 @ CHECK: strb.w r1, [r8, r1]            @ encoding: [0x08,0xf8,0x01,0x10]
2678 @ CHECK: strb.w r4, [r5, r2]            @ encoding: [0x05,0xf8,0x02,0x40]
2679 @ CHECK: strb.w r6, [r0, r2, lsl #3]    @ encoding: [0x00,0xf8,0x32,0x60]
2680 @ CHECK: strb.w r8, [r8, r2, lsl #2]    @ encoding: [0x08,0xf8,0x22,0x80]
2681 @ CHECK: strb.w r7, [sp, r2, lsl #1]    @ encoding: [0x0d,0xf8,0x12,0x70]
2682 @ CHECK: strb.w r7, [sp, r2]            @ encoding: [0x0d,0xf8,0x02,0x70]
2683
2684
2685 @------------------------------------------------------------------------------
2686 @ STRBT
2687 @------------------------------------------------------------------------------
2688         strbt r1, [r2]
2689         strbt r1, [r8, #0]
2690         strbt r1, [r8, #3]
2691         strbt r1, [r8, #255]
2692
2693 @ CHECK: strbt  r1, [r2]                @ encoding: [0x02,0xf8,0x00,0x1e]
2694 @ CHECK: strbt  r1, [r8]                @ encoding: [0x08,0xf8,0x00,0x1e]
2695 @ CHECK: strbt  r1, [r8, #3]            @ encoding: [0x08,0xf8,0x03,0x1e]
2696 @ CHECK: strbt  r1, [r8, #255]          @ encoding: [0x08,0xf8,0xff,0x1e]
2697
2698
2699 @------------------------------------------------------------------------------
2700 @ STRD
2701 @------------------------------------------------------------------------------
2702         strd r3, r5, [r6, #24]
2703         strd r3, r5, [r6, #24]!
2704         strd r3, r5, [r6], #4
2705         strd r3, r5, [r6], #-8
2706         strd r3, r5, [r6]
2707         strd r8, r1, [r3, #0]
2708         strd r0, r1, [r2, #-0]
2709         strd r0, r1, [r2, #-0]!
2710         strd r0, r1, [r2], #-0
2711
2712 @ CHECK: strd   r3, r5, [r6, #24]       @ encoding: [0xc6,0xe9,0x06,0x35]
2713 @ CHECK: strd   r3, r5, [r6, #24]!      @ encoding: [0xe6,0xe9,0x06,0x35]
2714 @ CHECK: strd   r3, r5, [r6], #4        @ encoding: [0xe6,0xe8,0x01,0x35]
2715 @ CHECK: strd   r3, r5, [r6], #-8       @ encoding: [0x66,0xe8,0x02,0x35]
2716 @ CHECK: strd   r3, r5, [r6]            @ encoding: [0xc6,0xe9,0x00,0x35]
2717 @ CHECK: strd   r8, r1, [r3]            @ encoding: [0xc3,0xe9,0x00,0x81]
2718 @ CHECK: strd   r0, r1, [r2, #-0]       @ encoding: [0x42,0xe9,0x00,0x01]
2719 @ CHECK: strd   r0, r1, [r2, #-0]!      @ encoding: [0x62,0xe9,0x00,0x01]
2720 @ CHECK: strd   r0, r1, [r2], #-0       @ encoding: [0x62,0xe8,0x00,0x01]
2721
2722
2723 @------------------------------------------------------------------------------
2724 @ STREX/STREXB/STREXH/STREXD
2725 @------------------------------------------------------------------------------
2726         strex r1, r8, [r4]
2727         strex r8, r2, [r4, #0]
2728         strex r2, r12, [sp, #128]
2729         strexb r5, r1, [r7]
2730         strexh r9, r7, [r12]
2731         strexd r9, r3, r6, [r4]
2732
2733 @ CHECK: strex  r1, r8, [r4]            @ encoding: [0x44,0xe8,0x00,0x81]
2734 @ CHECK: strex  r8, r2, [r4]            @ encoding: [0x44,0xe8,0x00,0x28]
2735 @ CHECK: strex  r2, r12, [sp, #128]     @ encoding: [0x4d,0xe8,0x20,0xc2]
2736 @ CHECK: strexb r5, r1, [r7]            @ encoding: [0xc7,0xe8,0x45,0x1f]
2737 @ CHECK: strexh r9, r7, [r12]           @ encoding: [0xcc,0xe8,0x59,0x7f]
2738 @ CHECK: strexd r9, r3, r6, [r4]        @ encoding: [0xc4,0xe8,0x79,0x36]
2739
2740
2741 @------------------------------------------------------------------------------
2742 @ STRH(immediate)
2743 @------------------------------------------------------------------------------
2744         strh r5, [r5, #-4]
2745         strh r5, [r6, #32]
2746         strh r5, [r6, #33]
2747         strh r5, [r6, #257]
2748         strh.w lr, [r7, #257]
2749         strh r5, [r8, #255]!
2750         strh r2, [r5, #4]!
2751         strh r1, [r4, #-4]!
2752         strh lr, [r3], #255
2753         strh r9, [r2], #4
2754         strh r3, [sp], #-4
2755
2756 @ CHECK: strh   r5, [r5, #-4]           @ encoding: [0x25,0xf8,0x04,0x5c]
2757 @ CHECK: strh   r5, [r6, #32]           @ encoding: [0x35,0x84]
2758 @ CHECK: strh.w r5, [r6, #33]           @ encoding: [0xa6,0xf8,0x21,0x50]
2759 @ CHECK: strh.w r5, [r6, #257]          @ encoding: [0xa6,0xf8,0x01,0x51]
2760 @ CHECK: strh.w lr, [r7, #257]          @ encoding: [0xa7,0xf8,0x01,0xe1]
2761 @ CHECK: strh   r5, [r8, #255]!         @ encoding: [0x28,0xf8,0xff,0x5f]
2762 @ CHECK: strh   r2, [r5, #4]!           @ encoding: [0x25,0xf8,0x04,0x2f]
2763 @ CHECK: strh   r1, [r4, #-4]!          @ encoding: [0x24,0xf8,0x04,0x1d]
2764 @ CHECK: strh   lr, [r3], #255          @ encoding: [0x23,0xf8,0xff,0xeb]
2765 @ CHECK: strh   r9, [r2], #4            @ encoding: [0x22,0xf8,0x04,0x9b]
2766 @ CHECK: strh   r3, [sp], #-4           @ encoding: [0x2d,0xf8,0x04,0x39]
2767
2768
2769 @------------------------------------------------------------------------------
2770 @ STRH(register)
2771 @------------------------------------------------------------------------------
2772         strh r1, [r8, r1]
2773         strh.w r4, [r5, r2]
2774         strh r6, [r0, r2, lsl #3]
2775         strh r8, [r8, r2, lsl #2]
2776         strh r7, [sp, r2, lsl #1]
2777         strh r7, [sp, r2, lsl #0]
2778
2779 @ CHECK: strh.w r1, [r8, r1]            @ encoding: [0x28,0xf8,0x01,0x10]
2780 @ CHECK: strh.w r4, [r5, r2]            @ encoding: [0x25,0xf8,0x02,0x40]
2781 @ CHECK: strh.w r6, [r0, r2, lsl #3]    @ encoding: [0x20,0xf8,0x32,0x60]
2782 @ CHECK: strh.w r8, [r8, r2, lsl #2]    @ encoding: [0x28,0xf8,0x22,0x80]
2783 @ CHECK: strh.w r7, [sp, r2, lsl #1]    @ encoding: [0x2d,0xf8,0x12,0x70]
2784 @ CHECK: strh.w r7, [sp, r2]            @ encoding: [0x2d,0xf8,0x02,0x70]
2785
2786
2787 @------------------------------------------------------------------------------
2788 @ STRHT
2789 @------------------------------------------------------------------------------
2790         strht r1, [r2]
2791         strht r1, [r8, #0]
2792         strht r1, [r8, #3]
2793         strht r1, [r8, #255]
2794
2795 @ CHECK: strht  r1, [r2]                @ encoding: [0x22,0xf8,0x00,0x1e]
2796 @ CHECK: strht  r1, [r8]                @ encoding: [0x28,0xf8,0x00,0x1e]
2797 @ CHECK: strht  r1, [r8, #3]            @ encoding: [0x28,0xf8,0x03,0x1e]
2798 @ CHECK: strht  r1, [r8, #255]          @ encoding: [0x28,0xf8,0xff,0x1e]
2799
2800
2801 @------------------------------------------------------------------------------
2802 @ STRT
2803 @------------------------------------------------------------------------------
2804         strt r1, [r2]
2805         strt r1, [r8, #0]
2806         strt r1, [r8, #3]
2807         strt r1, [r8, #255]
2808
2809 @ CHECK: strt   r1, [r2]                @ encoding: [0x42,0xf8,0x00,0x1e]
2810 @ CHECK: strt   r1, [r8]                @ encoding: [0x48,0xf8,0x00,0x1e]
2811 @ CHECK: strt   r1, [r8, #3]            @ encoding: [0x48,0xf8,0x03,0x1e]
2812 @ CHECK: strt   r1, [r8, #255]          @ encoding: [0x48,0xf8,0xff,0x1e]
2813
2814
2815 @------------------------------------------------------------------------------
2816 @ SUB (immediate)
2817 @------------------------------------------------------------------------------
2818         itet eq
2819         subeq r1, r2, #4
2820         subwne r5, r3, #1023
2821         subeq r4, r5, #293
2822         sub r2, sp, #1024
2823         sub r2, r8, #0xff00
2824         sub r2, r3, #257
2825         subw r2, r3, #257
2826         sub r12, r6, #0x100
2827         subw r12, r6, #0x100
2828         subs r1, r2, #0x1f0
2829         sub r2, #1
2830         sub r0, r0, #32
2831         subs r2, r2, #56
2832         subs r2, #56
2833
2834 @ CHECK: itet   eq                      @ encoding: [0x0a,0xbf]
2835 @ CHECK: subeq  r1, r2, #4              @ encoding: [0x11,0x1f]
2836 @ CHECK: subwne r5, r3, #1023           @ encoding: [0xa3,0xf2,0xff,0x35]
2837 @ CHECK: subweq r4, r5, #293            @ encoding: [0xa5,0xf2,0x25,0x14]
2838 @ CHECK: sub.w  r2, sp, #1024           @ encoding: [0xad,0xf5,0x80,0x62]
2839 @ CHECK: sub.w  r2, r8, #65280          @ encoding: [0xa8,0xf5,0x7f,0x42]
2840 @ CHECK: subw   r2, r3, #257            @ encoding: [0xa3,0xf2,0x01,0x12]
2841 @ CHECK: subw   r2, r3, #257            @ encoding: [0xa3,0xf2,0x01,0x12]
2842 @ CHECK: sub.w  r12, r6, #256           @ encoding: [0xa6,0xf5,0x80,0x7c]
2843 @ CHECK: subw   r12, r6, #256           @ encoding: [0xa6,0xf2,0x00,0x1c]
2844 @ CHECK: subs.w r1, r2, #496            @ encoding: [0xb2,0xf5,0xf8,0x71]
2845 @ CHECK: sub.w  r2, r2, #1              @ encoding: [0xa2,0xf1,0x01,0x02]
2846 @ CHECK: sub.w  r0, r0, #32             @ encoding: [0xa0,0xf1,0x20,0x00]
2847 @ CHECK: subs   r2, #56                 @ encoding: [0x38,0x3a]
2848 @ CHECK: subs   r2, #56                 @ encoding: [0x38,0x3a]
2849
2850
2851 @------------------------------------------------------------------------------
2852 @ SUB (register)
2853 @------------------------------------------------------------------------------
2854         sub r4, r5, r6
2855         sub r4, r5, r6, lsl #5
2856         sub r4, r5, r6, lsr #5
2857         sub.w r4, r5, r6, lsr #5
2858         sub r4, r5, r6, asr #5
2859         sub r4, r5, r6, ror #5
2860         sub.w r5, r2, r12, rrx
2861         sub r2, sp, ip
2862         sub sp, sp, ip
2863         sub sp, ip
2864         sub.w r2, sp, ip
2865         sub.w sp, sp, ip
2866         sub.w sp, ip
2867
2868 @ CHECK: sub.w  r4, r5, r6              @ encoding: [0xa5,0xeb,0x06,0x04]
2869 @ CHECK: sub.w  r4, r5, r6, lsl #5      @ encoding: [0xa5,0xeb,0x46,0x14]
2870 @ CHECK: sub.w  r4, r5, r6, lsr #5      @ encoding: [0xa5,0xeb,0x56,0x14]
2871 @ CHECK: sub.w  r4, r5, r6, lsr #5      @ encoding: [0xa5,0xeb,0x56,0x14]
2872 @ CHECK: sub.w  r4, r5, r6, asr #5      @ encoding: [0xa5,0xeb,0x66,0x14]
2873 @ CHECK: sub.w  r4, r5, r6, ror #5      @ encoding: [0xa5,0xeb,0x76,0x14]
2874 @ CHECK: sub.w r5, r2, r12, rrx         @ encoding: [0xa2,0xeb,0x3c,0x05]
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 @ CHECK: sub.w  r2, sp, r12             @ encoding: [0xad,0xeb,0x0c,0x02]
2879 @ CHECK: sub.w  sp, sp, r12             @ encoding: [0xad,0xeb,0x0c,0x0d]
2880 @ CHECK: sub.w  sp, sp, r12             @ encoding: [0xad,0xeb,0x0c,0x0d]
2881
2882
2883 @------------------------------------------------------------------------------
2884 @ SVC
2885 @------------------------------------------------------------------------------
2886         svc #0
2887         ite eq
2888         svceq #255
2889         swine #33
2890
2891 @ CHECK: svc    #0                      @ encoding: [0x00,0xdf]
2892 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
2893 @ CHECK: svceq  #255                    @ encoding: [0xff,0xdf]
2894 @ CHECK: svcne  #33                     @ encoding: [0x21,0xdf]
2895
2896
2897 @------------------------------------------------------------------------------
2898 @ SXTAB
2899 @------------------------------------------------------------------------------
2900         sxtab r2, r3, r4
2901         sxtab r4, r5, r6, ror #0
2902         it lt
2903         sxtablt r6, r2, r9, ror #8
2904         sxtab r5, r1, r4, ror #16
2905         sxtab r7, r8, r3, ror #24
2906
2907 @ CHECK: sxtab  r2, r3, r4              @ encoding: [0x43,0xfa,0x84,0xf2]
2908 @ CHECK: sxtab  r4, r5, r6              @ encoding: [0x45,0xfa,0x86,0xf4]
2909 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
2910 @ CHECK: sxtablt r6, r2, r9, ror #8     @ encoding: [0x42,0xfa,0x99,0xf6]
2911 @ CHECK: sxtab  r5, r1, r4, ror #16     @ encoding: [0x41,0xfa,0xa4,0xf5]
2912 @ CHECK: sxtab  r7, r8, r3, ror #24     @ encoding: [0x48,0xfa,0xb3,0xf7]
2913
2914
2915 @------------------------------------------------------------------------------
2916 @ SXTAB16
2917 @------------------------------------------------------------------------------
2918         sxtab16 r6, r2, r7, ror #0
2919         sxtab16 r3, r5, r8, ror #8
2920         sxtab16 r3, r2, r1, ror #16
2921         ite ne
2922         sxtab16ne r0, r1, r4
2923         sxtab16eq r1, r2, r3, ror #24
2924
2925 @ CHECK: sxtab16 r6, r2, r7             @ encoding: [0x22,0xfa,0x87,0xf6]
2926 @ CHECK: sxtab16 r3, r5, r8, ror #8     @ encoding: [0x25,0xfa,0x98,0xf3]
2927 @ CHECK: sxtab16 r3, r2, r1, ror #16    @ encoding: [0x22,0xfa,0xa1,0xf3]
2928 @ CHECK: ite    ne                      @ encoding: [0x14,0xbf]
2929 @ CHECK: sxtab16ne r0, r1, r4           @ encoding: [0x21,0xfa,0x84,0xf0]
2930 @ CHECK: sxtab16eq r1, r2, r3, ror #24  @ encoding: [0x22,0xfa,0xb3,0xf1]
2931
2932
2933 @------------------------------------------------------------------------------
2934 @ SXTAH
2935 @------------------------------------------------------------------------------
2936         sxtah r1, r3, r9
2937         sxtah r3, r8, r3, ror #8
2938         sxtah r9, r3, r3, ror #24
2939         ite hi
2940         sxtahhi r6, r1, r6, ror #0
2941         sxtahls r2, r2, r4, ror #16
2942
2943 @ CHECK: sxtah  r1, r3, r9              @ encoding: [0x03,0xfa,0x89,0xf1]
2944 @ CHECK: sxtah  r3, r8, r3, ror #8      @ encoding: [0x08,0xfa,0x93,0xf3]
2945 @ CHECK: sxtah  r9, r3, r3, ror #24     @ encoding: [0x03,0xfa,0xb3,0xf9]
2946 @ CHECK: ite    hi                      @ encoding: [0x8c,0xbf]
2947 @ CHECK: sxtahhi r6, r1, r6             @ encoding: [0x01,0xfa,0x86,0xf6]
2948 @ CHECK: sxtahls r2, r2, r4, ror #16    @ encoding: [0x02,0xfa,0xa4,0xf2]
2949
2950
2951 @------------------------------------------------------------------------------
2952 @ SXTB
2953 @------------------------------------------------------------------------------
2954         sxtb r5, r6, ror #0
2955         sxtb r6, r9, ror #8
2956         sxtb r8, r3, ror #24
2957         ite ge
2958         sxtbge r2, r4
2959         sxtblt r5, r1, ror #16
2960         sxtb.w  r7, r8
2961
2962 @ CHECK: sxtb   r5, r6                  @ encoding: [0x75,0xb2]
2963 @ CHECK: sxtb.w r6, r9, ror #8          @ encoding: [0x4f,0xfa,0x99,0xf6]
2964 @ CHECK: sxtb.w r8, r3, ror #24         @ encoding: [0x4f,0xfa,0xb3,0xf8]
2965 @ CHECK: ite    ge                      @ encoding: [0xac,0xbf]
2966 @ CHECK: sxtbge r2, r4                  @ encoding: [0x62,0xb2]
2967 @ CHECK: sxtblt.w       r5, r1, ror #16 @ encoding: [0x4f,0xfa,0xa1,0xf5]
2968 @ CHECK: sxtb.w r7, r8                  @ encoding: [0x4f,0xfa,0x88,0xf7]
2969
2970
2971 @------------------------------------------------------------------------------
2972 @ SXTB16
2973 @------------------------------------------------------------------------------
2974         sxtb16 r1, r4
2975         sxtb16 r6, r7, ror #0
2976         sxtb16 r3, r1, ror #16
2977         ite cs
2978         sxtb16cs r3, r5, ror #8
2979         sxtb16lo r2, r3, ror #24
2980
2981 @ CHECK: sxtb16 r1, r4                  @ encoding: [0x2f,0xfa,0x84,0xf1]
2982 @ CHECK: sxtb16 r6, r7                  @ encoding: [0x2f,0xfa,0x87,0xf6]
2983 @ CHECK: sxtb16 r3, r1, ror #16         @ encoding: [0x2f,0xfa,0xa1,0xf3]
2984 @ CHECK: ite    hs                      @ encoding: [0x2c,0xbf]
2985 @ CHECK: sxtb16hs       r3, r5, ror #8  @ encoding: [0x2f,0xfa,0x95,0xf3]
2986 @ CHECK: sxtb16lo       r2, r3, ror #24 @ encoding: [0x2f,0xfa,0xb3,0xf2]
2987
2988
2989 @------------------------------------------------------------------------------
2990 @ SXTH
2991 @------------------------------------------------------------------------------
2992         sxth r1, r6, ror #0
2993         sxth r3, r8, ror #8
2994         sxth r9, r3, ror #24
2995         itt ne
2996         sxthne r3, r9
2997         sxthne r2, r2, ror #16
2998         sxth.w  r7, r8
2999
3000 @ CHECK: sxth   r1, r6                  @ encoding: [0x31,0xb2]
3001 @ CHECK: sxth.w r3, r8, ror #8          @ encoding: [0x0f,0xfa,0x98,0xf3]
3002 @ CHECK: sxth.w r9, r3, ror #24         @ encoding: [0x0f,0xfa,0xb3,0xf9]
3003 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
3004 @ CHECK: sxthne.w       r3, r9          @ encoding: [0x0f,0xfa,0x89,0xf3]
3005 @ CHECK: sxthne.w       r2, r2, ror #16 @ encoding: [0x0f,0xfa,0xa2,0xf2]
3006 @ CHECK: sxth.w r7, r8                  @ encoding: [0x0f,0xfa,0x88,0xf7]
3007
3008
3009 @------------------------------------------------------------------------------
3010 @ SXTB
3011 @------------------------------------------------------------------------------
3012         sxtb r5, r6, ror #0
3013         sxtb.w r6, r9, ror #8
3014         sxtb r8, r3, ror #24
3015         ite ge
3016         sxtbge r2, r4
3017         sxtblt r5, r1, ror #16
3018
3019 @ CHECK: sxtb   r5, r6                  @ encoding: [0x75,0xb2]
3020 @ CHECK: sxtb.w r6, r9, ror #8          @ encoding: [0x4f,0xfa,0x99,0xf6]
3021 @ CHECK: sxtb.w r8, r3, ror #24         @ encoding: [0x4f,0xfa,0xb3,0xf8]
3022 @ CHECK: ite    ge                      @ encoding: [0xac,0xbf]
3023 @ CHECK: sxtbge r2, r4                  @ encoding: [0x62,0xb2]
3024 @ CHECK: sxtblt.w       r5, r1, ror #16 @ encoding: [0x4f,0xfa,0xa1,0xf5]
3025
3026
3027 @------------------------------------------------------------------------------
3028 @ SXTB16
3029 @------------------------------------------------------------------------------
3030         sxtb16 r1, r4
3031         sxtb16 r6, r7, ror #0
3032         sxtb16 r3, r1, ror #16
3033         ite cs
3034         sxtb16cs r3, r5, ror #8
3035         sxtb16lo r2, r3, ror #24
3036
3037 @ CHECK: sxtb16 r1, r4                  @ encoding: [0x2f,0xfa,0x84,0xf1]
3038 @ CHECK: sxtb16 r6, r7                  @ encoding: [0x2f,0xfa,0x87,0xf6]
3039 @ CHECK: sxtb16 r3, r1, ror #16         @ encoding: [0x2f,0xfa,0xa1,0xf3]
3040 @ CHECK: ite    hs                      @ encoding: [0x2c,0xbf]
3041 @ CHECK: sxtb16hs       r3, r5, ror #8  @ encoding: [0x2f,0xfa,0x95,0xf3]
3042 @ CHECK: sxtb16lo       r2, r3, ror #24 @ encoding: [0x2f,0xfa,0xb3,0xf2]
3043
3044
3045 @------------------------------------------------------------------------------
3046 @ SXTH
3047 @------------------------------------------------------------------------------
3048         sxth r1, r6, ror #0
3049         sxth.w r3, r8, ror #8
3050         sxth r9, r3, ror #24
3051         itt ne
3052         sxthne r3, r9
3053         sxthne r2, r2, ror #16
3054
3055 @ CHECK: sxth   r1, r6                  @ encoding: [0x31,0xb2]
3056 @ CHECK: sxth.w r3, r8, ror #8          @ encoding: [0x0f,0xfa,0x98,0xf3]
3057 @ CHECK: sxth.w r9, r3, ror #24         @ encoding: [0x0f,0xfa,0xb3,0xf9]
3058 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
3059 @ CHECK: sxthne.w       r3, r9          @ encoding: [0x0f,0xfa,0x89,0xf3]
3060 @ CHECK: sxthne.w       r2, r2, ror #16 @ encoding: [0x0f,0xfa,0xa2,0xf2]
3061
3062
3063 @------------------------------------------------------------------------------
3064 @ TBB/TBH
3065 @------------------------------------------------------------------------------
3066         tbb [r3, r8]
3067         tbh [r3, r8, lsl #1]
3068         it eq
3069         tbbeq [r3, r8]
3070         it cs
3071         tbhcs [r3, r8, lsl #1]
3072
3073 @ CHECK: tbb    [r3, r8]                @ encoding: [0xd3,0xe8,0x08,0xf0]
3074 @ CHECK: tbh    [r3, r8, lsl #1]        @ encoding: [0xd3,0xe8,0x18,0xf0]
3075 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
3076 @ CHECK: tbbeq  [r3, r8]                @ encoding: [0xd3,0xe8,0x08,0xf0]
3077 @ CHECK: it     hs                      @ encoding: [0x28,0xbf]
3078 @ CHECK: tbhhs  [r3, r8, lsl #1]        @ encoding: [0xd3,0xe8,0x18,0xf0]
3079
3080
3081 @------------------------------------------------------------------------------
3082 @ TEQ
3083 @------------------------------------------------------------------------------
3084         teq r5, #0xf000
3085         teq r4, r5
3086         teq r4, r5, lsl #5
3087         teq r4, r5, lsr #5
3088         teq r4, r5, lsr #5
3089         teq r4, r5, asr #5
3090         teq r4, r5, ror #5
3091
3092 @ CHECK: teq.w  r5, #61440              @ encoding: [0x95,0xf4,0x70,0x4f]
3093 @ CHECK: teq.w  r4, r5                  @ encoding: [0x94,0xea,0x05,0x0f]
3094 @ CHECK: teq.w  r4, r5, lsl #5          @ encoding: [0x94,0xea,0x45,0x1f]
3095 @ CHECK: teq.w  r4, r5, lsr #5          @ encoding: [0x94,0xea,0x55,0x1f]
3096 @ CHECK: teq.w  r4, r5, lsr #5          @ encoding: [0x94,0xea,0x55,0x1f]
3097 @ CHECK: teq.w  r4, r5, asr #5          @ encoding: [0x94,0xea,0x65,0x1f]
3098 @ CHECK: teq.w  r4, r5, ror #5          @ encoding: [0x94,0xea,0x75,0x1f]
3099
3100
3101 @------------------------------------------------------------------------------
3102 @ TST
3103 @------------------------------------------------------------------------------
3104         tst r5, #0xf000
3105         tst r2, r5
3106         tst r3, r12, lsl #5
3107         tst r4, r11, lsr #4
3108         tst r5, r10, lsr #12
3109         tst r6, r9, asr #30
3110         tst r7, r8, ror #2
3111
3112 @ CHECK: tst.w  r5, #61440              @ encoding: [0x15,0xf4,0x70,0x4f]
3113 @ CHECK: tst    r2, r5                  @ encoding: [0x2a,0x42]
3114 @ CHECK: tst.w  r3, r12, lsl #5         @ encoding: [0x13,0xea,0x4c,0x1f]
3115 @ CHECK: tst.w  r4, r11, lsr #4         @ encoding: [0x14,0xea,0x1b,0x1f]
3116 @ CHECK: tst.w  r5, r10, lsr #12        @ encoding: [0x15,0xea,0x1a,0x3f]
3117 @ CHECK: tst.w  r6, r9, asr #30         @ encoding: [0x16,0xea,0xa9,0x7f]
3118 @ CHECK: tst.w  r7, r8, ror #2          @ encoding: [0x17,0xea,0xb8,0x0f]
3119
3120
3121 @------------------------------------------------------------------------------
3122 @ UADD16/UADD8
3123 @------------------------------------------------------------------------------
3124         uadd16 r1, r2, r3
3125         uadd8 r1, r2, r3
3126         ite gt
3127         uadd16gt r1, r2, r3
3128         uadd8le r1, r2, r3
3129
3130 @ CHECK: uadd16 r1, r2, r3              @ encoding: [0x92,0xfa,0x43,0xf1]
3131 @ CHECK: uadd8  r1, r2, r3              @ encoding: [0x82,0xfa,0x43,0xf1]
3132 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3133 @ CHECK: uadd16gt       r1, r2, r3      @ encoding: [0x92,0xfa,0x43,0xf1]
3134 @ CHECK: uadd8le        r1, r2, r3      @ encoding: [0x82,0xfa,0x43,0xf1]
3135
3136
3137 @------------------------------------------------------------------------------
3138 @ UASX
3139 @------------------------------------------------------------------------------
3140         uasx r9, r12, r0
3141         it eq
3142         uasxeq r9, r12, r0
3143         uaddsubx r9, r12, r0
3144         it eq
3145         uaddsubxeq r9, r12, r0
3146
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 @ CHECK: uasx   r9, r12, r0             @ encoding: [0xac,0xfa,0x40,0xf9]
3151 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
3152 @ CHECK: uasxeq r9, r12, r0             @ encoding: [0xac,0xfa,0x40,0xf9]
3153
3154
3155 @------------------------------------------------------------------------------
3156 @ UBFX
3157 @------------------------------------------------------------------------------
3158         ubfx r4, r5, #16, #1
3159         it gt
3160         ubfxgt r4, r5, #16, #16
3161
3162 @ CHECK: ubfx   r4, r5, #16, #1         @ encoding: [0xc5,0xf3,0x00,0x44]
3163 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
3164 @ CHECK: ubfxgt r4, r5, #16, #16        @ encoding: [0xc5,0xf3,0x0f,0x44]
3165
3166
3167 @------------------------------------------------------------------------------
3168 @ UHADD16/UHADD8
3169 @------------------------------------------------------------------------------
3170         uhadd16 r4, r8, r2
3171         uhadd8 r4, r8, r2
3172         itt gt
3173         uhadd16gt r4, r8, r2
3174         uhadd8gt r4, r8, r2
3175
3176 @ CHECK: uhadd16        r4, r8, r2      @ encoding: [0x98,0xfa,0x62,0xf4]
3177 @ CHECK: uhadd8 r4, r8, r2              @ encoding: [0x88,0xfa,0x62,0xf4]
3178 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
3179 @ CHECK: uhadd16gt      r4, r8, r2      @ encoding: [0x98,0xfa,0x62,0xf4]
3180 @ CHECK: uhadd8gt       r4, r8, r2      @ encoding: [0x88,0xfa,0x62,0xf4]
3181
3182
3183 @------------------------------------------------------------------------------
3184 @ UHASX/UHSAX
3185 @------------------------------------------------------------------------------
3186         uhasx r4, r1, r5
3187         uhsax r5, r6, r6
3188         itt gt
3189         uhasxgt r6, r9, r8
3190         uhsaxgt r7, r8, r12
3191         uhaddsubx r4, r1, r5
3192         uhsubaddx r5, r6, r6
3193         itt gt
3194         uhaddsubxgt r6, r9, r8
3195         uhsubaddxgt r7, r8, r12
3196
3197 @ CHECK: uhasx  r4, r1, r5              @ encoding: [0xa1,0xfa,0x65,0xf4]
3198 @ CHECK: uhsax  r5, r6, r6              @ encoding: [0xe6,0xfa,0x66,0xf5]
3199 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
3200 @ CHECK: uhasxgt r6, r9, r8             @ encoding: [0xa9,0xfa,0x68,0xf6]
3201 @ CHECK: uhsaxgt r7, r8, r12            @ encoding: [0xe8,0xfa,0x6c,0xf7]
3202 @ CHECK: uhasx  r4, r1, r5              @ encoding: [0xa1,0xfa,0x65,0xf4]
3203 @ CHECK: uhsax  r5, r6, r6              @ encoding: [0xe6,0xfa,0x66,0xf5]
3204 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
3205 @ CHECK: uhasxgt r6, r9, r8             @ encoding: [0xa9,0xfa,0x68,0xf6]
3206 @ CHECK: uhsaxgt r7, r8, r12            @ encoding: [0xe8,0xfa,0x6c,0xf7]
3207
3208
3209 @------------------------------------------------------------------------------
3210 @ UHSUB16/UHSUB8
3211 @------------------------------------------------------------------------------
3212         uhsub16 r5, r8, r3
3213         uhsub8 r1, r7, r6
3214         itt lt
3215         uhsub16lt r4, r9, r12
3216         uhsub8lt r3, r1, r5
3217
3218 @ CHECK: uhsub16        r5, r8, r3      @ encoding: [0xd8,0xfa,0x63,0xf5]
3219 @ CHECK: uhsub8 r1, r7, r6              @ encoding: [0xc7,0xfa,0x66,0xf1]
3220 @ CHECK: itt    lt                      @ encoding: [0xbc,0xbf]
3221 @ CHECK: uhsub16lt      r4, r9, r12     @ encoding: [0xd9,0xfa,0x6c,0xf4]
3222 @ CHECK: uhsub8lt       r3, r1, r5      @ encoding: [0xc1,0xfa,0x65,0xf3]
3223
3224
3225 @------------------------------------------------------------------------------
3226 @ UMAAL
3227 @------------------------------------------------------------------------------
3228         umaal r3, r4, r5, r6
3229         it lt
3230         umaallt r3, r4, r5, r6
3231
3232 @ CHECK: umaal  r3, r4, r5, r6          @ encoding: [0xe5,0xfb,0x66,0x34]
3233 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
3234 @ CHECK: umaallt        r3, r4, r5, r6  @ encoding: [0xe5,0xfb,0x66,0x34]
3235
3236
3237 @------------------------------------------------------------------------------
3238 @ UMLAL
3239 @------------------------------------------------------------------------------
3240         umlal r2, r4, r6, r8
3241         it gt
3242         umlalgt r6, r1, r2, r6
3243
3244 @ CHECK: umlal  r2, r4, r6, r8          @ encoding: [0xe6,0xfb,0x08,0x24]
3245 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
3246 @ CHECK: umlalgt        r6, r1, r2, r6  @ encoding: [0xe2,0xfb,0x06,0x61]
3247
3248
3249 @------------------------------------------------------------------------------
3250 @ UMULL
3251 @------------------------------------------------------------------------------
3252         umull r2, r4, r6, r8
3253         it gt
3254         umullgt r6, r1, r2, r6
3255
3256 @ CHECK: umull  r2, r4, r6, r8          @ encoding: [0xa6,0xfb,0x08,0x24]
3257 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
3258 @ CHECK: umullgt        r6, r1, r2, r6  @ encoding: [0xa2,0xfb,0x06,0x61]
3259
3260
3261 @------------------------------------------------------------------------------
3262 @ UQADD16/UQADD8
3263 @------------------------------------------------------------------------------
3264         uqadd16 r1, r2, r3
3265         uqadd8 r3, r4, r8
3266         ite gt
3267         uqadd16gt r4, r7, r9
3268         uqadd8le r8, r1, r2
3269
3270 @ CHECK: uqadd16        r1, r2, r3      @ encoding: [0x92,0xfa,0x53,0xf1]
3271 @ CHECK: uqadd8 r3, r4, r8              @ encoding: [0x84,0xfa,0x58,0xf3]
3272 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3273 @ CHECK: uqadd16gt      r4, r7, r9      @ encoding: [0x97,0xfa,0x59,0xf4]
3274 @ CHECK: uqadd8le       r8, r1, r2      @ encoding: [0x81,0xfa,0x52,0xf8]
3275
3276
3277 @------------------------------------------------------------------------------
3278 @ UQASX/UQSAX
3279 @------------------------------------------------------------------------------
3280         uqasx r1, r2, r3
3281         uqsax r3, r4, r8
3282         ite gt
3283         uqasxgt r4, r7, r9
3284         uqsaxle r8, r1, r2
3285
3286         uqaddsubx r1, r2, r3
3287         uqsubaddx r3, r4, r8
3288         ite gt
3289         uqaddsubxgt r4, r7, r9
3290         uqsubaddxle r8, r1, r2
3291
3292 @ CHECK: uqasx  r1, r2, r3              @ encoding: [0xa2,0xfa,0x53,0xf1]
3293 @ CHECK: uqsax  r3, r4, r8              @ encoding: [0xe4,0xfa,0x58,0xf3]
3294 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3295 @ CHECK: uqasxgt r4, r7, r9             @ encoding: [0xa7,0xfa,0x59,0xf4]
3296 @ CHECK: uqsaxle r8, r1, r2             @ encoding: [0xe1,0xfa,0x52,0xf8]
3297
3298 @ CHECK: uqasx  r1, r2, r3              @ encoding: [0xa2,0xfa,0x53,0xf1]
3299 @ CHECK: uqsax  r3, r4, r8              @ encoding: [0xe4,0xfa,0x58,0xf3]
3300 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3301 @ CHECK: uqasxgt r4, r7, r9             @ encoding: [0xa7,0xfa,0x59,0xf4]
3302 @ CHECK: uqsaxle r8, r1, r2             @ encoding: [0xe1,0xfa,0x52,0xf8]
3303
3304
3305 @------------------------------------------------------------------------------
3306 @ UQSUB16/UQSUB8
3307 @------------------------------------------------------------------------------
3308         uqsub8 r8, r2, r9
3309         uqsub16 r1, r9, r7
3310         ite gt
3311         uqsub8gt r3, r1, r6
3312         uqsub16le r4, r6, r4
3313
3314 @ CHECK: uqsub8 r8, r2, r9              @ encoding: [0xc2,0xfa,0x59,0xf8]
3315 @ CHECK: uqsub16 r1, r9, r7             @ encoding: [0xd9,0xfa,0x57,0xf1]
3316 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3317 @ CHECK: uqsub8gt       r3, r1, r6      @ encoding: [0xc1,0xfa,0x56,0xf3]
3318 @ CHECK: uqsub16le      r4, r6, r4      @ encoding: [0xd6,0xfa,0x54,0xf4]
3319
3320
3321 @------------------------------------------------------------------------------
3322 @ UQSUB16/UQSUB8
3323 @------------------------------------------------------------------------------
3324         usad8 r1, r9, r7
3325         usada8 r8, r2, r9, r12
3326         ite gt
3327         usada8gt r3, r1, r6, r9
3328         usad8le r4, r6, r4
3329
3330 @ CHECK: usad8  r1, r9, r7              @ encoding: [0x79,0xfb,0x07,0xf1]
3331 @ CHECK: usada8 r8, r2, r9, r12         @ encoding: [0x72,0xfb,0x09,0xc8]
3332 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
3333 @ CHECK: usada8gt       r3, r1, r6, r9  @ encoding: [0x71,0xfb,0x06,0x93]
3334 @ CHECK: usad8le        r4, r6, r4      @ encoding: [0x76,0xfb,0x04,0xf4]
3335
3336
3337 @------------------------------------------------------------------------------
3338 @ USAT
3339 @------------------------------------------------------------------------------
3340         usat    r8, #1, r10
3341         usat    r8, #4, r10, lsl #0
3342         usat    r8, #5, r10, lsl #31
3343         usat    r8, #16, r10, asr #1
3344
3345 @ CHECK: usat   r8, #1, r10             @ encoding: [0x8a,0xf3,0x01,0x08]
3346 @ CHECK: usat   r8, #4, r10             @ encoding: [0x8a,0xf3,0x04,0x08]
3347 @ CHECK: usat   r8, #5, r10, lsl #31    @ encoding: [0x8a,0xf3,0xc5,0x78]
3348 @ CHECK: usat   r8, #16, r10, asr #1    @ encoding: [0xaa,0xf3,0x50,0x08]
3349
3350
3351 @------------------------------------------------------------------------------
3352 @ USAT16
3353 @------------------------------------------------------------------------------
3354         usat16  r2, #2, r7
3355         usat16  r3, #15, r5
3356
3357 @ CHECK: usat16 r2, #2, r7              @ encoding: [0xa7,0xf3,0x02,0x02]
3358 @ CHECK: usat16 r3, #15, r5             @ encoding: [0xa5,0xf3,0x0f,0x03]
3359
3360
3361 @------------------------------------------------------------------------------
3362 @ USAX
3363 @------------------------------------------------------------------------------
3364         usax r2, r3, r4
3365         it ne
3366         usaxne r6, r1, r9
3367         usubaddx r2, r3, r4
3368         it ne
3369         usubaddxne r6, r1, r9
3370
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 @ CHECK: usax   r2, r3, r4              @ encoding: [0xe3,0xfa,0x44,0xf2]
3375 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
3376 @ CHECK: usaxne r6, r1, r9              @ encoding: [0xe1,0xfa,0x49,0xf6]
3377
3378
3379 @------------------------------------------------------------------------------
3380 @ USUB16/USUB8
3381 @------------------------------------------------------------------------------
3382         usub16 r4, r2, r7
3383         usub8 r1, r8, r5
3384         ite hi
3385         usub16hi r1, r1, r3
3386         usub8ls r9, r2, r3
3387
3388 @ CHECK: usub16 r4, r2, r7              @ encoding: [0xd2,0xfa,0x47,0xf4]
3389 @ CHECK: usub8  r1, r8, r5              @ encoding: [0xc8,0xfa,0x45,0xf1]
3390 @ CHECK: ite    hi                      @ encoding: [0x8c,0xbf]
3391 @ CHECK: usub16hi       r1, r1, r3      @ encoding: [0xd1,0xfa,0x43,0xf1]
3392 @ CHECK: usub8ls        r9, r2, r3      @ encoding: [0xc2,0xfa,0x43,0xf9]
3393
3394
3395 @------------------------------------------------------------------------------
3396 @ UXTAB
3397 @------------------------------------------------------------------------------
3398         uxtab r2, r3, r4
3399         uxtab r4, r5, r6, ror #0
3400         it lt
3401         uxtablt r6, r2, r9, ror #8
3402         uxtab r5, r1, r4, ror #16
3403         uxtab r7, r8, r3, ror #24
3404
3405 @ CHECK: uxtab  r2, r3, r4              @ encoding: [0x53,0xfa,0x84,0xf2]
3406 @ CHECK: uxtab  r4, r5, r6              @ encoding: [0x55,0xfa,0x86,0xf4]
3407 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
3408 @ CHECK: uxtablt r6, r2, r9, ror #8     @ encoding: [0x52,0xfa,0x99,0xf6]
3409 @ CHECK: uxtab  r5, r1, r4, ror #16     @ encoding: [0x51,0xfa,0xa4,0xf5]
3410 @ CHECK: uxtab  r7, r8, r3, ror #24     @ encoding: [0x58,0xfa,0xb3,0xf7]
3411
3412
3413 @------------------------------------------------------------------------------
3414 @ UXTAB16
3415 @------------------------------------------------------------------------------
3416         it ge
3417         uxtab16ge r0, r1, r4
3418         uxtab16 r6, r2, r7, ror #0
3419         uxtab16 r3, r5, r8, ror #8
3420         uxtab16 r3, r2, r1, ror #16
3421         it eq
3422         uxtab16eq r1, r2, r3, ror #24
3423
3424 @ CHECK: it     ge                      @ encoding: [0xa8,0xbf]
3425 @ CHECK: uxtab16ge      r0, r1, r4      @ encoding: [0x31,0xfa,0x84,0xf0]
3426 @ CHECK: uxtab16 r6, r2, r7             @ encoding: [0x32,0xfa,0x87,0xf6]
3427 @ CHECK: uxtab16 r3, r5, r8, ror #8     @ encoding: [0x35,0xfa,0x98,0xf3]
3428 @ CHECK: uxtab16 r3, r2, r1, ror #16    @ encoding: [0x32,0xfa,0xa1,0xf3]
3429 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
3430 @ CHECK: uxtab16eq r1, r2, r3, ror #24  @ encoding: [0x32,0xfa,0xb3,0xf1]
3431
3432
3433 @------------------------------------------------------------------------------
3434 @ UXTAH
3435 @------------------------------------------------------------------------------
3436         uxtah r1, r3, r9
3437         it hi
3438         uxtahhi r6, r1, r6, ror #0
3439         uxtah r3, r8, r3, ror #8
3440         it lo
3441         uxtahlo r2, r2, r4, ror #16
3442         uxtah r9, r3, r3, ror #24
3443
3444 @ CHECK: uxtah  r1, r3, r9              @ encoding: [0x13,0xfa,0x89,0xf1]
3445 @ CHECK: it     hi                      @ encoding: [0x88,0xbf]
3446 @ CHECK: uxtahhi r6, r1, r6             @ encoding: [0x11,0xfa,0x86,0xf6]
3447 @ CHECK: uxtah  r3, r8, r3, ror #8      @ encoding: [0x18,0xfa,0x93,0xf3]
3448 @ CHECK: it     lo                      @ encoding: [0x38,0xbf]
3449 @ CHECK: uxtahlo r2, r2, r4, ror #16    @ encoding: [0x12,0xfa,0xa4,0xf2]
3450 @ CHECK: uxtah  r9, r3, r3, ror #24     @ encoding: [0x13,0xfa,0xb3,0xf9]
3451
3452
3453 @------------------------------------------------------------------------------
3454 @ UXTB
3455 @------------------------------------------------------------------------------
3456         it ge
3457         uxtbge r2, r4
3458         uxtb r5, r6, ror #0
3459         uxtb r6, r9, ror #8
3460         it cc
3461         uxtbcc r5, r1, ror #16
3462         uxtb r8, r3, ror #24
3463         uxtb.w  r7, r8
3464
3465 @ CHECK: it     ge                      @ encoding: [0xa8,0xbf]
3466 @ CHECK: uxtbge r2, r4                  @ encoding: [0xe2,0xb2]
3467 @ CHECK: uxtb   r5, r6                  @ encoding: [0xf5,0xb2]
3468 @ CHECK: uxtb.w r6, r9, ror #8          @ encoding: [0x5f,0xfa,0x99,0xf6]
3469 @ CHECK: it     lo                      @ encoding: [0x38,0xbf]
3470 @ CHECK: uxtblo.w       r5, r1, ror #16 @ encoding: [0x5f,0xfa,0xa1,0xf5]
3471 @ CHECK: uxtb.w r8, r3, ror #24         @ encoding: [0x5f,0xfa,0xb3,0xf8]
3472 @ CHECK: uxtb.w r7, r8                  @ encoding: [0x5f,0xfa,0x88,0xf7]
3473
3474
3475 @------------------------------------------------------------------------------
3476 @ UXTB16
3477 @------------------------------------------------------------------------------
3478         uxtb16 r1, r4
3479         uxtb16 r6, r7, ror #0
3480         it cs
3481         uxtb16cs r3, r5, ror #8
3482         uxtb16 r3, r1, ror #16
3483         it ge
3484         uxtb16ge r2, r3, ror #24
3485
3486 @ CHECK: uxtb16 r1, r4                  @ encoding: [0x3f,0xfa,0x84,0xf1]
3487 @ CHECK: uxtb16 r6, r7                  @ encoding: [0x3f,0xfa,0x87,0xf6]
3488 @ CHECK: it     hs                      @ encoding: [0x28,0xbf]
3489 @ CHECK: uxtb16hs       r3, r5, ror #8  @ encoding: [0x3f,0xfa,0x95,0xf3]
3490 @ CHECK: uxtb16 r3, r1, ror #16         @ encoding: [0x3f,0xfa,0xa1,0xf3]
3491 @ CHECK: it     ge                      @ encoding: [0xa8,0xbf]
3492 @ CHECK: uxtb16ge       r2, r3, ror #24 @ encoding: [0x3f,0xfa,0xb3,0xf2]
3493
3494
3495 @------------------------------------------------------------------------------
3496 @ UXTH
3497 @------------------------------------------------------------------------------
3498         it ne
3499         uxthne r3, r9
3500         uxth r1, r6, ror #0
3501         uxth r3, r8, ror #8
3502         it le
3503         uxthle r2, r2, ror #16
3504         uxth r9, r3, ror #24
3505         uxth.w  r7, r8
3506
3507 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
3508 @ CHECK: uxthne.w       r3, r9          @ encoding: [0x1f,0xfa,0x89,0xf3]
3509 @ CHECK: uxth   r1, r6                  @ encoding: [0xb1,0xb2]
3510 @ CHECK: uxth.w r3, r8, ror #8          @ encoding: [0x1f,0xfa,0x98,0xf3]
3511 @ CHECK: it     le                      @ encoding: [0xd8,0xbf]
3512 @ CHECK: uxthle.w       r2, r2, ror #16 @ encoding: [0x1f,0xfa,0xa2,0xf2]
3513 @ CHECK: uxth.w r9, r3, ror #24         @ encoding: [0x1f,0xfa,0xb3,0xf9]
3514 @ CHECK: uxth.w r7, r8                  @ encoding: [0x1f,0xfa,0x88,0xf7]
3515
3516 @------------------------------------------------------------------------------
3517 @ WFE/WFI/YIELD/HINT
3518 @------------------------------------------------------------------------------
3519         wfe
3520         wfi
3521         yield
3522         itet lt
3523         wfelt
3524         wfige
3525         yieldlt
3526         hint.w #4
3527         hint #3
3528         hint #2
3529         hint #1
3530         hint #0
3531
3532 @ CHECK: wfe                            @ encoding: [0x20,0xbf]
3533 @ CHECK: wfi                            @ encoding: [0x30,0xbf]
3534 @ CHECK: yield                          @ encoding: [0x10,0xbf]
3535 @ CHECK: itet   lt                      @ encoding: [0xb6,0xbf]
3536 @ CHECK: wfelt                          @ encoding: [0x20,0xbf]
3537 @ CHECK: wfige                          @ encoding: [0x30,0xbf]
3538 @ CHECK: yieldlt                        @ encoding: [0x10,0xbf]
3539 @ CHECK: sev.w                          @ encoding: [0xaf,0xf3,0x04,0x80]
3540 @ CHECK: wfi.w                          @ encoding: [0xaf,0xf3,0x03,0x80]
3541 @ CHECK: wfe.w                          @ encoding: [0xaf,0xf3,0x02,0x80]
3542 @ CHECK: yield.w                        @ encoding: [0xaf,0xf3,0x01,0x80]
3543 @ CHECK: nop.w                          @ encoding: [0xaf,0xf3,0x00,0x80]
3544
3545
3546 @------------------------------------------------------------------------------
3547 @ Alternate syntax for LDR*(literal) encodings
3548 @------------------------------------------------------------------------------
3549         ldrb r11, [pc, #22]
3550         ldrh r11, [pc, #22]
3551         ldrsb r11, [pc, #22]
3552         ldrsh r11, [pc, #22]
3553         ldr.w r11, [pc, #22]
3554         ldrb.w r11, [pc, #22]
3555         ldrh.w r11, [pc, #22]
3556         ldrsb.w r11, [pc, #22]
3557         ldrsh.w r11, [pc, #22]
3558
3559 @ CHECK: ldrb.w r11, [pc, #22]        @ encoding: [0x9f,0xf8,0x16,0xb0]
3560 @ CHECK: ldrh.w r11, [pc, #22]        @ encoding: [0xbf,0xf8,0x16,0xb0]
3561 @ CHECK: ldrsb.w r11, [pc, #22]       @ encoding: [0x9f,0xf9,0x16,0xb0]
3562 @ CHECK: ldrsh.w r11, [pc, #22]       @ encoding: [0xbf,0xf9,0x16,0xb0]
3563 @ CHECK: ldr.w r11, [pc, #22]         @ encoding: [0xdf,0xf8,0x16,0xb0]
3564 @ CHECK: ldrb.w r11, [pc, #22]        @ encoding: [0x9f,0xf8,0x16,0xb0]
3565 @ CHECK: ldrh.w r11, [pc, #22]        @ encoding: [0xbf,0xf8,0x16,0xb0]
3566 @ CHECK: ldrsb.w r11, [pc, #22]       @ encoding: [0x9f,0xf9,0x16,0xb0]
3567 @ CHECK: ldrsh.w r11, [pc, #22]       @ encoding: [0xbf,0xf9,0x16,0xb0]
3568
3569         ldr r11, [pc, #-22]
3570         ldrb r11, [pc, #-22]
3571         ldrh r11, [pc, #-22]
3572         ldrsb r11, [pc, #-22]
3573         ldrsh r11, [pc, #-22]
3574         ldr.w r11, [pc, #-22]
3575         ldrb.w r11, [pc, #-22]
3576         ldrh.w r11, [pc, #-22]
3577         ldrsb.w r11, [pc, #-22]
3578         ldrsh.w r11, [pc, #-22]
3579
3580 @ CHECK: ldr.w  r11, [pc, #-22]         @ encoding: [0x5f,0xf8,0x16,0xb0]
3581 @ CHECK: ldrb.w r11, [pc, #-22]         @ encoding: [0x1f,0xf8,0x16,0xb0]
3582 @ CHECK: ldrh.w r11, [pc, #-22]         @ encoding: [0x3f,0xf8,0x16,0xb0]
3583 @ CHECK: ldrsb.w r11, [pc, #-22]        @ encoding: [0x1f,0xf9,0x16,0xb0]
3584 @ CHECK: ldrsh.w r11, [pc, #-22]        @ encoding: [0x3f,0xf9,0x16,0xb0]
3585 @ CHECK: ldr.w  r11, [pc, #-22]         @ encoding: [0x5f,0xf8,0x16,0xb0]
3586 @ CHECK: ldrb.w r11, [pc, #-22]         @ encoding: [0x1f,0xf8,0x16,0xb0]
3587 @ CHECK: ldrh.w r11, [pc, #-22]         @ encoding: [0x3f,0xf8,0x16,0xb0]
3588 @ CHECK: ldrsb.w r11, [pc, #-22]        @ encoding: [0x1f,0xf9,0x16,0xb0]
3589 @ CHECK: ldrsh.w r11, [pc, #-22]        @ encoding: [0x3f,0xf9,0x16,0xb0]
3590
3591 @ rdar://12596361
3592          ldr r1, [pc, #12]
3593 @ CHECK: ldr r1, [pc, #12]              @ encoding: [0x03,0x49]
3594
3595 @ rdar://14214063
3596          subs pc, lr, #4
3597 @ CHECK: subs pc, lr, #4                @ encoding: [0xde,0xf3,0x04,0x8f]