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