basic-arm-instructions.s revision 36711e4a3c0b53000ea594233bd619dbf252558c
1@ RUN: llvm-mc -triple=armv7-apple-darwin -show-encoding < %s | FileCheck %s
2  .syntax unified
3  .globl _func
4
5@ Check that the assembler can handle the documented syntax from the ARM ARM.
6@ For complex constructs like shifter operands, check more thoroughly for them
7@ once then spot check that following instructions accept the form generally.
8@ This gives us good coverage while keeping the overall size of the test
9@ more reasonable.
10
11_func:
12@ CHECK: _func
13
14@------------------------------------------------------------------------------
15@ ADC (immediate)
16@------------------------------------------------------------------------------
17  adc r1, r2, #0xf
18  adc r1, r2, #0xf0
19  adc r1, r2, #0xf00
20  adc r1, r2, #0xf000
21  adc r1, r2, #0xf0000
22  adc r1, r2, #0xf00000
23  adc r1, r2, #0xf000000
24  adc r1, r2, #0xf0000000
25  adc r1, r2, #0xf000000f
26  adcs r1, r2, #0xf00
27  adcseq r1, r2, #0xf00
28  adceq r1, r2, #0xf00
29
30@ CHECK: adc	r1, r2, #15             @ encoding: [0x0f,0x10,0xa2,0xe2]
31@ CHECK: adc	r1, r2, #240            @ encoding: [0xf0,0x10,0xa2,0xe2]
32@ CHECK: adc	r1, r2, #3840           @ encoding: [0x0f,0x1c,0xa2,0xe2]
33@ CHECK: adc	r1, r2, #61440          @ encoding: [0x0f,0x1a,0xa2,0xe2]
34@ CHECK: adc	r1, r2, #983040         @ encoding: [0x0f,0x18,0xa2,0xe2]
35@ CHECK: adc	r1, r2, #15728640       @ encoding: [0x0f,0x16,0xa2,0xe2]
36@ CHECK: adc	r1, r2, #251658240      @ encoding: [0x0f,0x14,0xa2,0xe2]
37@ CHECK: adc	r1, r2, #4026531840     @ encoding: [0x0f,0x12,0xa2,0xe2]
38@ CHECK: adc	r1, r2, #4026531855     @ encoding: [0xff,0x12,0xa2,0xe2]
39
40@ CHECK: adcs	r1, r2, #3840           @ encoding: [0x0f,0x1c,0xb2,0xe2]
41@ CHECK: adcseq	r1, r2, #3840           @ encoding: [0x0f,0x1c,0xb2,0x02]
42@ CHECK: adceq	r1, r2, #3840           @ encoding: [0x0f,0x1c,0xa2,0x02]
43
44@------------------------------------------------------------------------------
45@ ADC (register)
46@ ADC (shifted register)
47@------------------------------------------------------------------------------
48  adc r4, r5, r6
49  @ Constant shifts
50  adc r4, r5, r6, lsl #1
51  adc r4, r5, r6, lsl #31
52  adc r4, r5, r6, lsr #1
53  adc r4, r5, r6, lsr #31
54  adc r4, r5, r6, lsr #32
55  adc r4, r5, r6, asr #1
56  adc r4, r5, r6, asr #31
57  adc r4, r5, r6, asr #32
58  adc r4, r5, r6, ror #1
59  adc r4, r5, r6, ror #31
60
61  @ Register shifts
62  adc r6, r7, r8, lsl r9
63  adc r6, r7, r8, lsr r9
64  adc r6, r7, r8, asr r9
65  adc r6, r7, r8, ror r9
66  adc r4, r5, r6, rrx
67
68  @ Destination register is optional
69  adc r5, r6
70  adc r4, r5, lsl #1
71  adc r4, r5, lsl #31
72  adc r4, r5, lsr #1
73  adc r4, r5, lsr #31
74  adc r4, r5, lsr #32
75  adc r4, r5, asr #1
76  adc r4, r5, asr #31
77  adc r4, r5, asr #32
78  adc r4, r5, ror #1
79  adc r4, r5, ror #31
80  adc r4, r5, rrx
81  adc r6, r7, lsl r9
82  adc r6, r7, lsr r9
83  adc r6, r7, asr r9
84  adc r6, r7, ror r9
85  adc r4, r5, rrx
86
87@ CHECK: adc	r4, r5, r6              @ encoding: [0x06,0x40,0xa5,0xe0]
88
89@ CHECK: adc	r4, r5, r6, lsl #1      @ encoding: [0x86,0x40,0xa5,0xe0]
90@ CHECK: adc	r4, r5, r6, lsl #31     @ encoding: [0x86,0x4f,0xa5,0xe0]
91@ CHECK: adc	r4, r5, r6, lsr #1      @ encoding: [0xa6,0x40,0xa5,0xe0]
92@ CHECK: adc	r4, r5, r6, lsr #31     @ encoding: [0xa6,0x4f,0xa5,0xe0]
93@ CHECK: adc	r4, r5, r6, lsr #32     @ encoding: [0x26,0x40,0xa5,0xe0]
94@ CHECK: adc	r4, r5, r6, asr #1      @ encoding: [0xc6,0x40,0xa5,0xe0]
95@ CHECK: adc	r4, r5, r6, asr #31     @ encoding: [0xc6,0x4f,0xa5,0xe0]
96@ CHECK: adc	r4, r5, r6, asr #32     @ encoding: [0x46,0x40,0xa5,0xe0]
97@ CHECK: adc	r4, r5, r6, ror #1      @ encoding: [0xe6,0x40,0xa5,0xe0]
98@ CHECK: adc	r4, r5, r6, ror #31     @ encoding: [0xe6,0x4f,0xa5,0xe0]
99
100@ CHECK: adc	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0xa7,0xe0]
101@ CHECK: adc	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0xa7,0xe0]
102@ CHECK: adc	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0xa7,0xe0]
103@ CHECK: adc	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0xa7,0xe0]
104@ CHECK: adc	r4, r5, r6, rrx         @ encoding: [0x66,0x40,0xa5,0xe0]
105
106@ CHECK: adc	r5, r5, r6              @ encoding: [0x06,0x50,0xa5,0xe0]
107@ CHECK: adc	r4, r4, r5, lsl #1      @ encoding: [0x85,0x40,0xa4,0xe0]
108@ CHECK: adc	r4, r4, r5, lsl #31     @ encoding: [0x85,0x4f,0xa4,0xe0]
109@ CHECK: adc	r4, r4, r5, lsr #1      @ encoding: [0xa5,0x40,0xa4,0xe0]
110@ CHECK: adc	r4, r4, r5, lsr #31     @ encoding: [0xa5,0x4f,0xa4,0xe0]
111@ CHECK: adc	r4, r4, r5, lsr #32     @ encoding: [0x25,0x40,0xa4,0xe0]
112@ CHECK: adc	r4, r4, r5, asr #1      @ encoding: [0xc5,0x40,0xa4,0xe0]
113@ CHECK: adc	r4, r4, r5, asr #31     @ encoding: [0xc5,0x4f,0xa4,0xe0]
114@ CHECK: adc	r4, r4, r5, asr #32     @ encoding: [0x45,0x40,0xa4,0xe0]
115@ CHECK: adc	r4, r4, r5, ror #1      @ encoding: [0xe5,0x40,0xa4,0xe0]
116@ CHECK: adc	r4, r4, r5, ror #31     @ encoding: [0xe5,0x4f,0xa4,0xe0]
117@ CHECK: adc	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0xa4,0xe0]
118@ CHECK: adc	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0xa6,0xe0]
119@ CHECK: adc	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0xa6,0xe0]
120@ CHECK: adc	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0xa6,0xe0]
121@ CHECK: adc	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xa6,0xe0]
122@ CHECK: adc	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0xa4,0xe0]
123
124
125@------------------------------------------------------------------------------
126@ FIXME: ADR
127@------------------------------------------------------------------------------
128
129@------------------------------------------------------------------------------
130@ ADD
131@------------------------------------------------------------------------------
132  add r4, r5, #0xf000
133  add r4, r5, r6
134  add r4, r5, r6, lsl #5
135  add r4, r5, r6, lsr #5
136  add r4, r5, r6, lsr #5
137  add r4, r5, r6, asr #5
138  add r4, r5, r6, ror #5
139  add r6, r7, r8, lsl r9
140  add r6, r7, r8, lsr r9
141  add r6, r7, r8, asr r9
142  add r6, r7, r8, ror r9
143  add r4, r5, r6, rrx
144
145  @ destination register is optional
146  add r5, #0xf000
147  add r4, r5
148  add r4, r5, lsl #5
149  add r4, r5, lsr #5
150  add r4, r5, lsr #5
151  add r4, r5, asr #5
152  add r4, r5, ror #5
153  add r6, r7, lsl r9
154  add r6, r7, lsr r9
155  add r6, r7, asr r9
156  add r6, r7, ror r9
157  add r4, r5, rrx
158
159@ CHECK: add	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x85,0xe2]
160@ CHECK: add	r4, r5, r6              @ encoding: [0x06,0x40,0x85,0xe0]
161@ CHECK: add	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x85,0xe0]
162@ CHECK: add	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe0]
163@ CHECK: add	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe0]
164@ CHECK: add	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x85,0xe0]
165@ CHECK: add	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x85,0xe0]
166@ CHECK: add	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x87,0xe0]
167@ CHECK: add	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x87,0xe0]
168@ CHECK: add	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x87,0xe0]
169@ CHECK: add	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0xe0]
170@ CHECK: add	r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x85,0xe0]
171
172
173@ CHECK: add	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0xe2]
174@ CHECK: add	r4, r4, r5              @ encoding: [0x05,0x40,0x84,0xe0]
175@ CHECK: add	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x84,0xe0]
176@ CHECK: add	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe0]
177@ CHECK: add	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe0]
178@ CHECK: add	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x84,0xe0]
179@ CHECK: add	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x84,0xe0]
180@ CHECK: add	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x86,0xe0]
181@ CHECK: add	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x86,0xe0]
182@ CHECK: add	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x86,0xe0]
183@ CHECK: add	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x86,0xe0]
184@ CHECK: add	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x84,0xe0]
185
186
187@------------------------------------------------------------------------------
188@ AND
189@------------------------------------------------------------------------------
190  and r10, r1, #0xf
191  and r10, r1, r6
192  and r10, r1, r6, lsl #10
193  and r10, r1, r6, lsr #10
194  and r10, r1, r6, lsr #10
195  and r10, r1, r6, asr #10
196  and r10, r1, r6, ror #10
197  and r6, r7, r8, lsl r2
198  and r6, r7, r8, lsr r2
199  and r6, r7, r8, asr r2
200  and r6, r7, r8, ror r2
201  and r10, r1, r6, rrx
202
203  @ destination register is optional
204  and r1, #0xf
205  and r10, r1
206  and r10, r1, lsl #10
207  and r10, r1, lsr #10
208  and r10, r1, lsr #10
209  and r10, r1, asr #10
210  and r10, r1, ror #10
211  and r6, r7, lsl r2
212  and r6, r7, lsr r2
213  and r6, r7, asr r2
214  and r6, r7, ror r2
215  and r10, r1, rrx
216
217@ CHECK: and	r10, r1, #15            @ encoding: [0x0f,0xa0,0x01,0xe2]
218@ CHECK: and	r10, r1, r6             @ encoding: [0x06,0xa0,0x01,0xe0]
219@ CHECK: and	r10, r1, r6, lsl #10    @ encoding: [0x06,0xa5,0x01,0xe0]
220@ CHECK: and	r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0x01,0xe0]
221@ CHECK: and	r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0x01,0xe0]
222@ CHECK: and	r10, r1, r6, asr #10    @ encoding: [0x46,0xa5,0x01,0xe0]
223@ CHECK: and	r10, r1, r6, ror #10    @ encoding: [0x66,0xa5,0x01,0xe0]
224@ CHECK: and	r6, r7, r8, lsl r2      @ encoding: [0x18,0x62,0x07,0xe0]
225@ CHECK: and	r6, r7, r8, lsr r2      @ encoding: [0x38,0x62,0x07,0xe0]
226@ CHECK: and	r6, r7, r8, asr r2      @ encoding: [0x58,0x62,0x07,0xe0]
227@ CHECK: and	r6, r7, r8, ror r2      @ encoding: [0x78,0x62,0x07,0xe0]
228@ CHECK: and	r10, r1, r6, rrx        @ encoding: [0x66,0xa0,0x01,0xe0]
229
230@ CHECK: and	r1, r1, #15             @ encoding: [0x0f,0x10,0x01,0xe2]
231@ CHECK: and	r10, r10, r1            @ encoding: [0x01,0xa0,0x0a,0xe0]
232@ CHECK: and	r10, r10, r1, lsl #10   @ encoding: [0x01,0xa5,0x0a,0xe0]
233@ CHECK: and	r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0x0a,0xe0]
234@ CHECK: and	r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0x0a,0xe0]
235@ CHECK: and	r10, r10, r1, asr #10   @ encoding: [0x41,0xa5,0x0a,0xe0]
236@ CHECK: and	r10, r10, r1, ror #10   @ encoding: [0x61,0xa5,0x0a,0xe0]
237@ CHECK: and	r6, r6, r7, lsl r2      @ encoding: [0x17,0x62,0x06,0xe0]
238@ CHECK: and	r6, r6, r7, lsr r2      @ encoding: [0x37,0x62,0x06,0xe0]
239@ CHECK: and	r6, r6, r7, asr r2      @ encoding: [0x57,0x62,0x06,0xe0]
240@ CHECK: and	r6, r6, r7, ror r2      @ encoding: [0x77,0x62,0x06,0xe0]
241@ CHECK: and	r10, r10, r1, rrx       @ encoding: [0x61,0xa0,0x0a,0xe0]
242
243@------------------------------------------------------------------------------
244@ FIXME: ASR
245@------------------------------------------------------------------------------
246@------------------------------------------------------------------------------
247@ FIXME: B
248@------------------------------------------------------------------------------
249@------------------------------------------------------------------------------
250@ FIXME: BFC
251@------------------------------------------------------------------------------
252@------------------------------------------------------------------------------
253@ FIXME: BFI
254@------------------------------------------------------------------------------
255
256@------------------------------------------------------------------------------
257@ BIC
258@------------------------------------------------------------------------------
259  bic r10, r1, #0xf
260  bic r10, r1, r6
261  bic r10, r1, r6, lsl #10
262  bic r10, r1, r6, lsr #10
263  bic r10, r1, r6, lsr #10
264  bic r10, r1, r6, asr #10
265  bic r10, r1, r6, ror #10
266  bic r6, r7, r8, lsl r2
267  bic r6, r7, r8, lsr r2
268  bic r6, r7, r8, asr r2
269  bic r6, r7, r8, ror r2
270  bic r10, r1, r6, rrx
271
272  @ destination register is optional
273  bic r1, #0xf
274  bic r10, r1
275  bic r10, r1, lsl #10
276  bic r10, r1, lsr #10
277  bic r10, r1, lsr #10
278  bic r10, r1, asr #10
279  bic r10, r1, ror #10
280  bic r6, r7, lsl r2
281  bic r6, r7, lsr r2
282  bic r6, r7, asr r2
283  bic r6, r7, ror r2
284  bic r10, r1, rrx
285
286@ CHECK: bic	r10, r1, #15            @ encoding: [0x0f,0xa0,0xc1,0xe3]
287@ CHECK: bic	r10, r1, r6             @ encoding: [0x06,0xa0,0xc1,0xe1]
288@ CHECK: bic	r10, r1, r6, lsl #10    @ encoding: [0x06,0xa5,0xc1,0xe1]
289@ CHECK: bic	r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0xc1,0xe1]
290@ CHECK: bic	r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0xc1,0xe1]
291@ CHECK: bic	r10, r1, r6, asr #10    @ encoding: [0x46,0xa5,0xc1,0xe1]
292@ CHECK: bic	r10, r1, r6, ror #10    @ encoding: [0x66,0xa5,0xc1,0xe1]
293@ CHECK: bic	r6, r7, r8, lsl r2      @ encoding: [0x18,0x62,0xc7,0xe1]
294@ CHECK: bic	r6, r7, r8, lsr r2      @ encoding: [0x38,0x62,0xc7,0xe1]
295@ CHECK: bic	r6, r7, r8, asr r2      @ encoding: [0x58,0x62,0xc7,0xe1]
296@ CHECK: bic	r6, r7, r8, ror r2      @ encoding: [0x78,0x62,0xc7,0xe1]
297@ CHECK: bic	r10, r1, r6, rrx        @ encoding: [0x66,0xa0,0xc1,0xe1]
298
299
300@ CHECK: bic	r1, r1, #15             @ encoding: [0x0f,0x10,0xc1,0xe3]
301@ CHECK: bic	r10, r10, r1            @ encoding: [0x01,0xa0,0xca,0xe1]
302@ CHECK: bic	r10, r10, r1, lsl #10   @ encoding: [0x01,0xa5,0xca,0xe1]
303@ CHECK: bic	r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0xca,0xe1]
304@ CHECK: bic	r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0xca,0xe1]
305@ CHECK: bic	r10, r10, r1, asr #10   @ encoding: [0x41,0xa5,0xca,0xe1]
306@ CHECK: bic	r10, r10, r1, ror #10   @ encoding: [0x61,0xa5,0xca,0xe1]
307@ CHECK: bic	r6, r6, r7, lsl r2      @ encoding: [0x17,0x62,0xc6,0xe1]
308@ CHECK: bic	r6, r6, r7, lsr r2      @ encoding: [0x37,0x62,0xc6,0xe1]
309@ CHECK: bic	r6, r6, r7, asr r2      @ encoding: [0x57,0x62,0xc6,0xe1]
310@ CHECK: bic	r6, r6, r7, ror r2      @ encoding: [0x77,0x62,0xc6,0xe1]
311@ CHECK: bic	r10, r10, r1, rrx       @ encoding: [0x61,0xa0,0xca,0xe1]
312
313@------------------------------------------------------------------------------
314@ BKPT
315@------------------------------------------------------------------------------
316  bkpt #10
317  bkpt #65535
318
319@ CHECK: bkpt  #10                      @ encoding: [0x7a,0x00,0x20,0xe1]
320@ CHECK: bkpt  #65535                   @ encoding: [0x7f,0xff,0x2f,0xe1]
321
322@------------------------------------------------------------------------------
323@ BL/BLX (immediate)
324@------------------------------------------------------------------------------
325
326  bl _bar
327  @ FIXME: blx _bar
328
329@ CHECK: bl  _bar @ encoding: [A,A,A,0xeb]
330@ CHECK:   @   fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
331
332@------------------------------------------------------------------------------
333@ BLX (register)
334@------------------------------------------------------------------------------
335  blx r2
336  blxne r2
337
338@ CHECK: blx r2                         @ encoding: [0x32,0xff,0x2f,0xe1]
339@ CHECK: blxne r2                       @ encoding: [0x32,0xff,0x2f,0x11]
340
341@------------------------------------------------------------------------------
342@ BX
343@------------------------------------------------------------------------------
344
345  bx r2
346  bxne r2
347
348@ CHECK: bx	r2                      @ encoding: [0x12,0xff,0x2f,0xe1]
349@ CHECK: bxne	r2                      @ encoding: [0x12,0xff,0x2f,0x11]
350
351@------------------------------------------------------------------------------
352@ BXJ
353@------------------------------------------------------------------------------
354
355  bxj r2
356  bxjne r2
357
358@ CHECK: bxj	r2                      @ encoding: [0x22,0xff,0x2f,0xe1]
359@ CHECK: bxjne	r2                      @ encoding: [0x22,0xff,0x2f,0x11]
360
361@------------------------------------------------------------------------------
362@ FIXME: CBNZ/CBZ
363@------------------------------------------------------------------------------
364
365
366@------------------------------------------------------------------------------
367@ CDP/CDP2
368@------------------------------------------------------------------------------
369  cdp  p7, #1, c1, c1, c1, #4
370  cdp2  p7, #1, c1, c1, c1, #4
371
372@ CHECK: cdp  p7, #1, c1, c1, c1, #4     @ encoding: [0x81,0x17,0x11,0xee]
373@ CHECK: cdp2  p7, #1, c1, c1, c1, #4    @ encoding: [0x81,0x17,0x11,0xfe]
374
375
376@------------------------------------------------------------------------------
377@ CLREX
378@------------------------------------------------------------------------------
379  clrex
380
381@ CHECK: clrex                           @ encoding: [0x1f,0xf0,0x7f,0xf5]
382
383
384@------------------------------------------------------------------------------
385@ CLZ
386@------------------------------------------------------------------------------
387  clz r1, r2
388  clzeq r1, r2
389
390@ CHECK: clz r1, r2                      @ encoding: [0x12,0x1f,0x6f,0xe1]
391@ CHECK: clzeq r1, r2                    @ encoding: [0x12,0x1f,0x6f,0x01]
392
393@------------------------------------------------------------------------------
394@ CMN
395@------------------------------------------------------------------------------
396  cmn r1, #0xf
397  cmn r1, r6
398  cmn r1, r6, lsl #10
399  cmn r1, r6, lsr #10
400  cmn sp, r6, lsr #10
401  cmn r1, r6, asr #10
402  cmn r1, r6, ror #10
403  cmn r7, r8, lsl r2
404  cmn sp, r8, lsr r2
405  cmn r7, r8, asr r2
406  cmn r7, r8, ror r2
407  cmn r1, r6, rrx
408
409@ CHECK: cmn	r1, #15                 @ encoding: [0x0f,0x00,0x71,0xe3]
410@ CHECK: cmn	r1, r6                  @ encoding: [0x06,0x00,0x71,0xe1]
411@ CHECK: cmn	r1, r6, lsl #10         @ encoding: [0x06,0x05,0x71,0xe1]
412@ CHECK: cmn	r1, r6, lsr #10         @ encoding: [0x26,0x05,0x71,0xe1]
413@ CHECK: cmn	sp, r6, lsr #10         @ encoding: [0x26,0x05,0x7d,0xe1]
414@ CHECK: cmn	r1, r6, asr #10         @ encoding: [0x46,0x05,0x71,0xe1]
415@ CHECK: cmn	r1, r6, ror #10         @ encoding: [0x66,0x05,0x71,0xe1]
416@ CHECK: cmn	r7, r8, lsl r2          @ encoding: [0x18,0x02,0x77,0xe1]
417@ CHECK: cmn	sp, r8, lsr r2          @ encoding: [0x38,0x02,0x7d,0xe1]
418@ CHECK: cmn	r7, r8, asr r2          @ encoding: [0x58,0x02,0x77,0xe1]
419@ CHECK: cmn	r7, r8, ror r2          @ encoding: [0x78,0x02,0x77,0xe1]
420@ CHECK: cmn	r1, r6, rrx             @ encoding: [0x66,0x00,0x71,0xe1]
421
422@------------------------------------------------------------------------------
423@ CMP
424@------------------------------------------------------------------------------
425  cmp r1, #0xf
426  cmp r1, r6
427  cmp r1, r6, lsl #10
428  cmp r1, r6, lsr #10
429  cmp sp, r6, lsr #10
430  cmp r1, r6, asr #10
431  cmp r1, r6, ror #10
432  cmp r7, r8, lsl r2
433  cmp sp, r8, lsr r2
434  cmp r7, r8, asr r2
435  cmp r7, r8, ror r2
436  cmp r1, r6, rrx
437
438@ CHECK: cmp	r1, #15                 @ encoding: [0x0f,0x00,0x51,0xe3]
439@ CHECK: cmp	r1, r6                  @ encoding: [0x06,0x00,0x51,0xe1]
440@ CHECK: cmp	r1, r6, lsl #10         @ encoding: [0x06,0x05,0x51,0xe1]
441@ CHECK: cmp	r1, r6, lsr #10         @ encoding: [0x26,0x05,0x51,0xe1]
442@ CHECK: cmp	sp, r6, lsr #10         @ encoding: [0x26,0x05,0x5d,0xe1]
443@ CHECK: cmp	r1, r6, asr #10         @ encoding: [0x46,0x05,0x51,0xe1]
444@ CHECK: cmp	r1, r6, ror #10         @ encoding: [0x66,0x05,0x51,0xe1]
445@ CHECK: cmp	r7, r8, lsl r2          @ encoding: [0x18,0x02,0x57,0xe1]
446@ CHECK: cmp	sp, r8, lsr r2          @ encoding: [0x38,0x02,0x5d,0xe1]
447@ CHECK: cmp	r7, r8, asr r2          @ encoding: [0x58,0x02,0x57,0xe1]
448@ CHECK: cmp	r7, r8, ror r2          @ encoding: [0x78,0x02,0x57,0xe1]
449@ CHECK: cmp	r1, r6, rrx             @ encoding: [0x66,0x00,0x51,0xe1]
450
451@------------------------------------------------------------------------------
452@ DBG
453@------------------------------------------------------------------------------
454  dbg #0
455  dbg #5
456  dbg #15
457
458@ CHECK: dbg #0                         @ encoding: [0xf0,0xf0,0x20,0xe3]
459@ CHECK: dbg #5                         @ encoding: [0xf5,0xf0,0x20,0xe3]
460@ CHECK: dbg #15                        @ encoding: [0xff,0xf0,0x20,0xe3]
461
462
463@------------------------------------------------------------------------------
464@ DMB
465@------------------------------------------------------------------------------
466  dmb sy
467  dmb st
468  dmb sh
469  dmb ish
470  dmb shst
471  dmb ishst
472  dmb un
473  dmb nsh
474  dmb unst
475  dmb nshst
476  dmb osh
477  dmb oshst
478  dmb
479
480@ CHECK: dmb	sy                      @ encoding: [0x5f,0xf0,0x7f,0xf5]
481@ CHECK: dmb	st                      @ encoding: [0x5e,0xf0,0x7f,0xf5]
482@ CHECK: dmb	ish                     @ encoding: [0x5b,0xf0,0x7f,0xf5]
483@ CHECK: dmb	ish                     @ encoding: [0x5b,0xf0,0x7f,0xf5]
484@ CHECK: dmb	ishst                   @ encoding: [0x5a,0xf0,0x7f,0xf5]
485@ CHECK: dmb	ishst                   @ encoding: [0x5a,0xf0,0x7f,0xf5]
486@ CHECK: dmb	nsh                     @ encoding: [0x57,0xf0,0x7f,0xf5]
487@ CHECK: dmb	nsh                     @ encoding: [0x57,0xf0,0x7f,0xf5]
488@ CHECK: dmb	nshst                   @ encoding: [0x56,0xf0,0x7f,0xf5]
489@ CHECK: dmb	nshst                   @ encoding: [0x56,0xf0,0x7f,0xf5]
490@ CHECK: dmb	osh                     @ encoding: [0x53,0xf0,0x7f,0xf5]
491@ CHECK: dmb	oshst                   @ encoding: [0x52,0xf0,0x7f,0xf5]
492@ CHECK: dmb	sy                      @ encoding: [0x5f,0xf0,0x7f,0xf5]
493
494@------------------------------------------------------------------------------
495@ DSB
496@------------------------------------------------------------------------------
497  dsb sy
498  dsb st
499  dsb sh
500  dsb ish
501  dsb shst
502  dsb ishst
503  dsb un
504  dsb nsh
505  dsb unst
506  dsb nshst
507  dsb osh
508  dsb oshst
509  dsb
510
511@ CHECK: dsb	sy                      @ encoding: [0x4f,0xf0,0x7f,0xf5]
512@ CHECK: dsb	st                      @ encoding: [0x4e,0xf0,0x7f,0xf5]
513@ CHECK: dsb	ish                     @ encoding: [0x4b,0xf0,0x7f,0xf5]
514@ CHECK: dsb	ish                     @ encoding: [0x4b,0xf0,0x7f,0xf5]
515@ CHECK: dsb	ishst                   @ encoding: [0x4a,0xf0,0x7f,0xf5]
516@ CHECK: dsb	ishst                   @ encoding: [0x4a,0xf0,0x7f,0xf5]
517@ CHECK: dsb	nsh                     @ encoding: [0x47,0xf0,0x7f,0xf5]
518@ CHECK: dsb	nsh                     @ encoding: [0x47,0xf0,0x7f,0xf5]
519@ CHECK: dsb	nshst                   @ encoding: [0x46,0xf0,0x7f,0xf5]
520@ CHECK: dsb	nshst                   @ encoding: [0x46,0xf0,0x7f,0xf5]
521@ CHECK: dsb	osh                     @ encoding: [0x43,0xf0,0x7f,0xf5]
522@ CHECK: dsb	oshst                   @ encoding: [0x42,0xf0,0x7f,0xf5]
523@ CHECK: dsb	sy                      @ encoding: [0x4f,0xf0,0x7f,0xf5]
524
525@------------------------------------------------------------------------------
526@ EOR
527@------------------------------------------------------------------------------
528  eor r4, r5, #0xf000
529  eor r4, r5, r6
530  eor r4, r5, r6, lsl #5
531  eor r4, r5, r6, lsr #5
532  eor r4, r5, r6, lsr #5
533  eor r4, r5, r6, asr #5
534  eor r4, r5, r6, ror #5
535  eor r6, r7, r8, lsl r9
536  eor r6, r7, r8, lsr r9
537  eor r6, r7, r8, asr r9
538  eor r6, r7, r8, ror r9
539  eor r4, r5, r6, rrx
540
541  @ destination register is optional
542  eor r5, #0xf000
543  eor r4, r5
544  eor r4, r5, lsl #5
545  eor r4, r5, lsr #5
546  eor r4, r5, lsr #5
547  eor r4, r5, asr #5
548  eor r4, r5, ror #5
549  eor r6, r7, lsl r9
550  eor r6, r7, lsr r9
551  eor r6, r7, asr r9
552  eor r6, r7, ror r9
553  eor r4, r5, rrx
554
555@ CHECK: eor	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x25,0xe2]
556@ CHECK: eor	r4, r5, r6              @ encoding: [0x06,0x40,0x25,0xe0]
557@ CHECK: eor	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x25,0xe0]
558@ CHECK: eor	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x25,0xe0]
559@ CHECK: eor	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x25,0xe0]
560@ CHECK: eor	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x25,0xe0]
561@ CHECK: eor	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x25,0xe0]
562@ CHECK: eor	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x27,0xe0]
563@ CHECK: eor	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x27,0xe0]
564@ CHECK: eor	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x27,0xe0]
565@ CHECK: eor	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x27,0xe0]
566@ CHECK: eor	r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x25,0xe0]
567
568
569@ CHECK: eor	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x25,0xe2]
570@ CHECK: eor	r4, r4, r5              @ encoding: [0x05,0x40,0x24,0xe0]
571@ CHECK: eor	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x24,0xe0]
572@ CHECK: eor	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x24,0xe0]
573@ CHECK: eor	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x24,0xe0]
574@ CHECK: eor	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x24,0xe0]
575@ CHECK: eor	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x24,0xe0]
576@ CHECK: eor	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x26,0xe0]
577@ CHECK: eor	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x26,0xe0]
578@ CHECK: eor	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x26,0xe0]
579@ CHECK: eor	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x26,0xe0]
580@ CHECK: eor	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x24,0xe0]
581
582
583@------------------------------------------------------------------------------
584@ ISB
585@------------------------------------------------------------------------------
586        isb sy
587        isb
588
589@ CHECK: isb sy                         @ encoding: [0x6f,0xf0,0x7f,0xf5]
590@ CHECK: isb sy                         @ encoding: [0x6f,0xf0,0x7f,0xf5]
591
592
593
594@------------------------------------------------------------------------------
595@ LDM*
596@------------------------------------------------------------------------------
597        ldm       r2, {r1,r3-r6,sp}
598        ldmia     r2, {r1,r3-r6,sp}
599        ldmib     r2, {r1,r3-r6,sp}
600        ldmda     r2, {r1,r3-r6,sp}
601        ldmdb     r2, {r1,r3-r6,sp}
602        ldmfd     r2, {r1,r3-r6,sp}
603
604        @ with update
605        ldm       r2!, {r1,r3-r6,sp}
606        ldmib     r2!, {r1,r3-r6,sp}
607        ldmda     r2!, {r1,r3-r6,sp}
608        ldmdb     r2!, {r1,r3-r6,sp}
609
610@ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
611@ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
612@ CHECK: ldmib r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe9]
613@ CHECK: ldmda r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x12,0xe8]
614@ CHECK: ldmdb r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x12,0xe9]
615@ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
616
617@ CHECK: ldm   r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xb2,0xe8]
618@ CHECK: ldmib r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xb2,0xe9]
619@ CHECK: ldmda r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x32,0xe8]
620@ CHECK: ldmdb r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x32,0xe9]
621
622@------------------------------------------------------------------------------
623@ FIXME: LDR*
624@------------------------------------------------------------------------------
625
626@------------------------------------------------------------------------------
627@ LDREX/LDREXB/LDREXH/LDREXD
628@------------------------------------------------------------------------------
629        ldrexb  r3, [r4]
630        ldrexh  r2, [r5]
631        ldrex  r1, [r7]
632        ldrexd  r6, r7, [r8]
633
634@ CHECK: ldrexb	r3, [r4]                @ encoding: [0x9f,0x3f,0xd4,0xe1]
635@ CHECK: ldrexh	r2, [r5]                @ encoding: [0x9f,0x2f,0xf5,0xe1]
636@ CHECK: ldrex	r1, [r7]                @ encoding: [0x9f,0x1f,0x97,0xe1]
637@ CHECK: ldrexd	r6, r7, [r8]            @ encoding: [0x9f,0x6f,0xb8,0xe1]
638
639
640@------------------------------------------------------------------------------
641@ FIXME: LSL
642@------------------------------------------------------------------------------
643@------------------------------------------------------------------------------
644@ FIXME: LSR
645@------------------------------------------------------------------------------
646
647@------------------------------------------------------------------------------
648@ MCR/MCR2
649@------------------------------------------------------------------------------
650        mcr  p7, #1, r5, c1, c1, #4
651        mcr2  p7, #1, r5, c1, c1, #4
652
653@ CHECK: mcr  p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xee]
654@ CHECK: mcr2  p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xfe]
655
656@------------------------------------------------------------------------------
657@ MCRR/MCRR2
658@------------------------------------------------------------------------------
659        mcrr  p7, #15, r5, r4, c1
660        mcrr2  p7, #15, r5, r4, c1
661
662@ CHECK: mcrr  p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xec]
663@ CHECK: mcrr2  p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xfc]
664
665
666@------------------------------------------------------------------------------
667@ MLA
668@------------------------------------------------------------------------------
669        mla  r1,r2,r3,r4
670        mlas r1,r2,r3,r4
671        mlane  r1,r2,r3,r4
672        mlasne r1,r2,r3,r4
673
674@ CHECK: mla 	r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0xe0]
675@ CHECK: mlas	r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0xe0]
676@ CHECK: mlane 	r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0x10]
677@ CHECK: mlasne	r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0x10]
678
679@------------------------------------------------------------------------------
680@ MLS
681@------------------------------------------------------------------------------
682        mls  r2,r5,r6,r3
683        mlsne  r2,r5,r6,r3
684
685@ CHECK: mls	r2, r5, r6, r3          @ encoding: [0x95,0x36,0x62,0xe0]
686@ CHECK: mlsne	r2, r5, r6, r3          @ encoding: [0x95,0x36,0x62,0x10]
687
688@------------------------------------------------------------------------------
689@ MOV (immediate)
690@------------------------------------------------------------------------------
691    mov r3, #7
692    mov r4, #0xff0
693    mov r5, #0xff0000
694    mov r6, #0xffff
695    movw r9, #0xffff
696    movs r3, #7
697    moveq r4, #0xff0
698    movseq r5, #0xff0000
699
700@ CHECK: mov	r3, #7                  @ encoding: [0x07,0x30,0xa0,0xe3]
701@ CHECK: mov	r4, #4080               @ encoding: [0xff,0x4e,0xa0,0xe3]
702@ CHECK: mov	r5, #16711680           @ encoding: [0xff,0x58,0xa0,0xe3]
703@ CHECK: movw	r6, #65535              @ encoding: [0xff,0x6f,0x0f,0xe3]
704@ CHECK: movw	r9, #65535              @ encoding: [0xff,0x9f,0x0f,0xe3]
705@ CHECK: movs	r3, #7                  @ encoding: [0x07,0x30,0xb0,0xe3]
706@ CHECK: moveq	r4, #4080               @ encoding: [0xff,0x4e,0xa0,0x03]
707@ CHECK: movseq	r5, #16711680           @ encoding: [0xff,0x58,0xb0,0x03]
708
709@------------------------------------------------------------------------------
710@ MOV (register)
711@------------------------------------------------------------------------------
712        mov r2, r3
713        movs r2, r3
714        moveq r2, r3
715        movseq r2, r3
716
717@ CHECK: mov	r2, r3                  @ encoding: [0x03,0x20,0xa0,0xe1]
718@ CHECK: movs	r2, r3                  @ encoding: [0x03,0x20,0xb0,0xe1]
719@ CHECK: moveq	r2, r3                  @ encoding: [0x03,0x20,0xa0,0x01]
720@ CHECK: movseq	r2, r3                  @ encoding: [0x03,0x20,0xb0,0x01]
721
722@------------------------------------------------------------------------------
723@ MOVT
724@------------------------------------------------------------------------------
725    movt r3, #7
726    movt r6, #0xffff
727    movteq r4, #0xff0
728
729@ CHECK: movt	r3, #7                  @ encoding: [0x07,0x30,0x40,0xe3]
730@ CHECK: movt	r6, #65535              @ encoding: [0xff,0x6f,0x4f,0xe3]
731@ CHECK: movteq	r4, #4080               @ encoding: [0xf0,0x4f,0x40,0x03]
732
733
734@------------------------------------------------------------------------------
735@ MRC/MRC2
736@------------------------------------------------------------------------------
737        mrc  p14, #0, r1, c1, c2, #4
738        mrc2  p14, #0, r1, c1, c2, #4
739
740@ CHECK: mrc  p14, #0, r1, c1, c2, #4   @ encoding: [0x92,0x1e,0x11,0xee]
741@ CHECK: mrc2  p14, #0, r1, c1, c2, #4  @ encoding: [0x92,0x1e,0x11,0xfe]
742
743@------------------------------------------------------------------------------
744@ MRRC/MRRC2
745@------------------------------------------------------------------------------
746        mrrc  p7, #1, r5, r4, c1
747        mrrc2  p7, #1, r5, r4, c1
748
749@ CHECK: mrrc  p7, #1, r5, r4, c1       @ encoding: [0x11,0x57,0x54,0xec]
750@ CHECK: mrrc2  p7, #1, r5, r4, c1      @ encoding: [0x11,0x57,0x54,0xfc]
751
752
753@------------------------------------------------------------------------------
754@ MRS
755@------------------------------------------------------------------------------
756        mrs  r8, apsr
757        mrs  r8, cpsr
758        mrs  r8, spsr
759@ CHECK: mrs  r8, apsr @ encoding: [0x00,0x80,0x0f,0xe1]
760@ CHECK: mrs  r8, apsr @ encoding: [0x00,0x80,0x0f,0xe1]
761@ CHECK: mrs  r8, spsr @ encoding: [0x00,0x80,0x4f,0xe1]
762
763
764
765@------------------------------------------------------------------------------
766@ MSR
767@------------------------------------------------------------------------------
768
769        msr  apsr, #5
770        msr  apsr_g, #5
771        msr  apsr_nzcvq, #5
772        msr  APSR_nzcvq, #5
773        msr  apsr_nzcvqg, #5
774        msr  cpsr_fc, #5
775        msr  cpsr_c, #5
776        msr  cpsr_x, #5
777        msr  cpsr_fc, #5
778        msr  cpsr_all, #5
779        msr  cpsr_fsx, #5
780        msr  spsr_fc, #5
781        msr  SPSR_fsxc, #5
782        msr  cpsr_fsxc, #5
783
784@ CHECK: msr	CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
785@ CHECK: msr	APSR_g, #5              @ encoding: [0x05,0xf0,0x24,0xe3]
786@ CHECK: msr	APSR_nzcvq, #5          @ encoding: [0x05,0xf0,0x28,0xe3]
787@ CHECK: msr	APSR_nzcvq, #5          @ encoding: [0x05,0xf0,0x28,0xe3]
788@ CHECK: msr	APSR_nzcvqg, #5         @ encoding: [0x05,0xf0,0x2c,0xe3]
789@ CHECK: msr	CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
790@ CHECK: msr	CPSR_c, #5              @ encoding: [0x05,0xf0,0x21,0xe3]
791@ CHECK: msr	CPSR_x, #5              @ encoding: [0x05,0xf0,0x22,0xe3]
792@ CHECK: msr	CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
793@ CHECK: msr	CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
794@ CHECK: msr	CPSR_fsx, #5            @ encoding: [0x05,0xf0,0x2e,0xe3]
795@ CHECK: msr	SPSR_fc, #5             @ encoding: [0x05,0xf0,0x69,0xe3]
796@ CHECK: msr	SPSR_fsxc, #5           @ encoding: [0x05,0xf0,0x6f,0xe3]
797@ CHECK: msr	CPSR_fsxc, #5           @ encoding: [0x05,0xf0,0x2f,0xe3]
798
799        msr  apsr, r0
800        msr  apsr_g, r0
801        msr  apsr_nzcvq, r0
802        msr  APSR_nzcvq, r0
803        msr  apsr_nzcvqg, r0
804        msr  cpsr_fc, r0
805        msr  cpsr_c, r0
806        msr  cpsr_x, r0
807        msr  cpsr_fc, r0
808        msr  cpsr_all, r0
809        msr  cpsr_fsx, r0
810        msr  spsr_fc, r0
811        msr  SPSR_fsxc, r0
812        msr  cpsr_fsxc, r0
813
814@ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
815@ CHECK: msr  APSR_g, r0 @ encoding: [0x00,0xf0,0x24,0xe1]
816@ CHECK: msr  APSR_nzcvq, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
817@ CHECK: msr  APSR_nzcvq, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
818@ CHECK: msr  APSR_nzcvqg, r0 @ encoding: [0x00,0xf0,0x2c,0xe1]
819@ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
820@ CHECK: msr  CPSR_c, r0 @ encoding: [0x00,0xf0,0x21,0xe1]
821@ CHECK: msr  CPSR_x, r0 @ encoding: [0x00,0xf0,0x22,0xe1]
822@ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
823@ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
824@ CHECK: msr  CPSR_fsx, r0 @ encoding: [0x00,0xf0,0x2e,0xe1]
825@ CHECK: msr  SPSR_fc, r0 @ encoding: [0x00,0xf0,0x69,0xe1]
826@ CHECK: msr  SPSR_fsxc, r0 @ encoding: [0x00,0xf0,0x6f,0xe1]
827@ CHECK: msr  CPSR_fsxc, r0 @ encoding: [0x00,0xf0,0x2f,0xe1]
828
829@------------------------------------------------------------------------------
830@ MUL
831@------------------------------------------------------------------------------
832
833  mul r5, r6, r7
834  muls r5, r6, r7
835  mulgt r5, r6, r7
836  mulsle r5, r6, r7
837
838@ CHECK: mul	r5, r6, r7              @ encoding: [0x96,0x07,0x05,0xe0]
839@ CHECK: muls	r5, r6, r7              @ encoding: [0x96,0x07,0x15,0xe0]
840@ CHECK: mulgt	r5, r6, r7              @ encoding: [0x96,0x07,0x05,0xc0]
841@ CHECK: mulsle	r5, r6, r7              @ encoding: [0x96,0x07,0x15,0xd0]
842
843
844@------------------------------------------------------------------------------
845@ MVN (immediate)
846@------------------------------------------------------------------------------
847    mvn r3, #7
848    mvn r4, #0xff0
849    mvn r5, #0xff0000
850    mvns r3, #7
851    mvneq r4, #0xff0
852    mvnseq r5, #0xff0000
853
854@ CHECK: mvn	r3, #7                  @ encoding: [0x07,0x30,0xe0,0xe3]
855@ CHECK: mvn	r4, #4080               @ encoding: [0xff,0x4e,0xe0,0xe3]
856@ CHECK: mvn	r5, #16711680           @ encoding: [0xff,0x58,0xe0,0xe3]
857@ CHECK: mvns	r3, #7                  @ encoding: [0x07,0x30,0xf0,0xe3]
858@ CHECK: mvneq	r4, #4080               @ encoding: [0xff,0x4e,0xe0,0x03]
859@ CHECK: mvnseq	r5, #16711680           @ encoding: [0xff,0x58,0xf0,0x03]
860
861
862@------------------------------------------------------------------------------
863@ MVN (register)
864@------------------------------------------------------------------------------
865        mvn r2, r3
866        mvns r2, r3
867        mvn r5, r6, lsl #19
868        mvn r5, r6, lsr #9
869        mvn r5, r6, asr #4
870        mvn r5, r6, ror #6
871        mvn r5, r6, rrx
872        mvneq r2, r3
873        mvnseq r2, r3, lsl #10
874
875@ CHECK: mvn	r2, r3                  @ encoding: [0x03,0x20,0xe0,0xe1]
876@ CHECK: mvns	r2, r3                  @ encoding: [0x03,0x20,0xf0,0xe1]
877@ CHECK: mvn	r5, r6, lsl #19         @ encoding: [0x86,0x59,0xe0,0xe1]
878@ CHECK: mvn	r5, r6, lsr #9          @ encoding: [0xa6,0x54,0xe0,0xe1]
879@ CHECK: mvn	r5, r6, asr #4          @ encoding: [0x46,0x52,0xe0,0xe1]
880@ CHECK: mvn	r5, r6, ror #6          @ encoding: [0x66,0x53,0xe0,0xe1]
881@ CHECK: mvn	r5, r6, rrx             @ encoding: [0x66,0x50,0xe0,0xe1]
882@ CHECK: mvneq	r2, r3                  @ encoding: [0x03,0x20,0xe0,0x01]
883@ CHECK: mvnseq	r2, r3, lsl #10         @ encoding: [0x03,0x25,0xf0,0x01]
884
885
886@------------------------------------------------------------------------------
887@ MVN (shifted register)
888@------------------------------------------------------------------------------
889        mvn r5, r6, lsl r7
890        mvns r5, r6, lsr r7
891        mvngt r5, r6, asr r7
892        mvnslt r5, r6, ror r7
893
894@ CHECK: mvn	r5, r6, lsl r7          @ encoding: [0x16,0x57,0xe0,0xe1]
895@ CHECK: mvns	r5, r6, lsr r7          @ encoding: [0x36,0x57,0xf0,0xe1]
896@ CHECK: mvngt	r5, r6, asr r7          @ encoding: [0x56,0x57,0xe0,0xc1]
897@ CHECK: mvnslt	r5, r6, ror r7          @ encoding: [0x76,0x57,0xf0,0xb1]
898
899@------------------------------------------------------------------------------
900@ NOP
901@------------------------------------------------------------------------------
902        nop
903        nopgt
904
905@ CHECK: nop @ encoding: [0x00,0xf0,0x20,0xe3]
906@ CHECK: nopgt @ encoding: [0x00,0xf0,0x20,0xc3]
907
908
909@------------------------------------------------------------------------------
910@ ORR
911@------------------------------------------------------------------------------
912        orr r4, r5, #0xf000
913        orr r4, r5, r6
914        orr r4, r5, r6, lsl #5
915        orr r4, r5, r6, lsr #5
916        orr r4, r5, r6, lsr #5
917        orr r4, r5, r6, asr #5
918        orr r4, r5, r6, ror #5
919        orr r6, r7, r8, lsl r9
920        orr r6, r7, r8, lsr r9
921        orr r6, r7, r8, asr r9
922        orr r6, r7, r8, ror r9
923        orr r4, r5, r6, rrx
924
925        @ destination register is optional
926        orr r5, #0xf000
927        orr r4, r5
928        orr r4, r5, lsl #5
929        orr r4, r5, lsr #5
930        orr r4, r5, lsr #5
931        orr r4, r5, asr #5
932        orr r4, r5, ror #5
933        orr r6, r7, lsl r9
934        orr r6, r7, lsr r9
935        orr r6, r7, asr r9
936        orr r6, r7, ror r9
937        orr r4, r5, rrx
938
939@ CHECK: orr	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x85,0xe3]
940@ CHECK: orr	r4, r5, r6              @ encoding: [0x06,0x40,0x85,0xe1]
941@ CHECK: orr	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x85,0xe1]
942@ CHECK: orr	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe1]
943@ CHECK: orr	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe1]
944@ CHECK: orr	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x85,0xe1]
945@ CHECK: orr	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x85,0xe1]
946@ CHECK: orr	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x87,0xe1]
947@ CHECK: orr	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x87,0xe1]
948@ CHECK: orr	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x87,0xe1]
949@ CHECK: orr	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0xe1]
950@ CHECK: orr	r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x85,0xe1]
951
952@ CHECK: orr	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0xe3]
953@ CHECK: orr	r4, r4, r5              @ encoding: [0x05,0x40,0x84,0xe1]
954@ CHECK: orr	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x84,0xe1]
955@ CHECK: orr	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe1]
956@ CHECK: orr	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe1]
957@ CHECK: orr	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x84,0xe1]
958@ CHECK: orr	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x84,0xe1]
959@ CHECK: orr	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x86,0xe1]
960@ CHECK: orr	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x86,0xe1]
961@ CHECK: orr	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x86,0xe1]
962@ CHECK: orr	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x86,0xe1]
963@ CHECK: orr	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x84,0xe1]
964
965        orrseq r4, r5, #0xf000
966        orrne r4, r5, r6
967        orrseq r4, r5, r6, lsl #5
968        orrlo r6, r7, r8, ror r9
969        orrshi r4, r5, r6, rrx
970        orrcs r5, #0xf000
971        orrseq r4, r5
972        orrne r6, r7, asr r9
973        orrslt r6, r7, ror r9
974        orrsgt r4, r5, rrx
975
976@ CHECK: orrseq	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x95,0x03]
977@ CHECK: orrne	r4, r5, r6              @ encoding: [0x06,0x40,0x85,0x11]
978@ CHECK: orrseq	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x95,0x01]
979@ CHECK: orrlo	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0x31]
980@ CHECK: orrshi	r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x95,0x81]
981@ CHECK: orrhs	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0x23]
982@ CHECK: orrseq	r4, r4, r5              @ encoding: [0x05,0x40,0x94,0x01]
983@ CHECK: orrne	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x86,0x11]
984@ CHECK: orrslt	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x96,0xb1]
985@ CHECK: orrsgt	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x94,0xc1]
986
987@------------------------------------------------------------------------------
988@ PKH
989@------------------------------------------------------------------------------
990        pkhbt r2, r2, r3
991        pkhbt r2, r2, r3, lsl #31
992        pkhbt r2, r2, r3, lsl #0
993        pkhbt r2, r2, r3, lsl #15
994
995        pkhtb r2, r2, r3
996        pkhtb r2, r2, r3, asr #31
997        pkhtb r2, r2, r3, asr #15
998
999@ CHECK: pkhbt	r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
1000@ CHECK: pkhbt	r2, r2, r3, lsl #31     @ encoding: [0x93,0x2f,0x82,0xe6]
1001@ CHECK: pkhbt	r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
1002@ CHECK: pkhbt	r2, r2, r3, lsl #15     @ encoding: [0x93,0x27,0x82,0xe6]
1003
1004@ CHECK: pkhbt	r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
1005@ CHECK: pkhtb	r2, r2, r3, asr #31     @ encoding: [0xd3,0x2f,0x82,0xe6]
1006@ CHECK: pkhtb	r2, r2, r3, asr #15     @ encoding: [0xd3,0x27,0x82,0xe6]
1007
1008@------------------------------------------------------------------------------
1009@ FIXME: PLD
1010@------------------------------------------------------------------------------
1011@------------------------------------------------------------------------------
1012@ FIXME: PLI
1013@------------------------------------------------------------------------------
1014
1015
1016@------------------------------------------------------------------------------
1017@ POP
1018@------------------------------------------------------------------------------
1019        pop {r7}
1020        pop {r7, r8, r9, r10}
1021
1022@ FIXME: pop of a single register should encode as "ldr r7, [sp], #4"
1023@ CHECK-FIXME: pop	{r7}                    @ encoding: [0x04,0x70,0x9d,0xe4]
1024@ CHECK: pop	{r7, r8, r9, r10}       @ encoding: [0x80,0x07,0xbd,0xe8]
1025
1026
1027@------------------------------------------------------------------------------
1028@ PUSH
1029@------------------------------------------------------------------------------
1030        push {r7}
1031        push {r7, r8, r9, r10}
1032
1033@ FIXME: push of a single register should encode as "str r7, [sp, #-4]!"
1034@ CHECK-FIXME: push	{r7}                    @ encoding: [0x04,0x70,0x2d,0xe5]
1035@ CHECK: push	{r7, r8, r9, r10}       @ encoding: [0x80,0x07,0x2d,0xe9]
1036
1037
1038@------------------------------------------------------------------------------
1039@ QADD/QADD16/QADD8
1040@------------------------------------------------------------------------------
1041        qadd r1, r2, r3
1042        qaddne r1, r2, r3
1043        qadd16 r1, r2, r3
1044        qadd16gt r1, r2, r3
1045        qadd8 r1, r2, r3
1046        qadd8le r1, r2, r3
1047
1048@ CHECK: qadd	r1, r2, r3              @ encoding: [0x52,0x10,0x03,0xe1]
1049@ CHECK: qaddne	r1, r2, r3              @ encoding: [0x52,0x10,0x03,0x11]
1050@ CHECK: qadd16	r1, r2, r3              @ encoding: [0x13,0x1f,0x22,0xe6]
1051@ CHECK: qadd16gt	r1, r2, r3      @ encoding: [0x13,0x1f,0x22,0xc6]
1052@ CHECK: qadd8	r1, r2, r3              @ encoding: [0x93,0x1f,0x22,0xe6]
1053@ CHECK: qadd8le r1, r2, r3             @ encoding: [0x93,0x1f,0x22,0xd6]
1054
1055
1056@------------------------------------------------------------------------------
1057@ QDADD/QDSUB
1058@------------------------------------------------------------------------------
1059        qdadd r6, r7, r8
1060        qdaddhi r6, r7, r8
1061        qdsub r6, r7, r8
1062        qdsubhi r6, r7, r8
1063
1064@ CHECK: qdadd	r6, r7, r8              @ encoding: [0x57,0x60,0x48,0xe1]
1065@ CHECK: qdaddhi r6, r7, r8             @ encoding: [0x57,0x60,0x48,0x81]
1066@ CHECK: qdsub	r6, r7, r8              @ encoding: [0x57,0x60,0x68,0xe1]
1067@ CHECK: qdsubhi r6, r7, r8             @ encoding: [0x57,0x60,0x68,0x81]
1068
1069
1070@------------------------------------------------------------------------------
1071@ QSAX
1072@------------------------------------------------------------------------------
1073        qsax r9, r12, r0
1074        qsaxeq r9, r12, r0
1075
1076@ CHECK: qsax	r9, r12, r0             @ encoding: [0x50,0x9f,0x2c,0xe6]
1077@ CHECK: qsaxeq	r9, r12, r0             @ encoding: [0x50,0x9f,0x2c,0x06]
1078
1079
1080@------------------------------------------------------------------------------
1081@ QADD/QADD16/QADD8
1082@------------------------------------------------------------------------------
1083        qsub r1, r2, r3
1084        qsubne r1, r2, r3
1085        qsub16 r1, r2, r3
1086        qsub16gt r1, r2, r3
1087        qsub8 r1, r2, r3
1088        qsub8le r1, r2, r3
1089
1090@ CHECK: qsub	r1, r2, r3              @ encoding: [0x52,0x10,0x23,0xe1]
1091@ CHECK: qsubne	r1, r2, r3              @ encoding: [0x52,0x10,0x23,0x11]
1092@ CHECK: qsub16	r1, r2, r3              @ encoding: [0x73,0x1f,0x22,0xe6]
1093@ CHECK: qsub16gt	r1, r2, r3      @ encoding: [0x73,0x1f,0x22,0xc6]
1094@ CHECK: qsub8	r1, r2, r3              @ encoding: [0xf3,0x1f,0x22,0xe6]
1095@ CHECK: qsub8le r1, r2, r3             @ encoding: [0xf3,0x1f,0x22,0xd6]
1096
1097
1098@------------------------------------------------------------------------------
1099@ RBIT
1100@------------------------------------------------------------------------------
1101        rbit r1, r2
1102        rbitne r1, r2
1103
1104@ CHECK: rbit	r1, r2                  @ encoding: [0x32,0x1f,0xff,0xe6]
1105@ CHECK: rbitne	r1, r2                  @ encoding: [0x32,0x1f,0xff,0x16]
1106
1107
1108@------------------------------------------------------------------------------
1109@ REV/REV16/REVSH
1110@------------------------------------------------------------------------------
1111        rev r1, r9
1112        revne r1, r5
1113        rev16 r8, r3
1114        rev16ne r12, r4
1115        revsh r4, r9
1116        revshne r9, r1
1117
1118@ CHECK: rev	r1, r9                  @ encoding: [0x39,0x1f,0xbf,0xe6]
1119@ CHECK: revne	r1, r5                  @ encoding: [0x35,0x1f,0xbf,0x16]
1120@ CHECK: rev16	r8, r3                  @ encoding: [0xb3,0x8f,0xbf,0xe6]
1121@ CHECK: rev16ne r12, r4                @ encoding: [0xb4,0xcf,0xbf,0x16]
1122@ CHECK: revsh	r4, r9                  @ encoding: [0xb9,0x4f,0xff,0xe6]
1123@ CHECK: revshne r9, r1                 @ encoding: [0xb1,0x9f,0xff,0x16]
1124
1125
1126@------------------------------------------------------------------------------
1127@ RSB
1128@------------------------------------------------------------------------------
1129        rsb r4, r5, #0xf000
1130        rsb r4, r5, r6
1131        rsb r4, r5, r6, lsl #5
1132        rsblo r4, r5, r6, lsr #5
1133        rsb r4, r5, r6, lsr #5
1134        rsb r4, r5, r6, asr #5
1135        rsb r4, r5, r6, ror #5
1136        rsb r6, r7, r8, lsl r9
1137        rsb r6, r7, r8, lsr r9
1138        rsb r6, r7, r8, asr r9
1139        rsble r6, r7, r8, ror r9
1140        rsb r4, r5, r6, rrx
1141
1142        @ destination register is optional
1143        rsb r5, #0xf000
1144        rsb r4, r5
1145        rsb r4, r5, lsl #5
1146        rsb r4, r5, lsr #5
1147        rsbne r4, r5, lsr #5
1148        rsb r4, r5, asr #5
1149        rsb r4, r5, ror #5
1150        rsbgt r6, r7, lsl r9
1151        rsb r6, r7, lsr r9
1152        rsb r6, r7, asr r9
1153        rsb r6, r7, ror r9
1154        rsb r4, r5, rrx
1155
1156@ CHECK: rsb	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x65,0xe2]
1157@ CHECK: rsb	r4, r5, r6              @ encoding: [0x06,0x40,0x65,0xe0]
1158@ CHECK: rsb	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x65,0xe0]
1159@ CHECK: rsblo	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x65,0x30]
1160@ CHECK: rsb	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x65,0xe0]
1161@ CHECK: rsb	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x65,0xe0]
1162@ CHECK: rsb	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x65,0xe0]
1163@ CHECK: rsb	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x67,0xe0]
1164@ CHECK: rsb	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x67,0xe0]
1165@ CHECK: rsb	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x67,0xe0]
1166@ CHECK: rsble	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x67,0xd0]
1167@ CHECK: rsb	r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x65,0xe0]
1168
1169@ CHECK: rsb	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x65,0xe2]
1170@ CHECK: rsb	r4, r4, r5              @ encoding: [0x05,0x40,0x64,0xe0]
1171@ CHECK: rsb	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x64,0xe0]
1172@ CHECK: rsb	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x64,0xe0]
1173@ CHECK: rsbne	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x64,0x10]
1174@ CHECK: rsb	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x64,0xe0]
1175@ CHECK: rsb	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x64,0xe0]
1176@ CHECK: rsbgt	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x66,0xc0]
1177@ CHECK: rsb	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x66,0xe0]
1178@ CHECK: rsb	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x66,0xe0]
1179@ CHECK: rsb	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x66,0xe0]
1180@ CHECK: rsb	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x64,0xe0]
1181
1182@------------------------------------------------------------------------------
1183@ RSC
1184@------------------------------------------------------------------------------
1185        rsc r4, r5, #0xf000
1186        rsc r4, r5, r6
1187        rsc r4, r5, r6, lsl #5
1188        rsclo r4, r5, r6, lsr #5
1189        rsc r4, r5, r6, lsr #5
1190        rsc r4, r5, r6, asr #5
1191        rsc r4, r5, r6, ror #5
1192        rsc r6, r7, r8, lsl r9
1193        rsc r6, r7, r8, lsr r9
1194        rsc r6, r7, r8, asr r9
1195        rscle r6, r7, r8, ror r9
1196
1197        @ destination register is optional
1198        rsc r5, #0xf000
1199        rsc r4, r5
1200        rsc r4, r5, lsl #5
1201        rsc r4, r5, lsr #5
1202        rscne r4, r5, lsr #5
1203        rsc r4, r5, asr #5
1204        rsc r4, r5, ror #5
1205        rscgt r6, r7, lsl r9
1206        rsc r6, r7, lsr r9
1207        rsc r6, r7, asr r9
1208        rsc r6, r7, ror r9
1209
1210@ CHECK: rsc	r4, r5, #61440          @ encoding: [0x0f,0x4a,0xe5,0xe2]
1211@ CHECK: rsc	r4, r5, r6              @ encoding: [0x06,0x40,0xe5,0xe0]
1212@ CHECK: rsc	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0xe5,0xe0]
1213@ CHECK: rsclo	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xe5,0x30]
1214@ CHECK: rsc	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xe5,0xe0]
1215@ CHECK: rsc	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0xe5,0xe0]
1216@ CHECK: rsc	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0xe5,0xe0]
1217@ CHECK: rsc	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0xe7,0xe0]
1218@ CHECK: rsc	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0xe7,0xe0]
1219@ CHECK: rsc	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0xe7,0xe0]
1220@ CHECK: rscle	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0xe7,0xd0]
1221
1222@ CHECK: rsc	r5, r5, #61440          @ encoding: [0x0f,0x5a,0xe5,0xe2]
1223@ CHECK: rsc	r4, r4, r5              @ encoding: [0x05,0x40,0xe4,0xe0]
1224@ CHECK: rsc	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0xe4,0xe0]
1225@ CHECK: rsc	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xe4,0xe0]
1226@ CHECK: rscne	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xe4,0x10]
1227@ CHECK: rsc	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0xe4,0xe0]
1228@ CHECK: rsc	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0xe4,0xe0]
1229@ CHECK: rscgt	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0xe6,0xc0]
1230@ CHECK: rsc	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0xe6,0xe0]
1231@ CHECK: rsc	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0xe6,0xe0]
1232@ CHECK: rsc	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xe6,0xe0]
1233
1234@------------------------------------------------------------------------------
1235@ SADD16/SADD8
1236@------------------------------------------------------------------------------
1237        sadd16 r1, r2, r3
1238        sadd16gt r1, r2, r3
1239        sadd8 r1, r2, r3
1240        sadd8le r1, r2, r3
1241
1242@ CHECK: sadd16	r1, r2, r3              @ encoding: [0x13,0x1f,0x12,0xe6]
1243@ CHECK: sadd16gt	r1, r2, r3      @ encoding: [0x13,0x1f,0x12,0xc6]
1244@ CHECK: sadd8	r1, r2, r3              @ encoding: [0x93,0x1f,0x12,0xe6]
1245@ CHECK: sadd8le r1, r2, r3             @ encoding: [0x93,0x1f,0x12,0xd6]
1246
1247
1248@------------------------------------------------------------------------------
1249@ SASX
1250@------------------------------------------------------------------------------
1251        sasx r9, r12, r0
1252        sasxeq r9, r12, r0
1253
1254@ CHECK: sasx	r9, r12, r0             @ encoding: [0x30,0x9f,0x1c,0xe6]
1255@ CHECK: sasxeq	r9, r12, r0             @ encoding: [0x30,0x9f,0x1c,0x06]
1256
1257
1258@------------------------------------------------------------------------------
1259@ SBC
1260@------------------------------------------------------------------------------
1261        sbc r4, r5, #0xf000
1262        sbc r4, r5, r6
1263        sbc r4, r5, r6, lsl #5
1264        sbc r4, r5, r6, lsr #5
1265        sbc r4, r5, r6, lsr #5
1266        sbc r4, r5, r6, asr #5
1267        sbc r4, r5, r6, ror #5
1268        sbc r6, r7, r8, lsl r9
1269        sbc r6, r7, r8, lsr r9
1270        sbc r6, r7, r8, asr r9
1271        sbc r6, r7, r8, ror r9
1272
1273        @ destination register is optional
1274        sbc r5, #0xf000
1275        sbc r4, r5
1276        sbc r4, r5, lsl #5
1277        sbc r4, r5, lsr #5
1278        sbc r4, r5, lsr #5
1279        sbc r4, r5, asr #5
1280        sbc r4, r5, ror #5
1281        sbc r6, r7, lsl r9
1282        sbc r6, r7, lsr r9
1283        sbc r6, r7, asr r9
1284        sbc r6, r7, ror r9
1285
1286@ CHECK: sbc	r4, r5, #61440          @ encoding: [0x0f,0x4a,0xc5,0xe2]
1287@ CHECK: sbc	r4, r5, r6              @ encoding: [0x06,0x40,0xc5,0xe0]
1288@ CHECK: sbc	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0xc5,0xe0]
1289@ CHECK: sbc	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xc5,0xe0]
1290@ CHECK: sbc	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xc5,0xe0]
1291@ CHECK: sbc	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0xc5,0xe0]
1292@ CHECK: sbc	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0xc5,0xe0]
1293@ CHECK: sbc	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0xc7,0xe0]
1294@ CHECK: sbc	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0xc7,0xe0]
1295@ CHECK: sbc	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0xc7,0xe0]
1296@ CHECK: sbc	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0xc7,0xe0]
1297
1298@ CHECK: sbc	r5, r5, #61440          @ encoding: [0x0f,0x5a,0xc5,0xe2]
1299@ CHECK: sbc	r4, r4, r5              @ encoding: [0x05,0x40,0xc4,0xe0]
1300@ CHECK: sbc	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0xc4,0xe0]
1301@ CHECK: sbc	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xc4,0xe0]
1302@ CHECK: sbc	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xc4,0xe0]
1303@ CHECK: sbc	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0xc4,0xe0]
1304@ CHECK: sbc	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0xc4,0xe0]
1305@ CHECK: sbc	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0xc6,0xe0]
1306@ CHECK: sbc	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0xc6,0xe0]
1307@ CHECK: sbc	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0xc6,0xe0]
1308@ CHECK: sbc	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xc6,0xe0]
1309
1310
1311@------------------------------------------------------------------------------
1312@ SEL
1313@------------------------------------------------------------------------------
1314        sel r9, r2, r1
1315        selne r9, r2, r1
1316
1317@ CHECK: sel	r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0xe6]
1318@ CHECK: selne	r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0x16]
1319
1320
1321@------------------------------------------------------------------------------
1322@ SETEND
1323@------------------------------------------------------------------------------
1324        setend be
1325        setend le
1326
1327	sel	r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0xe6]
1328	selne	r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0x16]
1329
1330
1331@------------------------------------------------------------------------------
1332@ SEV
1333@------------------------------------------------------------------------------
1334        sev
1335        seveq
1336
1337@ CHECK: sev                             @ encoding: [0x04,0xf0,0x20,0xe3]
1338@ CHECK: seveq                           @ encoding: [0x04,0xf0,0x20,0x03]
1339
1340@------------------------------------------------------------------------------
1341@ SHADD16/SHADD8
1342@------------------------------------------------------------------------------
1343        shadd16 r4, r8, r2
1344        shadd16gt r4, r8, r2
1345        shadd8 r4, r8, r2
1346        shadd8gt r4, r8, r2
1347
1348@ CHECK: shadd16	r4, r8, r2      @ encoding: [0x12,0x4f,0x38,0xe6]
1349@ CHECK: shadd16gt	r4, r8, r2      @ encoding: [0x12,0x4f,0x38,0xc6]
1350@ CHECK: shadd8	r4, r8, r2              @ encoding: [0x92,0x4f,0x38,0xe6]
1351@ CHECK: shadd8gt	r4, r8, r2      @ encoding: [0x92,0x4f,0x38,0xc6]
1352
1353
1354@------------------------------------------------------------------------------
1355@ SHASX
1356@------------------------------------------------------------------------------
1357        shasx r4, r8, r2
1358        shasxgt r4, r8, r2
1359
1360@ CHECK: shasx	r4, r8, r2              @ encoding: [0x32,0x4f,0x38,0xe6]
1361@ CHECK: shasxgt r4, r8, r2             @ encoding: [0x32,0x4f,0x38,0xc6]
1362
1363
1364@------------------------------------------------------------------------------
1365@ SHSUB16/SHSUB8
1366@------------------------------------------------------------------------------
1367        shsub16 r4, r8, r2
1368        shsub16gt r4, r8, r2
1369        shsub8 r4, r8, r2
1370        shsub8gt r4, r8, r2
1371
1372@ CHECK: shsub16	r4, r8, r2      @ encoding: [0x72,0x4f,0x38,0xe6]
1373@ CHECK: shsub16gt	r4, r8, r2      @ encoding: [0x72,0x4f,0x38,0xc6]
1374@ CHECK: shsub8	r4, r8, r2              @ encoding: [0xf2,0x4f,0x38,0xe6]
1375@ CHECK: shsub8gt	r4, r8, r2      @ encoding: [0xf2,0x4f,0x38,0xc6]
1376
1377@------------------------------------------------------------------------------
1378@ SMC
1379@------------------------------------------------------------------------------
1380        smc #0xf
1381        smceq #0
1382
1383@ CHECK: smc	#15                     @ encoding: [0x7f,0x00,0x60,0xe1]
1384@ CHECK: smceq	#0                      @ encoding: [0x70,0x00,0x60,0x01]
1385
1386@------------------------------------------------------------------------------
1387@ SMLABB/SMLABT/SMLATB/SMLATT
1388@------------------------------------------------------------------------------
1389        smlabb r3, r1, r9, r0
1390        smlabt r5, r6, r4, r1
1391        smlatb r4, r2, r3, r2
1392        smlatt r8, r3, r8, r4
1393        smlabbge r3, r1, r9, r0
1394        smlabtle r5, r6, r4, r1
1395        smlatbne r4, r2, r3, r2
1396        smlatteq r8, r3, r8, r4
1397
1398@ CHECK: smlabb	r3, r1, r9, r0          @ encoding: [0x81,0x09,0x03,0xe1]
1399@ CHECK: smlabt	r5, r6, r4, r1          @ encoding: [0xc6,0x14,0x05,0xe1]
1400@ CHECK: smlatb	r4, r2, r3, r2          @ encoding: [0xa2,0x23,0x04,0xe1]
1401@ CHECK: smlatt	r8, r3, r8, r4          @ encoding: [0xe3,0x48,0x08,0xe1]
1402@ CHECK: smlabbge	r3, r1, r9, r0  @ encoding: [0x81,0x09,0x03,0xa1]
1403@ CHECK: smlabtle	r5, r6, r4, r1  @ encoding: [0xc6,0x14,0x05,0xd1]
1404@ CHECK: smlatbne	r4, r2, r3, r2  @ encoding: [0xa2,0x23,0x04,0x11]
1405@ CHECK: smlatteq	r8, r3, r8, r4  @ encoding: [0xe3,0x48,0x08,0x01]
1406
1407@------------------------------------------------------------------------------
1408@ SMLAD/SMLADX
1409@------------------------------------------------------------------------------
1410        smlad r2, r3, r5, r8
1411        smladx r2, r3, r5, r8
1412        smladeq r2, r3, r5, r8
1413        smladxhi r2, r3, r5, r8
1414
1415@ CHECK: smlad	r2, r3, r5, r8          @ encoding: [0x13,0x85,0x02,0xe7]
1416@ CHECK: smladx	r2, r3, r5, r8          @ encoding: [0x33,0x85,0x02,0xe7]
1417@ CHECK: smladeq	r2, r3, r5, r8  @ encoding: [0x13,0x85,0x02,0x07]
1418@ CHECK: smladxhi	r2, r3, r5, r8  @ encoding: [0x33,0x85,0x02,0x87]
1419
1420
1421@------------------------------------------------------------------------------
1422@ SMLAL
1423@------------------------------------------------------------------------------
1424        smlal r2, r3, r5, r8
1425        smlals r2, r3, r5, r8
1426        smlaleq r2, r3, r5, r8
1427        smlalshi r2, r3, r5, r8
1428
1429@ CHECK: smlal	r2, r3, r5, r8          @ encoding: [0x95,0x28,0xe3,0xe0]
1430@ CHECK: smlals	r2, r3, r5, r8          @ encoding: [0x95,0x28,0xf3,0xe0]
1431@ CHECK: smlaleq	r2, r3, r5, r8  @ encoding: [0x95,0x28,0xe3,0x00]
1432@ CHECK: smlalshi	r2, r3, r5, r8  @ encoding: [0x95,0x28,0xf3,0x80]
1433
1434
1435@------------------------------------------------------------------------------
1436@ SMLALBB/SMLALBT/SMLALTB/SMLALTT
1437@------------------------------------------------------------------------------
1438        smlalbb r3, r1, r9, r0
1439        smlalbt r5, r6, r4, r1
1440        smlaltb r4, r2, r3, r2
1441        smlaltt r8, r3, r8, r4
1442        smlalbbge r3, r1, r9, r0
1443        smlalbtle r5, r6, r4, r1
1444        smlaltbne r4, r2, r3, r2
1445        smlaltteq r8, r3, r8, r4
1446
1447@ CHECK: smlalbb	r3, r1, r9, r0  @ encoding: [0x89,0x30,0x41,0xe1]
1448@ CHECK: smlalbt	r5, r6, r4, r1  @ encoding: [0xc4,0x51,0x46,0xe1]
1449@ CHECK: smlaltb	r4, r2, r3, r2  @ encoding: [0xa3,0x42,0x42,0xe1]
1450@ CHECK: smlaltt	r8, r3, r8, r4  @ encoding: [0xe8,0x84,0x43,0xe1]
1451@ CHECK: smlalbbge	r3, r1, r9, r0  @ encoding: [0x89,0x30,0x41,0xa1]
1452@ CHECK: smlalbtle	r5, r6, r4, r1  @ encoding: [0xc4,0x51,0x46,0xd1]
1453@ CHECK: smlaltbne	r4, r2, r3, r2  @ encoding: [0xa3,0x42,0x42,0x11]
1454@ CHECK: smlaltteq	r8, r3, r8, r4  @ encoding: [0xe8,0x84,0x43,0x01]
1455
1456
1457@------------------------------------------------------------------------------
1458@ SMLALD/SMLALDX
1459@------------------------------------------------------------------------------
1460        smlald r2, r3, r5, r8
1461        smlaldx r2, r3, r5, r8
1462        smlaldeq r2, r3, r5, r8
1463        smlaldxhi r2, r3, r5, r8
1464
1465@ CHECK: smlald	r2, r3, r5, r8          @ encoding: [0x15,0x28,0x43,0xe7]
1466@ CHECK: smlaldx	r2, r3, r5, r8  @ encoding: [0x35,0x28,0x43,0xe7]
1467@ CHECK: smlaldeq	r2, r3, r5, r8  @ encoding: [0x15,0x28,0x43,0x07]
1468@ CHECK: smlaldxhi	r2, r3, r5, r8  @ encoding: [0x35,0x28,0x43,0x87]
1469
1470
1471@------------------------------------------------------------------------------
1472@ SMLAWB/SMLAWT
1473@------------------------------------------------------------------------------
1474        smlawb r2, r3, r10, r8
1475        smlawt r8, r3, r5, r9
1476        smlawbeq r2, r7, r5, r8
1477        smlawthi r1, r3, r0, r8
1478
1479@ CHECK: smlawb	r2, r3, r10, r8         @ encoding: [0x83,0x8a,0x22,0xe1]
1480@ CHECK: smlawt	r8, r3, r5, r9          @ encoding: [0xc3,0x95,0x28,0xe1]
1481@ CHECK: smlawbeq	r2, r7, r5, r8  @ encoding: [0x87,0x85,0x22,0x01]
1482@ CHECK: smlawthi	r1, r3, r0, r8  @ encoding: [0xc3,0x80,0x21,0x81]
1483
1484
1485@------------------------------------------------------------------------------
1486@ SMLSD/SMLSDX
1487@------------------------------------------------------------------------------
1488        smlsd r2, r3, r5, r8
1489        smlsdx r2, r3, r5, r8
1490        smlsdeq r2, r3, r5, r8
1491        smlsdxhi r2, r3, r5, r8
1492
1493@ CHECK: smlsd	r2, r3, r5, r8          @ encoding: [0x53,0x85,0x02,0xe7]
1494@ CHECK: smlsdx	r2, r3, r5, r8          @ encoding: [0x73,0x85,0x02,0xe7]
1495@ CHECK: smlsdeq	r2, r3, r5, r8  @ encoding: [0x53,0x85,0x02,0x07]
1496@ CHECK: smlsdxhi	r2, r3, r5, r8  @ encoding: [0x73,0x85,0x02,0x87]
1497
1498
1499@------------------------------------------------------------------------------
1500@ SMLSLD/SMLSLDX
1501@------------------------------------------------------------------------------
1502        smlsld r2, r9, r5, r1
1503        smlsldx r4, r11, r2, r8
1504        smlsldeq r8, r2, r5, r6
1505        smlsldxhi r1, r0, r3, r8
1506
1507@ CHECK: smlsld	r2, r9, r5, r1          @ encoding: [0x55,0x21,0x49,0xe7]
1508@ CHECK: smlsldx	r4, r11, r2, r8 @ encoding: [0x72,0x48,0x4b,0xe7]
1509@ CHECK: smlsldeq	r8, r2, r5, r6  @ encoding: [0x55,0x86,0x42,0x07]
1510@ CHECK: smlsldxhi	r1, r0, r3, r8  @ encoding: [0x73,0x18,0x40,0x87]
1511
1512
1513@------------------------------------------------------------------------------
1514@ SMMLA/SMMLAR
1515@------------------------------------------------------------------------------
1516        smmla r1, r2, r3, r4
1517        smmlar r4, r3, r2, r1
1518        smmlalo r1, r2, r3, r4
1519        smmlarcs r4, r3, r2, r1
1520
1521@ CHECK: smmla	r1, r2, r3, r4          @ encoding: [0x12,0x43,0x51,0xe7]
1522@ CHECK: smmlar	r4, r3, r2, r1          @ encoding: [0x33,0x12,0x54,0xe7]
1523@ CHECK: smmlalo	r1, r2, r3, r4  @ encoding: [0x12,0x43,0x51,0x37]
1524@ CHECK: smmlarhs	r4, r3, r2, r1  @ encoding: [0x33,0x12,0x54,0x27]
1525
1526
1527@------------------------------------------------------------------------------
1528@ SMMLS/SMMLSR
1529@------------------------------------------------------------------------------
1530        smmls r1, r2, r3, r4
1531        smmlsr r4, r3, r2, r1
1532        smmlslo r1, r2, r3, r4
1533        smmlsrcs r4, r3, r2, r1
1534
1535@ CHECK: smmls	r1, r2, r3, r4          @ encoding: [0xd2,0x43,0x51,0xe7]
1536@ CHECK: smmlsr	r4, r3, r2, r1          @ encoding: [0xf3,0x12,0x54,0xe7]
1537@ CHECK: smmlslo	r1, r2, r3, r4  @ encoding: [0xd2,0x43,0x51,0x37]
1538@ CHECK: smmlsrhs	r4, r3, r2, r1  @ encoding: [0xf3,0x12,0x54,0x27]
1539
1540
1541@------------------------------------------------------------------------------
1542@ SMMUL/SMMULR
1543@------------------------------------------------------------------------------
1544        smmul r2, r3, r4
1545        smmulr r3, r2, r1
1546        smmulcc r2, r3, r4
1547        smmulrhs r3, r2, r1
1548
1549@ CHECK: smmul	r2, r3, r4              @ encoding: [0x13,0xf4,0x52,0xe7]
1550@ CHECK: smmulr	r3, r2, r1              @ encoding: [0x32,0xf1,0x53,0xe7]
1551@ CHECK: smmullo	r2, r3, r4      @ encoding: [0x13,0xf4,0x52,0x37]
1552@ CHECK: smmulrhs	r3, r2, r1      @ encoding: [0x32,0xf1,0x53,0x27]
1553
1554
1555@------------------------------------------------------------------------------
1556@ SMUAD/SMUADX
1557@------------------------------------------------------------------------------
1558        smuad r2, r3, r4
1559        smuadx r3, r2, r1
1560        smuadlt r2, r3, r4
1561        smuadxge r3, r2, r1
1562
1563@ CHECK: smuad	r2, r3, r4              @ encoding: [0x13,0xf4,0x02,0xe7]
1564@ CHECK: smuadx	r3, r2, r1              @ encoding: [0x32,0xf1,0x03,0xe7]
1565@ CHECK: smuadlt	r2, r3, r4      @ encoding: [0x13,0xf4,0x02,0xb7]
1566@ CHECK: smuadxge	r3, r2, r1      @ encoding: [0x32,0xf1,0x03,0xa7]
1567
1568
1569@------------------------------------------------------------------------------
1570@ SMULBB/SMLALBT/SMLALTB/SMLALTT
1571@------------------------------------------------------------------------------
1572        smulbb r3, r9, r0
1573        smulbt r5, r4, r1
1574        smultb r4, r2, r2
1575        smultt r8, r3, r4
1576        smulbbge r1, r9, r0
1577        smulbtle r5, r6, r4
1578        smultbne r2, r3, r2
1579        smultteq r8, r3, r4
1580
1581@ CHECK: smulbb	r3, r9, r0              @ encoding: [0x89,0x00,0x63,0xe1]
1582@ CHECK: smulbt	r5, r4, r1              @ encoding: [0xc4,0x01,0x65,0xe1]
1583@ CHECK: smultb	r4, r2, r2              @ encoding: [0xa2,0x02,0x64,0xe1]
1584@ CHECK: smultt	r8, r3, r4              @ encoding: [0xe3,0x04,0x68,0xe1]
1585@ CHECK: smulbbge	r1, r9, r0      @ encoding: [0x89,0x00,0x61,0xa1]
1586@ CHECK: smulbtle	r5, r6, r4      @ encoding: [0xc6,0x04,0x65,0xd1]
1587@ CHECK: smultbne	r2, r3, r2      @ encoding: [0xa3,0x02,0x62,0x11]
1588@ CHECK: smultteq	r8, r3, r4      @ encoding: [0xe3,0x04,0x68,0x01]
1589
1590
1591@------------------------------------------------------------------------------
1592@ SMULL
1593@------------------------------------------------------------------------------
1594        smull r3, r9, r0, r1
1595        smulls r3, r9, r0, r2
1596        smulleq r8, r3, r4, r5
1597        smullseq r8, r3, r4, r3
1598
1599@ CHECK: smull	r3, r9, r0, r1          @ encoding: [0x90,0x31,0xc9,0xe0]
1600@ CHECK: smulls	r3, r9, r0, r2          @ encoding: [0x90,0x32,0xd9,0xe0]
1601@ CHECK: smulleq	r8, r3, r4, r5  @ encoding: [0x94,0x85,0xc3,0x00]
1602@ CHECK: smullseq	r8, r3, r4, r3  @ encoding: [0x94,0x83,0xd3,0x00]
1603
1604
1605@------------------------------------------------------------------------------
1606@ SMULWB/SMULWT
1607@------------------------------------------------------------------------------
1608        smulwb r3, r9, r0
1609        smulwt r3, r9, r2
1610
1611@ CHECK: smulwb	r3, r9, r0              @ encoding: [0xa9,0x00,0x23,0xe1]
1612@ CHECK: smulwt	r3, r9, r2              @ encoding: [0xe9,0x02,0x23,0xe1]
1613
1614
1615@------------------------------------------------------------------------------
1616@ SMUSD/SMUSDX
1617@------------------------------------------------------------------------------
1618        smusd r3, r0, r1
1619        smusdx r3, r9, r2
1620        smusdeq r8, r3, r2
1621        smusdxne r7, r4, r3
1622
1623@ CHECK: smusd	r3, r0, r1              @ encoding: [0x50,0xf1,0x03,0xe7]
1624@ CHECK: smusdx	r3, r9, r2              @ encoding: [0x79,0xf2,0x03,0xe7]
1625@ CHECK: smusdeq	r8, r3, r2      @ encoding: [0x53,0xf2,0x08,0x07]
1626@ CHECK: smusdxne	r7, r4, r3      @ encoding: [0x74,0xf3,0x07,0x17]
1627
1628
1629@------------------------------------------------------------------------------
1630@ FIXME: SRS
1631@------------------------------------------------------------------------------
1632
1633
1634@------------------------------------------------------------------------------
1635@ SSAT
1636@------------------------------------------------------------------------------
1637	ssat	r8, #1, r10
1638	ssat	r8, #1, r10, lsl #0
1639	ssat	r8, #1, r10, lsl #31
1640	ssat	r8, #1, r10, asr #32
1641	ssat	r8, #1, r10, asr #1
1642
1643@ CHECK: ssat	r8, #1, r10             @ encoding: [0x1a,0x80,0xa0,0xe6]
1644@ CHECK: ssat	r8, #1, r10             @ encoding: [0x1a,0x80,0xa0,0xe6]
1645@ CHECK: ssat	r8, #1, r10, lsl #31    @ encoding: [0x9a,0x8f,0xa0,0xe6]
1646@ CHECK: ssat	r8, #1, r10, asr #32    @ encoding: [0x5a,0x80,0xa0,0xe6]
1647@ CHECK: ssat	r8, #1, r10, asr #1     @ encoding: [0xda,0x80,0xa0,0xe6]
1648
1649
1650@------------------------------------------------------------------------------
1651@ SSAT16
1652@------------------------------------------------------------------------------
1653	ssat16	r2, #1, r7
1654	ssat16	r3, #16, r5
1655
1656@ CHECK: ssat16	r2, #1, r7              @ encoding: [0x37,0x2f,0xa0,0xe6]
1657@ CHECK: ssat16	r3, #16, r5             @ encoding: [0x35,0x3f,0xaf,0xe6]
1658
1659
1660@------------------------------------------------------------------------------
1661@ SSAX
1662@------------------------------------------------------------------------------
1663        ssax r2, r3, r4
1664        ssaxlt r2, r3, r4
1665
1666@ CHECK: ssax	r2, r3, r4              @ encoding: [0x54,0x2f,0x13,0xe6]
1667@ CHECK: ssaxlt	r2, r3, r4              @ encoding: [0x54,0x2f,0x13,0xb6]
1668
1669@------------------------------------------------------------------------------
1670@ SSUB16/SSUB8
1671@------------------------------------------------------------------------------
1672        ssub16 r1, r0, r6
1673        ssub16ne r5, r3, r2
1674        ssub8 r9, r2, r4
1675        ssub8eq r5, r1, r2
1676
1677@ CHECK: ssub16	r1, r0, r6              @ encoding: [0x76,0x1f,0x10,0xe6]
1678@ CHECK: ssub16ne	r5, r3, r2      @ encoding: [0x72,0x5f,0x13,0x16]
1679@ CHECK: ssub8	r9, r2, r4              @ encoding: [0xf4,0x9f,0x12,0xe6]
1680@ CHECK: ssub8eq	r5, r1, r2      @ encoding: [0xf2,0x5f,0x11,0x06]
1681
1682
1683@------------------------------------------------------------------------------
1684@ STM*
1685@------------------------------------------------------------------------------
1686        stm       r2, {r1,r3-r6,sp}
1687        stmia     r3, {r1,r3-r6,lr}
1688        stmib     r4, {r1,r3-r6,sp}
1689        stmda     r5, {r1,r3-r6,sp}
1690        stmdb     r6, {r1,r3-r6,r8}
1691        stmfd     sp, {r1,r3-r6,sp}
1692
1693        @ with update
1694        stm       r8!, {r1,r3-r6,sp}
1695        stmib     r9!, {r1,r3-r6,sp}
1696        stmda     sp!, {r1,r3-r6}
1697        stmdb     r0!, {r1,r5,r7,sp}
1698
1699@ CHECK: stm	r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe8]
1700@ CHECK: stm	r3, {lr, r1, r3, r4, r5, r6} @ encoding: [0x7a,0x40,0x83,0xe8]
1701@ CHECK: stmib	r4, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x84,0xe9]
1702@ CHECK: stmda	r5, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x05,0xe8]
1703@ CHECK: stmdb	r6, {r1, r3, r4, r5, r6, r8} @ encoding: [0x7a,0x01,0x06,0xe9]
1704@ CHECK: stmdb	sp, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x0d,0xe9]
1705
1706@ CHECK: stm	r8!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa8,0xe8]
1707@ CHECK: stmib	r9!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa9,0xe9]
1708@ CHECK: stmda	sp!, {r1, r3, r4, r5, r6} @ encoding: [0x7a,0x00,0x2d,0xe8]
1709@ CHECK: stmdb	r0!, {r1, r5, r7, sp}   @ encoding: [0xa2,0x20,0x20,0xe9]
1710
1711
1712@------------------------------------------------------------------------------
1713@ FIXME:STR*
1714@------------------------------------------------------------------------------
1715@------------------------------------------------------------------------------
1716@ STREX/STREXB/STREXH/STREXD
1717@------------------------------------------------------------------------------
1718        strexb  r1, r3, [r4]
1719        strexh  r4, r2, [r5]
1720        strex  r2, r1, [r7]
1721        strexd  r6, r2, r3, [r8]
1722
1723@ CHECK: strexb	r1, r3, [r4]            @ encoding: [0x93,0x1f,0xc4,0xe1]
1724@ CHECK: strexh	r4, r2, [r5]            @ encoding: [0x92,0x4f,0xe5,0xe1]
1725@ CHECK: strex	r2, r1, [r7]            @ encoding: [0x91,0x2f,0x87,0xe1]
1726@ CHECK: strexd	r6, r2, r3, [r8]        @ encoding: [0x92,0x6f,0xa8,0xe1]
1727
1728
1729@------------------------------------------------------------------------------
1730@ SUB
1731@------------------------------------------------------------------------------
1732        sub r4, r5, #0xf000
1733        sub r4, r5, r6
1734        sub r4, r5, r6, lsl #5
1735        sub r4, r5, r6, lsr #5
1736        sub r4, r5, r6, lsr #5
1737        sub r4, r5, r6, asr #5
1738        sub r4, r5, r6, ror #5
1739        sub r6, r7, r8, lsl r9
1740        sub r6, r7, r8, lsr r9
1741        sub r6, r7, r8, asr r9
1742        sub r6, r7, r8, ror r9
1743
1744        @ destination register is optional
1745        sub r5, #0xf000
1746        sub r4, r5
1747        sub r4, r5, lsl #5
1748        sub r4, r5, lsr #5
1749        sub r4, r5, lsr #5
1750        sub r4, r5, asr #5
1751        sub r4, r5, ror #5
1752        sub r6, r7, lsl r9
1753        sub r6, r7, lsr r9
1754        sub r6, r7, asr r9
1755        sub r6, r7, ror r9
1756
1757@ CHECK: sub	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x45,0xe2]
1758@ CHECK: sub	r4, r5, r6              @ encoding: [0x06,0x40,0x45,0xe0]
1759@ CHECK: sub	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x45,0xe0]
1760@ CHECK: sub	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x45,0xe0]
1761@ CHECK: sub	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x45,0xe0]
1762@ CHECK: sub	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x45,0xe0]
1763@ CHECK: sub	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x45,0xe0]
1764@ CHECK: sub	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x47,0xe0]
1765@ CHECK: sub	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x47,0xe0]
1766@ CHECK: sub	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x47,0xe0]
1767@ CHECK: sub	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x47,0xe0]
1768
1769
1770@ CHECK: sub	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x45,0xe2]
1771@ CHECK: sub	r4, r4, r5              @ encoding: [0x05,0x40,0x44,0xe0]
1772@ CHECK: sub	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x44,0xe0]
1773@ CHECK: sub	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x44,0xe0]
1774@ CHECK: sub	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x44,0xe0]
1775@ CHECK: sub	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x44,0xe0]
1776@ CHECK: sub	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x44,0xe0]
1777@ CHECK: sub	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x46,0xe0]
1778@ CHECK: sub	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x46,0xe0]
1779@ CHECK: sub	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x46,0xe0]
1780@ CHECK: sub	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x46,0xe0]
1781
1782
1783@------------------------------------------------------------------------------
1784@ SVC
1785@------------------------------------------------------------------------------
1786        svc #16
1787        svc #0
1788        svc #0xffffff
1789
1790@ CHECK: svc	#16                     @ encoding: [0x10,0x00,0x00,0xef]
1791@ CHECK: svc	#0                      @ encoding: [0x00,0x00,0x00,0xef]
1792@ CHECK: svc	#16777215               @ encoding: [0xff,0xff,0xff,0xef]
1793
1794
1795@------------------------------------------------------------------------------
1796@ SWP/SWPB
1797@------------------------------------------------------------------------------
1798        swp r1, r2, [r3]
1799        swp r4, r4, [r6]
1800        swpb r5, r1, [r9]
1801
1802@ CHECK: swp	r1, r2, [r3]            @ encoding: [0x92,0x10,0x03,0xe1]
1803@ CHECK: swp	r4, r4, [r6]            @ encoding: [0x94,0x40,0x06,0xe1]
1804@ CHECK: swpb	r5, r1, [r9]            @ encoding: [0x91,0x50,0x49,0xe1]
1805