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