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