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