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