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