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