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