basic-arm-instructions.s revision 96425c846494c1c20a4c931f4783571295ab170c
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@ ADR
127@------------------------------------------------------------------------------
128Lback:
129  adr r2, Lback
130  adr r3, Lforward
131Lforward:
132  adr	r2, #3
133  adr	r2, #-3
134
135@ CHECK: Lback:
136@ CHECK: adr	r2, Lback    @ encoding: [0bAAAAAAA0,0x20'A',0x0f'A',0b1110001A]
137@ CHECK:  @   fixup A - offset: 0, value: Lback, kind: fixup_arm_adr_pcrel_12
138@ CHECK: adr	r3, Lforward @ encoding: [0bAAAAAAA0,0x30'A',0x0f'A',0b1110001A]
139@ CHECK:  @   fixup A - offset: 0, value: Lforward, kind: fixup_arm_adr_pcrel_12
140@ CHECK: Lforward:
141@ CHECK: adr	r2, #3                  @ encoding: [0x03,0x20,0x8f,0xe2]
142@ CHECK: adr	r2, #-3                 @ encoding: [0x03,0x20,0x4f,0xe2]
143
144
145@------------------------------------------------------------------------------
146@ ADD
147@------------------------------------------------------------------------------
148  add r4, r5, #0xf000
149  add r4, r5, r6
150  add r4, r5, r6, lsl #5
151  add r4, r5, r6, lsr #5
152  add r4, r5, r6, lsr #5
153  add r4, r5, r6, asr #5
154  add r4, r5, r6, ror #5
155  add r6, r7, r8, lsl r9
156  add r6, r7, r8, lsr r9
157  add r6, r7, r8, asr r9
158  add r6, r7, r8, ror r9
159  add r4, r5, r6, rrx
160
161  @ destination register is optional
162  add r5, #0xf000
163  add r4, r5
164  add r4, r5, lsl #5
165  add r4, r5, lsr #5
166  add r4, r5, lsr #5
167  add r4, r5, asr #5
168  add r4, r5, ror #5
169  add r6, r7, lsl r9
170  add r6, r7, lsr r9
171  add r6, r7, asr r9
172  add r6, r7, ror r9
173  add r4, r5, rrx
174
175@ CHECK: add	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x85,0xe2]
176@ CHECK: add	r4, r5, r6              @ encoding: [0x06,0x40,0x85,0xe0]
177@ CHECK: add	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x85,0xe0]
178@ CHECK: add	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe0]
179@ CHECK: add	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe0]
180@ CHECK: add	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x85,0xe0]
181@ CHECK: add	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x85,0xe0]
182@ CHECK: add	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x87,0xe0]
183@ CHECK: add	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x87,0xe0]
184@ CHECK: add	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x87,0xe0]
185@ CHECK: add	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0xe0]
186@ CHECK: add	r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x85,0xe0]
187
188
189@ CHECK: add	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0xe2]
190@ CHECK: add	r4, r4, r5              @ encoding: [0x05,0x40,0x84,0xe0]
191@ CHECK: add	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x84,0xe0]
192@ CHECK: add	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe0]
193@ CHECK: add	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe0]
194@ CHECK: add	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x84,0xe0]
195@ CHECK: add	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x84,0xe0]
196@ CHECK: add	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x86,0xe0]
197@ CHECK: add	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x86,0xe0]
198@ CHECK: add	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x86,0xe0]
199@ CHECK: add	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x86,0xe0]
200@ CHECK: add	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x84,0xe0]
201
202
203@------------------------------------------------------------------------------
204@ AND
205@------------------------------------------------------------------------------
206  and r10, r1, #0xf
207  and r10, r1, r6
208  and r10, r1, r6, lsl #10
209  and r10, r1, r6, lsr #10
210  and r10, r1, r6, lsr #10
211  and r10, r1, r6, asr #10
212  and r10, r1, r6, ror #10
213  and r6, r7, r8, lsl r2
214  and r6, r7, r8, lsr r2
215  and r6, r7, r8, asr r2
216  and r6, r7, r8, ror r2
217  and r10, r1, r6, rrx
218
219  @ destination register is optional
220  and r1, #0xf
221  and r10, r1
222  and r10, r1, lsl #10
223  and r10, r1, lsr #10
224  and r10, r1, lsr #10
225  and r10, r1, asr #10
226  and r10, r1, ror #10
227  and r6, r7, lsl r2
228  and r6, r7, lsr r2
229  and r6, r7, asr r2
230  and r6, r7, ror r2
231  and r10, r1, rrx
232
233@ CHECK: and	r10, r1, #15            @ encoding: [0x0f,0xa0,0x01,0xe2]
234@ CHECK: and	r10, r1, r6             @ encoding: [0x06,0xa0,0x01,0xe0]
235@ CHECK: and	r10, r1, r6, lsl #10    @ encoding: [0x06,0xa5,0x01,0xe0]
236@ CHECK: and	r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0x01,0xe0]
237@ CHECK: and	r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0x01,0xe0]
238@ CHECK: and	r10, r1, r6, asr #10    @ encoding: [0x46,0xa5,0x01,0xe0]
239@ CHECK: and	r10, r1, r6, ror #10    @ encoding: [0x66,0xa5,0x01,0xe0]
240@ CHECK: and	r6, r7, r8, lsl r2      @ encoding: [0x18,0x62,0x07,0xe0]
241@ CHECK: and	r6, r7, r8, lsr r2      @ encoding: [0x38,0x62,0x07,0xe0]
242@ CHECK: and	r6, r7, r8, asr r2      @ encoding: [0x58,0x62,0x07,0xe0]
243@ CHECK: and	r6, r7, r8, ror r2      @ encoding: [0x78,0x62,0x07,0xe0]
244@ CHECK: and	r10, r1, r6, rrx        @ encoding: [0x66,0xa0,0x01,0xe0]
245
246@ CHECK: and	r1, r1, #15             @ encoding: [0x0f,0x10,0x01,0xe2]
247@ CHECK: and	r10, r10, r1            @ encoding: [0x01,0xa0,0x0a,0xe0]
248@ CHECK: and	r10, r10, r1, lsl #10   @ encoding: [0x01,0xa5,0x0a,0xe0]
249@ CHECK: and	r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0x0a,0xe0]
250@ CHECK: and	r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0x0a,0xe0]
251@ CHECK: and	r10, r10, r1, asr #10   @ encoding: [0x41,0xa5,0x0a,0xe0]
252@ CHECK: and	r10, r10, r1, ror #10   @ encoding: [0x61,0xa5,0x0a,0xe0]
253@ CHECK: and	r6, r6, r7, lsl r2      @ encoding: [0x17,0x62,0x06,0xe0]
254@ CHECK: and	r6, r6, r7, lsr r2      @ encoding: [0x37,0x62,0x06,0xe0]
255@ CHECK: and	r6, r6, r7, asr r2      @ encoding: [0x57,0x62,0x06,0xe0]
256@ CHECK: and	r6, r6, r7, ror r2      @ encoding: [0x77,0x62,0x06,0xe0]
257@ CHECK: and	r10, r10, r1, rrx       @ encoding: [0x61,0xa0,0x0a,0xe0]
258
259@------------------------------------------------------------------------------
260@ FIXME: ASR
261@------------------------------------------------------------------------------
262@------------------------------------------------------------------------------
263@ B
264@------------------------------------------------------------------------------
265        b _bar
266        beq _baz
267
268@ CHECK: b	_bar                    @ encoding: [A,A,A,0xea]
269                                        @   fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
270@ CHECK: beq	_baz                    @ encoding: [A,A,A,0x0a]
271                                        @   fixup A - offset: 0, value: _baz, kind: fixup_arm_condbranch
272
273
274@------------------------------------------------------------------------------
275@ BFC
276@------------------------------------------------------------------------------
277  bfc r5, #3, #17
278  bfccc r5, #3, #17
279
280@ CHECK: bfc	r5, #3, #17             @ encoding: [0x9f,0x51,0xd3,0xe7]
281@ CHECK: bfclo	r5, #3, #17             @ encoding: [0x9f,0x51,0xd3,0x37]
282
283
284@------------------------------------------------------------------------------
285@ BFI
286@------------------------------------------------------------------------------
287  bfi r5, r2, #3, #17
288  bfine r5, r2, #3, #17
289
290@ CHECK: bfi	r5, r2, #3, #17         @ encoding: [0x92,0x51,0xd3,0xe7]
291@ CHECK: bfine	r5, r2, #3, #17         @ encoding: [0x92,0x51,0xd3,0x17]
292
293
294@------------------------------------------------------------------------------
295@ BIC
296@------------------------------------------------------------------------------
297  bic r10, r1, #0xf
298  bic r10, r1, r6
299  bic r10, r1, r6, lsl #10
300  bic r10, r1, r6, lsr #10
301  bic r10, r1, r6, lsr #10
302  bic r10, r1, r6, asr #10
303  bic r10, r1, r6, ror #10
304  bic r6, r7, r8, lsl r2
305  bic r6, r7, r8, lsr r2
306  bic r6, r7, r8, asr r2
307  bic r6, r7, r8, ror r2
308  bic r10, r1, r6, rrx
309
310  @ destination register is optional
311  bic r1, #0xf
312  bic r10, r1
313  bic r10, r1, lsl #10
314  bic r10, r1, lsr #10
315  bic r10, r1, lsr #10
316  bic r10, r1, asr #10
317  bic r10, r1, ror #10
318  bic r6, r7, lsl r2
319  bic r6, r7, lsr r2
320  bic r6, r7, asr r2
321  bic r6, r7, ror r2
322  bic r10, r1, rrx
323
324@ CHECK: bic	r10, r1, #15            @ encoding: [0x0f,0xa0,0xc1,0xe3]
325@ CHECK: bic	r10, r1, r6             @ encoding: [0x06,0xa0,0xc1,0xe1]
326@ CHECK: bic	r10, r1, r6, lsl #10    @ encoding: [0x06,0xa5,0xc1,0xe1]
327@ CHECK: bic	r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0xc1,0xe1]
328@ CHECK: bic	r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0xc1,0xe1]
329@ CHECK: bic	r10, r1, r6, asr #10    @ encoding: [0x46,0xa5,0xc1,0xe1]
330@ CHECK: bic	r10, r1, r6, ror #10    @ encoding: [0x66,0xa5,0xc1,0xe1]
331@ CHECK: bic	r6, r7, r8, lsl r2      @ encoding: [0x18,0x62,0xc7,0xe1]
332@ CHECK: bic	r6, r7, r8, lsr r2      @ encoding: [0x38,0x62,0xc7,0xe1]
333@ CHECK: bic	r6, r7, r8, asr r2      @ encoding: [0x58,0x62,0xc7,0xe1]
334@ CHECK: bic	r6, r7, r8, ror r2      @ encoding: [0x78,0x62,0xc7,0xe1]
335@ CHECK: bic	r10, r1, r6, rrx        @ encoding: [0x66,0xa0,0xc1,0xe1]
336
337
338@ CHECK: bic	r1, r1, #15             @ encoding: [0x0f,0x10,0xc1,0xe3]
339@ CHECK: bic	r10, r10, r1            @ encoding: [0x01,0xa0,0xca,0xe1]
340@ CHECK: bic	r10, r10, r1, lsl #10   @ encoding: [0x01,0xa5,0xca,0xe1]
341@ CHECK: bic	r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0xca,0xe1]
342@ CHECK: bic	r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0xca,0xe1]
343@ CHECK: bic	r10, r10, r1, asr #10   @ encoding: [0x41,0xa5,0xca,0xe1]
344@ CHECK: bic	r10, r10, r1, ror #10   @ encoding: [0x61,0xa5,0xca,0xe1]
345@ CHECK: bic	r6, r6, r7, lsl r2      @ encoding: [0x17,0x62,0xc6,0xe1]
346@ CHECK: bic	r6, r6, r7, lsr r2      @ encoding: [0x37,0x62,0xc6,0xe1]
347@ CHECK: bic	r6, r6, r7, asr r2      @ encoding: [0x57,0x62,0xc6,0xe1]
348@ CHECK: bic	r6, r6, r7, ror r2      @ encoding: [0x77,0x62,0xc6,0xe1]
349@ CHECK: bic	r10, r10, r1, rrx       @ encoding: [0x61,0xa0,0xca,0xe1]
350
351@------------------------------------------------------------------------------
352@ BKPT
353@------------------------------------------------------------------------------
354  bkpt #10
355  bkpt #65535
356
357@ CHECK: bkpt  #10                      @ encoding: [0x7a,0x00,0x20,0xe1]
358@ CHECK: bkpt  #65535                   @ encoding: [0x7f,0xff,0x2f,0xe1]
359
360@------------------------------------------------------------------------------
361@ BL/BLX (immediate)
362@------------------------------------------------------------------------------
363
364  bl _bar
365  blx _bar
366
367@ CHECK: bl  _bar @ encoding: [A,A,A,0xeb]
368@ CHECK:   @   fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
369@ CHECK: blx	_bar @ encoding: [A,A,A,0xfa]
370           @   fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
371
372@------------------------------------------------------------------------------
373@ BLX (register)
374@------------------------------------------------------------------------------
375  blx r2
376  blxne r2
377
378@ CHECK: blx r2                         @ encoding: [0x32,0xff,0x2f,0xe1]
379@ CHECK: blxne r2                       @ encoding: [0x32,0xff,0x2f,0x11]
380
381@------------------------------------------------------------------------------
382@ BX
383@------------------------------------------------------------------------------
384
385  bx r2
386  bxne r2
387
388@ CHECK: bx	r2                      @ encoding: [0x12,0xff,0x2f,0xe1]
389@ CHECK: bxne	r2                      @ encoding: [0x12,0xff,0x2f,0x11]
390
391@------------------------------------------------------------------------------
392@ BXJ
393@------------------------------------------------------------------------------
394
395  bxj r2
396  bxjne r2
397
398@ CHECK: bxj	r2                      @ encoding: [0x22,0xff,0x2f,0xe1]
399@ CHECK: bxjne	r2                      @ encoding: [0x22,0xff,0x2f,0x11]
400
401
402@------------------------------------------------------------------------------
403@ CDP/CDP2
404@------------------------------------------------------------------------------
405  cdp  p7, #1, c1, c1, c1, #4
406  cdp2  p7, #1, c1, c1, c1, #4
407
408@ CHECK: cdp  p7, #1, c1, c1, c1, #4     @ encoding: [0x81,0x17,0x11,0xee]
409@ CHECK: cdp2  p7, #1, c1, c1, c1, #4    @ encoding: [0x81,0x17,0x11,0xfe]
410
411
412@------------------------------------------------------------------------------
413@ CLREX
414@------------------------------------------------------------------------------
415  clrex
416
417@ CHECK: clrex                           @ encoding: [0x1f,0xf0,0x7f,0xf5]
418
419
420@------------------------------------------------------------------------------
421@ CLZ
422@------------------------------------------------------------------------------
423  clz r1, r2
424  clzeq r1, r2
425
426@ CHECK: clz r1, r2                      @ encoding: [0x12,0x1f,0x6f,0xe1]
427@ CHECK: clzeq r1, r2                    @ encoding: [0x12,0x1f,0x6f,0x01]
428
429@------------------------------------------------------------------------------
430@ CMN
431@------------------------------------------------------------------------------
432  cmn r1, #0xf
433  cmn r1, r6
434  cmn r1, r6, lsl #10
435  cmn r1, r6, lsr #10
436  cmn sp, r6, lsr #10
437  cmn r1, r6, asr #10
438  cmn r1, r6, ror #10
439  cmn r7, r8, lsl r2
440  cmn sp, r8, lsr r2
441  cmn r7, r8, asr r2
442  cmn r7, r8, ror r2
443  cmn r1, r6, rrx
444
445@ CHECK: cmn	r1, #15                 @ encoding: [0x0f,0x00,0x71,0xe3]
446@ CHECK: cmn	r1, r6                  @ encoding: [0x06,0x00,0x71,0xe1]
447@ CHECK: cmn	r1, r6, lsl #10         @ encoding: [0x06,0x05,0x71,0xe1]
448@ CHECK: cmn	r1, r6, lsr #10         @ encoding: [0x26,0x05,0x71,0xe1]
449@ CHECK: cmn	sp, r6, lsr #10         @ encoding: [0x26,0x05,0x7d,0xe1]
450@ CHECK: cmn	r1, r6, asr #10         @ encoding: [0x46,0x05,0x71,0xe1]
451@ CHECK: cmn	r1, r6, ror #10         @ encoding: [0x66,0x05,0x71,0xe1]
452@ CHECK: cmn	r7, r8, lsl r2          @ encoding: [0x18,0x02,0x77,0xe1]
453@ CHECK: cmn	sp, r8, lsr r2          @ encoding: [0x38,0x02,0x7d,0xe1]
454@ CHECK: cmn	r7, r8, asr r2          @ encoding: [0x58,0x02,0x77,0xe1]
455@ CHECK: cmn	r7, r8, ror r2          @ encoding: [0x78,0x02,0x77,0xe1]
456@ CHECK: cmn	r1, r6, rrx             @ encoding: [0x66,0x00,0x71,0xe1]
457
458@------------------------------------------------------------------------------
459@ CMP
460@------------------------------------------------------------------------------
461  cmp r1, #0xf
462  cmp r1, r6
463  cmp r1, r6, lsl #10
464  cmp r1, r6, lsr #10
465  cmp sp, r6, lsr #10
466  cmp r1, r6, asr #10
467  cmp r1, r6, ror #10
468  cmp r7, r8, lsl r2
469  cmp sp, r8, lsr r2
470  cmp r7, r8, asr r2
471  cmp r7, r8, ror r2
472  cmp r1, r6, rrx
473
474@ CHECK: cmp	r1, #15                 @ encoding: [0x0f,0x00,0x51,0xe3]
475@ CHECK: cmp	r1, r6                  @ encoding: [0x06,0x00,0x51,0xe1]
476@ CHECK: cmp	r1, r6, lsl #10         @ encoding: [0x06,0x05,0x51,0xe1]
477@ CHECK: cmp	r1, r6, lsr #10         @ encoding: [0x26,0x05,0x51,0xe1]
478@ CHECK: cmp	sp, r6, lsr #10         @ encoding: [0x26,0x05,0x5d,0xe1]
479@ CHECK: cmp	r1, r6, asr #10         @ encoding: [0x46,0x05,0x51,0xe1]
480@ CHECK: cmp	r1, r6, ror #10         @ encoding: [0x66,0x05,0x51,0xe1]
481@ CHECK: cmp	r7, r8, lsl r2          @ encoding: [0x18,0x02,0x57,0xe1]
482@ CHECK: cmp	sp, r8, lsr r2          @ encoding: [0x38,0x02,0x5d,0xe1]
483@ CHECK: cmp	r7, r8, asr r2          @ encoding: [0x58,0x02,0x57,0xe1]
484@ CHECK: cmp	r7, r8, ror r2          @ encoding: [0x78,0x02,0x57,0xe1]
485@ CHECK: cmp	r1, r6, rrx             @ encoding: [0x66,0x00,0x51,0xe1]
486
487
488@------------------------------------------------------------------------------
489@ CPS
490@------------------------------------------------------------------------------
491        cpsie  aif
492        cps  #15
493        cpsid  if, #10
494
495@ CHECK: cpsie  aif @ encoding: [0xc0,0x01,0x08,0xf1]
496@ CHECK: cps  #15 @ encoding: [0x0f,0x00,0x02,0xf1]
497@ CHECK: cpsid  if, #10 @ encoding: [0xca,0x00,0x0e,0xf1]
498
499
500@------------------------------------------------------------------------------
501@ DBG
502@------------------------------------------------------------------------------
503  dbg #0
504  dbg #5
505  dbg #15
506
507@ CHECK: dbg #0                         @ encoding: [0xf0,0xf0,0x20,0xe3]
508@ CHECK: dbg #5                         @ encoding: [0xf5,0xf0,0x20,0xe3]
509@ CHECK: dbg #15                        @ encoding: [0xff,0xf0,0x20,0xe3]
510
511
512@------------------------------------------------------------------------------
513@ DMB
514@------------------------------------------------------------------------------
515  dmb sy
516  dmb st
517  dmb sh
518  dmb ish
519  dmb shst
520  dmb ishst
521  dmb un
522  dmb nsh
523  dmb unst
524  dmb nshst
525  dmb osh
526  dmb oshst
527  dmb
528
529@ CHECK: dmb	sy                      @ encoding: [0x5f,0xf0,0x7f,0xf5]
530@ CHECK: dmb	st                      @ encoding: [0x5e,0xf0,0x7f,0xf5]
531@ CHECK: dmb	ish                     @ encoding: [0x5b,0xf0,0x7f,0xf5]
532@ CHECK: dmb	ish                     @ encoding: [0x5b,0xf0,0x7f,0xf5]
533@ CHECK: dmb	ishst                   @ encoding: [0x5a,0xf0,0x7f,0xf5]
534@ CHECK: dmb	ishst                   @ encoding: [0x5a,0xf0,0x7f,0xf5]
535@ CHECK: dmb	nsh                     @ encoding: [0x57,0xf0,0x7f,0xf5]
536@ CHECK: dmb	nsh                     @ encoding: [0x57,0xf0,0x7f,0xf5]
537@ CHECK: dmb	nshst                   @ encoding: [0x56,0xf0,0x7f,0xf5]
538@ CHECK: dmb	nshst                   @ encoding: [0x56,0xf0,0x7f,0xf5]
539@ CHECK: dmb	osh                     @ encoding: [0x53,0xf0,0x7f,0xf5]
540@ CHECK: dmb	oshst                   @ encoding: [0x52,0xf0,0x7f,0xf5]
541@ CHECK: dmb	sy                      @ encoding: [0x5f,0xf0,0x7f,0xf5]
542
543@------------------------------------------------------------------------------
544@ DSB
545@------------------------------------------------------------------------------
546  dsb sy
547  dsb st
548  dsb sh
549  dsb ish
550  dsb shst
551  dsb ishst
552  dsb un
553  dsb nsh
554  dsb unst
555  dsb nshst
556  dsb osh
557  dsb oshst
558  dsb
559
560@ CHECK: dsb	sy                      @ encoding: [0x4f,0xf0,0x7f,0xf5]
561@ CHECK: dsb	st                      @ encoding: [0x4e,0xf0,0x7f,0xf5]
562@ CHECK: dsb	ish                     @ encoding: [0x4b,0xf0,0x7f,0xf5]
563@ CHECK: dsb	ish                     @ encoding: [0x4b,0xf0,0x7f,0xf5]
564@ CHECK: dsb	ishst                   @ encoding: [0x4a,0xf0,0x7f,0xf5]
565@ CHECK: dsb	ishst                   @ encoding: [0x4a,0xf0,0x7f,0xf5]
566@ CHECK: dsb	nsh                     @ encoding: [0x47,0xf0,0x7f,0xf5]
567@ CHECK: dsb	nsh                     @ encoding: [0x47,0xf0,0x7f,0xf5]
568@ CHECK: dsb	nshst                   @ encoding: [0x46,0xf0,0x7f,0xf5]
569@ CHECK: dsb	nshst                   @ encoding: [0x46,0xf0,0x7f,0xf5]
570@ CHECK: dsb	osh                     @ encoding: [0x43,0xf0,0x7f,0xf5]
571@ CHECK: dsb	oshst                   @ encoding: [0x42,0xf0,0x7f,0xf5]
572@ CHECK: dsb	sy                      @ encoding: [0x4f,0xf0,0x7f,0xf5]
573
574@------------------------------------------------------------------------------
575@ EOR
576@------------------------------------------------------------------------------
577  eor r4, r5, #0xf000
578  eor r4, r5, r6
579  eor r4, r5, r6, lsl #5
580  eor r4, r5, r6, lsr #5
581  eor r4, r5, r6, lsr #5
582  eor r4, r5, r6, asr #5
583  eor r4, r5, r6, ror #5
584  eor r6, r7, r8, lsl r9
585  eor r6, r7, r8, lsr r9
586  eor r6, r7, r8, asr r9
587  eor r6, r7, r8, ror r9
588  eor r4, r5, r6, rrx
589
590  @ destination register is optional
591  eor r5, #0xf000
592  eor r4, r5
593  eor r4, r5, lsl #5
594  eor r4, r5, lsr #5
595  eor r4, r5, lsr #5
596  eor r4, r5, asr #5
597  eor r4, r5, ror #5
598  eor r6, r7, lsl r9
599  eor r6, r7, lsr r9
600  eor r6, r7, asr r9
601  eor r6, r7, ror r9
602  eor r4, r5, rrx
603
604@ CHECK: eor	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x25,0xe2]
605@ CHECK: eor	r4, r5, r6              @ encoding: [0x06,0x40,0x25,0xe0]
606@ CHECK: eor	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x25,0xe0]
607@ CHECK: eor	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x25,0xe0]
608@ CHECK: eor	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x25,0xe0]
609@ CHECK: eor	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x25,0xe0]
610@ CHECK: eor	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x25,0xe0]
611@ CHECK: eor	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x27,0xe0]
612@ CHECK: eor	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x27,0xe0]
613@ CHECK: eor	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x27,0xe0]
614@ CHECK: eor	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x27,0xe0]
615@ CHECK: eor	r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x25,0xe0]
616
617
618@ CHECK: eor	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x25,0xe2]
619@ CHECK: eor	r4, r4, r5              @ encoding: [0x05,0x40,0x24,0xe0]
620@ CHECK: eor	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x24,0xe0]
621@ CHECK: eor	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x24,0xe0]
622@ CHECK: eor	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x24,0xe0]
623@ CHECK: eor	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x24,0xe0]
624@ CHECK: eor	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x24,0xe0]
625@ CHECK: eor	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x26,0xe0]
626@ CHECK: eor	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x26,0xe0]
627@ CHECK: eor	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x26,0xe0]
628@ CHECK: eor	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x26,0xe0]
629@ CHECK: eor	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x24,0xe0]
630
631
632@------------------------------------------------------------------------------
633@ ISB
634@------------------------------------------------------------------------------
635        isb sy
636        isb
637
638@ CHECK: isb sy                         @ encoding: [0x6f,0xf0,0x7f,0xf5]
639@ CHECK: isb sy                         @ encoding: [0x6f,0xf0,0x7f,0xf5]
640
641
642
643@------------------------------------------------------------------------------
644@ LDM*
645@------------------------------------------------------------------------------
646        ldm       r2, {r1,r3-r6,sp}
647        ldmia     r2, {r1,r3-r6,sp}
648        ldmib     r2, {r1,r3-r6,sp}
649        ldmda     r2, {r1,r3-r6,sp}
650        ldmdb     r2, {r1,r3-r6,sp}
651        ldmfd     r2, {r1,r3-r6,sp}
652
653        @ with update
654        ldm       r2!, {r1,r3-r6,sp}
655        ldmib     r2!, {r1,r3-r6,sp}
656        ldmda     r2!, {r1,r3-r6,sp}
657        ldmdb     r2!, {r1,r3-r6,sp}
658
659@ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
660@ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
661@ CHECK: ldmib r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe9]
662@ CHECK: ldmda r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x12,0xe8]
663@ CHECK: ldmdb r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x12,0xe9]
664@ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
665
666@ CHECK: ldm   r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xb2,0xe8]
667@ CHECK: ldmib r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xb2,0xe9]
668@ CHECK: ldmda r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x32,0xe8]
669@ CHECK: ldmdb r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x32,0xe9]
670
671
672@------------------------------------------------------------------------------
673@ LDREX/LDREXB/LDREXH/LDREXD
674@------------------------------------------------------------------------------
675        ldrexb  r3, [r4]
676        ldrexh  r2, [r5]
677        ldrex  r1, [r7]
678        ldrexd  r6, r7, [r8]
679
680@ CHECK: ldrexb	r3, [r4]                @ encoding: [0x9f,0x3f,0xd4,0xe1]
681@ CHECK: ldrexh	r2, [r5]                @ encoding: [0x9f,0x2f,0xf5,0xe1]
682@ CHECK: ldrex	r1, [r7]                @ encoding: [0x9f,0x1f,0x97,0xe1]
683@ CHECK: ldrexd	r6, r7, [r8]            @ encoding: [0x9f,0x6f,0xb8,0xe1]
684
685
686@------------------------------------------------------------------------------
687@ FIXME: LSL
688@------------------------------------------------------------------------------
689@------------------------------------------------------------------------------
690@ FIXME: LSR
691@------------------------------------------------------------------------------
692
693@------------------------------------------------------------------------------
694@ MCR/MCR2
695@------------------------------------------------------------------------------
696        mcr  p7, #1, r5, c1, c1, #4
697        mcr2  p7, #1, r5, c1, c1, #4
698
699@ CHECK: mcr  p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xee]
700@ CHECK: mcr2  p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xfe]
701
702@------------------------------------------------------------------------------
703@ MCRR/MCRR2
704@------------------------------------------------------------------------------
705        mcrr  p7, #15, r5, r4, c1
706        mcrr2  p7, #15, r5, r4, c1
707
708@ CHECK: mcrr  p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xec]
709@ CHECK: mcrr2  p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xfc]
710
711
712@------------------------------------------------------------------------------
713@ MLA
714@------------------------------------------------------------------------------
715        mla  r1,r2,r3,r4
716        mlas r1,r2,r3,r4
717        mlane  r1,r2,r3,r4
718        mlasne r1,r2,r3,r4
719
720@ CHECK: mla 	r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0xe0]
721@ CHECK: mlas	r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0xe0]
722@ CHECK: mlane 	r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0x10]
723@ CHECK: mlasne	r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0x10]
724
725@------------------------------------------------------------------------------
726@ MLS
727@------------------------------------------------------------------------------
728        mls  r2,r5,r6,r3
729        mlsne  r2,r5,r6,r3
730
731@ CHECK: mls	r2, r5, r6, r3          @ encoding: [0x95,0x36,0x62,0xe0]
732@ CHECK: mlsne	r2, r5, r6, r3          @ encoding: [0x95,0x36,0x62,0x10]
733
734@------------------------------------------------------------------------------
735@ MOV (immediate)
736@------------------------------------------------------------------------------
737    mov r3, #7
738    mov r4, #0xff0
739    mov r5, #0xff0000
740    mov r6, #0xffff
741    movw r9, #0xffff
742    movs r3, #7
743    moveq r4, #0xff0
744    movseq r5, #0xff0000
745
746@ CHECK: mov	r3, #7                  @ encoding: [0x07,0x30,0xa0,0xe3]
747@ CHECK: mov	r4, #4080               @ encoding: [0xff,0x4e,0xa0,0xe3]
748@ CHECK: mov	r5, #16711680           @ encoding: [0xff,0x58,0xa0,0xe3]
749@ CHECK: movw	r6, #65535              @ encoding: [0xff,0x6f,0x0f,0xe3]
750@ CHECK: movw	r9, #65535              @ encoding: [0xff,0x9f,0x0f,0xe3]
751@ CHECK: movs	r3, #7                  @ encoding: [0x07,0x30,0xb0,0xe3]
752@ CHECK: moveq	r4, #4080               @ encoding: [0xff,0x4e,0xa0,0x03]
753@ CHECK: movseq	r5, #16711680           @ encoding: [0xff,0x58,0xb0,0x03]
754
755@------------------------------------------------------------------------------
756@ MOV (register)
757@------------------------------------------------------------------------------
758        mov r2, r3
759        movs r2, r3
760        moveq r2, r3
761        movseq r2, r3
762
763@ CHECK: mov	r2, r3                  @ encoding: [0x03,0x20,0xa0,0xe1]
764@ CHECK: movs	r2, r3                  @ encoding: [0x03,0x20,0xb0,0xe1]
765@ CHECK: moveq	r2, r3                  @ encoding: [0x03,0x20,0xa0,0x01]
766@ CHECK: movseq	r2, r3                  @ encoding: [0x03,0x20,0xb0,0x01]
767
768@------------------------------------------------------------------------------
769@ MOVT
770@------------------------------------------------------------------------------
771    movt r3, #7
772    movt r6, #0xffff
773    movteq r4, #0xff0
774
775@ CHECK: movt	r3, #7                  @ encoding: [0x07,0x30,0x40,0xe3]
776@ CHECK: movt	r6, #65535              @ encoding: [0xff,0x6f,0x4f,0xe3]
777@ CHECK: movteq	r4, #4080               @ encoding: [0xf0,0x4f,0x40,0x03]
778
779
780@------------------------------------------------------------------------------
781@ MRC/MRC2
782@------------------------------------------------------------------------------
783        mrc  p14, #0, r1, c1, c2, #4
784        mrc2  p14, #0, r1, c1, c2, #4
785
786@ CHECK: mrc  p14, #0, r1, c1, c2, #4   @ encoding: [0x92,0x1e,0x11,0xee]
787@ CHECK: mrc2  p14, #0, r1, c1, c2, #4  @ encoding: [0x92,0x1e,0x11,0xfe]
788
789@------------------------------------------------------------------------------
790@ MRRC/MRRC2
791@------------------------------------------------------------------------------
792        mrrc  p7, #1, r5, r4, c1
793        mrrc2  p7, #1, r5, r4, c1
794
795@ CHECK: mrrc  p7, #1, r5, r4, c1       @ encoding: [0x11,0x57,0x54,0xec]
796@ CHECK: mrrc2  p7, #1, r5, r4, c1      @ encoding: [0x11,0x57,0x54,0xfc]
797
798
799@------------------------------------------------------------------------------
800@ MRS
801@------------------------------------------------------------------------------
802        mrs  r8, apsr
803        mrs  r8, cpsr
804        mrs  r8, spsr
805@ CHECK: mrs  r8, apsr @ encoding: [0x00,0x80,0x0f,0xe1]
806@ CHECK: mrs  r8, apsr @ encoding: [0x00,0x80,0x0f,0xe1]
807@ CHECK: mrs  r8, spsr @ encoding: [0x00,0x80,0x4f,0xe1]
808
809
810
811@------------------------------------------------------------------------------
812@ MSR
813@------------------------------------------------------------------------------
814
815        msr  apsr, #5
816        msr  apsr_g, #5
817        msr  apsr_nzcvq, #5
818        msr  APSR_nzcvq, #5
819        msr  apsr_nzcvqg, #5
820        msr  cpsr_fc, #5
821        msr  cpsr_c, #5
822        msr  cpsr_x, #5
823        msr  cpsr_fc, #5
824        msr  cpsr_all, #5
825        msr  cpsr_fsx, #5
826        msr  spsr_fc, #5
827        msr  SPSR_fsxc, #5
828        msr  cpsr_fsxc, #5
829
830@ CHECK: msr	CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
831@ CHECK: msr	APSR_g, #5              @ encoding: [0x05,0xf0,0x24,0xe3]
832@ CHECK: msr	APSR_nzcvq, #5          @ encoding: [0x05,0xf0,0x28,0xe3]
833@ CHECK: msr	APSR_nzcvq, #5          @ encoding: [0x05,0xf0,0x28,0xe3]
834@ CHECK: msr	APSR_nzcvqg, #5         @ encoding: [0x05,0xf0,0x2c,0xe3]
835@ CHECK: msr	CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
836@ CHECK: msr	CPSR_c, #5              @ encoding: [0x05,0xf0,0x21,0xe3]
837@ CHECK: msr	CPSR_x, #5              @ encoding: [0x05,0xf0,0x22,0xe3]
838@ CHECK: msr	CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
839@ CHECK: msr	CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
840@ CHECK: msr	CPSR_fsx, #5            @ encoding: [0x05,0xf0,0x2e,0xe3]
841@ CHECK: msr	SPSR_fc, #5             @ encoding: [0x05,0xf0,0x69,0xe3]
842@ CHECK: msr	SPSR_fsxc, #5           @ encoding: [0x05,0xf0,0x6f,0xe3]
843@ CHECK: msr	CPSR_fsxc, #5           @ encoding: [0x05,0xf0,0x2f,0xe3]
844
845        msr  apsr, r0
846        msr  apsr_g, r0
847        msr  apsr_nzcvq, r0
848        msr  APSR_nzcvq, r0
849        msr  apsr_nzcvqg, r0
850        msr  cpsr_fc, r0
851        msr  cpsr_c, r0
852        msr  cpsr_x, r0
853        msr  cpsr_fc, r0
854        msr  cpsr_all, r0
855        msr  cpsr_fsx, r0
856        msr  spsr_fc, r0
857        msr  SPSR_fsxc, r0
858        msr  cpsr_fsxc, r0
859
860@ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
861@ CHECK: msr  APSR_g, r0 @ encoding: [0x00,0xf0,0x24,0xe1]
862@ CHECK: msr  APSR_nzcvq, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
863@ CHECK: msr  APSR_nzcvq, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
864@ CHECK: msr  APSR_nzcvqg, r0 @ encoding: [0x00,0xf0,0x2c,0xe1]
865@ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
866@ CHECK: msr  CPSR_c, r0 @ encoding: [0x00,0xf0,0x21,0xe1]
867@ CHECK: msr  CPSR_x, r0 @ encoding: [0x00,0xf0,0x22,0xe1]
868@ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
869@ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
870@ CHECK: msr  CPSR_fsx, r0 @ encoding: [0x00,0xf0,0x2e,0xe1]
871@ CHECK: msr  SPSR_fc, r0 @ encoding: [0x00,0xf0,0x69,0xe1]
872@ CHECK: msr  SPSR_fsxc, r0 @ encoding: [0x00,0xf0,0x6f,0xe1]
873@ CHECK: msr  CPSR_fsxc, r0 @ encoding: [0x00,0xf0,0x2f,0xe1]
874
875@------------------------------------------------------------------------------
876@ MUL
877@------------------------------------------------------------------------------
878
879  mul r5, r6, r7
880  muls r5, r6, r7
881  mulgt r5, r6, r7
882  mulsle r5, r6, r7
883
884@ CHECK: mul	r5, r6, r7              @ encoding: [0x96,0x07,0x05,0xe0]
885@ CHECK: muls	r5, r6, r7              @ encoding: [0x96,0x07,0x15,0xe0]
886@ CHECK: mulgt	r5, r6, r7              @ encoding: [0x96,0x07,0x05,0xc0]
887@ CHECK: mulsle	r5, r6, r7              @ encoding: [0x96,0x07,0x15,0xd0]
888
889
890@------------------------------------------------------------------------------
891@ MVN (immediate)
892@------------------------------------------------------------------------------
893    mvn r3, #7
894    mvn r4, #0xff0
895    mvn r5, #0xff0000
896    mvns r3, #7
897    mvneq r4, #0xff0
898    mvnseq r5, #0xff0000
899
900@ CHECK: mvn	r3, #7                  @ encoding: [0x07,0x30,0xe0,0xe3]
901@ CHECK: mvn	r4, #4080               @ encoding: [0xff,0x4e,0xe0,0xe3]
902@ CHECK: mvn	r5, #16711680           @ encoding: [0xff,0x58,0xe0,0xe3]
903@ CHECK: mvns	r3, #7                  @ encoding: [0x07,0x30,0xf0,0xe3]
904@ CHECK: mvneq	r4, #4080               @ encoding: [0xff,0x4e,0xe0,0x03]
905@ CHECK: mvnseq	r5, #16711680           @ encoding: [0xff,0x58,0xf0,0x03]
906
907
908@------------------------------------------------------------------------------
909@ MVN (register)
910@------------------------------------------------------------------------------
911        mvn r2, r3
912        mvns r2, r3
913        mvn r5, r6, lsl #19
914        mvn r5, r6, lsr #9
915        mvn r5, r6, asr #4
916        mvn r5, r6, ror #6
917        mvn r5, r6, rrx
918        mvneq r2, r3
919        mvnseq r2, r3, lsl #10
920
921@ CHECK: mvn	r2, r3                  @ encoding: [0x03,0x20,0xe0,0xe1]
922@ CHECK: mvns	r2, r3                  @ encoding: [0x03,0x20,0xf0,0xe1]
923@ CHECK: mvn	r5, r6, lsl #19         @ encoding: [0x86,0x59,0xe0,0xe1]
924@ CHECK: mvn	r5, r6, lsr #9          @ encoding: [0xa6,0x54,0xe0,0xe1]
925@ CHECK: mvn	r5, r6, asr #4          @ encoding: [0x46,0x52,0xe0,0xe1]
926@ CHECK: mvn	r5, r6, ror #6          @ encoding: [0x66,0x53,0xe0,0xe1]
927@ CHECK: mvn	r5, r6, rrx             @ encoding: [0x66,0x50,0xe0,0xe1]
928@ CHECK: mvneq	r2, r3                  @ encoding: [0x03,0x20,0xe0,0x01]
929@ CHECK: mvnseq	r2, r3, lsl #10         @ encoding: [0x03,0x25,0xf0,0x01]
930
931
932@------------------------------------------------------------------------------
933@ MVN (shifted register)
934@------------------------------------------------------------------------------
935        mvn r5, r6, lsl r7
936        mvns r5, r6, lsr r7
937        mvngt r5, r6, asr r7
938        mvnslt r5, r6, ror r7
939
940@ CHECK: mvn	r5, r6, lsl r7          @ encoding: [0x16,0x57,0xe0,0xe1]
941@ CHECK: mvns	r5, r6, lsr r7          @ encoding: [0x36,0x57,0xf0,0xe1]
942@ CHECK: mvngt	r5, r6, asr r7          @ encoding: [0x56,0x57,0xe0,0xc1]
943@ CHECK: mvnslt	r5, r6, ror r7          @ encoding: [0x76,0x57,0xf0,0xb1]
944
945@------------------------------------------------------------------------------
946@ NOP
947@------------------------------------------------------------------------------
948        nop
949        nopgt
950
951@ CHECK: nop @ encoding: [0x00,0xf0,0x20,0xe3]
952@ CHECK: nopgt @ encoding: [0x00,0xf0,0x20,0xc3]
953
954
955@------------------------------------------------------------------------------
956@ ORR
957@------------------------------------------------------------------------------
958        orr r4, r5, #0xf000
959        orr r4, r5, r6
960        orr r4, r5, r6, lsl #5
961        orr r4, r5, r6, lsr #5
962        orr r4, r5, r6, lsr #5
963        orr r4, r5, r6, asr #5
964        orr r4, r5, r6, ror #5
965        orr r6, r7, r8, lsl r9
966        orr r6, r7, r8, lsr r9
967        orr r6, r7, r8, asr r9
968        orr r6, r7, r8, ror r9
969        orr r4, r5, r6, rrx
970
971        @ destination register is optional
972        orr r5, #0xf000
973        orr r4, r5
974        orr r4, r5, lsl #5
975        orr r4, r5, lsr #5
976        orr r4, r5, lsr #5
977        orr r4, r5, asr #5
978        orr r4, r5, ror #5
979        orr r6, r7, lsl r9
980        orr r6, r7, lsr r9
981        orr r6, r7, asr r9
982        orr r6, r7, ror r9
983        orr r4, r5, rrx
984
985@ CHECK: orr	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x85,0xe3]
986@ CHECK: orr	r4, r5, r6              @ encoding: [0x06,0x40,0x85,0xe1]
987@ CHECK: orr	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x85,0xe1]
988@ CHECK: orr	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe1]
989@ CHECK: orr	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe1]
990@ CHECK: orr	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x85,0xe1]
991@ CHECK: orr	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x85,0xe1]
992@ CHECK: orr	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x87,0xe1]
993@ CHECK: orr	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x87,0xe1]
994@ CHECK: orr	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x87,0xe1]
995@ CHECK: orr	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0xe1]
996@ CHECK: orr	r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x85,0xe1]
997
998@ CHECK: orr	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0xe3]
999@ CHECK: orr	r4, r4, r5              @ encoding: [0x05,0x40,0x84,0xe1]
1000@ CHECK: orr	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x84,0xe1]
1001@ CHECK: orr	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe1]
1002@ CHECK: orr	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe1]
1003@ CHECK: orr	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x84,0xe1]
1004@ CHECK: orr	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x84,0xe1]
1005@ CHECK: orr	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x86,0xe1]
1006@ CHECK: orr	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x86,0xe1]
1007@ CHECK: orr	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x86,0xe1]
1008@ CHECK: orr	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x86,0xe1]
1009@ CHECK: orr	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x84,0xe1]
1010
1011        orrseq r4, r5, #0xf000
1012        orrne r4, r5, r6
1013        orrseq r4, r5, r6, lsl #5
1014        orrlo r6, r7, r8, ror r9
1015        orrshi r4, r5, r6, rrx
1016        orrcs r5, #0xf000
1017        orrseq r4, r5
1018        orrne r6, r7, asr r9
1019        orrslt r6, r7, ror r9
1020        orrsgt r4, r5, rrx
1021
1022@ CHECK: orrseq	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x95,0x03]
1023@ CHECK: orrne	r4, r5, r6              @ encoding: [0x06,0x40,0x85,0x11]
1024@ CHECK: orrseq	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x95,0x01]
1025@ CHECK: orrlo	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0x31]
1026@ CHECK: orrshi	r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x95,0x81]
1027@ CHECK: orrhs	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0x23]
1028@ CHECK: orrseq	r4, r4, r5              @ encoding: [0x05,0x40,0x94,0x01]
1029@ CHECK: orrne	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x86,0x11]
1030@ CHECK: orrslt	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x96,0xb1]
1031@ CHECK: orrsgt	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x94,0xc1]
1032
1033@------------------------------------------------------------------------------
1034@ PKH
1035@------------------------------------------------------------------------------
1036        pkhbt r2, r2, r3
1037        pkhbt r2, r2, r3, lsl #31
1038        pkhbt r2, r2, r3, lsl #0
1039        pkhbt r2, r2, r3, lsl #15
1040
1041        pkhtb r2, r2, r3
1042        pkhtb r2, r2, r3, asr #31
1043        pkhtb r2, r2, r3, asr #15
1044
1045@ CHECK: pkhbt	r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
1046@ CHECK: pkhbt	r2, r2, r3, lsl #31     @ encoding: [0x93,0x2f,0x82,0xe6]
1047@ CHECK: pkhbt	r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
1048@ CHECK: pkhbt	r2, r2, r3, lsl #15     @ encoding: [0x93,0x27,0x82,0xe6]
1049
1050@ CHECK: pkhbt	r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
1051@ CHECK: pkhtb	r2, r2, r3, asr #31     @ encoding: [0xd3,0x2f,0x82,0xe6]
1052@ CHECK: pkhtb	r2, r2, r3, asr #15     @ encoding: [0xd3,0x27,0x82,0xe6]
1053
1054@------------------------------------------------------------------------------
1055@ FIXME: PLD
1056@------------------------------------------------------------------------------
1057@------------------------------------------------------------------------------
1058@ FIXME: PLI
1059@------------------------------------------------------------------------------
1060
1061
1062@------------------------------------------------------------------------------
1063@ POP
1064@------------------------------------------------------------------------------
1065        pop {r7}
1066        pop {r7, r8, r9, r10}
1067
1068@ CHECK: pop	{r7}                    @ encoding: [0x04,0x70,0x9d,0xe4]
1069@ CHECK: pop	{r7, r8, r9, r10}       @ encoding: [0x80,0x07,0xbd,0xe8]
1070
1071
1072@------------------------------------------------------------------------------
1073@ PUSH
1074@------------------------------------------------------------------------------
1075        push {r7}
1076        push {r7, r8, r9, r10}
1077
1078@ CHECK: push	{r7}                    @ encoding: [0x04,0x70,0x2d,0xe5]
1079@ CHECK: push	{r7, r8, r9, r10}       @ encoding: [0x80,0x07,0x2d,0xe9]
1080
1081
1082@------------------------------------------------------------------------------
1083@ QADD/QADD16/QADD8
1084@------------------------------------------------------------------------------
1085        qadd r1, r2, r3
1086        qaddne r1, r2, r3
1087        qadd16 r1, r2, r3
1088        qadd16gt r1, r2, r3
1089        qadd8 r1, r2, r3
1090        qadd8le r1, r2, r3
1091
1092@ CHECK: qadd	r1, r2, r3              @ encoding: [0x52,0x10,0x03,0xe1]
1093@ CHECK: qaddne	r1, r2, r3              @ encoding: [0x52,0x10,0x03,0x11]
1094@ CHECK: qadd16	r1, r2, r3              @ encoding: [0x13,0x1f,0x22,0xe6]
1095@ CHECK: qadd16gt	r1, r2, r3      @ encoding: [0x13,0x1f,0x22,0xc6]
1096@ CHECK: qadd8	r1, r2, r3              @ encoding: [0x93,0x1f,0x22,0xe6]
1097@ CHECK: qadd8le r1, r2, r3             @ encoding: [0x93,0x1f,0x22,0xd6]
1098
1099
1100@------------------------------------------------------------------------------
1101@ QDADD/QDSUB
1102@------------------------------------------------------------------------------
1103        qdadd r6, r7, r8
1104        qdaddhi r6, r7, r8
1105        qdsub r6, r7, r8
1106        qdsubhi r6, r7, r8
1107
1108@ CHECK: qdadd	r6, r7, r8              @ encoding: [0x57,0x60,0x48,0xe1]
1109@ CHECK: qdaddhi r6, r7, r8             @ encoding: [0x57,0x60,0x48,0x81]
1110@ CHECK: qdsub	r6, r7, r8              @ encoding: [0x57,0x60,0x68,0xe1]
1111@ CHECK: qdsubhi r6, r7, r8             @ encoding: [0x57,0x60,0x68,0x81]
1112
1113
1114@------------------------------------------------------------------------------
1115@ QSAX
1116@------------------------------------------------------------------------------
1117        qsax r9, r12, r0
1118        qsaxeq r9, r12, r0
1119
1120@ CHECK: qsax	r9, r12, r0             @ encoding: [0x50,0x9f,0x2c,0xe6]
1121@ CHECK: qsaxeq	r9, r12, r0             @ encoding: [0x50,0x9f,0x2c,0x06]
1122
1123
1124@------------------------------------------------------------------------------
1125@ QSUB/QSUB16/QSUB8
1126@------------------------------------------------------------------------------
1127        qsub r1, r2, r3
1128        qsubne r1, r2, r3
1129        qsub16 r1, r2, r3
1130        qsub16gt r1, r2, r3
1131        qsub8 r1, r2, r3
1132        qsub8le r1, r2, r3
1133
1134@ CHECK: qsub	r1, r2, r3              @ encoding: [0x52,0x10,0x23,0xe1]
1135@ CHECK: qsubne	r1, r2, r3              @ encoding: [0x52,0x10,0x23,0x11]
1136@ CHECK: qsub16	r1, r2, r3              @ encoding: [0x73,0x1f,0x22,0xe6]
1137@ CHECK: qsub16gt	r1, r2, r3      @ encoding: [0x73,0x1f,0x22,0xc6]
1138@ CHECK: qsub8	r1, r2, r3              @ encoding: [0xf3,0x1f,0x22,0xe6]
1139@ CHECK: qsub8le r1, r2, r3             @ encoding: [0xf3,0x1f,0x22,0xd6]
1140
1141
1142@------------------------------------------------------------------------------
1143@ RBIT
1144@------------------------------------------------------------------------------
1145        rbit r1, r2
1146        rbitne r1, r2
1147
1148@ CHECK: rbit	r1, r2                  @ encoding: [0x32,0x1f,0xff,0xe6]
1149@ CHECK: rbitne	r1, r2                  @ encoding: [0x32,0x1f,0xff,0x16]
1150
1151
1152@------------------------------------------------------------------------------
1153@ REV/REV16/REVSH
1154@------------------------------------------------------------------------------
1155        rev r1, r9
1156        revne r1, r5
1157        rev16 r8, r3
1158        rev16ne r12, r4
1159        revsh r4, r9
1160        revshne r9, r1
1161
1162@ CHECK: rev	r1, r9                  @ encoding: [0x39,0x1f,0xbf,0xe6]
1163@ CHECK: revne	r1, r5                  @ encoding: [0x35,0x1f,0xbf,0x16]
1164@ CHECK: rev16	r8, r3                  @ encoding: [0xb3,0x8f,0xbf,0xe6]
1165@ CHECK: rev16ne r12, r4                @ encoding: [0xb4,0xcf,0xbf,0x16]
1166@ CHECK: revsh	r4, r9                  @ encoding: [0xb9,0x4f,0xff,0xe6]
1167@ CHECK: revshne r9, r1                 @ encoding: [0xb1,0x9f,0xff,0x16]
1168
1169
1170@------------------------------------------------------------------------------
1171@ RFE
1172@------------------------------------------------------------------------------
1173        rfeda r2
1174        rfedb r3
1175        rfeia r5
1176        rfeib r6
1177
1178        rfeda r4!
1179        rfedb r7!
1180        rfeia r9!
1181        rfeib r8!
1182
1183        rfefa r2
1184        rfeea r3
1185        rfefd r5
1186        rfeed r6
1187
1188        rfefa r4!
1189        rfeea r7!
1190        rfefd r9!
1191        rfeed r8!
1192
1193        rfe r1
1194        rfe r1!
1195
1196@ CHECK: rfeda	r2                      @ encoding: [0x00,0x0a,0x12,0xf8]
1197@ CHECK: rfedb	r3                      @ encoding: [0x00,0x0a,0x13,0xf9]
1198@ CHECK: rfeia	r5                      @ encoding: [0x00,0x0a,0x95,0xf8]
1199@ CHECK: rfeib	r6                      @ encoding: [0x00,0x0a,0x96,0xf9]
1200
1201@ CHECK: rfeda	r4!                     @ encoding: [0x00,0x0a,0x34,0xf8]
1202@ CHECK: rfedb	r7!                     @ encoding: [0x00,0x0a,0x37,0xf9]
1203@ CHECK: rfeia	r9!                     @ encoding: [0x00,0x0a,0xb9,0xf8]
1204@ CHECK: rfeib	r8!                     @ encoding: [0x00,0x0a,0xb8,0xf9]
1205
1206@ CHECK: rfeda	r2                      @ encoding: [0x00,0x0a,0x12,0xf8]
1207@ CHECK: rfedb	r3                      @ encoding: [0x00,0x0a,0x13,0xf9]
1208@ CHECK: rfeia	r5                      @ encoding: [0x00,0x0a,0x95,0xf8]
1209@ CHECK: rfeib	r6                      @ encoding: [0x00,0x0a,0x96,0xf9]
1210
1211@ CHECK: rfeda	r4!                     @ encoding: [0x00,0x0a,0x34,0xf8]
1212@ CHECK: rfedb	r7!                     @ encoding: [0x00,0x0a,0x37,0xf9]
1213@ CHECK: rfeia	r9!                     @ encoding: [0x00,0x0a,0xb9,0xf8]
1214@ CHECK: rfeib	r8!                     @ encoding: [0x00,0x0a,0xb8,0xf9]
1215
1216@ CHECK: rfeia	r1                      @ encoding: [0x00,0x0a,0x91,0xf8]
1217@ CHECK: rfeia	r1!                     @ encoding: [0x00,0x0a,0xb1,0xf8]
1218
1219
1220@------------------------------------------------------------------------------
1221@ RSB
1222@------------------------------------------------------------------------------
1223        rsb r4, r5, #0xf000
1224        rsb r4, r5, r6
1225        rsb r4, r5, r6, lsl #5
1226        rsblo r4, r5, r6, lsr #5
1227        rsb r4, r5, r6, lsr #5
1228        rsb r4, r5, r6, asr #5
1229        rsb r4, r5, r6, ror #5
1230        rsb r6, r7, r8, lsl r9
1231        rsb r6, r7, r8, lsr r9
1232        rsb r6, r7, r8, asr r9
1233        rsble r6, r7, r8, ror r9
1234        rsb r4, r5, r6, rrx
1235
1236        @ destination register is optional
1237        rsb r5, #0xf000
1238        rsb r4, r5
1239        rsb r4, r5, lsl #5
1240        rsb r4, r5, lsr #5
1241        rsbne r4, r5, lsr #5
1242        rsb r4, r5, asr #5
1243        rsb r4, r5, ror #5
1244        rsbgt r6, r7, lsl r9
1245        rsb r6, r7, lsr r9
1246        rsb r6, r7, asr r9
1247        rsb r6, r7, ror r9
1248        rsb r4, r5, rrx
1249
1250@ CHECK: rsb	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x65,0xe2]
1251@ CHECK: rsb	r4, r5, r6              @ encoding: [0x06,0x40,0x65,0xe0]
1252@ CHECK: rsb	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x65,0xe0]
1253@ CHECK: rsblo	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x65,0x30]
1254@ CHECK: rsb	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x65,0xe0]
1255@ CHECK: rsb	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x65,0xe0]
1256@ CHECK: rsb	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x65,0xe0]
1257@ CHECK: rsb	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x67,0xe0]
1258@ CHECK: rsb	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x67,0xe0]
1259@ CHECK: rsb	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x67,0xe0]
1260@ CHECK: rsble	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x67,0xd0]
1261@ CHECK: rsb	r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x65,0xe0]
1262
1263@ CHECK: rsb	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x65,0xe2]
1264@ CHECK: rsb	r4, r4, r5              @ encoding: [0x05,0x40,0x64,0xe0]
1265@ CHECK: rsb	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x64,0xe0]
1266@ CHECK: rsb	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x64,0xe0]
1267@ CHECK: rsbne	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x64,0x10]
1268@ CHECK: rsb	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x64,0xe0]
1269@ CHECK: rsb	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x64,0xe0]
1270@ CHECK: rsbgt	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x66,0xc0]
1271@ CHECK: rsb	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x66,0xe0]
1272@ CHECK: rsb	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x66,0xe0]
1273@ CHECK: rsb	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x66,0xe0]
1274@ CHECK: rsb	r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x64,0xe0]
1275
1276@------------------------------------------------------------------------------
1277@ RSC
1278@------------------------------------------------------------------------------
1279        rsc r4, r5, #0xf000
1280        rsc r4, r5, r6
1281        rsc r4, r5, r6, lsl #5
1282        rsclo r4, r5, r6, lsr #5
1283        rsc r4, r5, r6, lsr #5
1284        rsc r4, r5, r6, asr #5
1285        rsc r4, r5, r6, ror #5
1286        rsc r6, r7, r8, lsl r9
1287        rsc r6, r7, r8, lsr r9
1288        rsc r6, r7, r8, asr r9
1289        rscle r6, r7, r8, ror r9
1290
1291        @ destination register is optional
1292        rsc r5, #0xf000
1293        rsc r4, r5
1294        rsc r4, r5, lsl #5
1295        rsc r4, r5, lsr #5
1296        rscne r4, r5, lsr #5
1297        rsc r4, r5, asr #5
1298        rsc r4, r5, ror #5
1299        rscgt r6, r7, lsl r9
1300        rsc r6, r7, lsr r9
1301        rsc r6, r7, asr r9
1302        rsc r6, r7, ror r9
1303
1304@ CHECK: rsc	r4, r5, #61440          @ encoding: [0x0f,0x4a,0xe5,0xe2]
1305@ CHECK: rsc	r4, r5, r6              @ encoding: [0x06,0x40,0xe5,0xe0]
1306@ CHECK: rsc	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0xe5,0xe0]
1307@ CHECK: rsclo	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xe5,0x30]
1308@ CHECK: rsc	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xe5,0xe0]
1309@ CHECK: rsc	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0xe5,0xe0]
1310@ CHECK: rsc	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0xe5,0xe0]
1311@ CHECK: rsc	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0xe7,0xe0]
1312@ CHECK: rsc	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0xe7,0xe0]
1313@ CHECK: rsc	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0xe7,0xe0]
1314@ CHECK: rscle	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0xe7,0xd0]
1315
1316@ CHECK: rsc	r5, r5, #61440          @ encoding: [0x0f,0x5a,0xe5,0xe2]
1317@ CHECK: rsc	r4, r4, r5              @ encoding: [0x05,0x40,0xe4,0xe0]
1318@ CHECK: rsc	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0xe4,0xe0]
1319@ CHECK: rsc	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xe4,0xe0]
1320@ CHECK: rscne	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xe4,0x10]
1321@ CHECK: rsc	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0xe4,0xe0]
1322@ CHECK: rsc	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0xe4,0xe0]
1323@ CHECK: rscgt	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0xe6,0xc0]
1324@ CHECK: rsc	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0xe6,0xe0]
1325@ CHECK: rsc	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0xe6,0xe0]
1326@ CHECK: rsc	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xe6,0xe0]
1327
1328@------------------------------------------------------------------------------
1329@ SADD16/SADD8
1330@------------------------------------------------------------------------------
1331        sadd16 r1, r2, r3
1332        sadd16gt r1, r2, r3
1333        sadd8 r1, r2, r3
1334        sadd8le r1, r2, r3
1335
1336@ CHECK: sadd16	r1, r2, r3              @ encoding: [0x13,0x1f,0x12,0xe6]
1337@ CHECK: sadd16gt	r1, r2, r3      @ encoding: [0x13,0x1f,0x12,0xc6]
1338@ CHECK: sadd8	r1, r2, r3              @ encoding: [0x93,0x1f,0x12,0xe6]
1339@ CHECK: sadd8le r1, r2, r3             @ encoding: [0x93,0x1f,0x12,0xd6]
1340
1341
1342@------------------------------------------------------------------------------
1343@ SASX
1344@------------------------------------------------------------------------------
1345        sasx r9, r12, r0
1346        sasxeq r9, r12, r0
1347
1348@ CHECK: sasx	r9, r12, r0             @ encoding: [0x30,0x9f,0x1c,0xe6]
1349@ CHECK: sasxeq	r9, r12, r0             @ encoding: [0x30,0x9f,0x1c,0x06]
1350
1351
1352@------------------------------------------------------------------------------
1353@ SBC
1354@------------------------------------------------------------------------------
1355        sbc r4, r5, #0xf000
1356        sbc r4, r5, r6
1357        sbc r4, r5, r6, lsl #5
1358        sbc r4, r5, r6, lsr #5
1359        sbc r4, r5, r6, lsr #5
1360        sbc r4, r5, r6, asr #5
1361        sbc r4, r5, r6, ror #5
1362        sbc r6, r7, r8, lsl r9
1363        sbc r6, r7, r8, lsr r9
1364        sbc r6, r7, r8, asr r9
1365        sbc r6, r7, r8, ror r9
1366
1367        @ destination register is optional
1368        sbc r5, #0xf000
1369        sbc r4, r5
1370        sbc r4, r5, lsl #5
1371        sbc r4, r5, lsr #5
1372        sbc r4, r5, lsr #5
1373        sbc r4, r5, asr #5
1374        sbc r4, r5, ror #5
1375        sbc r6, r7, lsl r9
1376        sbc r6, r7, lsr r9
1377        sbc r6, r7, asr r9
1378        sbc r6, r7, ror r9
1379
1380@ CHECK: sbc	r4, r5, #61440          @ encoding: [0x0f,0x4a,0xc5,0xe2]
1381@ CHECK: sbc	r4, r5, r6              @ encoding: [0x06,0x40,0xc5,0xe0]
1382@ CHECK: sbc	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0xc5,0xe0]
1383@ CHECK: sbc	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xc5,0xe0]
1384@ CHECK: sbc	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xc5,0xe0]
1385@ CHECK: sbc	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0xc5,0xe0]
1386@ CHECK: sbc	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0xc5,0xe0]
1387@ CHECK: sbc	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0xc7,0xe0]
1388@ CHECK: sbc	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0xc7,0xe0]
1389@ CHECK: sbc	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0xc7,0xe0]
1390@ CHECK: sbc	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0xc7,0xe0]
1391
1392@ CHECK: sbc	r5, r5, #61440          @ encoding: [0x0f,0x5a,0xc5,0xe2]
1393@ CHECK: sbc	r4, r4, r5              @ encoding: [0x05,0x40,0xc4,0xe0]
1394@ CHECK: sbc	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0xc4,0xe0]
1395@ CHECK: sbc	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xc4,0xe0]
1396@ CHECK: sbc	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xc4,0xe0]
1397@ CHECK: sbc	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0xc4,0xe0]
1398@ CHECK: sbc	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0xc4,0xe0]
1399@ CHECK: sbc	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0xc6,0xe0]
1400@ CHECK: sbc	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0xc6,0xe0]
1401@ CHECK: sbc	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0xc6,0xe0]
1402@ CHECK: sbc	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xc6,0xe0]
1403
1404
1405@------------------------------------------------------------------------------
1406@ SBFX
1407@------------------------------------------------------------------------------
1408        sbfx r4, r5, #16, #1
1409        sbfxgt r4, r5, #16, #16
1410
1411@ CHECK: sbfx	r4, r5, #16, #1         @ encoding: [0x55,0x48,0xa0,0xe7]
1412@ CHECK: sbfxgt	r4, r5, #16, #16        @ encoding: [0x55,0x48,0xaf,0xc7]
1413
1414
1415@------------------------------------------------------------------------------
1416@ SEL
1417@------------------------------------------------------------------------------
1418        sel r9, r2, r1
1419        selne r9, r2, r1
1420
1421@ CHECK: sel	r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0xe6]
1422@ CHECK: selne	r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0x16]
1423
1424
1425@------------------------------------------------------------------------------
1426@ SETEND
1427@------------------------------------------------------------------------------
1428        setend be
1429        setend le
1430
1431        sel	r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0xe6]
1432        selne	r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0x16]
1433
1434
1435@------------------------------------------------------------------------------
1436@ SEV
1437@------------------------------------------------------------------------------
1438        sev
1439        seveq
1440
1441@ CHECK: sev                             @ encoding: [0x04,0xf0,0x20,0xe3]
1442@ CHECK: seveq                           @ encoding: [0x04,0xf0,0x20,0x03]
1443
1444@------------------------------------------------------------------------------
1445@ SHADD16/SHADD8
1446@------------------------------------------------------------------------------
1447        shadd16 r4, r8, r2
1448        shadd16gt r4, r8, r2
1449        shadd8 r4, r8, r2
1450        shadd8gt r4, r8, r2
1451
1452@ CHECK: shadd16	r4, r8, r2      @ encoding: [0x12,0x4f,0x38,0xe6]
1453@ CHECK: shadd16gt	r4, r8, r2      @ encoding: [0x12,0x4f,0x38,0xc6]
1454@ CHECK: shadd8	r4, r8, r2              @ encoding: [0x92,0x4f,0x38,0xe6]
1455@ CHECK: shadd8gt	r4, r8, r2      @ encoding: [0x92,0x4f,0x38,0xc6]
1456
1457
1458@------------------------------------------------------------------------------
1459@ SHASX
1460@------------------------------------------------------------------------------
1461        shasx r4, r8, r2
1462        shasxgt r4, r8, r2
1463
1464@ CHECK: shasx	r4, r8, r2              @ encoding: [0x32,0x4f,0x38,0xe6]
1465@ CHECK: shasxgt r4, r8, r2             @ encoding: [0x32,0x4f,0x38,0xc6]
1466
1467
1468@------------------------------------------------------------------------------
1469@ SHSUB16/SHSUB8
1470@------------------------------------------------------------------------------
1471        shsub16 r4, r8, r2
1472        shsub16gt r4, r8, r2
1473        shsub8 r4, r8, r2
1474        shsub8gt r4, r8, r2
1475
1476@ CHECK: shsub16	r4, r8, r2      @ encoding: [0x72,0x4f,0x38,0xe6]
1477@ CHECK: shsub16gt	r4, r8, r2      @ encoding: [0x72,0x4f,0x38,0xc6]
1478@ CHECK: shsub8	r4, r8, r2              @ encoding: [0xf2,0x4f,0x38,0xe6]
1479@ CHECK: shsub8gt	r4, r8, r2      @ encoding: [0xf2,0x4f,0x38,0xc6]
1480
1481@------------------------------------------------------------------------------
1482@ SMC
1483@------------------------------------------------------------------------------
1484        smc #0xf
1485        smceq #0
1486
1487@ CHECK: smc	#15                     @ encoding: [0x7f,0x00,0x60,0xe1]
1488@ CHECK: smceq	#0                      @ encoding: [0x70,0x00,0x60,0x01]
1489
1490@------------------------------------------------------------------------------
1491@ SMLABB/SMLABT/SMLATB/SMLATT
1492@------------------------------------------------------------------------------
1493        smlabb r3, r1, r9, r0
1494        smlabt r5, r6, r4, r1
1495        smlatb r4, r2, r3, r2
1496        smlatt r8, r3, r8, r4
1497        smlabbge r3, r1, r9, r0
1498        smlabtle r5, r6, r4, r1
1499        smlatbne r4, r2, r3, r2
1500        smlatteq r8, r3, r8, r4
1501
1502@ CHECK: smlabb	r3, r1, r9, r0          @ encoding: [0x81,0x09,0x03,0xe1]
1503@ CHECK: smlabt	r5, r6, r4, r1          @ encoding: [0xc6,0x14,0x05,0xe1]
1504@ CHECK: smlatb	r4, r2, r3, r2          @ encoding: [0xa2,0x23,0x04,0xe1]
1505@ CHECK: smlatt	r8, r3, r8, r4          @ encoding: [0xe3,0x48,0x08,0xe1]
1506@ CHECK: smlabbge	r3, r1, r9, r0  @ encoding: [0x81,0x09,0x03,0xa1]
1507@ CHECK: smlabtle	r5, r6, r4, r1  @ encoding: [0xc6,0x14,0x05,0xd1]
1508@ CHECK: smlatbne	r4, r2, r3, r2  @ encoding: [0xa2,0x23,0x04,0x11]
1509@ CHECK: smlatteq	r8, r3, r8, r4  @ encoding: [0xe3,0x48,0x08,0x01]
1510
1511@------------------------------------------------------------------------------
1512@ SMLAD/SMLADX
1513@------------------------------------------------------------------------------
1514        smlad r2, r3, r5, r8
1515        smladx r2, r3, r5, r8
1516        smladeq r2, r3, r5, r8
1517        smladxhi r2, r3, r5, r8
1518
1519@ CHECK: smlad	r2, r3, r5, r8          @ encoding: [0x13,0x85,0x02,0xe7]
1520@ CHECK: smladx	r2, r3, r5, r8          @ encoding: [0x33,0x85,0x02,0xe7]
1521@ CHECK: smladeq	r2, r3, r5, r8  @ encoding: [0x13,0x85,0x02,0x07]
1522@ CHECK: smladxhi	r2, r3, r5, r8  @ encoding: [0x33,0x85,0x02,0x87]
1523
1524
1525@------------------------------------------------------------------------------
1526@ SMLAL
1527@------------------------------------------------------------------------------
1528        smlal r2, r3, r5, r8
1529        smlals r2, r3, r5, r8
1530        smlaleq r2, r3, r5, r8
1531        smlalshi r2, r3, r5, r8
1532
1533@ CHECK: smlal	r2, r3, r5, r8          @ encoding: [0x95,0x28,0xe3,0xe0]
1534@ CHECK: smlals	r2, r3, r5, r8          @ encoding: [0x95,0x28,0xf3,0xe0]
1535@ CHECK: smlaleq	r2, r3, r5, r8  @ encoding: [0x95,0x28,0xe3,0x00]
1536@ CHECK: smlalshi	r2, r3, r5, r8  @ encoding: [0x95,0x28,0xf3,0x80]
1537
1538
1539@------------------------------------------------------------------------------
1540@ SMLALBB/SMLALBT/SMLALTB/SMLALTT
1541@------------------------------------------------------------------------------
1542        smlalbb r3, r1, r9, r0
1543        smlalbt r5, r6, r4, r1
1544        smlaltb r4, r2, r3, r2
1545        smlaltt r8, r3, r8, r4
1546        smlalbbge r3, r1, r9, r0
1547        smlalbtle r5, r6, r4, r1
1548        smlaltbne r4, r2, r3, r2
1549        smlaltteq r8, r3, r8, r4
1550
1551@ CHECK: smlalbb	r3, r1, r9, r0  @ encoding: [0x89,0x30,0x41,0xe1]
1552@ CHECK: smlalbt	r5, r6, r4, r1  @ encoding: [0xc4,0x51,0x46,0xe1]
1553@ CHECK: smlaltb	r4, r2, r3, r2  @ encoding: [0xa3,0x42,0x42,0xe1]
1554@ CHECK: smlaltt	r8, r3, r8, r4  @ encoding: [0xe8,0x84,0x43,0xe1]
1555@ CHECK: smlalbbge	r3, r1, r9, r0  @ encoding: [0x89,0x30,0x41,0xa1]
1556@ CHECK: smlalbtle	r5, r6, r4, r1  @ encoding: [0xc4,0x51,0x46,0xd1]
1557@ CHECK: smlaltbne	r4, r2, r3, r2  @ encoding: [0xa3,0x42,0x42,0x11]
1558@ CHECK: smlaltteq	r8, r3, r8, r4  @ encoding: [0xe8,0x84,0x43,0x01]
1559
1560
1561@------------------------------------------------------------------------------
1562@ SMLALD/SMLALDX
1563@------------------------------------------------------------------------------
1564        smlald r2, r3, r5, r8
1565        smlaldx r2, r3, r5, r8
1566        smlaldeq r2, r3, r5, r8
1567        smlaldxhi r2, r3, r5, r8
1568
1569@ CHECK: smlald	r2, r3, r5, r8          @ encoding: [0x15,0x28,0x43,0xe7]
1570@ CHECK: smlaldx	r2, r3, r5, r8  @ encoding: [0x35,0x28,0x43,0xe7]
1571@ CHECK: smlaldeq	r2, r3, r5, r8  @ encoding: [0x15,0x28,0x43,0x07]
1572@ CHECK: smlaldxhi	r2, r3, r5, r8  @ encoding: [0x35,0x28,0x43,0x87]
1573
1574
1575@------------------------------------------------------------------------------
1576@ SMLAWB/SMLAWT
1577@------------------------------------------------------------------------------
1578        smlawb r2, r3, r10, r8
1579        smlawt r8, r3, r5, r9
1580        smlawbeq r2, r7, r5, r8
1581        smlawthi r1, r3, r0, r8
1582
1583@ CHECK: smlawb	r2, r3, r10, r8         @ encoding: [0x83,0x8a,0x22,0xe1]
1584@ CHECK: smlawt	r8, r3, r5, r9          @ encoding: [0xc3,0x95,0x28,0xe1]
1585@ CHECK: smlawbeq	r2, r7, r5, r8  @ encoding: [0x87,0x85,0x22,0x01]
1586@ CHECK: smlawthi	r1, r3, r0, r8  @ encoding: [0xc3,0x80,0x21,0x81]
1587
1588
1589@------------------------------------------------------------------------------
1590@ SMLSD/SMLSDX
1591@------------------------------------------------------------------------------
1592        smlsd r2, r3, r5, r8
1593        smlsdx r2, r3, r5, r8
1594        smlsdeq r2, r3, r5, r8
1595        smlsdxhi r2, r3, r5, r8
1596
1597@ CHECK: smlsd	r2, r3, r5, r8          @ encoding: [0x53,0x85,0x02,0xe7]
1598@ CHECK: smlsdx	r2, r3, r5, r8          @ encoding: [0x73,0x85,0x02,0xe7]
1599@ CHECK: smlsdeq	r2, r3, r5, r8  @ encoding: [0x53,0x85,0x02,0x07]
1600@ CHECK: smlsdxhi	r2, r3, r5, r8  @ encoding: [0x73,0x85,0x02,0x87]
1601
1602
1603@------------------------------------------------------------------------------
1604@ SMLSLD/SMLSLDX
1605@------------------------------------------------------------------------------
1606        smlsld r2, r9, r5, r1
1607        smlsldx r4, r11, r2, r8
1608        smlsldeq r8, r2, r5, r6
1609        smlsldxhi r1, r0, r3, r8
1610
1611@ CHECK: smlsld	r2, r9, r5, r1          @ encoding: [0x55,0x21,0x49,0xe7]
1612@ CHECK: smlsldx	r4, r11, r2, r8 @ encoding: [0x72,0x48,0x4b,0xe7]
1613@ CHECK: smlsldeq	r8, r2, r5, r6  @ encoding: [0x55,0x86,0x42,0x07]
1614@ CHECK: smlsldxhi	r1, r0, r3, r8  @ encoding: [0x73,0x18,0x40,0x87]
1615
1616
1617@------------------------------------------------------------------------------
1618@ SMMLA/SMMLAR
1619@------------------------------------------------------------------------------
1620        smmla r1, r2, r3, r4
1621        smmlar r4, r3, r2, r1
1622        smmlalo r1, r2, r3, r4
1623        smmlarcs r4, r3, r2, r1
1624
1625@ CHECK: smmla	r1, r2, r3, r4          @ encoding: [0x12,0x43,0x51,0xe7]
1626@ CHECK: smmlar	r4, r3, r2, r1          @ encoding: [0x33,0x12,0x54,0xe7]
1627@ CHECK: smmlalo	r1, r2, r3, r4  @ encoding: [0x12,0x43,0x51,0x37]
1628@ CHECK: smmlarhs	r4, r3, r2, r1  @ encoding: [0x33,0x12,0x54,0x27]
1629
1630
1631@------------------------------------------------------------------------------
1632@ SMMLS/SMMLSR
1633@------------------------------------------------------------------------------
1634        smmls r1, r2, r3, r4
1635        smmlsr r4, r3, r2, r1
1636        smmlslo r1, r2, r3, r4
1637        smmlsrcs r4, r3, r2, r1
1638
1639@ CHECK: smmls	r1, r2, r3, r4          @ encoding: [0xd2,0x43,0x51,0xe7]
1640@ CHECK: smmlsr	r4, r3, r2, r1          @ encoding: [0xf3,0x12,0x54,0xe7]
1641@ CHECK: smmlslo	r1, r2, r3, r4  @ encoding: [0xd2,0x43,0x51,0x37]
1642@ CHECK: smmlsrhs	r4, r3, r2, r1  @ encoding: [0xf3,0x12,0x54,0x27]
1643
1644
1645@------------------------------------------------------------------------------
1646@ SMMUL/SMMULR
1647@------------------------------------------------------------------------------
1648        smmul r2, r3, r4
1649        smmulr r3, r2, r1
1650        smmulcc r2, r3, r4
1651        smmulrhs r3, r2, r1
1652
1653@ CHECK: smmul	r2, r3, r4              @ encoding: [0x13,0xf4,0x52,0xe7]
1654@ CHECK: smmulr	r3, r2, r1              @ encoding: [0x32,0xf1,0x53,0xe7]
1655@ CHECK: smmullo	r2, r3, r4      @ encoding: [0x13,0xf4,0x52,0x37]
1656@ CHECK: smmulrhs	r3, r2, r1      @ encoding: [0x32,0xf1,0x53,0x27]
1657
1658
1659@------------------------------------------------------------------------------
1660@ SMUAD/SMUADX
1661@------------------------------------------------------------------------------
1662        smuad r2, r3, r4
1663        smuadx r3, r2, r1
1664        smuadlt r2, r3, r4
1665        smuadxge r3, r2, r1
1666
1667@ CHECK: smuad	r2, r3, r4              @ encoding: [0x13,0xf4,0x02,0xe7]
1668@ CHECK: smuadx	r3, r2, r1              @ encoding: [0x32,0xf1,0x03,0xe7]
1669@ CHECK: smuadlt	r2, r3, r4      @ encoding: [0x13,0xf4,0x02,0xb7]
1670@ CHECK: smuadxge	r3, r2, r1      @ encoding: [0x32,0xf1,0x03,0xa7]
1671
1672
1673@------------------------------------------------------------------------------
1674@ SMULBB/SMLALBT/SMLALTB/SMLALTT
1675@------------------------------------------------------------------------------
1676        smulbb r3, r9, r0
1677        smulbt r5, r4, r1
1678        smultb r4, r2, r2
1679        smultt r8, r3, r4
1680        smulbbge r1, r9, r0
1681        smulbtle r5, r6, r4
1682        smultbne r2, r3, r2
1683        smultteq r8, r3, r4
1684
1685@ CHECK: smulbb	r3, r9, r0              @ encoding: [0x89,0x00,0x63,0xe1]
1686@ CHECK: smulbt	r5, r4, r1              @ encoding: [0xc4,0x01,0x65,0xe1]
1687@ CHECK: smultb	r4, r2, r2              @ encoding: [0xa2,0x02,0x64,0xe1]
1688@ CHECK: smultt	r8, r3, r4              @ encoding: [0xe3,0x04,0x68,0xe1]
1689@ CHECK: smulbbge	r1, r9, r0      @ encoding: [0x89,0x00,0x61,0xa1]
1690@ CHECK: smulbtle	r5, r6, r4      @ encoding: [0xc6,0x04,0x65,0xd1]
1691@ CHECK: smultbne	r2, r3, r2      @ encoding: [0xa3,0x02,0x62,0x11]
1692@ CHECK: smultteq	r8, r3, r4      @ encoding: [0xe3,0x04,0x68,0x01]
1693
1694
1695@------------------------------------------------------------------------------
1696@ SMULL
1697@------------------------------------------------------------------------------
1698        smull r3, r9, r0, r1
1699        smulls r3, r9, r0, r2
1700        smulleq r8, r3, r4, r5
1701        smullseq r8, r3, r4, r3
1702
1703@ CHECK: smull	r3, r9, r0, r1          @ encoding: [0x90,0x31,0xc9,0xe0]
1704@ CHECK: smulls	r3, r9, r0, r2          @ encoding: [0x90,0x32,0xd9,0xe0]
1705@ CHECK: smulleq	r8, r3, r4, r5  @ encoding: [0x94,0x85,0xc3,0x00]
1706@ CHECK: smullseq	r8, r3, r4, r3  @ encoding: [0x94,0x83,0xd3,0x00]
1707
1708
1709@------------------------------------------------------------------------------
1710@ SMULWB/SMULWT
1711@------------------------------------------------------------------------------
1712        smulwb r3, r9, r0
1713        smulwt r3, r9, r2
1714
1715@ CHECK: smulwb	r3, r9, r0              @ encoding: [0xa9,0x00,0x23,0xe1]
1716@ CHECK: smulwt	r3, r9, r2              @ encoding: [0xe9,0x02,0x23,0xe1]
1717
1718
1719@------------------------------------------------------------------------------
1720@ SMUSD/SMUSDX
1721@------------------------------------------------------------------------------
1722        smusd r3, r0, r1
1723        smusdx r3, r9, r2
1724        smusdeq r8, r3, r2
1725        smusdxne r7, r4, r3
1726
1727@ CHECK: smusd	r3, r0, r1              @ encoding: [0x50,0xf1,0x03,0xe7]
1728@ CHECK: smusdx	r3, r9, r2              @ encoding: [0x79,0xf2,0x03,0xe7]
1729@ CHECK: smusdeq	r8, r3, r2      @ encoding: [0x53,0xf2,0x08,0x07]
1730@ CHECK: smusdxne	r7, r4, r3      @ encoding: [0x74,0xf3,0x07,0x17]
1731
1732
1733@------------------------------------------------------------------------------
1734@ SRS
1735@------------------------------------------------------------------------------
1736        srsda sp, #5
1737        srsdb sp, #1
1738        srsia sp, #0
1739        srsib sp, #15
1740
1741        srsda sp!, #31
1742        srsdb sp!, #19
1743        srsia sp!, #2
1744        srsib sp!, #14
1745
1746        srsfa sp, #11
1747        srsea sp, #10
1748        srsfd sp, #9
1749        srsed sp, #5
1750
1751        srsfa sp!, #5
1752        srsea sp!, #5
1753        srsfd sp!, #5
1754        srsed sp!, #5
1755
1756        srs sp, #5
1757        srs sp!, #5
1758
1759@ CHECK: srsda	sp, #5                  @ encoding: [0x05,0x05,0x4d,0xf8]
1760@ CHECK: srsdb	sp, #1                  @ encoding: [0x01,0x05,0x4d,0xf9]
1761@ CHECK: srsia	sp, #0                  @ encoding: [0x00,0x05,0xcd,0xf8]
1762@ CHECK: srsib	sp, #15                 @ encoding: [0x0f,0x05,0xcd,0xf9]
1763
1764@ CHECK: srsda	sp!, #31                @ encoding: [0x1f,0x05,0x6d,0xf8]
1765@ CHECK: srsdb	sp!, #19                @ encoding: [0x13,0x05,0x6d,0xf9]
1766@ CHECK: srsia	sp!, #2                 @ encoding: [0x02,0x05,0xed,0xf8]
1767@ CHECK: srsib	sp!, #14                @ encoding: [0x0e,0x05,0xed,0xf9]
1768
1769@ CHECK: srsda	sp, #11                 @ encoding: [0x0b,0x05,0x4d,0xf8]
1770@ CHECK: srsdb	sp, #10                 @ encoding: [0x0a,0x05,0x4d,0xf9]
1771@ CHECK: srsia	sp, #9                  @ encoding: [0x09,0x05,0xcd,0xf8]
1772@ CHECK: srsib	sp, #5                  @ encoding: [0x05,0x05,0xcd,0xf9]
1773
1774@ CHECK: srsda	sp!, #5                 @ encoding: [0x05,0x05,0x6d,0xf8]
1775@ CHECK: srsdb	sp!, #5                 @ encoding: [0x05,0x05,0x6d,0xf9]
1776@ CHECK: srsia	sp!, #5                 @ encoding: [0x05,0x05,0xed,0xf8]
1777@ CHECK: srsib	sp!, #5                 @ encoding: [0x05,0x05,0xed,0xf9]
1778
1779@ CHECK: srsia	sp, #5                  @ encoding: [0x05,0x05,0xcd,0xf8]
1780@ CHECK: srsia	sp!, #5                 @ encoding: [0x05,0x05,0xed,0xf8]
1781
1782
1783@------------------------------------------------------------------------------
1784@ SSAT
1785@------------------------------------------------------------------------------
1786        ssat	r8, #1, r10
1787        ssat	r8, #1, r10, lsl #0
1788        ssat	r8, #1, r10, lsl #31
1789        ssat	r8, #1, r10, asr #32
1790        ssat	r8, #1, r10, asr #1
1791
1792@ CHECK: ssat	r8, #1, r10             @ encoding: [0x1a,0x80,0xa0,0xe6]
1793@ CHECK: ssat	r8, #1, r10             @ encoding: [0x1a,0x80,0xa0,0xe6]
1794@ CHECK: ssat	r8, #1, r10, lsl #31    @ encoding: [0x9a,0x8f,0xa0,0xe6]
1795@ CHECK: ssat	r8, #1, r10, asr #32    @ encoding: [0x5a,0x80,0xa0,0xe6]
1796@ CHECK: ssat	r8, #1, r10, asr #1     @ encoding: [0xda,0x80,0xa0,0xe6]
1797
1798
1799@------------------------------------------------------------------------------
1800@ SSAT16
1801@------------------------------------------------------------------------------
1802        ssat16	r2, #1, r7
1803        ssat16	r3, #16, r5
1804
1805@ CHECK: ssat16	r2, #1, r7              @ encoding: [0x37,0x2f,0xa0,0xe6]
1806@ CHECK: ssat16	r3, #16, r5             @ encoding: [0x35,0x3f,0xaf,0xe6]
1807
1808
1809@------------------------------------------------------------------------------
1810@ SSAX
1811@------------------------------------------------------------------------------
1812        ssax r2, r3, r4
1813        ssaxlt r2, r3, r4
1814
1815@ CHECK: ssax	r2, r3, r4              @ encoding: [0x54,0x2f,0x13,0xe6]
1816@ CHECK: ssaxlt	r2, r3, r4              @ encoding: [0x54,0x2f,0x13,0xb6]
1817
1818@------------------------------------------------------------------------------
1819@ SSUB16/SSUB8
1820@------------------------------------------------------------------------------
1821        ssub16 r1, r0, r6
1822        ssub16ne r5, r3, r2
1823        ssub8 r9, r2, r4
1824        ssub8eq r5, r1, r2
1825
1826@ CHECK: ssub16	r1, r0, r6              @ encoding: [0x76,0x1f,0x10,0xe6]
1827@ CHECK: ssub16ne	r5, r3, r2      @ encoding: [0x72,0x5f,0x13,0x16]
1828@ CHECK: ssub8	r9, r2, r4              @ encoding: [0xf4,0x9f,0x12,0xe6]
1829@ CHECK: ssub8eq	r5, r1, r2      @ encoding: [0xf2,0x5f,0x11,0x06]
1830
1831
1832@------------------------------------------------------------------------------
1833@ STM*
1834@------------------------------------------------------------------------------
1835        stm       r2, {r1,r3-r6,sp}
1836        stmia     r3, {r1,r3-r6,lr}
1837        stmib     r4, {r1,r3-r6,sp}
1838        stmda     r5, {r1,r3-r6,sp}
1839        stmdb     r6, {r1,r3-r6,r8}
1840        stmfd     sp, {r1,r3-r6,sp}
1841
1842        @ with update
1843        stm       r8!, {r1,r3-r6,sp}
1844        stmib     r9!, {r1,r3-r6,sp}
1845        stmda     sp!, {r1,r3-r6}
1846        stmdb     r0!, {r1,r5,r7,sp}
1847
1848@ CHECK: stm	r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe8]
1849@ CHECK: stm	r3, {lr, r1, r3, r4, r5, r6} @ encoding: [0x7a,0x40,0x83,0xe8]
1850@ CHECK: stmib	r4, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x84,0xe9]
1851@ CHECK: stmda	r5, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x05,0xe8]
1852@ CHECK: stmdb	r6, {r1, r3, r4, r5, r6, r8} @ encoding: [0x7a,0x01,0x06,0xe9]
1853@ CHECK: stmdb	sp, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x0d,0xe9]
1854
1855@ CHECK: stm	r8!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa8,0xe8]
1856@ CHECK: stmib	r9!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa9,0xe9]
1857@ CHECK: stmda	sp!, {r1, r3, r4, r5, r6} @ encoding: [0x7a,0x00,0x2d,0xe8]
1858@ CHECK: stmdb	r0!, {r1, r5, r7, sp}   @ encoding: [0xa2,0x20,0x20,0xe9]
1859
1860
1861@------------------------------------------------------------------------------
1862@ STREX/STREXB/STREXH/STREXD
1863@------------------------------------------------------------------------------
1864        strexb  r1, r3, [r4]
1865        strexh  r4, r2, [r5]
1866        strex  r2, r1, [r7]
1867        strexd  r6, r2, r3, [r8]
1868
1869@ CHECK: strexb	r1, r3, [r4]            @ encoding: [0x93,0x1f,0xc4,0xe1]
1870@ CHECK: strexh	r4, r2, [r5]            @ encoding: [0x92,0x4f,0xe5,0xe1]
1871@ CHECK: strex	r2, r1, [r7]            @ encoding: [0x91,0x2f,0x87,0xe1]
1872@ CHECK: strexd	r6, r2, r3, [r8]        @ encoding: [0x92,0x6f,0xa8,0xe1]
1873
1874
1875@------------------------------------------------------------------------------
1876@ SUB
1877@------------------------------------------------------------------------------
1878        sub r4, r5, #0xf000
1879        sub r4, r5, r6
1880        sub r4, r5, r6, lsl #5
1881        sub r4, r5, r6, lsr #5
1882        sub r4, r5, r6, lsr #5
1883        sub r4, r5, r6, asr #5
1884        sub r4, r5, r6, ror #5
1885        sub r6, r7, r8, lsl r9
1886        sub r6, r7, r8, lsr r9
1887        sub r6, r7, r8, asr r9
1888        sub r6, r7, r8, ror r9
1889
1890        @ destination register is optional
1891        sub r5, #0xf000
1892        sub r4, r5
1893        sub r4, r5, lsl #5
1894        sub r4, r5, lsr #5
1895        sub r4, r5, lsr #5
1896        sub r4, r5, asr #5
1897        sub r4, r5, ror #5
1898        sub r6, r7, lsl r9
1899        sub r6, r7, lsr r9
1900        sub r6, r7, asr r9
1901        sub r6, r7, ror r9
1902
1903@ CHECK: sub	r4, r5, #61440          @ encoding: [0x0f,0x4a,0x45,0xe2]
1904@ CHECK: sub	r4, r5, r6              @ encoding: [0x06,0x40,0x45,0xe0]
1905@ CHECK: sub	r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x45,0xe0]
1906@ CHECK: sub	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x45,0xe0]
1907@ CHECK: sub	r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x45,0xe0]
1908@ CHECK: sub	r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x45,0xe0]
1909@ CHECK: sub	r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x45,0xe0]
1910@ CHECK: sub	r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x47,0xe0]
1911@ CHECK: sub	r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x47,0xe0]
1912@ CHECK: sub	r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x47,0xe0]
1913@ CHECK: sub	r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x47,0xe0]
1914
1915
1916@ CHECK: sub	r5, r5, #61440          @ encoding: [0x0f,0x5a,0x45,0xe2]
1917@ CHECK: sub	r4, r4, r5              @ encoding: [0x05,0x40,0x44,0xe0]
1918@ CHECK: sub	r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x44,0xe0]
1919@ CHECK: sub	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x44,0xe0]
1920@ CHECK: sub	r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x44,0xe0]
1921@ CHECK: sub	r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x44,0xe0]
1922@ CHECK: sub	r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x44,0xe0]
1923@ CHECK: sub	r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x46,0xe0]
1924@ CHECK: sub	r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x46,0xe0]
1925@ CHECK: sub	r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x46,0xe0]
1926@ CHECK: sub	r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x46,0xe0]
1927
1928
1929@------------------------------------------------------------------------------
1930@ SVC
1931@------------------------------------------------------------------------------
1932        svc #16
1933        svc #0
1934        svc #0xffffff
1935
1936@ CHECK: svc	#16                     @ encoding: [0x10,0x00,0x00,0xef]
1937@ CHECK: svc	#0                      @ encoding: [0x00,0x00,0x00,0xef]
1938@ CHECK: svc	#16777215               @ encoding: [0xff,0xff,0xff,0xef]
1939
1940
1941@------------------------------------------------------------------------------
1942@ SWP/SWPB
1943@------------------------------------------------------------------------------
1944        swp r1, r2, [r3]
1945        swp r4, r4, [r6]
1946        swpb r5, r1, [r9]
1947
1948@ CHECK: swp	r1, r2, [r3]            @ encoding: [0x92,0x10,0x03,0xe1]
1949@ CHECK: swp	r4, r4, [r6]            @ encoding: [0x94,0x40,0x06,0xe1]
1950@ CHECK: swpb	r5, r1, [r9]            @ encoding: [0x91,0x50,0x49,0xe1]
1951
1952
1953@------------------------------------------------------------------------------
1954@ SXTAB
1955@------------------------------------------------------------------------------
1956        sxtab r2, r3, r4
1957        sxtab r4, r5, r6, ror #0
1958        sxtablt r6, r2, r9, ror #8
1959        sxtab r5, r1, r4, ror #16
1960        sxtab r7, r8, r3, ror #24
1961
1962@ CHECK: sxtab	r2, r3, r4              @ encoding: [0x74,0x20,0xa3,0xe6]
1963@ CHECK: sxtab	r4, r5, r6              @ encoding: [0x76,0x40,0xa5,0xe6]
1964@ CHECK: sxtablt	r6, r2, r9, ror #8
1965                                        @ encoding: [0x79,0x64,0xa2,0xb6]
1966@ CHECK: sxtab	r5, r1, r4, ror #16
1967                                        @ encoding: [0x74,0x58,0xa1,0xe6]
1968@ CHECK: sxtab	r7, r8, r3, ror #24
1969                                        @ encoding: [0x73,0x7c,0xa8,0xe6]
1970
1971
1972@------------------------------------------------------------------------------
1973@ SXTAB16
1974@------------------------------------------------------------------------------
1975        sxtab16ge r0, r1, r4
1976        sxtab16 r6, r2, r7, ror #0
1977        sxtab16 r3, r5, r8, ror #8
1978        sxtab16 r3, r2, r1, ror #16
1979        sxtab16eq r1, r2, r3, ror #24
1980
1981@ CHECK: sxtab16ge	r0, r1, r4      @ encoding: [0x74,0x00,0x81,0xa6]
1982@ CHECK: sxtab16	r6, r2, r7      @ encoding: [0x77,0x60,0x82,0xe6]
1983@ CHECK: sxtab16	r3, r5, r8, ror #8
1984                                        @ encoding: [0x78,0x34,0x85,0xe6]
1985@ CHECK: sxtab16	r3, r2, r1, ror #16
1986                                        @ encoding: [0x71,0x38,0x82,0xe6]
1987@ CHECK: sxtab16eq	r1, r2, r3, ror #24
1988                                        @ encoding: [0x73,0x1c,0x82,0x06]
1989
1990@------------------------------------------------------------------------------
1991@ SXTAH
1992@------------------------------------------------------------------------------
1993        sxtah r1, r3, r9
1994        sxtahhi r6, r1, r6, ror #0
1995        sxtah r3, r8, r3, ror #8
1996        sxtahlo r2, r2, r4, ror #16
1997        sxtah r9, r3, r3, ror #24
1998
1999@ CHECK: sxtah	r1, r3, r9              @ encoding: [0x79,0x10,0xb3,0xe6]
2000@ CHECK: sxtahhi	r6, r1, r6      @ encoding: [0x76,0x60,0xb1,0x86]
2001@ CHECK: sxtah	r3, r8, r3, ror #8
2002                                        @ encoding: [0x73,0x34,0xb8,0xe6]
2003@ CHECK: sxtahlo	r2, r2, r4, ror #16
2004                                        @ encoding: [0x74,0x28,0xb2,0x36]
2005@ CHECK: sxtah	r9, r3, r3, ror #24
2006                                        @ encoding: [0x73,0x9c,0xb3,0xe6]
2007
2008@------------------------------------------------------------------------------
2009@ SXTB
2010@------------------------------------------------------------------------------
2011        sxtbge r2, r4
2012        sxtb r5, r6, ror #0
2013        sxtb r6, r9, ror #8
2014        sxtbcc r5, r1, ror #16
2015        sxtb r8, r3, ror #24
2016
2017@ CHECK: sxtbge	r2, r4                  @ encoding: [0x74,0x20,0xaf,0xa6]
2018@ CHECK: sxtb	r5, r6                  @ encoding: [0x76,0x50,0xaf,0xe6]
2019@ CHECK: sxtb	r6, r9, ror #8
2020                                        @ encoding: [0x79,0x64,0xaf,0xe6]
2021@ CHECK: sxtblo	r5, r1, ror #16
2022                                        @ encoding: [0x71,0x58,0xaf,0x36]
2023@ CHECK: sxtb	r8, r3, ror #24
2024                                        @ encoding: [0x73,0x8c,0xaf,0xe6]
2025
2026
2027@------------------------------------------------------------------------------
2028@ SXTB16
2029@------------------------------------------------------------------------------
2030        sxtb16 r1, r4
2031        sxtb16 r6, r7, ror #0
2032        sxtb16cs r3, r5, ror #8
2033        sxtb16 r3, r1, ror #16
2034        sxtb16ge r2, r3, ror #24
2035
2036@ CHECK: sxtb16	r1, r4                  @ encoding: [0x74,0x10,0x8f,0xe6]
2037@ CHECK: sxtb16	r6, r7                  @ encoding: [0x77,0x60,0x8f,0xe6]
2038@ CHECK: sxtb16hs	r3, r5, ror #8
2039                                        @ encoding: [0x75,0x34,0x8f,0x26]
2040@ CHECK: sxtb16	r3, r1, ror #16
2041                                        @ encoding: [0x71,0x38,0x8f,0xe6]
2042@ CHECK: sxtb16ge	r2, r3, ror #24
2043                                        @ encoding: [0x73,0x2c,0x8f,0xa6]
2044
2045
2046@------------------------------------------------------------------------------
2047@ SXTH
2048@------------------------------------------------------------------------------
2049        sxthne r3, r9
2050        sxth r1, r6, ror #0
2051        sxth r3, r8, ror #8
2052        sxthle r2, r2, ror #16
2053        sxth r9, r3, ror #24
2054
2055@ CHECK: sxthne	r3, r9                  @ encoding: [0x79,0x30,0xbf,0x16]
2056@ CHECK: sxth	r1, r6                  @ encoding: [0x76,0x10,0xbf,0xe6]
2057@ CHECK: sxth	r3, r8, ror #8
2058                                        @ encoding: [0x78,0x34,0xbf,0xe6]
2059@ CHECK: sxthle	r2, r2, ror #16
2060                                        @ encoding: [0x72,0x28,0xbf,0xd6]
2061@ CHECK: sxth	r9, r3, ror #24
2062                                        @ encoding: [0x73,0x9c,0xbf,0xe6]
2063
2064
2065@------------------------------------------------------------------------------
2066@ FIXME: TBB/TBH
2067@------------------------------------------------------------------------------
2068
2069
2070@------------------------------------------------------------------------------
2071@ TEQ
2072@------------------------------------------------------------------------------
2073        teq r5, #0xf000
2074        teq r4, r5
2075        teq r4, r5, lsl #5
2076        teq r4, r5, lsr #5
2077        teq r4, r5, lsr #5
2078        teq r4, r5, asr #5
2079        teq r4, r5, ror #5
2080        teq r6, r7, lsl r9
2081        teq r6, r7, lsr r9
2082        teq r6, r7, asr r9
2083        teq r6, r7, ror r9
2084
2085@ CHECK: teq	r5, #61440              @ encoding: [0x0f,0x0a,0x35,0xe3]
2086@ CHECK: teq	r4, r5                  @ encoding: [0x05,0x00,0x34,0xe1]
2087@ CHECK: teq	r4, r5, lsl #5          @ encoding: [0x85,0x02,0x34,0xe1]
2088@ CHECK: teq	r4, r5, lsr #5          @ encoding: [0xa5,0x02,0x34,0xe1]
2089@ CHECK: teq	r4, r5, lsr #5          @ encoding: [0xa5,0x02,0x34,0xe1]
2090@ CHECK: teq	r4, r5, asr #5          @ encoding: [0xc5,0x02,0x34,0xe1]
2091@ CHECK: teq	r4, r5, ror #5          @ encoding: [0xe5,0x02,0x34,0xe1]
2092@ CHECK: teq	r6, r7, lsl r9          @ encoding: [0x17,0x09,0x36,0xe1]
2093@ CHECK: teq	r6, r7, lsr r9          @ encoding: [0x37,0x09,0x36,0xe1]
2094@ CHECK: teq	r6, r7, asr r9          @ encoding: [0x57,0x09,0x36,0xe1]
2095@ CHECK: teq	r6, r7, ror r9          @ encoding: [0x77,0x09,0x36,0xe1]
2096
2097
2098@------------------------------------------------------------------------------
2099@ TST
2100@------------------------------------------------------------------------------
2101        tst r5, #0xf000
2102        tst r4, r5
2103        tst r4, r5, lsl #5
2104        tst r4, r5, lsr #5
2105        tst r4, r5, lsr #5
2106        tst r4, r5, asr #5
2107        tst r4, r5, ror #5
2108        tst r6, r7, lsl r9
2109        tst r6, r7, lsr r9
2110        tst r6, r7, asr r9
2111        tst r6, r7, ror r9
2112
2113@ CHECK: tst	r5, #61440              @ encoding: [0x0f,0x0a,0x15,0xe3]
2114@ CHECK: tst	r4, r5                  @ encoding: [0x05,0x00,0x14,0xe1]
2115@ CHECK: tst	r4, r5, lsl #5          @ encoding: [0x85,0x02,0x14,0xe1]
2116@ CHECK: tst	r4, r5, lsr #5          @ encoding: [0xa5,0x02,0x14,0xe1]
2117@ CHECK: tst	r4, r5, lsr #5          @ encoding: [0xa5,0x02,0x14,0xe1]
2118@ CHECK: tst	r4, r5, asr #5          @ encoding: [0xc5,0x02,0x14,0xe1]
2119@ CHECK: tst	r4, r5, ror #5          @ encoding: [0xe5,0x02,0x14,0xe1]
2120@ CHECK: tst	r6, r7, lsl r9          @ encoding: [0x17,0x09,0x16,0xe1]
2121@ CHECK: tst	r6, r7, lsr r9          @ encoding: [0x37,0x09,0x16,0xe1]
2122@ CHECK: tst	r6, r7, asr r9          @ encoding: [0x57,0x09,0x16,0xe1]
2123@ CHECK: tst	r6, r7, ror r9          @ encoding: [0x77,0x09,0x16,0xe1]
2124
2125
2126@------------------------------------------------------------------------------
2127@ UADD16/UADD8
2128@------------------------------------------------------------------------------
2129        uadd16 r1, r2, r3
2130        uadd16gt r1, r2, r3
2131        uadd8 r1, r2, r3
2132        uadd8le r1, r2, r3
2133
2134@ CHECK: uadd16	r1, r2, r3              @ encoding: [0x13,0x1f,0x52,0xe6]
2135@ CHECK: uadd16gt	r1, r2, r3      @ encoding: [0x13,0x1f,0x52,0xc6]
2136@ CHECK: uadd8	r1, r2, r3              @ encoding: [0x93,0x1f,0x52,0xe6]
2137@ CHECK: uadd8le r1, r2, r3             @ encoding: [0x93,0x1f,0x52,0xd6]
2138
2139
2140@------------------------------------------------------------------------------
2141@ UASX
2142@------------------------------------------------------------------------------
2143        uasx r9, r12, r0
2144        uasxeq r9, r12, r0
2145
2146@ CHECK: uasx	r9, r12, r0             @ encoding: [0x30,0x9f,0x5c,0xe6]
2147@ CHECK: uasxeq	r9, r12, r0             @ encoding: [0x30,0x9f,0x5c,0x06]
2148
2149
2150@------------------------------------------------------------------------------
2151@ UBFX
2152@------------------------------------------------------------------------------
2153        ubfx r4, r5, #16, #1
2154        ubfxgt r4, r5, #16, #16
2155
2156@ CHECK: ubfx	r4, r5, #16, #1         @ encoding: [0x55,0x48,0xe0,0xe7]
2157@ CHECK: ubfxgt	r4, r5, #16, #16        @ encoding: [0x55,0x48,0xef,0xc7]
2158
2159
2160@------------------------------------------------------------------------------
2161@ UHADD16/UHADD8
2162@------------------------------------------------------------------------------
2163        uhadd16 r4, r8, r2
2164        uhadd16gt r4, r8, r2
2165        uhadd8 r4, r8, r2
2166        uhadd8gt r4, r8, r2
2167
2168@ CHECK: uhadd16	r4, r8, r2      @ encoding: [0x12,0x4f,0x78,0xe6]
2169@ CHECK: uhadd16gt	r4, r8, r2      @ encoding: [0x12,0x4f,0x78,0xc6]
2170@ CHECK: uhadd8	r4, r8, r2              @ encoding: [0x92,0x4f,0x78,0xe6]
2171@ CHECK: uhadd8gt	r4, r8, r2      @ encoding: [0x92,0x4f,0x78,0xc6]
2172
2173
2174@------------------------------------------------------------------------------
2175@ UHASX
2176@------------------------------------------------------------------------------
2177        uhasx r4, r8, r2
2178        uhasxgt r4, r8, r2
2179
2180@ CHECK: uhasx	r4, r8, r2              @ encoding: [0x32,0x4f,0x78,0xe6]
2181@ CHECK: uhasxgt r4, r8, r2             @ encoding: [0x32,0x4f,0x78,0xc6]
2182
2183
2184@------------------------------------------------------------------------------
2185@ UHSUB16/UHSUB8
2186@------------------------------------------------------------------------------
2187        uhsub16 r4, r8, r2
2188        uhsub16gt r4, r8, r2
2189        uhsub8 r4, r8, r2
2190        uhsub8gt r4, r8, r2
2191
2192@ CHECK: uhsub16	r4, r8, r2      @ encoding: [0x72,0x4f,0x78,0xe6]
2193@ CHECK: uhsub16gt	r4, r8, r2      @ encoding: [0x72,0x4f,0x78,0xc6]
2194@ CHECK: uhsub8	r4, r8, r2              @ encoding: [0xf2,0x4f,0x78,0xe6]
2195@ CHECK: uhsub8gt	r4, r8, r2      @ encoding: [0xf2,0x4f,0x78,0xc6]
2196
2197
2198@------------------------------------------------------------------------------
2199@ UMAAL
2200@------------------------------------------------------------------------------
2201        umaal r3, r4, r5, r6
2202        umaallt r3, r4, r5, r6
2203
2204@ CHECK: umaal	r3, r4, r5, r6          @ encoding: [0x95,0x36,0x44,0xe0]
2205@ CHECK: umaallt	r3, r4, r5, r6          @ encoding: [0x95,0x36,0x44,0xb0]
2206
2207
2208@------------------------------------------------------------------------------
2209@ UMLAL
2210@------------------------------------------------------------------------------
2211        umlal r2, r4, r6, r8
2212        umlalgt r6, r1, r2, r6
2213        umlals r2, r9, r2, r3
2214        umlalseq r3, r5, r1, r2
2215
2216@ CHECK: umlal	r2, r4, r6, r8          @ encoding: [0x96,0x28,0xa4,0xe0]
2217@ CHECK: umlalgt	r6, r1, r2, r6  @ encoding: [0x92,0x66,0xa1,0xc0]
2218@ CHECK: umlals	r2, r9, r2, r3          @ encoding: [0x92,0x23,0xb9,0xe0]
2219@ CHECK: umlalseq	r3, r5, r1, r2  @ encoding: [0x91,0x32,0xb5,0x00]
2220
2221
2222@------------------------------------------------------------------------------
2223@ UMULL
2224@------------------------------------------------------------------------------
2225        umull r2, r4, r6, r8
2226        umullgt r6, r1, r2, r6
2227        umulls r2, r9, r2, r3
2228        umullseq r3, r5, r1, r2
2229
2230@ CHECK: umull	r2, r4, r6, r8          @ encoding: [0x96,0x28,0x84,0xe0]
2231@ CHECK: umullgt	r6, r1, r2, r6  @ encoding: [0x92,0x66,0x81,0xc0]
2232@ CHECK: umulls	r2, r9, r2, r3          @ encoding: [0x92,0x23,0x99,0xe0]
2233@ CHECK: umullseq	r3, r5, r1, r2  @ encoding: [0x91,0x32,0x95,0x00]
2234
2235
2236@------------------------------------------------------------------------------
2237@ UQADD16/UQADD8
2238@------------------------------------------------------------------------------
2239        uqadd16 r1, r2, r3
2240        uqadd16gt r4, r7, r9
2241        uqadd8 r3, r4, r8
2242        uqadd8le r8, r1, r2
2243
2244
2245@ CHECK: uqadd16	r1, r2, r3      @ encoding: [0x13,0x1f,0x62,0xe6]
2246@ CHECK: uqadd16gt	r4, r7, r9      @ encoding: [0x19,0x4f,0x67,0xc6]
2247@ CHECK: uqadd8	r3, r4, r8              @ encoding: [0x98,0x3f,0x64,0xe6]
2248@ CHECK: uqadd8le	r8, r1, r2      @ encoding: [0x92,0x8f,0x61,0xd6]
2249
2250
2251@------------------------------------------------------------------------------
2252@ UQASX
2253@------------------------------------------------------------------------------
2254        uqasx r2, r4, r1
2255        uqasxhi r5, r2, r9
2256
2257@ CHECK: uqasx	r2, r4, r1              @ encoding: [0x31,0x2f,0x64,0xe6]
2258@ CHECK: uqasxhi	r5, r2, r9      @ encoding: [0x39,0x5f,0x62,0x86]
2259
2260
2261@------------------------------------------------------------------------------
2262@ UQSAX
2263@------------------------------------------------------------------------------
2264        uqsax r1, r3, r7
2265        uqsaxal r3, r6, r2
2266
2267@ CHECK: uqsax	r1, r3, r7              @ encoding: [0x57,0x1f,0x63,0xe6]
2268@ CHECK: uqsax	r3, r6, r2              @ encoding: [0x52,0x3f,0x66,0xe6]
2269
2270
2271@------------------------------------------------------------------------------
2272@ UQSUB16/UQSUB8
2273@------------------------------------------------------------------------------
2274        uqsub16 r1, r5, r3
2275        uqsub16gt r3, r2, r5
2276        uqsub8 r2, r1, r4
2277        uqsub8le r4, r6, r9
2278
2279@ CHECK: uqsub16	r1, r5, r3      @ encoding: [0x73,0x1f,0x65,0xe6]
2280@ CHECK: uqsub16gt	r3, r2, r5      @ encoding: [0x75,0x3f,0x62,0xc6]
2281@ CHECK: uqsub8	r2, r1, r4              @ encoding: [0xf4,0x2f,0x61,0xe6]
2282@ CHECK: uqsub8le	r4, r6, r9      @ encoding: [0xf9,0x4f,0x66,0xd6]
2283
2284
2285@------------------------------------------------------------------------------
2286@ USADA8/USAD8
2287@------------------------------------------------------------------------------
2288        usad8 r2, r1, r4
2289        usad8le r4, r6, r9
2290        usada8 r1, r5, r3, r7
2291        usada8gt r3, r2, r5, r1
2292
2293@ CHECK: usad8	r2, r1, r4              @ encoding: [0x11,0xf4,0x82,0xe7]
2294@ CHECK: usad8le	r4, r6, r9      @ encoding: [0x16,0xf9,0x84,0xd7]
2295@ CHECK: usada8	r1, r5, r3, r7          @ encoding: [0x15,0x73,0x81,0xe7]
2296@ CHECK: usada8gt	r3, r2, r5, r1  @ encoding: [0x12,0x15,0x83,0xc7]
2297
2298
2299@------------------------------------------------------------------------------
2300@ USAT
2301@------------------------------------------------------------------------------
2302
2303        usat	r8, #1, r10
2304        usat	r8, #4, r10, lsl #0
2305        usat	r8, #5, r10, lsl #31
2306        usat	r8, #31, r10, asr #32
2307        usat	r8, #16, r10, asr #1
2308
2309@ CHECK: usat	r8, #1, r10             @ encoding: [0x1a,0x80,0xe1,0xe6]
2310@ CHECK: usat	r8, #4, r10             @ encoding: [0x1a,0x80,0xe4,0xe6]
2311@ CHECK: usat	r8, #5, r10, lsl #31    @ encoding: [0x9a,0x8f,0xe5,0xe6]
2312@ CHECK: usat	r8, #31, r10, asr #32   @ encoding: [0x5a,0x80,0xff,0xe6]
2313@ CHECK: usat	r8, #16, r10, asr #1    @ encoding: [0xda,0x80,0xf0,0xe6]
2314
2315@------------------------------------------------------------------------------
2316@ USAT16
2317@------------------------------------------------------------------------------
2318        usat16	r2, #2, r7
2319        usat16	r3, #15, r5
2320
2321@ CHECK: usat16	r2, #2, r7              @ encoding: [0x37,0x2f,0xe2,0xe6]
2322@ CHECK: usat16	r3, #15, r5             @ encoding: [0x35,0x3f,0xef,0xe6]
2323
2324
2325@------------------------------------------------------------------------------
2326@ USAX
2327@------------------------------------------------------------------------------
2328        usax r2, r3, r4
2329        usaxne r2, r3, r4
2330
2331@ CHECK: usax	r2, r3, r4              @ encoding: [0x54,0x2f,0x53,0xe6]
2332@ CHECK: usaxne	r2, r3, r4              @ encoding: [0x54,0x2f,0x53,0x16]
2333
2334@------------------------------------------------------------------------------
2335@ USUB16/USUB8
2336@------------------------------------------------------------------------------
2337        usub16 r4, r2, r7
2338        usub16hi r1, r1, r3
2339        usub8 r1, r8, r5
2340        usub8le r9, r2, r3
2341
2342@ CHECK: usub16	r4, r2, r7              @ encoding: [0x77,0x4f,0x52,0xe6]
2343@ CHECK: usub16hi	r1, r1, r3      @ encoding: [0x73,0x1f,0x51,0x86]
2344@ CHECK: usub8	r1, r8, r5              @ encoding: [0xf5,0x1f,0x58,0xe6]
2345@ CHECK: usub8le	r9, r2, r3      @ encoding: [0xf3,0x9f,0x52,0xd6]
2346
2347
2348@------------------------------------------------------------------------------
2349@ UXTAB
2350@------------------------------------------------------------------------------
2351        uxtab r2, r3, r4
2352        uxtab r4, r5, r6, ror #0
2353        uxtablt r6, r2, r9, ror #8
2354        uxtab r5, r1, r4, ror #16
2355        uxtab r7, r8, r3, ror #24
2356
2357@ CHECK: uxtab	r2, r3, r4              @ encoding: [0x74,0x20,0xe3,0xe6]
2358@ CHECK: uxtab	r4, r5, r6              @ encoding: [0x76,0x40,0xe5,0xe6]
2359@ CHECK: uxtablt	r6, r2, r9, ror #8
2360                                        @ encoding: [0x79,0x64,0xe2,0xb6]
2361@ CHECK: uxtab	r5, r1, r4, ror #16
2362                                        @ encoding: [0x74,0x58,0xe1,0xe6]
2363@ CHECK: uxtab	r7, r8, r3, ror #24
2364                                        @ encoding: [0x73,0x7c,0xe8,0xe6]
2365
2366
2367@------------------------------------------------------------------------------
2368@ UXTAB16
2369@------------------------------------------------------------------------------
2370        uxtab16ge r0, r1, r4
2371        uxtab16 r6, r2, r7, ror #0
2372        uxtab16 r3, r5, r8, ror #8
2373        uxtab16 r3, r2, r1, ror #16
2374        uxtab16eq r1, r2, r3, ror #24
2375
2376@ CHECK: uxtab16ge	r0, r1, r4      @ encoding: [0x74,0x00,0xc1,0xa6]
2377@ CHECK: uxtab16	r6, r2, r7      @ encoding: [0x77,0x60,0xc2,0xe6]
2378@ CHECK: uxtab16	r3, r5, r8, ror #8
2379                                        @ encoding: [0x78,0x34,0xc5,0xe6]
2380@ CHECK: uxtab16	r3, r2, r1, ror #16
2381                                        @ encoding: [0x71,0x38,0xc2,0xe6]
2382@ CHECK: uxtab16eq	r1, r2, r3, ror #24
2383                                        @ encoding: [0x73,0x1c,0xc2,0x06]
2384
2385@------------------------------------------------------------------------------
2386@ UXTAH
2387@------------------------------------------------------------------------------
2388        uxtah r1, r3, r9
2389        uxtahhi r6, r1, r6, ror #0
2390        uxtah r3, r8, r3, ror #8
2391        uxtahlo r2, r2, r4, ror #16
2392        uxtah r9, r3, r3, ror #24
2393
2394@ CHECK: uxtah	r1, r3, r9              @ encoding: [0x79,0x10,0xf3,0xe6]
2395@ CHECK: uxtahhi	r6, r1, r6      @ encoding: [0x76,0x60,0xf1,0x86]
2396@ CHECK: uxtah	r3, r8, r3, ror #8
2397                                        @ encoding: [0x73,0x34,0xf8,0xe6]
2398@ CHECK: uxtahlo	r2, r2, r4, ror #16
2399                                        @ encoding: [0x74,0x28,0xf2,0x36]
2400@ CHECK: uxtah	r9, r3, r3, ror #24
2401                                        @ encoding: [0x73,0x9c,0xf3,0xe6]
2402
2403@------------------------------------------------------------------------------
2404@ UXTB
2405@------------------------------------------------------------------------------
2406        uxtbge r2, r4
2407        uxtb r5, r6, ror #0
2408        uxtb r6, r9, ror #8
2409        uxtbcc r5, r1, ror #16
2410        uxtb r8, r3, ror #24
2411
2412@ CHECK: uxtbge	r2, r4                  @ encoding: [0x74,0x20,0xef,0xa6]
2413@ CHECK: uxtb	r5, r6                  @ encoding: [0x76,0x50,0xef,0xe6]
2414@ CHECK: uxtb	r6, r9, ror #8
2415                                        @ encoding: [0x79,0x64,0xef,0xe6]
2416@ CHECK: uxtblo	r5, r1, ror #16
2417                                        @ encoding: [0x71,0x58,0xef,0x36]
2418@ CHECK: uxtb	r8, r3, ror #24
2419                                        @ encoding: [0x73,0x8c,0xef,0xe6]
2420
2421
2422@------------------------------------------------------------------------------
2423@ UXTB16
2424@------------------------------------------------------------------------------
2425        uxtb16 r1, r4
2426        uxtb16 r6, r7, ror #0
2427        uxtb16cs r3, r5, ror #8
2428        uxtb16 r3, r1, ror #16
2429        uxtb16ge r2, r3, ror #24
2430
2431@ CHECK: uxtb16	r1, r4                  @ encoding: [0x74,0x10,0xcf,0xe6]
2432@ CHECK: uxtb16	r6, r7                  @ encoding: [0x77,0x60,0xcf,0xe6]
2433@ CHECK: uxtb16hs	r3, r5, ror #8
2434                                        @ encoding: [0x75,0x34,0xcf,0x26]
2435@ CHECK: uxtb16	r3, r1, ror #16
2436                                        @ encoding: [0x71,0x38,0xcf,0xe6]
2437@ CHECK: uxtb16ge	r2, r3, ror #24
2438                                        @ encoding: [0x73,0x2c,0xcf,0xa6]
2439
2440
2441@------------------------------------------------------------------------------
2442@ UXTH
2443@------------------------------------------------------------------------------
2444        uxthne r3, r9
2445        uxth r1, r6, ror #0
2446        uxth r3, r8, ror #8
2447        uxthle r2, r2, ror #16
2448        uxth r9, r3, ror #24
2449
2450@ CHECK: uxthne	r3, r9                  @ encoding: [0x79,0x30,0xff,0x16]
2451@ CHECK: uxth	r1, r6                  @ encoding: [0x76,0x10,0xff,0xe6]
2452@ CHECK: uxth	r3, r8, ror #8
2453                                        @ encoding: [0x78,0x34,0xff,0xe6]
2454@ CHECK: uxthle	r2, r2, ror #16
2455                                        @ encoding: [0x72,0x28,0xff,0xd6]
2456@ CHECK: uxth	r9, r3, ror #24
2457                                        @ encoding: [0x73,0x9c,0xff,0xe6]
2458
2459@------------------------------------------------------------------------------
2460@ WFE/WFI/YIELD
2461@------------------------------------------------------------------------------
2462        wfe
2463        wfehi
2464        wfi
2465        wfilt
2466        yield
2467        yieldne
2468
2469@ CHECK: wfe @ encoding: [0x02,0xf0,0x20,0xe3]
2470@ CHECK: wfehi @ encoding: [0x02,0xf0,0x20,0x83]
2471@ CHECK: wfi @ encoding: [0x03,0xf0,0x20,0xe3]
2472@ CHECK: wfilt @ encoding: [0x03,0xf0,0x20,0xb3]
2473@ CHECK: yield @ encoding: [0x01,0xf0,0x20,0xe3]
2474@ CHECK: yieldne @ encoding: [0x01,0xf0,0x20,0x13]
2475