6920c5fef9e369f376b7b5c49b16a0dae487e335
[oota-llvm.git] / test / MC / ARM / basic-arm-instructions.s
1 @ RUN: llvm-mc -triple=armv7-apple-darwin -show-encoding < %s | FileCheck %s
2   .syntax unified
3   .globl _func
4
5 @ Check that the assembler can handle the documented syntax from the ARM ARM.
6 @ For complex constructs like shifter operands, check more thoroughly for them
7 @ once then spot check that following instructions accept the form generally.
8 @ This gives us good coverage while keeping the overall size of the test
9 @ more reasonable.
10
11 _func:
12 @ CHECK: _func
13
14 @------------------------------------------------------------------------------
15 @ ADC (immediate)
16 @------------------------------------------------------------------------------
17   adc r1, r2, #0xf
18   adc r1, r2, #0xf0
19   adc r1, r2, #0xf00
20   adc r1, r2, #0xf000
21   adc r1, r2, #0xf0000
22   adc r1, r2, #0xf00000
23   adc r1, r2, #0xf000000
24   adc r1, r2, #0xf0000000
25   adc r1, r2, #0xf000000f
26   adcs r1, r2, #0xf00
27   adcseq r1, r2, #0xf00
28   adceq r1, r2, #0xf00
29
30 @ CHECK: adc    r1, r2, #15             @ encoding: [0x0f,0x10,0xa2,0xe2]
31 @ CHECK: adc    r1, r2, #240            @ encoding: [0xf0,0x10,0xa2,0xe2]
32 @ CHECK: adc    r1, r2, #3840           @ encoding: [0x0f,0x1c,0xa2,0xe2]
33 @ CHECK: adc    r1, r2, #61440          @ encoding: [0x0f,0x1a,0xa2,0xe2]
34 @ CHECK: adc    r1, r2, #983040         @ encoding: [0x0f,0x18,0xa2,0xe2]
35 @ CHECK: adc    r1, r2, #15728640       @ encoding: [0x0f,0x16,0xa2,0xe2]
36 @ CHECK: adc    r1, r2, #251658240      @ encoding: [0x0f,0x14,0xa2,0xe2]
37 @ CHECK: adc    r1, r2, #4026531840     @ encoding: [0x0f,0x12,0xa2,0xe2]
38 @ CHECK: adc    r1, r2, #4026531855     @ encoding: [0xff,0x12,0xa2,0xe2]
39
40 @ CHECK: adcs   r1, r2, #3840           @ encoding: [0x0f,0x1c,0xb2,0xe2]
41 @ CHECK: adcseq r1, r2, #3840           @ encoding: [0x0f,0x1c,0xb2,0x02]
42 @ CHECK: adceq  r1, r2, #3840           @ encoding: [0x0f,0x1c,0xa2,0x02]
43
44 @------------------------------------------------------------------------------
45 @ ADC (register)
46 @ ADC (shifted register)
47 @------------------------------------------------------------------------------
48   adc r4, r5, r6
49   @ Constant shifts
50   adc r4, r5, r6, lsl #1
51   adc r4, r5, r6, lsl #31
52   adc r4, r5, r6, lsr #1
53   adc r4, r5, r6, lsr #31
54   adc r4, r5, r6, lsr #32
55   adc r4, r5, r6, asr #1
56   adc r4, r5, r6, asr #31
57   adc r4, r5, r6, asr #32
58   adc r4, r5, r6, ror #1
59   adc r4, r5, r6, ror #31
60
61   @ Register shifts
62   adc r6, r7, r8, lsl r9
63   adc r6, r7, r8, lsr r9
64   adc r6, r7, r8, asr r9
65   adc r6, r7, r8, ror r9
66   adc r4, r5, r6, rrx
67
68   @ Destination register is optional
69   adc r5, r6
70   adc r4, r5, lsl #1
71   adc r4, r5, lsl #31
72   adc r4, r5, lsr #1
73   adc r4, r5, lsr #31
74   adc r4, r5, lsr #32
75   adc r4, r5, asr #1
76   adc r4, r5, asr #31
77   adc r4, r5, asr #32
78   adc r4, r5, ror #1
79   adc r4, r5, ror #31
80   adc r4, r5, rrx
81   adc r6, r7, lsl r9
82   adc r6, r7, lsr r9
83   adc r6, r7, asr r9
84   adc r6, r7, ror r9
85   adc r4, r5, rrx
86
87 @ CHECK: adc    r4, r5, r6              @ encoding: [0x06,0x40,0xa5,0xe0]
88
89 @ CHECK: adc    r4, r5, r6, lsl #1      @ encoding: [0x86,0x40,0xa5,0xe0]
90 @ CHECK: adc    r4, r5, r6, lsl #31     @ encoding: [0x86,0x4f,0xa5,0xe0]
91 @ CHECK: adc    r4, r5, r6, lsr #1      @ encoding: [0xa6,0x40,0xa5,0xe0]
92 @ CHECK: adc    r4, r5, r6, lsr #31     @ encoding: [0xa6,0x4f,0xa5,0xe0]
93 @ CHECK: adc    r4, r5, r6, lsr #32     @ encoding: [0x26,0x40,0xa5,0xe0]
94 @ CHECK: adc    r4, r5, r6, asr #1      @ encoding: [0xc6,0x40,0xa5,0xe0]
95 @ CHECK: adc    r4, r5, r6, asr #31     @ encoding: [0xc6,0x4f,0xa5,0xe0]
96 @ CHECK: adc    r4, r5, r6, asr #32     @ encoding: [0x46,0x40,0xa5,0xe0]
97 @ CHECK: adc    r4, r5, r6, ror #1      @ encoding: [0xe6,0x40,0xa5,0xe0]
98 @ CHECK: adc    r4, r5, r6, ror #31     @ encoding: [0xe6,0x4f,0xa5,0xe0]
99
100 @ CHECK: adc    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0xa7,0xe0]
101 @ CHECK: adc    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0xa7,0xe0]
102 @ CHECK: adc    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0xa7,0xe0]
103 @ CHECK: adc    r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0xa7,0xe0]
104 @ CHECK: adc    r4, r5, r6, rrx         @ encoding: [0x66,0x40,0xa5,0xe0]
105
106 @ CHECK: adc    r5, r5, r6              @ encoding: [0x06,0x50,0xa5,0xe0]
107 @ CHECK: adc    r4, r4, r5, lsl #1      @ encoding: [0x85,0x40,0xa4,0xe0]
108 @ CHECK: adc    r4, r4, r5, lsl #31     @ encoding: [0x85,0x4f,0xa4,0xe0]
109 @ CHECK: adc    r4, r4, r5, lsr #1      @ encoding: [0xa5,0x40,0xa4,0xe0]
110 @ CHECK: adc    r4, r4, r5, lsr #31     @ encoding: [0xa5,0x4f,0xa4,0xe0]
111 @ CHECK: adc    r4, r4, r5, lsr #32     @ encoding: [0x25,0x40,0xa4,0xe0]
112 @ CHECK: adc    r4, r4, r5, asr #1      @ encoding: [0xc5,0x40,0xa4,0xe0]
113 @ CHECK: adc    r4, r4, r5, asr #31     @ encoding: [0xc5,0x4f,0xa4,0xe0]
114 @ CHECK: adc    r4, r4, r5, asr #32     @ encoding: [0x45,0x40,0xa4,0xe0]
115 @ CHECK: adc    r4, r4, r5, ror #1      @ encoding: [0xe5,0x40,0xa4,0xe0]
116 @ CHECK: adc    r4, r4, r5, ror #31     @ encoding: [0xe5,0x4f,0xa4,0xe0]
117 @ CHECK: adc    r4, r4, r5, rrx         @ encoding: [0x65,0x40,0xa4,0xe0]
118 @ CHECK: adc    r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0xa6,0xe0]
119 @ CHECK: adc    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0xa6,0xe0]
120 @ CHECK: adc    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0xa6,0xe0]
121 @ CHECK: adc    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xa6,0xe0]
122 @ CHECK: adc    r4, r4, r5, rrx         @ encoding: [0x65,0x40,0xa4,0xe0]
123
124
125 @------------------------------------------------------------------------------
126 @ FIXME: ADR
127 @------------------------------------------------------------------------------
128
129 @------------------------------------------------------------------------------
130 @ ADD
131 @------------------------------------------------------------------------------
132   add r4, r5, #0xf000
133   add r4, r5, r6
134   add r4, r5, r6, lsl #5
135   add r4, r5, r6, lsr #5
136   add r4, r5, r6, lsr #5
137   add r4, r5, r6, asr #5
138   add r4, r5, r6, ror #5
139   add r6, r7, r8, lsl r9
140   add r6, r7, r8, lsr r9
141   add r6, r7, r8, asr r9
142   add r6, r7, r8, ror r9
143   add r4, r5, r6, rrx
144
145   @ destination register is optional
146   add r5, #0xf000
147   add r4, r5
148   add r4, r5, lsl #5
149   add r4, r5, lsr #5
150   add r4, r5, lsr #5
151   add r4, r5, asr #5
152   add r4, r5, ror #5
153   add r6, r7, lsl r9
154   add r6, r7, lsr r9
155   add r6, r7, asr r9
156   add r6, r7, ror r9
157   add r4, r5, rrx
158
159 @ CHECK: add    r4, r5, #61440          @ encoding: [0x0f,0x4a,0x85,0xe2]
160 @ CHECK: add    r4, r5, r6              @ encoding: [0x06,0x40,0x85,0xe0]
161 @ CHECK: add    r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x85,0xe0]
162 @ CHECK: add    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe0]
163 @ CHECK: add    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe0]
164 @ CHECK: add    r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x85,0xe0]
165 @ CHECK: add    r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x85,0xe0]
166 @ CHECK: add    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x87,0xe0]
167 @ CHECK: add    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x87,0xe0]
168 @ CHECK: add    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x87,0xe0]
169 @ CHECK: add    r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0xe0]
170 @ CHECK: add    r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x85,0xe0]
171
172
173 @ CHECK: add    r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0xe2]
174 @ CHECK: add    r4, r4, r5              @ encoding: [0x05,0x40,0x84,0xe0]
175 @ CHECK: add    r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x84,0xe0]
176 @ CHECK: add    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe0]
177 @ CHECK: add    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe0]
178 @ CHECK: add    r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x84,0xe0]
179 @ CHECK: add    r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x84,0xe0]
180 @ CHECK: add    r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x86,0xe0]
181 @ CHECK: add    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x86,0xe0]
182 @ CHECK: add    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x86,0xe0]
183 @ CHECK: add    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x86,0xe0]
184 @ CHECK: add    r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x84,0xe0]
185
186
187 @------------------------------------------------------------------------------
188 @ AND
189 @------------------------------------------------------------------------------
190   and r10, r1, #0xf
191   and r10, r1, r6
192   and r10, r1, r6, lsl #10
193   and r10, r1, r6, lsr #10
194   and r10, r1, r6, lsr #10
195   and r10, r1, r6, asr #10
196   and r10, r1, r6, ror #10
197   and r6, r7, r8, lsl r2
198   and r6, r7, r8, lsr r2
199   and r6, r7, r8, asr r2
200   and r6, r7, r8, ror r2
201   and r10, r1, r6, rrx
202
203   @ destination register is optional
204   and r1, #0xf
205   and r10, r1
206   and r10, r1, lsl #10
207   and r10, r1, lsr #10
208   and r10, r1, lsr #10
209   and r10, r1, asr #10
210   and r10, r1, ror #10
211   and r6, r7, lsl r2
212   and r6, r7, lsr r2
213   and r6, r7, asr r2
214   and r6, r7, ror r2
215   and r10, r1, rrx
216
217 @ CHECK: and    r10, r1, #15            @ encoding: [0x0f,0xa0,0x01,0xe2]
218 @ CHECK: and    r10, r1, r6             @ encoding: [0x06,0xa0,0x01,0xe0]
219 @ CHECK: and    r10, r1, r6, lsl #10    @ encoding: [0x06,0xa5,0x01,0xe0]
220 @ CHECK: and    r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0x01,0xe0]
221 @ CHECK: and    r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0x01,0xe0]
222 @ CHECK: and    r10, r1, r6, asr #10    @ encoding: [0x46,0xa5,0x01,0xe0]
223 @ CHECK: and    r10, r1, r6, ror #10    @ encoding: [0x66,0xa5,0x01,0xe0]
224 @ CHECK: and    r6, r7, r8, lsl r2      @ encoding: [0x18,0x62,0x07,0xe0]
225 @ CHECK: and    r6, r7, r8, lsr r2      @ encoding: [0x38,0x62,0x07,0xe0]
226 @ CHECK: and    r6, r7, r8, asr r2      @ encoding: [0x58,0x62,0x07,0xe0]
227 @ CHECK: and    r6, r7, r8, ror r2      @ encoding: [0x78,0x62,0x07,0xe0]
228 @ CHECK: and    r10, r1, r6, rrx        @ encoding: [0x66,0xa0,0x01,0xe0]
229
230 @ CHECK: and    r1, r1, #15             @ encoding: [0x0f,0x10,0x01,0xe2]
231 @ CHECK: and    r10, r10, r1            @ encoding: [0x01,0xa0,0x0a,0xe0]
232 @ CHECK: and    r10, r10, r1, lsl #10   @ encoding: [0x01,0xa5,0x0a,0xe0]
233 @ CHECK: and    r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0x0a,0xe0]
234 @ CHECK: and    r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0x0a,0xe0]
235 @ CHECK: and    r10, r10, r1, asr #10   @ encoding: [0x41,0xa5,0x0a,0xe0]
236 @ CHECK: and    r10, r10, r1, ror #10   @ encoding: [0x61,0xa5,0x0a,0xe0]
237 @ CHECK: and    r6, r6, r7, lsl r2      @ encoding: [0x17,0x62,0x06,0xe0]
238 @ CHECK: and    r6, r6, r7, lsr r2      @ encoding: [0x37,0x62,0x06,0xe0]
239 @ CHECK: and    r6, r6, r7, asr r2      @ encoding: [0x57,0x62,0x06,0xe0]
240 @ CHECK: and    r6, r6, r7, ror r2      @ encoding: [0x77,0x62,0x06,0xe0]
241 @ CHECK: and    r10, r10, r1, rrx       @ encoding: [0x61,0xa0,0x0a,0xe0]
242
243 @------------------------------------------------------------------------------
244 @ FIXME: ASR
245 @------------------------------------------------------------------------------
246 @------------------------------------------------------------------------------
247 @ FIXME: B
248 @------------------------------------------------------------------------------
249 @------------------------------------------------------------------------------
250 @ FIXME: BFC
251 @------------------------------------------------------------------------------
252 @------------------------------------------------------------------------------
253 @ FIXME: BFI
254 @------------------------------------------------------------------------------
255
256 @------------------------------------------------------------------------------
257 @ BIC
258 @------------------------------------------------------------------------------
259   bic r10, r1, #0xf
260   bic r10, r1, r6
261   bic r10, r1, r6, lsl #10
262   bic r10, r1, r6, lsr #10
263   bic r10, r1, r6, lsr #10
264   bic r10, r1, r6, asr #10
265   bic r10, r1, r6, ror #10
266   bic r6, r7, r8, lsl r2
267   bic r6, r7, r8, lsr r2
268   bic r6, r7, r8, asr r2
269   bic r6, r7, r8, ror r2
270   bic r10, r1, r6, rrx
271
272   @ destination register is optional
273   bic r1, #0xf
274   bic r10, r1
275   bic r10, r1, lsl #10
276   bic r10, r1, lsr #10
277   bic r10, r1, lsr #10
278   bic r10, r1, asr #10
279   bic r10, r1, ror #10
280   bic r6, r7, lsl r2
281   bic r6, r7, lsr r2
282   bic r6, r7, asr r2
283   bic r6, r7, ror r2
284   bic r10, r1, rrx
285
286 @ CHECK: bic    r10, r1, #15            @ encoding: [0x0f,0xa0,0xc1,0xe3]
287 @ CHECK: bic    r10, r1, r6             @ encoding: [0x06,0xa0,0xc1,0xe1]
288 @ CHECK: bic    r10, r1, r6, lsl #10    @ encoding: [0x06,0xa5,0xc1,0xe1]
289 @ CHECK: bic    r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0xc1,0xe1]
290 @ CHECK: bic    r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0xc1,0xe1]
291 @ CHECK: bic    r10, r1, r6, asr #10    @ encoding: [0x46,0xa5,0xc1,0xe1]
292 @ CHECK: bic    r10, r1, r6, ror #10    @ encoding: [0x66,0xa5,0xc1,0xe1]
293 @ CHECK: bic    r6, r7, r8, lsl r2      @ encoding: [0x18,0x62,0xc7,0xe1]
294 @ CHECK: bic    r6, r7, r8, lsr r2      @ encoding: [0x38,0x62,0xc7,0xe1]
295 @ CHECK: bic    r6, r7, r8, asr r2      @ encoding: [0x58,0x62,0xc7,0xe1]
296 @ CHECK: bic    r6, r7, r8, ror r2      @ encoding: [0x78,0x62,0xc7,0xe1]
297 @ CHECK: bic    r10, r1, r6, rrx        @ encoding: [0x66,0xa0,0xc1,0xe1]
298
299
300 @ CHECK: bic    r1, r1, #15             @ encoding: [0x0f,0x10,0xc1,0xe3]
301 @ CHECK: bic    r10, r10, r1            @ encoding: [0x01,0xa0,0xca,0xe1]
302 @ CHECK: bic    r10, r10, r1, lsl #10   @ encoding: [0x01,0xa5,0xca,0xe1]
303 @ CHECK: bic    r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0xca,0xe1]
304 @ CHECK: bic    r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0xca,0xe1]
305 @ CHECK: bic    r10, r10, r1, asr #10   @ encoding: [0x41,0xa5,0xca,0xe1]
306 @ CHECK: bic    r10, r10, r1, ror #10   @ encoding: [0x61,0xa5,0xca,0xe1]
307 @ CHECK: bic    r6, r6, r7, lsl r2      @ encoding: [0x17,0x62,0xc6,0xe1]
308 @ CHECK: bic    r6, r6, r7, lsr r2      @ encoding: [0x37,0x62,0xc6,0xe1]
309 @ CHECK: bic    r6, r6, r7, asr r2      @ encoding: [0x57,0x62,0xc6,0xe1]
310 @ CHECK: bic    r6, r6, r7, ror r2      @ encoding: [0x77,0x62,0xc6,0xe1]
311 @ CHECK: bic    r10, r10, r1, rrx       @ encoding: [0x61,0xa0,0xca,0xe1]
312
313 @------------------------------------------------------------------------------
314 @ BKPT
315 @------------------------------------------------------------------------------
316   bkpt #10
317   bkpt #65535
318
319 @ CHECK: bkpt  #10                      @ encoding: [0x7a,0x00,0x20,0xe1]
320 @ CHECK: bkpt  #65535                   @ encoding: [0x7f,0xff,0x2f,0xe1]
321
322 @------------------------------------------------------------------------------
323 @ BL/BLX (immediate)
324 @------------------------------------------------------------------------------
325
326   bl _bar
327   @ FIXME: blx _bar
328
329 @ CHECK: bl  _bar @ encoding: [A,A,A,0xeb]
330 @ CHECK:   @   fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
331
332 @------------------------------------------------------------------------------
333 @ BLX (register)
334 @------------------------------------------------------------------------------
335   blx r2
336   blxne r2
337
338 @ CHECK: blx r2                         @ encoding: [0x32,0xff,0x2f,0xe1]
339 @ CHECK: blxne r2                       @ encoding: [0x32,0xff,0x2f,0x11]
340
341 @------------------------------------------------------------------------------
342 @ BX
343 @------------------------------------------------------------------------------
344
345   bx r2
346   bxne r2
347
348 @ CHECK: bx     r2                      @ encoding: [0x12,0xff,0x2f,0xe1]
349 @ CHECK: bxne   r2                      @ encoding: [0x12,0xff,0x2f,0x11]
350
351 @------------------------------------------------------------------------------
352 @ BXJ
353 @------------------------------------------------------------------------------
354
355   bxj r2
356   bxjne r2
357
358 @ CHECK: bxj    r2                      @ encoding: [0x22,0xff,0x2f,0xe1]
359 @ CHECK: bxjne  r2                      @ encoding: [0x22,0xff,0x2f,0x11]
360
361 @------------------------------------------------------------------------------
362 @ FIXME: CBNZ/CBZ
363 @------------------------------------------------------------------------------
364
365
366 @------------------------------------------------------------------------------
367 @ CDP/CDP2
368 @------------------------------------------------------------------------------
369   cdp  p7, #1, c1, c1, c1, #4
370   cdp2  p7, #1, c1, c1, c1, #4
371
372 @ CHECK: cdp  p7, #1, c1, c1, c1, #4     @ encoding: [0x81,0x17,0x11,0xee]
373 @ CHECK: cdp2  p7, #1, c1, c1, c1, #4    @ encoding: [0x81,0x17,0x11,0xfe]
374
375
376 @------------------------------------------------------------------------------
377 @ CLREX
378 @------------------------------------------------------------------------------
379   clrex
380
381 @ CHECK: clrex                           @ encoding: [0x1f,0xf0,0x7f,0xf5]
382
383
384 @------------------------------------------------------------------------------
385 @ CLZ
386 @------------------------------------------------------------------------------
387   clz r1, r2
388   clzeq r1, r2
389
390 @ CHECK: clz r1, r2                      @ encoding: [0x12,0x1f,0x6f,0xe1]
391 @ CHECK: clzeq r1, r2                    @ encoding: [0x12,0x1f,0x6f,0x01]
392
393 @------------------------------------------------------------------------------
394 @ CMN
395 @------------------------------------------------------------------------------
396   cmn r1, #0xf
397   cmn r1, r6
398   cmn r1, r6, lsl #10
399   cmn r1, r6, lsr #10
400   cmn sp, r6, lsr #10
401   cmn r1, r6, asr #10
402   cmn r1, r6, ror #10
403   cmn r7, r8, lsl r2
404   cmn sp, r8, lsr r2
405   cmn r7, r8, asr r2
406   cmn r7, r8, ror r2
407   cmn r1, r6, rrx
408
409 @ CHECK: cmn    r1, #15                 @ encoding: [0x0f,0x00,0x71,0xe3]
410 @ CHECK: cmn    r1, r6                  @ encoding: [0x06,0x00,0x71,0xe1]
411 @ CHECK: cmn    r1, r6, lsl #10         @ encoding: [0x06,0x05,0x71,0xe1]
412 @ CHECK: cmn    r1, r6, lsr #10         @ encoding: [0x26,0x05,0x71,0xe1]
413 @ CHECK: cmn    sp, r6, lsr #10         @ encoding: [0x26,0x05,0x7d,0xe1]
414 @ CHECK: cmn    r1, r6, asr #10         @ encoding: [0x46,0x05,0x71,0xe1]
415 @ CHECK: cmn    r1, r6, ror #10         @ encoding: [0x66,0x05,0x71,0xe1]
416 @ CHECK: cmn    r7, r8, lsl r2          @ encoding: [0x18,0x02,0x77,0xe1]
417 @ CHECK: cmn    sp, r8, lsr r2          @ encoding: [0x38,0x02,0x7d,0xe1]
418 @ CHECK: cmn    r7, r8, asr r2          @ encoding: [0x58,0x02,0x77,0xe1]
419 @ CHECK: cmn    r7, r8, ror r2          @ encoding: [0x78,0x02,0x77,0xe1]
420 @ CHECK: cmn    r1, r6, rrx             @ encoding: [0x66,0x00,0x71,0xe1]
421
422 @------------------------------------------------------------------------------
423 @ CMP
424 @------------------------------------------------------------------------------
425   cmp r1, #0xf
426   cmp r1, r6
427   cmp r1, r6, lsl #10
428   cmp r1, r6, lsr #10
429   cmp sp, r6, lsr #10
430   cmp r1, r6, asr #10
431   cmp r1, r6, ror #10
432   cmp r7, r8, lsl r2
433   cmp sp, r8, lsr r2
434   cmp r7, r8, asr r2
435   cmp r7, r8, ror r2
436   cmp r1, r6, rrx
437
438 @ CHECK: cmp    r1, #15                 @ encoding: [0x0f,0x00,0x51,0xe3]
439 @ CHECK: cmp    r1, r6                  @ encoding: [0x06,0x00,0x51,0xe1]
440 @ CHECK: cmp    r1, r6, lsl #10         @ encoding: [0x06,0x05,0x51,0xe1]
441 @ CHECK: cmp    r1, r6, lsr #10         @ encoding: [0x26,0x05,0x51,0xe1]
442 @ CHECK: cmp    sp, r6, lsr #10         @ encoding: [0x26,0x05,0x5d,0xe1]
443 @ CHECK: cmp    r1, r6, asr #10         @ encoding: [0x46,0x05,0x51,0xe1]
444 @ CHECK: cmp    r1, r6, ror #10         @ encoding: [0x66,0x05,0x51,0xe1]
445 @ CHECK: cmp    r7, r8, lsl r2          @ encoding: [0x18,0x02,0x57,0xe1]
446 @ CHECK: cmp    sp, r8, lsr r2          @ encoding: [0x38,0x02,0x5d,0xe1]
447 @ CHECK: cmp    r7, r8, asr r2          @ encoding: [0x58,0x02,0x57,0xe1]
448 @ CHECK: cmp    r7, r8, ror r2          @ encoding: [0x78,0x02,0x57,0xe1]
449 @ CHECK: cmp    r1, r6, rrx             @ encoding: [0x66,0x00,0x51,0xe1]
450
451 @------------------------------------------------------------------------------
452 @ DBG
453 @------------------------------------------------------------------------------
454   dbg #0
455   dbg #5
456   dbg #15
457
458 @ CHECK: dbg #0                         @ encoding: [0xf0,0xf0,0x20,0xe3]
459 @ CHECK: dbg #5                         @ encoding: [0xf5,0xf0,0x20,0xe3]
460 @ CHECK: dbg #15                        @ encoding: [0xff,0xf0,0x20,0xe3]
461
462
463 @------------------------------------------------------------------------------
464 @ DMB
465 @------------------------------------------------------------------------------
466   dmb sy
467   dmb st
468   dmb sh
469   dmb ish
470   dmb shst
471   dmb ishst
472   dmb un
473   dmb nsh
474   dmb unst
475   dmb nshst
476   dmb osh
477   dmb oshst
478   dmb
479
480 @ CHECK: dmb    sy                      @ encoding: [0x5f,0xf0,0x7f,0xf5]
481 @ CHECK: dmb    st                      @ encoding: [0x5e,0xf0,0x7f,0xf5]
482 @ CHECK: dmb    ish                     @ encoding: [0x5b,0xf0,0x7f,0xf5]
483 @ CHECK: dmb    ish                     @ encoding: [0x5b,0xf0,0x7f,0xf5]
484 @ CHECK: dmb    ishst                   @ encoding: [0x5a,0xf0,0x7f,0xf5]
485 @ CHECK: dmb    ishst                   @ encoding: [0x5a,0xf0,0x7f,0xf5]
486 @ CHECK: dmb    nsh                     @ encoding: [0x57,0xf0,0x7f,0xf5]
487 @ CHECK: dmb    nsh                     @ encoding: [0x57,0xf0,0x7f,0xf5]
488 @ CHECK: dmb    nshst                   @ encoding: [0x56,0xf0,0x7f,0xf5]
489 @ CHECK: dmb    nshst                   @ encoding: [0x56,0xf0,0x7f,0xf5]
490 @ CHECK: dmb    osh                     @ encoding: [0x53,0xf0,0x7f,0xf5]
491 @ CHECK: dmb    oshst                   @ encoding: [0x52,0xf0,0x7f,0xf5]
492 @ CHECK: dmb    sy                      @ encoding: [0x5f,0xf0,0x7f,0xf5]
493
494 @------------------------------------------------------------------------------
495 @ DSB
496 @------------------------------------------------------------------------------
497   dsb sy
498   dsb st
499   dsb sh
500   dsb ish
501   dsb shst
502   dsb ishst
503   dsb un
504   dsb nsh
505   dsb unst
506   dsb nshst
507   dsb osh
508   dsb oshst
509   dsb
510
511 @ CHECK: dsb    sy                      @ encoding: [0x4f,0xf0,0x7f,0xf5]
512 @ CHECK: dsb    st                      @ encoding: [0x4e,0xf0,0x7f,0xf5]
513 @ CHECK: dsb    ish                     @ encoding: [0x4b,0xf0,0x7f,0xf5]
514 @ CHECK: dsb    ish                     @ encoding: [0x4b,0xf0,0x7f,0xf5]
515 @ CHECK: dsb    ishst                   @ encoding: [0x4a,0xf0,0x7f,0xf5]
516 @ CHECK: dsb    ishst                   @ encoding: [0x4a,0xf0,0x7f,0xf5]
517 @ CHECK: dsb    nsh                     @ encoding: [0x47,0xf0,0x7f,0xf5]
518 @ CHECK: dsb    nsh                     @ encoding: [0x47,0xf0,0x7f,0xf5]
519 @ CHECK: dsb    nshst                   @ encoding: [0x46,0xf0,0x7f,0xf5]
520 @ CHECK: dsb    nshst                   @ encoding: [0x46,0xf0,0x7f,0xf5]
521 @ CHECK: dsb    osh                     @ encoding: [0x43,0xf0,0x7f,0xf5]
522 @ CHECK: dsb    oshst                   @ encoding: [0x42,0xf0,0x7f,0xf5]
523 @ CHECK: dsb    sy                      @ encoding: [0x4f,0xf0,0x7f,0xf5]
524
525 @------------------------------------------------------------------------------
526 @ EOR
527 @------------------------------------------------------------------------------
528   eor r4, r5, #0xf000
529   eor r4, r5, r6
530   eor r4, r5, r6, lsl #5
531   eor r4, r5, r6, lsr #5
532   eor r4, r5, r6, lsr #5
533   eor r4, r5, r6, asr #5
534   eor r4, r5, r6, ror #5
535   eor r6, r7, r8, lsl r9
536   eor r6, r7, r8, lsr r9
537   eor r6, r7, r8, asr r9
538   eor r6, r7, r8, ror r9
539   eor r4, r5, r6, rrx
540
541   @ destination register is optional
542   eor r5, #0xf000
543   eor r4, r5
544   eor r4, r5, lsl #5
545   eor r4, r5, lsr #5
546   eor r4, r5, lsr #5
547   eor r4, r5, asr #5
548   eor r4, r5, ror #5
549   eor r6, r7, lsl r9
550   eor r6, r7, lsr r9
551   eor r6, r7, asr r9
552   eor r6, r7, ror r9
553   eor r4, r5, rrx
554
555 @ CHECK: eor    r4, r5, #61440          @ encoding: [0x0f,0x4a,0x25,0xe2]
556 @ CHECK: eor    r4, r5, r6              @ encoding: [0x06,0x40,0x25,0xe0]
557 @ CHECK: eor    r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x25,0xe0]
558 @ CHECK: eor    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x25,0xe0]
559 @ CHECK: eor    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x25,0xe0]
560 @ CHECK: eor    r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x25,0xe0]
561 @ CHECK: eor    r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x25,0xe0]
562 @ CHECK: eor    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x27,0xe0]
563 @ CHECK: eor    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x27,0xe0]
564 @ CHECK: eor    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x27,0xe0]
565 @ CHECK: eor    r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x27,0xe0]
566 @ CHECK: eor    r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x25,0xe0]
567
568
569 @ CHECK: eor    r5, r5, #61440          @ encoding: [0x0f,0x5a,0x25,0xe2]
570 @ CHECK: eor    r4, r4, r5              @ encoding: [0x05,0x40,0x24,0xe0]
571 @ CHECK: eor    r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x24,0xe0]
572 @ CHECK: eor    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x24,0xe0]
573 @ CHECK: eor    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x24,0xe0]
574 @ CHECK: eor    r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x24,0xe0]
575 @ CHECK: eor    r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x24,0xe0]
576 @ CHECK: eor    r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x26,0xe0]
577 @ CHECK: eor    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x26,0xe0]
578 @ CHECK: eor    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x26,0xe0]
579 @ CHECK: eor    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x26,0xe0]
580 @ CHECK: eor    r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x24,0xe0]
581
582
583 @------------------------------------------------------------------------------
584 @ ISB
585 @------------------------------------------------------------------------------
586         isb sy
587         isb
588
589 @ CHECK: isb sy                         @ encoding: [0x6f,0xf0,0x7f,0xf5]
590 @ CHECK: isb sy                         @ encoding: [0x6f,0xf0,0x7f,0xf5]
591
592
593
594 @------------------------------------------------------------------------------
595 @ LDM*
596 @------------------------------------------------------------------------------
597         ldm       r2, {r1,r3-r6,sp}
598         ldmia     r2, {r1,r3-r6,sp}
599         ldmib     r2, {r1,r3-r6,sp}
600         ldmda     r2, {r1,r3-r6,sp}
601         ldmdb     r2, {r1,r3-r6,sp}
602         ldmfd     r2, {r1,r3-r6,sp}
603
604         @ with update
605         ldm       r2!, {r1,r3-r6,sp}
606         ldmib     r2!, {r1,r3-r6,sp}
607         ldmda     r2!, {r1,r3-r6,sp}
608         ldmdb     r2!, {r1,r3-r6,sp}
609
610 @ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
611 @ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
612 @ CHECK: ldmib r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe9]
613 @ CHECK: ldmda r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x12,0xe8]
614 @ CHECK: ldmdb r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x12,0xe9]
615 @ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
616
617 @ CHECK: ldm   r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xb2,0xe8]
618 @ CHECK: ldmib r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xb2,0xe9]
619 @ CHECK: ldmda r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x32,0xe8]
620 @ CHECK: ldmdb r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x32,0xe9]
621
622 @------------------------------------------------------------------------------
623 @ FIXME: LDR*
624 @------------------------------------------------------------------------------
625
626 @------------------------------------------------------------------------------
627 @ LDREX/LDREXB/LDREXH/LDREXD
628 @------------------------------------------------------------------------------
629         ldrexb  r3, [r4]
630         ldrexh  r2, [r5]
631         ldrex  r1, [r7]
632         ldrexd  r6, r7, [r8]
633
634 @ CHECK: ldrexb r3, [r4]                @ encoding: [0x9f,0x3f,0xd4,0xe1]
635 @ CHECK: ldrexh r2, [r5]                @ encoding: [0x9f,0x2f,0xf5,0xe1]
636 @ CHECK: ldrex  r1, [r7]                @ encoding: [0x9f,0x1f,0x97,0xe1]
637 @ CHECK: ldrexd r6, r7, [r8]            @ encoding: [0x9f,0x6f,0xb8,0xe1]
638
639
640 @------------------------------------------------------------------------------
641 @ FIXME: LSL
642 @------------------------------------------------------------------------------
643 @------------------------------------------------------------------------------
644 @ FIXME: LSR
645 @------------------------------------------------------------------------------
646
647 @------------------------------------------------------------------------------
648 @ MCR/MCR2
649 @------------------------------------------------------------------------------
650         mcr  p7, #1, r5, c1, c1, #4
651         mcr2  p7, #1, r5, c1, c1, #4
652
653 @ CHECK: mcr  p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xee]
654 @ CHECK: mcr2  p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xfe]
655
656 @------------------------------------------------------------------------------
657 @ MCRR/MCRR2
658 @------------------------------------------------------------------------------
659         mcrr  p7, #15, r5, r4, c1
660         mcrr2  p7, #15, r5, r4, c1
661
662 @ CHECK: mcrr  p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xec]
663 @ CHECK: mcrr2  p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xfc]
664
665
666 @------------------------------------------------------------------------------
667 @ MLA
668 @------------------------------------------------------------------------------
669         mla  r1,r2,r3,r4
670         mlas r1,r2,r3,r4
671         mlane  r1,r2,r3,r4
672         mlasne r1,r2,r3,r4
673
674 @ CHECK: mla    r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0xe0]
675 @ CHECK: mlas   r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0xe0]
676 @ CHECK: mlane  r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0x10]
677 @ CHECK: mlasne r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0x10]
678
679 @------------------------------------------------------------------------------
680 @ MLS
681 @------------------------------------------------------------------------------
682         mls  r2,r5,r6,r3
683         mlsne  r2,r5,r6,r3
684
685 @ CHECK: mls    r2, r5, r6, r3          @ encoding: [0x95,0x36,0x62,0xe0]
686 @ CHECK: mlsne  r2, r5, r6, r3          @ encoding: [0x95,0x36,0x62,0x10]
687
688 @------------------------------------------------------------------------------
689 @ MOV (immediate)
690 @------------------------------------------------------------------------------
691     mov r3, #7
692     mov r4, #0xff0
693     mov r5, #0xff0000
694     mov r6, #0xffff
695     movw r9, #0xffff
696     movs r3, #7
697     moveq r4, #0xff0
698     movseq r5, #0xff0000
699
700 @ CHECK: mov    r3, #7                  @ encoding: [0x07,0x30,0xa0,0xe3]
701 @ CHECK: mov    r4, #4080               @ encoding: [0xff,0x4e,0xa0,0xe3]
702 @ CHECK: mov    r5, #16711680           @ encoding: [0xff,0x58,0xa0,0xe3]
703 @ CHECK: movw   r6, #65535              @ encoding: [0xff,0x6f,0x0f,0xe3]
704 @ CHECK: movw   r9, #65535              @ encoding: [0xff,0x9f,0x0f,0xe3]
705 @ CHECK: movs   r3, #7                  @ encoding: [0x07,0x30,0xb0,0xe3]
706 @ CHECK: moveq  r4, #4080               @ encoding: [0xff,0x4e,0xa0,0x03]
707 @ CHECK: movseq r5, #16711680           @ encoding: [0xff,0x58,0xb0,0x03]
708
709 @------------------------------------------------------------------------------
710 @ MOV (register)
711 @------------------------------------------------------------------------------
712         mov r2, r3
713         movs r2, r3
714         moveq r2, r3
715         movseq r2, r3
716
717 @ CHECK: mov    r2, r3                  @ encoding: [0x03,0x20,0xa0,0xe1]
718 @ CHECK: movs   r2, r3                  @ encoding: [0x03,0x20,0xb0,0xe1]
719 @ CHECK: moveq  r2, r3                  @ encoding: [0x03,0x20,0xa0,0x01]
720 @ CHECK: movseq r2, r3                  @ encoding: [0x03,0x20,0xb0,0x01]
721
722 @------------------------------------------------------------------------------
723 @ MOVT
724 @------------------------------------------------------------------------------
725     movt r3, #7
726     movt r6, #0xffff
727     movteq r4, #0xff0
728
729 @ CHECK: movt   r3, #7                  @ encoding: [0x07,0x30,0x40,0xe3]
730 @ CHECK: movt   r6, #65535              @ encoding: [0xff,0x6f,0x4f,0xe3]
731 @ CHECK: movteq r4, #4080               @ encoding: [0xf0,0x4f,0x40,0x03]
732
733
734 @------------------------------------------------------------------------------
735 @ MRC/MRC2
736 @------------------------------------------------------------------------------
737         mrc  p14, #0, r1, c1, c2, #4
738         mrc2  p14, #0, r1, c1, c2, #4
739
740 @ CHECK: mrc  p14, #0, r1, c1, c2, #4   @ encoding: [0x92,0x1e,0x11,0xee]
741 @ CHECK: mrc2  p14, #0, r1, c1, c2, #4  @ encoding: [0x92,0x1e,0x11,0xfe]
742
743 @------------------------------------------------------------------------------
744 @ MRRC/MRRC2
745 @------------------------------------------------------------------------------
746         mrrc  p7, #1, r5, r4, c1
747         mrrc2  p7, #1, r5, r4, c1
748
749 @ CHECK: mrrc  p7, #1, r5, r4, c1       @ encoding: [0x11,0x57,0x54,0xec]
750 @ CHECK: mrrc2  p7, #1, r5, r4, c1      @ encoding: [0x11,0x57,0x54,0xfc]
751
752
753 @------------------------------------------------------------------------------
754 @ MRS
755 @------------------------------------------------------------------------------
756         mrs  r8, apsr
757         mrs  r8, cpsr
758         mrs  r8, spsr
759 @ CHECK: mrs  r8, apsr @ encoding: [0x00,0x80,0x0f,0xe1]
760 @ CHECK: mrs  r8, apsr @ encoding: [0x00,0x80,0x0f,0xe1]
761 @ CHECK: mrs  r8, spsr @ encoding: [0x00,0x80,0x4f,0xe1]
762
763
764
765 @------------------------------------------------------------------------------
766 @ MSR
767 @------------------------------------------------------------------------------
768
769         msr  apsr, #5
770         msr  apsr_g, #5
771         msr  apsr_nzcvq, #5
772         msr  APSR_nzcvq, #5
773         msr  apsr_nzcvqg, #5
774         msr  cpsr_fc, #5
775         msr  cpsr_c, #5
776         msr  cpsr_x, #5
777         msr  cpsr_fc, #5
778         msr  cpsr_all, #5
779         msr  cpsr_fsx, #5
780         msr  spsr_fc, #5
781         msr  SPSR_fsxc, #5
782         msr  cpsr_fsxc, #5
783
784 @ CHECK: msr    CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
785 @ CHECK: msr    APSR_g, #5              @ encoding: [0x05,0xf0,0x24,0xe3]
786 @ CHECK: msr    APSR_nzcvq, #5          @ encoding: [0x05,0xf0,0x28,0xe3]
787 @ CHECK: msr    APSR_nzcvq, #5          @ encoding: [0x05,0xf0,0x28,0xe3]
788 @ CHECK: msr    APSR_nzcvqg, #5         @ encoding: [0x05,0xf0,0x2c,0xe3]
789 @ CHECK: msr    CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
790 @ CHECK: msr    CPSR_c, #5              @ encoding: [0x05,0xf0,0x21,0xe3]
791 @ CHECK: msr    CPSR_x, #5              @ encoding: [0x05,0xf0,0x22,0xe3]
792 @ CHECK: msr    CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
793 @ CHECK: msr    CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
794 @ CHECK: msr    CPSR_fsx, #5            @ encoding: [0x05,0xf0,0x2e,0xe3]
795 @ CHECK: msr    SPSR_fc, #5             @ encoding: [0x05,0xf0,0x69,0xe3]
796 @ CHECK: msr    SPSR_fsxc, #5           @ encoding: [0x05,0xf0,0x6f,0xe3]
797 @ CHECK: msr    CPSR_fsxc, #5           @ encoding: [0x05,0xf0,0x2f,0xe3]
798
799         msr  apsr, r0
800         msr  apsr_g, r0
801         msr  apsr_nzcvq, r0
802         msr  APSR_nzcvq, r0
803         msr  apsr_nzcvqg, r0
804         msr  cpsr_fc, r0
805         msr  cpsr_c, r0
806         msr  cpsr_x, r0
807         msr  cpsr_fc, r0
808         msr  cpsr_all, r0
809         msr  cpsr_fsx, r0
810         msr  spsr_fc, r0
811         msr  SPSR_fsxc, r0
812         msr  cpsr_fsxc, r0
813
814 @ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
815 @ CHECK: msr  APSR_g, r0 @ encoding: [0x00,0xf0,0x24,0xe1]
816 @ CHECK: msr  APSR_nzcvq, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
817 @ CHECK: msr  APSR_nzcvq, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
818 @ CHECK: msr  APSR_nzcvqg, r0 @ encoding: [0x00,0xf0,0x2c,0xe1]
819 @ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
820 @ CHECK: msr  CPSR_c, r0 @ encoding: [0x00,0xf0,0x21,0xe1]
821 @ CHECK: msr  CPSR_x, r0 @ encoding: [0x00,0xf0,0x22,0xe1]
822 @ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
823 @ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
824 @ CHECK: msr  CPSR_fsx, r0 @ encoding: [0x00,0xf0,0x2e,0xe1]
825 @ CHECK: msr  SPSR_fc, r0 @ encoding: [0x00,0xf0,0x69,0xe1]
826 @ CHECK: msr  SPSR_fsxc, r0 @ encoding: [0x00,0xf0,0x6f,0xe1]
827 @ CHECK: msr  CPSR_fsxc, r0 @ encoding: [0x00,0xf0,0x2f,0xe1]
828
829 @------------------------------------------------------------------------------
830 @ MUL
831 @------------------------------------------------------------------------------
832
833   mul r5, r6, r7
834   muls r5, r6, r7
835   mulgt r5, r6, r7
836   mulsle r5, r6, r7
837
838 @ CHECK: mul    r5, r6, r7              @ encoding: [0x96,0x07,0x05,0xe0]
839 @ CHECK: muls   r5, r6, r7              @ encoding: [0x96,0x07,0x15,0xe0]
840 @ CHECK: mulgt  r5, r6, r7              @ encoding: [0x96,0x07,0x05,0xc0]
841 @ CHECK: mulsle r5, r6, r7              @ encoding: [0x96,0x07,0x15,0xd0]
842
843
844 @------------------------------------------------------------------------------
845 @ MVN (immediate)
846 @------------------------------------------------------------------------------
847     mvn r3, #7
848     mvn r4, #0xff0
849     mvn r5, #0xff0000
850     mvns r3, #7
851     mvneq r4, #0xff0
852     mvnseq r5, #0xff0000
853
854 @ CHECK: mvn    r3, #7                  @ encoding: [0x07,0x30,0xe0,0xe3]
855 @ CHECK: mvn    r4, #4080               @ encoding: [0xff,0x4e,0xe0,0xe3]
856 @ CHECK: mvn    r5, #16711680           @ encoding: [0xff,0x58,0xe0,0xe3]
857 @ CHECK: mvns   r3, #7                  @ encoding: [0x07,0x30,0xf0,0xe3]
858 @ CHECK: mvneq  r4, #4080               @ encoding: [0xff,0x4e,0xe0,0x03]
859 @ CHECK: mvnseq r5, #16711680           @ encoding: [0xff,0x58,0xf0,0x03]
860
861
862 @------------------------------------------------------------------------------
863 @ MVN (register)
864 @------------------------------------------------------------------------------
865         mvn r2, r3
866         mvns r2, r3
867         mvn r5, r6, lsl #19
868         mvn r5, r6, lsr #9
869         mvn r5, r6, asr #4
870         mvn r5, r6, ror #6
871         mvn r5, r6, rrx
872         mvneq r2, r3
873         mvnseq r2, r3, lsl #10
874
875 @ CHECK: mvn    r2, r3                  @ encoding: [0x03,0x20,0xe0,0xe1]
876 @ CHECK: mvns   r2, r3                  @ encoding: [0x03,0x20,0xf0,0xe1]
877 @ CHECK: mvn    r5, r6, lsl #19         @ encoding: [0x86,0x59,0xe0,0xe1]
878 @ CHECK: mvn    r5, r6, lsr #9          @ encoding: [0xa6,0x54,0xe0,0xe1]
879 @ CHECK: mvn    r5, r6, asr #4          @ encoding: [0x46,0x52,0xe0,0xe1]
880 @ CHECK: mvn    r5, r6, ror #6          @ encoding: [0x66,0x53,0xe0,0xe1]
881 @ CHECK: mvn    r5, r6, rrx             @ encoding: [0x66,0x50,0xe0,0xe1]
882 @ CHECK: mvneq  r2, r3                  @ encoding: [0x03,0x20,0xe0,0x01]
883 @ CHECK: mvnseq r2, r3, lsl #10         @ encoding: [0x03,0x25,0xf0,0x01]
884
885
886 @------------------------------------------------------------------------------
887 @ MVN (shifted register)
888 @------------------------------------------------------------------------------
889         mvn r5, r6, lsl r7
890         mvns r5, r6, lsr r7
891         mvngt r5, r6, asr r7
892         mvnslt r5, r6, ror r7
893
894 @ CHECK: mvn    r5, r6, lsl r7          @ encoding: [0x16,0x57,0xe0,0xe1]
895 @ CHECK: mvns   r5, r6, lsr r7          @ encoding: [0x36,0x57,0xf0,0xe1]
896 @ CHECK: mvngt  r5, r6, asr r7          @ encoding: [0x56,0x57,0xe0,0xc1]
897 @ CHECK: mvnslt r5, r6, ror r7          @ encoding: [0x76,0x57,0xf0,0xb1]
898
899 @------------------------------------------------------------------------------
900 @ NOP
901 @------------------------------------------------------------------------------
902         nop
903         nopgt
904
905 @ CHECK: nop @ encoding: [0x00,0xf0,0x20,0xe3]
906 @ CHECK: nopgt @ encoding: [0x00,0xf0,0x20,0xc3]
907
908
909 @------------------------------------------------------------------------------
910 @ ORR
911 @------------------------------------------------------------------------------
912         orr r4, r5, #0xf000
913         orr r4, r5, r6
914         orr r4, r5, r6, lsl #5
915         orr r4, r5, r6, lsr #5
916         orr r4, r5, r6, lsr #5
917         orr r4, r5, r6, asr #5
918         orr r4, r5, r6, ror #5
919         orr r6, r7, r8, lsl r9
920         orr r6, r7, r8, lsr r9
921         orr r6, r7, r8, asr r9
922         orr r6, r7, r8, ror r9
923         orr r4, r5, r6, rrx
924
925         @ destination register is optional
926         orr r5, #0xf000
927         orr r4, r5
928         orr r4, r5, lsl #5
929         orr r4, r5, lsr #5
930         orr r4, r5, lsr #5
931         orr r4, r5, asr #5
932         orr r4, r5, ror #5
933         orr r6, r7, lsl r9
934         orr r6, r7, lsr r9
935         orr r6, r7, asr r9
936         orr r6, r7, ror r9
937         orr r4, r5, rrx
938
939 @ CHECK: orr    r4, r5, #61440          @ encoding: [0x0f,0x4a,0x85,0xe3]
940 @ CHECK: orr    r4, r5, r6              @ encoding: [0x06,0x40,0x85,0xe1]
941 @ CHECK: orr    r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x85,0xe1]
942 @ CHECK: orr    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe1]
943 @ CHECK: orr    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe1]
944 @ CHECK: orr    r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x85,0xe1]
945 @ CHECK: orr    r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x85,0xe1]
946 @ CHECK: orr    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x87,0xe1]
947 @ CHECK: orr    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x87,0xe1]
948 @ CHECK: orr    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x87,0xe1]
949 @ CHECK: orr    r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0xe1]
950 @ CHECK: orr    r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x85,0xe1]
951
952 @ CHECK: orr    r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0xe3]
953 @ CHECK: orr    r4, r4, r5              @ encoding: [0x05,0x40,0x84,0xe1]
954 @ CHECK: orr    r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x84,0xe1]
955 @ CHECK: orr    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe1]
956 @ CHECK: orr    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe1]
957 @ CHECK: orr    r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x84,0xe1]
958 @ CHECK: orr    r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x84,0xe1]
959 @ CHECK: orr    r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x86,0xe1]
960 @ CHECK: orr    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x86,0xe1]
961 @ CHECK: orr    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x86,0xe1]
962 @ CHECK: orr    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x86,0xe1]
963 @ CHECK: orr    r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x84,0xe1]
964
965         orrseq r4, r5, #0xf000
966         orrne r4, r5, r6
967         orrseq r4, r5, r6, lsl #5
968         orrlo r6, r7, r8, ror r9
969         orrshi r4, r5, r6, rrx
970         orrcs r5, #0xf000
971         orrseq r4, r5
972         orrne r6, r7, asr r9
973         orrslt r6, r7, ror r9
974         orrsgt r4, r5, rrx
975
976 @ CHECK: orrseq r4, r5, #61440          @ encoding: [0x0f,0x4a,0x95,0x03]
977 @ CHECK: orrne  r4, r5, r6              @ encoding: [0x06,0x40,0x85,0x11]
978 @ CHECK: orrseq r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x95,0x01]
979 @ CHECK: orrlo  r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0x31]
980 @ CHECK: orrshi r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x95,0x81]
981 @ CHECK: orrhs  r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0x23]
982 @ CHECK: orrseq r4, r4, r5              @ encoding: [0x05,0x40,0x94,0x01]
983 @ CHECK: orrne  r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x86,0x11]
984 @ CHECK: orrslt r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x96,0xb1]
985 @ CHECK: orrsgt r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x94,0xc1]
986
987 @------------------------------------------------------------------------------
988 @ PKH
989 @------------------------------------------------------------------------------
990         pkhbt r2, r2, r3
991         pkhbt r2, r2, r3, lsl #31
992         pkhbt r2, r2, r3, lsl #0
993         pkhbt r2, r2, r3, lsl #15
994
995         pkhtb r2, r2, r3
996         pkhtb r2, r2, r3, asr #31
997         pkhtb r2, r2, r3, asr #15
998
999 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
1000 @ CHECK: pkhbt  r2, r2, r3, lsl #31     @ encoding: [0x93,0x2f,0x82,0xe6]
1001 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
1002 @ CHECK: pkhbt  r2, r2, r3, lsl #15     @ encoding: [0x93,0x27,0x82,0xe6]
1003
1004 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
1005 @ CHECK: pkhtb  r2, r2, r3, asr #31     @ encoding: [0xd3,0x2f,0x82,0xe6]
1006 @ CHECK: pkhtb  r2, r2, r3, asr #15     @ encoding: [0xd3,0x27,0x82,0xe6]
1007
1008 @------------------------------------------------------------------------------
1009 @ FIXME: PLD
1010 @------------------------------------------------------------------------------
1011 @------------------------------------------------------------------------------
1012 @ FIXME: PLI
1013 @------------------------------------------------------------------------------
1014
1015
1016 @------------------------------------------------------------------------------
1017 @ POP
1018 @------------------------------------------------------------------------------
1019         pop {r7}
1020         pop {r7, r8, r9, r10}
1021
1022 @ FIXME: pop of a single register should encode as "ldr r7, [sp], #4"
1023 @ CHECK-FIXME: pop      {r7}                    @ encoding: [0x04,0x70,0x9d,0xe4]
1024 @ CHECK: pop    {r7, r8, r9, r10}       @ encoding: [0x80,0x07,0xbd,0xe8]
1025
1026
1027 @------------------------------------------------------------------------------
1028 @ PUSH
1029 @------------------------------------------------------------------------------
1030         push {r7}
1031         push {r7, r8, r9, r10}
1032
1033 @ FIXME: push of a single register should encode as "str r7, [sp, #-4]!"
1034 @ CHECK-FIXME: push     {r7}                    @ encoding: [0x04,0x70,0x2d,0xe5]
1035 @ CHECK: push   {r7, r8, r9, r10}       @ encoding: [0x80,0x07,0x2d,0xe9]
1036
1037
1038 @------------------------------------------------------------------------------
1039 @ QADD/QADD16/QADD8
1040 @------------------------------------------------------------------------------
1041         qadd r1, r2, r3
1042         qaddne r1, r2, r3
1043         qadd16 r1, r2, r3
1044         qadd16gt r1, r2, r3
1045         qadd8 r1, r2, r3
1046         qadd8le r1, r2, r3
1047
1048 @ CHECK: qadd   r1, r2, r3              @ encoding: [0x52,0x10,0x03,0xe1]
1049 @ CHECK: qaddne r1, r2, r3              @ encoding: [0x52,0x10,0x03,0x11]
1050 @ CHECK: qadd16 r1, r2, r3              @ encoding: [0x13,0x1f,0x22,0xe6]
1051 @ CHECK: qadd16gt       r1, r2, r3      @ encoding: [0x13,0x1f,0x22,0xc6]
1052 @ CHECK: qadd8  r1, r2, r3              @ encoding: [0x93,0x1f,0x22,0xe6]
1053 @ CHECK: qadd8le r1, r2, r3             @ encoding: [0x93,0x1f,0x22,0xd6]
1054
1055
1056 @------------------------------------------------------------------------------
1057 @ QDADD/QDSUB
1058 @------------------------------------------------------------------------------
1059         qdadd r6, r7, r8
1060         qdaddhi r6, r7, r8
1061         qdsub r6, r7, r8
1062         qdsubhi r6, r7, r8
1063
1064 @ CHECK: qdadd  r6, r7, r8              @ encoding: [0x57,0x60,0x48,0xe1]
1065 @ CHECK: qdaddhi r6, r7, r8             @ encoding: [0x57,0x60,0x48,0x81]
1066 @ CHECK: qdsub  r6, r7, r8              @ encoding: [0x57,0x60,0x68,0xe1]
1067 @ CHECK: qdsubhi r6, r7, r8             @ encoding: [0x57,0x60,0x68,0x81]
1068
1069
1070 @------------------------------------------------------------------------------
1071 @ QSAX
1072 @------------------------------------------------------------------------------
1073         qsax r9, r12, r0
1074         qsaxeq r9, r12, r0
1075
1076 @ CHECK: qsax   r9, r12, r0             @ encoding: [0x50,0x9f,0x2c,0xe6]
1077 @ CHECK: qsaxeq r9, r12, r0             @ encoding: [0x50,0x9f,0x2c,0x06]
1078
1079
1080 @------------------------------------------------------------------------------
1081 @ QADD/QADD16/QADD8
1082 @------------------------------------------------------------------------------
1083         qsub r1, r2, r3
1084         qsubne r1, r2, r3
1085         qsub16 r1, r2, r3
1086         qsub16gt r1, r2, r3
1087         qsub8 r1, r2, r3
1088         qsub8le r1, r2, r3
1089
1090 @ CHECK: qsub   r1, r2, r3              @ encoding: [0x52,0x10,0x23,0xe1]
1091 @ CHECK: qsubne r1, r2, r3              @ encoding: [0x52,0x10,0x23,0x11]
1092 @ CHECK: qsub16 r1, r2, r3              @ encoding: [0x73,0x1f,0x22,0xe6]
1093 @ CHECK: qsub16gt       r1, r2, r3      @ encoding: [0x73,0x1f,0x22,0xc6]
1094 @ CHECK: qsub8  r1, r2, r3              @ encoding: [0xf3,0x1f,0x22,0xe6]
1095 @ CHECK: qsub8le r1, r2, r3             @ encoding: [0xf3,0x1f,0x22,0xd6]
1096
1097
1098 @------------------------------------------------------------------------------
1099 @ RBIT
1100 @------------------------------------------------------------------------------
1101         rbit r1, r2
1102         rbitne r1, r2
1103
1104 @ CHECK: rbit   r1, r2                  @ encoding: [0x32,0x1f,0xff,0xe6]
1105 @ CHECK: rbitne r1, r2                  @ encoding: [0x32,0x1f,0xff,0x16]
1106
1107
1108 @------------------------------------------------------------------------------
1109 @ REV/REV16/REVSH
1110 @------------------------------------------------------------------------------
1111         rev r1, r9
1112         revne r1, r5
1113         rev16 r8, r3
1114         rev16ne r12, r4
1115         revsh r4, r9
1116         revshne r9, r1
1117
1118 @ CHECK: rev    r1, r9                  @ encoding: [0x39,0x1f,0xbf,0xe6]
1119 @ CHECK: revne  r1, r5                  @ encoding: [0x35,0x1f,0xbf,0x16]
1120 @ CHECK: rev16  r8, r3                  @ encoding: [0xb3,0x8f,0xbf,0xe6]
1121 @ CHECK: rev16ne r12, r4                @ encoding: [0xb4,0xcf,0xbf,0x16]
1122 @ CHECK: revsh  r4, r9                  @ encoding: [0xb9,0x4f,0xff,0xe6]
1123 @ CHECK: revshne r9, r1                 @ encoding: [0xb1,0x9f,0xff,0x16]
1124
1125
1126 @------------------------------------------------------------------------------
1127 @ RSB
1128 @------------------------------------------------------------------------------
1129         rsb r4, r5, #0xf000
1130         rsb r4, r5, r6
1131         rsb r4, r5, r6, lsl #5
1132         rsblo r4, r5, r6, lsr #5
1133         rsb r4, r5, r6, lsr #5
1134         rsb r4, r5, r6, asr #5
1135         rsb r4, r5, r6, ror #5
1136         rsb r6, r7, r8, lsl r9
1137         rsb r6, r7, r8, lsr r9
1138         rsb r6, r7, r8, asr r9
1139         rsble r6, r7, r8, ror r9
1140         rsb r4, r5, r6, rrx
1141
1142         @ destination register is optional
1143         rsb r5, #0xf000
1144         rsb r4, r5
1145         rsb r4, r5, lsl #5
1146         rsb r4, r5, lsr #5
1147         rsbne r4, r5, lsr #5
1148         rsb r4, r5, asr #5
1149         rsb r4, r5, ror #5
1150         rsbgt r6, r7, lsl r9
1151         rsb r6, r7, lsr r9
1152         rsb r6, r7, asr r9
1153         rsb r6, r7, ror r9
1154         rsb r4, r5, rrx
1155
1156 @ CHECK: rsb    r4, r5, #61440          @ encoding: [0x0f,0x4a,0x65,0xe2]
1157 @ CHECK: rsb    r4, r5, r6              @ encoding: [0x06,0x40,0x65,0xe0]
1158 @ CHECK: rsb    r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x65,0xe0]
1159 @ CHECK: rsblo  r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x65,0x30]
1160 @ CHECK: rsb    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x65,0xe0]
1161 @ CHECK: rsb    r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x65,0xe0]
1162 @ CHECK: rsb    r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x65,0xe0]
1163 @ CHECK: rsb    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x67,0xe0]
1164 @ CHECK: rsb    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x67,0xe0]
1165 @ CHECK: rsb    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x67,0xe0]
1166 @ CHECK: rsble  r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x67,0xd0]
1167 @ CHECK: rsb    r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x65,0xe0]
1168
1169 @ CHECK: rsb    r5, r5, #61440          @ encoding: [0x0f,0x5a,0x65,0xe2]
1170 @ CHECK: rsb    r4, r4, r5              @ encoding: [0x05,0x40,0x64,0xe0]
1171 @ CHECK: rsb    r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x64,0xe0]
1172 @ CHECK: rsb    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x64,0xe0]
1173 @ CHECK: rsbne  r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x64,0x10]
1174 @ CHECK: rsb    r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x64,0xe0]
1175 @ CHECK: rsb    r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x64,0xe0]
1176 @ CHECK: rsbgt  r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x66,0xc0]
1177 @ CHECK: rsb    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x66,0xe0]
1178 @ CHECK: rsb    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x66,0xe0]
1179 @ CHECK: rsb    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x66,0xe0]
1180 @ CHECK: rsb    r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x64,0xe0]
1181
1182 @------------------------------------------------------------------------------
1183 @ RSC
1184 @------------------------------------------------------------------------------
1185         rsc r4, r5, #0xf000
1186         rsc r4, r5, r6
1187         rsc r4, r5, r6, lsl #5
1188         rsclo r4, r5, r6, lsr #5
1189         rsc r4, r5, r6, lsr #5
1190         rsc r4, r5, r6, asr #5
1191         rsc r4, r5, r6, ror #5
1192         rsc r6, r7, r8, lsl r9
1193         rsc r6, r7, r8, lsr r9
1194         rsc r6, r7, r8, asr r9
1195         rscle r6, r7, r8, ror r9
1196
1197         @ destination register is optional
1198         rsc r5, #0xf000
1199         rsc r4, r5
1200         rsc r4, r5, lsl #5
1201         rsc r4, r5, lsr #5
1202         rscne r4, r5, lsr #5
1203         rsc r4, r5, asr #5
1204         rsc r4, r5, ror #5
1205         rscgt r6, r7, lsl r9
1206         rsc r6, r7, lsr r9
1207         rsc r6, r7, asr r9
1208         rsc r6, r7, ror r9
1209
1210 @ CHECK: rsc    r4, r5, #61440          @ encoding: [0x0f,0x4a,0xe5,0xe2]
1211 @ CHECK: rsc    r4, r5, r6              @ encoding: [0x06,0x40,0xe5,0xe0]
1212 @ CHECK: rsc    r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0xe5,0xe0]
1213 @ CHECK: rsclo  r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xe5,0x30]
1214 @ CHECK: rsc    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xe5,0xe0]
1215 @ CHECK: rsc    r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0xe5,0xe0]
1216 @ CHECK: rsc    r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0xe5,0xe0]
1217 @ CHECK: rsc    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0xe7,0xe0]
1218 @ CHECK: rsc    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0xe7,0xe0]
1219 @ CHECK: rsc    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0xe7,0xe0]
1220 @ CHECK: rscle  r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0xe7,0xd0]
1221
1222 @ CHECK: rsc    r5, r5, #61440          @ encoding: [0x0f,0x5a,0xe5,0xe2]
1223 @ CHECK: rsc    r4, r4, r5              @ encoding: [0x05,0x40,0xe4,0xe0]
1224 @ CHECK: rsc    r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0xe4,0xe0]
1225 @ CHECK: rsc    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xe4,0xe0]
1226 @ CHECK: rscne  r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xe4,0x10]
1227 @ CHECK: rsc    r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0xe4,0xe0]
1228 @ CHECK: rsc    r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0xe4,0xe0]
1229 @ CHECK: rscgt  r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0xe6,0xc0]
1230 @ CHECK: rsc    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0xe6,0xe0]
1231 @ CHECK: rsc    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0xe6,0xe0]
1232 @ CHECK: rsc    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xe6,0xe0]
1233
1234 @------------------------------------------------------------------------------
1235 @ SADD16/SADD8
1236 @------------------------------------------------------------------------------
1237         sadd16 r1, r2, r3
1238         sadd16gt r1, r2, r3
1239         sadd8 r1, r2, r3
1240         sadd8le r1, r2, r3
1241
1242 @ CHECK: sadd16 r1, r2, r3              @ encoding: [0x13,0x1f,0x12,0xe6]
1243 @ CHECK: sadd16gt       r1, r2, r3      @ encoding: [0x13,0x1f,0x12,0xc6]
1244 @ CHECK: sadd8  r1, r2, r3              @ encoding: [0x93,0x1f,0x12,0xe6]
1245 @ CHECK: sadd8le r1, r2, r3             @ encoding: [0x93,0x1f,0x12,0xd6]
1246
1247
1248 @------------------------------------------------------------------------------
1249 @ SASX
1250 @------------------------------------------------------------------------------
1251         sasx r9, r12, r0
1252         sasxeq r9, r12, r0
1253
1254 @ CHECK: sasx   r9, r12, r0             @ encoding: [0x30,0x9f,0x1c,0xe6]
1255 @ CHECK: sasxeq r9, r12, r0             @ encoding: [0x30,0x9f,0x1c,0x06]
1256
1257
1258 @------------------------------------------------------------------------------
1259 @ SBC
1260 @------------------------------------------------------------------------------
1261         sbc r4, r5, #0xf000
1262         sbc r4, r5, r6
1263         sbc r4, r5, r6, lsl #5
1264         sbc r4, r5, r6, lsr #5
1265         sbc r4, r5, r6, lsr #5
1266         sbc r4, r5, r6, asr #5
1267         sbc r4, r5, r6, ror #5
1268         sbc r6, r7, r8, lsl r9
1269         sbc r6, r7, r8, lsr r9
1270         sbc r6, r7, r8, asr r9
1271         sbc r6, r7, r8, ror r9
1272
1273         @ destination register is optional
1274         sbc r5, #0xf000
1275         sbc r4, r5
1276         sbc r4, r5, lsl #5
1277         sbc r4, r5, lsr #5
1278         sbc r4, r5, lsr #5
1279         sbc r4, r5, asr #5
1280         sbc r4, r5, ror #5
1281         sbc r6, r7, lsl r9
1282         sbc r6, r7, lsr r9
1283         sbc r6, r7, asr r9
1284         sbc r6, r7, ror r9
1285
1286 @ CHECK: sbc    r4, r5, #61440          @ encoding: [0x0f,0x4a,0xc5,0xe2]
1287 @ CHECK: sbc    r4, r5, r6              @ encoding: [0x06,0x40,0xc5,0xe0]
1288 @ CHECK: sbc    r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0xc5,0xe0]
1289 @ CHECK: sbc    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xc5,0xe0]
1290 @ CHECK: sbc    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xc5,0xe0]
1291 @ CHECK: sbc    r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0xc5,0xe0]
1292 @ CHECK: sbc    r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0xc5,0xe0]
1293 @ CHECK: sbc    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0xc7,0xe0]
1294 @ CHECK: sbc    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0xc7,0xe0]
1295 @ CHECK: sbc    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0xc7,0xe0]
1296 @ CHECK: sbc    r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0xc7,0xe0]
1297
1298 @ CHECK: sbc    r5, r5, #61440          @ encoding: [0x0f,0x5a,0xc5,0xe2]
1299 @ CHECK: sbc    r4, r4, r5              @ encoding: [0x05,0x40,0xc4,0xe0]
1300 @ CHECK: sbc    r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0xc4,0xe0]
1301 @ CHECK: sbc    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xc4,0xe0]
1302 @ CHECK: sbc    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xc4,0xe0]
1303 @ CHECK: sbc    r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0xc4,0xe0]
1304 @ CHECK: sbc    r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0xc4,0xe0]
1305 @ CHECK: sbc    r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0xc6,0xe0]
1306 @ CHECK: sbc    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0xc6,0xe0]
1307 @ CHECK: sbc    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0xc6,0xe0]
1308 @ CHECK: sbc    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xc6,0xe0]
1309
1310
1311 @------------------------------------------------------------------------------
1312 @ SEL
1313 @------------------------------------------------------------------------------
1314         sel r9, r2, r1
1315         selne r9, r2, r1
1316
1317 @ CHECK: sel    r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0xe6]
1318 @ CHECK: selne  r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0x16]
1319
1320
1321 @------------------------------------------------------------------------------
1322 @ SETEND
1323 @------------------------------------------------------------------------------
1324         setend be
1325         setend le
1326
1327         sel     r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0xe6]
1328         selne   r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0x16]
1329
1330
1331 @------------------------------------------------------------------------------
1332 @ SEV
1333 @------------------------------------------------------------------------------
1334         sev
1335         seveq
1336
1337 @ CHECK: sev                             @ encoding: [0x04,0xf0,0x20,0xe3]
1338 @ CHECK: seveq                           @ encoding: [0x04,0xf0,0x20,0x03]
1339
1340 @------------------------------------------------------------------------------
1341 @ SHADD16/SHADD8
1342 @------------------------------------------------------------------------------
1343         shadd16 r4, r8, r2
1344         shadd16gt r4, r8, r2
1345         shadd8 r4, r8, r2
1346         shadd8gt r4, r8, r2
1347
1348 @ CHECK: shadd16        r4, r8, r2      @ encoding: [0x12,0x4f,0x38,0xe6]
1349 @ CHECK: shadd16gt      r4, r8, r2      @ encoding: [0x12,0x4f,0x38,0xc6]
1350 @ CHECK: shadd8 r4, r8, r2              @ encoding: [0x92,0x4f,0x38,0xe6]
1351 @ CHECK: shadd8gt       r4, r8, r2      @ encoding: [0x92,0x4f,0x38,0xc6]
1352
1353
1354 @------------------------------------------------------------------------------
1355 @ SHASX
1356 @------------------------------------------------------------------------------
1357         shasx r4, r8, r2
1358         shasxgt r4, r8, r2
1359
1360 @ CHECK: shasx  r4, r8, r2              @ encoding: [0x32,0x4f,0x38,0xe6]
1361 @ CHECK: shasxgt r4, r8, r2             @ encoding: [0x32,0x4f,0x38,0xc6]
1362
1363
1364 @------------------------------------------------------------------------------
1365 @ SHSUB16/SHSUB8
1366 @------------------------------------------------------------------------------
1367         shsub16 r4, r8, r2
1368         shsub16gt r4, r8, r2
1369         shsub8 r4, r8, r2
1370         shsub8gt r4, r8, r2
1371
1372 @ CHECK: shsub16        r4, r8, r2      @ encoding: [0x72,0x4f,0x38,0xe6]
1373 @ CHECK: shsub16gt      r4, r8, r2      @ encoding: [0x72,0x4f,0x38,0xc6]
1374 @ CHECK: shsub8 r4, r8, r2              @ encoding: [0xf2,0x4f,0x38,0xe6]
1375 @ CHECK: shsub8gt       r4, r8, r2      @ encoding: [0xf2,0x4f,0x38,0xc6]
1376
1377 @------------------------------------------------------------------------------
1378 @ SMC
1379 @------------------------------------------------------------------------------
1380         smc #0xf
1381         smceq #0
1382
1383 @ CHECK: smc    #15                     @ encoding: [0x7f,0x00,0x60,0xe1]
1384 @ CHECK: smceq  #0                      @ encoding: [0x70,0x00,0x60,0x01]
1385
1386 @------------------------------------------------------------------------------
1387 @ SMLABB/SMLABT/SMLATB/SMLATT
1388 @------------------------------------------------------------------------------
1389         smlabb r3, r1, r9, r0
1390         smlabt r5, r6, r4, r1
1391         smlatb r4, r2, r3, r2
1392         smlatt r8, r3, r8, r4
1393         smlabbge r3, r1, r9, r0
1394         smlabtle r5, r6, r4, r1
1395         smlatbne r4, r2, r3, r2
1396         smlatteq r8, r3, r8, r4
1397
1398 @ CHECK: smlabb r3, r1, r9, r0          @ encoding: [0x81,0x09,0x03,0xe1]
1399 @ CHECK: smlabt r5, r6, r4, r1          @ encoding: [0xc6,0x14,0x05,0xe1]
1400 @ CHECK: smlatb r4, r2, r3, r2          @ encoding: [0xa2,0x23,0x04,0xe1]
1401 @ CHECK: smlatt r8, r3, r8, r4          @ encoding: [0xe3,0x48,0x08,0xe1]
1402 @ CHECK: smlabbge       r3, r1, r9, r0  @ encoding: [0x81,0x09,0x03,0xa1]
1403 @ CHECK: smlabtle       r5, r6, r4, r1  @ encoding: [0xc6,0x14,0x05,0xd1]
1404 @ CHECK: smlatbne       r4, r2, r3, r2  @ encoding: [0xa2,0x23,0x04,0x11]
1405 @ CHECK: smlatteq       r8, r3, r8, r4  @ encoding: [0xe3,0x48,0x08,0x01]
1406
1407 @------------------------------------------------------------------------------
1408 @ SMLAD/SMLADX
1409 @------------------------------------------------------------------------------
1410         smlad r2, r3, r5, r8
1411         smladx r2, r3, r5, r8
1412         smladeq r2, r3, r5, r8
1413         smladxhi r2, r3, r5, r8
1414
1415 @ CHECK: smlad  r2, r3, r5, r8          @ encoding: [0x13,0x85,0x02,0xe7]
1416 @ CHECK: smladx r2, r3, r5, r8          @ encoding: [0x33,0x85,0x02,0xe7]
1417 @ CHECK: smladeq        r2, r3, r5, r8  @ encoding: [0x13,0x85,0x02,0x07]
1418 @ CHECK: smladxhi       r2, r3, r5, r8  @ encoding: [0x33,0x85,0x02,0x87]
1419
1420
1421 @------------------------------------------------------------------------------
1422 @ SMLAL
1423 @------------------------------------------------------------------------------
1424         smlal r2, r3, r5, r8
1425         smlals r2, r3, r5, r8
1426         smlaleq r2, r3, r5, r8
1427         smlalshi r2, r3, r5, r8
1428
1429 @ CHECK: smlal  r2, r3, r5, r8          @ encoding: [0x95,0x28,0xe3,0xe0]
1430 @ CHECK: smlals r2, r3, r5, r8          @ encoding: [0x95,0x28,0xf3,0xe0]
1431 @ CHECK: smlaleq        r2, r3, r5, r8  @ encoding: [0x95,0x28,0xe3,0x00]
1432 @ CHECK: smlalshi       r2, r3, r5, r8  @ encoding: [0x95,0x28,0xf3,0x80]
1433
1434
1435 @------------------------------------------------------------------------------
1436 @ SMLALBB/SMLALBT/SMLALTB/SMLALTT
1437 @------------------------------------------------------------------------------
1438         smlalbb r3, r1, r9, r0
1439         smlalbt r5, r6, r4, r1
1440         smlaltb r4, r2, r3, r2
1441         smlaltt r8, r3, r8, r4
1442         smlalbbge r3, r1, r9, r0
1443         smlalbtle r5, r6, r4, r1
1444         smlaltbne r4, r2, r3, r2
1445         smlaltteq r8, r3, r8, r4
1446
1447 @ CHECK: smlalbb        r3, r1, r9, r0  @ encoding: [0x89,0x30,0x41,0xe1]
1448 @ CHECK: smlalbt        r5, r6, r4, r1  @ encoding: [0xc4,0x51,0x46,0xe1]
1449 @ CHECK: smlaltb        r4, r2, r3, r2  @ encoding: [0xa3,0x42,0x42,0xe1]
1450 @ CHECK: smlaltt        r8, r3, r8, r4  @ encoding: [0xe8,0x84,0x43,0xe1]
1451 @ CHECK: smlalbbge      r3, r1, r9, r0  @ encoding: [0x89,0x30,0x41,0xa1]
1452 @ CHECK: smlalbtle      r5, r6, r4, r1  @ encoding: [0xc4,0x51,0x46,0xd1]
1453 @ CHECK: smlaltbne      r4, r2, r3, r2  @ encoding: [0xa3,0x42,0x42,0x11]
1454 @ CHECK: smlaltteq      r8, r3, r8, r4  @ encoding: [0xe8,0x84,0x43,0x01]
1455
1456
1457 @------------------------------------------------------------------------------
1458 @ SMLALD/SMLALDX
1459 @------------------------------------------------------------------------------
1460         smlald r2, r3, r5, r8
1461         smlaldx r2, r3, r5, r8
1462         smlaldeq r2, r3, r5, r8
1463         smlaldxhi r2, r3, r5, r8
1464
1465 @ CHECK: smlald r2, r3, r5, r8          @ encoding: [0x15,0x28,0x43,0xe7]
1466 @ CHECK: smlaldx        r2, r3, r5, r8  @ encoding: [0x35,0x28,0x43,0xe7]
1467 @ CHECK: smlaldeq       r2, r3, r5, r8  @ encoding: [0x15,0x28,0x43,0x07]
1468 @ CHECK: smlaldxhi      r2, r3, r5, r8  @ encoding: [0x35,0x28,0x43,0x87]
1469
1470
1471 @------------------------------------------------------------------------------
1472 @ SMLAWB/SMLAWT
1473 @------------------------------------------------------------------------------
1474         smlawb r2, r3, r10, r8
1475         smlawt r8, r3, r5, r9
1476         smlawbeq r2, r7, r5, r8
1477         smlawthi r1, r3, r0, r8
1478
1479 @ CHECK: smlawb r2, r3, r10, r8         @ encoding: [0x83,0x8a,0x22,0xe1]
1480 @ CHECK: smlawt r8, r3, r5, r9          @ encoding: [0xc3,0x95,0x28,0xe1]
1481 @ CHECK: smlawbeq       r2, r7, r5, r8  @ encoding: [0x87,0x85,0x22,0x01]
1482 @ CHECK: smlawthi       r1, r3, r0, r8  @ encoding: [0xc3,0x80,0x21,0x81]
1483
1484
1485 @------------------------------------------------------------------------------
1486 @ SMLSD/SMLSDX
1487 @------------------------------------------------------------------------------
1488         smlsd r2, r3, r5, r8
1489         smlsdx r2, r3, r5, r8
1490         smlsdeq r2, r3, r5, r8
1491         smlsdxhi r2, r3, r5, r8
1492
1493 @ CHECK: smlsd  r2, r3, r5, r8          @ encoding: [0x53,0x85,0x02,0xe7]
1494 @ CHECK: smlsdx r2, r3, r5, r8          @ encoding: [0x73,0x85,0x02,0xe7]
1495 @ CHECK: smlsdeq        r2, r3, r5, r8  @ encoding: [0x53,0x85,0x02,0x07]
1496 @ CHECK: smlsdxhi       r2, r3, r5, r8  @ encoding: [0x73,0x85,0x02,0x87]
1497
1498
1499 @------------------------------------------------------------------------------
1500 @ SMLSLD/SMLSLDX
1501 @------------------------------------------------------------------------------
1502         smlsld r2, r9, r5, r1
1503         smlsldx r4, r11, r2, r8
1504         smlsldeq r8, r2, r5, r6
1505         smlsldxhi r1, r0, r3, r8
1506
1507 @ CHECK: smlsld r2, r9, r5, r1          @ encoding: [0x55,0x21,0x49,0xe7]
1508 @ CHECK: smlsldx        r4, r11, r2, r8 @ encoding: [0x72,0x48,0x4b,0xe7]
1509 @ CHECK: smlsldeq       r8, r2, r5, r6  @ encoding: [0x55,0x86,0x42,0x07]
1510 @ CHECK: smlsldxhi      r1, r0, r3, r8  @ encoding: [0x73,0x18,0x40,0x87]
1511
1512
1513 @------------------------------------------------------------------------------
1514 @ SMMLA/SMMLAR
1515 @------------------------------------------------------------------------------
1516         smmla r1, r2, r3, r4
1517         smmlar r4, r3, r2, r1
1518         smmlalo r1, r2, r3, r4
1519         smmlarcs r4, r3, r2, r1
1520
1521 @ CHECK: smmla  r1, r2, r3, r4          @ encoding: [0x12,0x43,0x51,0xe7]
1522 @ CHECK: smmlar r4, r3, r2, r1          @ encoding: [0x33,0x12,0x54,0xe7]
1523 @ CHECK: smmlalo        r1, r2, r3, r4  @ encoding: [0x12,0x43,0x51,0x37]
1524 @ CHECK: smmlarhs       r4, r3, r2, r1  @ encoding: [0x33,0x12,0x54,0x27]
1525
1526
1527 @------------------------------------------------------------------------------
1528 @ SMMLS/SMMLSR
1529 @------------------------------------------------------------------------------
1530         smmls r1, r2, r3, r4
1531         smmlsr r4, r3, r2, r1
1532         smmlslo r1, r2, r3, r4
1533         smmlsrcs r4, r3, r2, r1
1534
1535 @ CHECK: smmls  r1, r2, r3, r4          @ encoding: [0xd2,0x43,0x51,0xe7]
1536 @ CHECK: smmlsr r4, r3, r2, r1          @ encoding: [0xf3,0x12,0x54,0xe7]
1537 @ CHECK: smmlslo        r1, r2, r3, r4  @ encoding: [0xd2,0x43,0x51,0x37]
1538 @ CHECK: smmlsrhs       r4, r3, r2, r1  @ encoding: [0xf3,0x12,0x54,0x27]
1539
1540
1541 @------------------------------------------------------------------------------
1542 @ SMMUL/SMMULR
1543 @------------------------------------------------------------------------------
1544         smmul r2, r3, r4
1545         smmulr r3, r2, r1
1546         smmulcc r2, r3, r4
1547         smmulrhs r3, r2, r1
1548
1549 @ CHECK: smmul  r2, r3, r4              @ encoding: [0x13,0xf4,0x52,0xe7]
1550 @ CHECK: smmulr r3, r2, r1              @ encoding: [0x32,0xf1,0x53,0xe7]
1551 @ CHECK: smmullo        r2, r3, r4      @ encoding: [0x13,0xf4,0x52,0x37]
1552 @ CHECK: smmulrhs       r3, r2, r1      @ encoding: [0x32,0xf1,0x53,0x27]
1553
1554
1555 @------------------------------------------------------------------------------
1556 @ SMUAD/SMUADX
1557 @------------------------------------------------------------------------------
1558         smuad r2, r3, r4
1559         smuadx r3, r2, r1
1560         smuadlt r2, r3, r4
1561         smuadxge r3, r2, r1
1562
1563 @ CHECK: smuad  r2, r3, r4              @ encoding: [0x13,0xf4,0x02,0xe7]
1564 @ CHECK: smuadx r3, r2, r1              @ encoding: [0x32,0xf1,0x03,0xe7]
1565 @ CHECK: smuadlt        r2, r3, r4      @ encoding: [0x13,0xf4,0x02,0xb7]
1566 @ CHECK: smuadxge       r3, r2, r1      @ encoding: [0x32,0xf1,0x03,0xa7]
1567
1568
1569 @------------------------------------------------------------------------------
1570 @ SMULBB/SMLALBT/SMLALTB/SMLALTT
1571 @------------------------------------------------------------------------------
1572         smulbb r3, r9, r0
1573         smulbt r5, r4, r1
1574         smultb r4, r2, r2
1575         smultt r8, r3, r4
1576         smulbbge r1, r9, r0
1577         smulbtle r5, r6, r4
1578         smultbne r2, r3, r2
1579         smultteq r8, r3, r4
1580
1581 @ CHECK: smulbb r3, r9, r0              @ encoding: [0x89,0x00,0x63,0xe1]
1582 @ CHECK: smulbt r5, r4, r1              @ encoding: [0xc4,0x01,0x65,0xe1]
1583 @ CHECK: smultb r4, r2, r2              @ encoding: [0xa2,0x02,0x64,0xe1]
1584 @ CHECK: smultt r8, r3, r4              @ encoding: [0xe3,0x04,0x68,0xe1]
1585 @ CHECK: smulbbge       r1, r9, r0      @ encoding: [0x89,0x00,0x61,0xa1]
1586 @ CHECK: smulbtle       r5, r6, r4      @ encoding: [0xc6,0x04,0x65,0xd1]
1587 @ CHECK: smultbne       r2, r3, r2      @ encoding: [0xa3,0x02,0x62,0x11]
1588 @ CHECK: smultteq       r8, r3, r4      @ encoding: [0xe3,0x04,0x68,0x01]
1589
1590
1591 @------------------------------------------------------------------------------
1592 @ SMULL
1593 @------------------------------------------------------------------------------
1594         smull r3, r9, r0, r1
1595         smulls r3, r9, r0, r2
1596         smulleq r8, r3, r4, r5
1597         smullseq r8, r3, r4, r3
1598
1599 @ CHECK: smull  r3, r9, r0, r1          @ encoding: [0x90,0x31,0xc9,0xe0]
1600 @ CHECK: smulls r3, r9, r0, r2          @ encoding: [0x90,0x32,0xd9,0xe0]
1601 @ CHECK: smulleq        r8, r3, r4, r5  @ encoding: [0x94,0x85,0xc3,0x00]
1602 @ CHECK: smullseq       r8, r3, r4, r3  @ encoding: [0x94,0x83,0xd3,0x00]
1603
1604
1605 @------------------------------------------------------------------------------
1606 @ SMULWB/SMULWT
1607 @------------------------------------------------------------------------------
1608         smulwb r3, r9, r0
1609         smulwt r3, r9, r2
1610
1611 @ CHECK: smulwb r3, r9, r0              @ encoding: [0xa9,0x00,0x23,0xe1]
1612 @ CHECK: smulwt r3, r9, r2              @ encoding: [0xe9,0x02,0x23,0xe1]
1613
1614
1615 @------------------------------------------------------------------------------
1616 @ SMUSD/SMUSDX
1617 @------------------------------------------------------------------------------
1618         smusd r3, r0, r1
1619         smusdx r3, r9, r2
1620         smusdeq r8, r3, r2
1621         smusdxne r7, r4, r3
1622
1623 @ CHECK: smusd  r3, r0, r1              @ encoding: [0x50,0xf1,0x03,0xe7]
1624 @ CHECK: smusdx r3, r9, r2              @ encoding: [0x79,0xf2,0x03,0xe7]
1625 @ CHECK: smusdeq        r8, r3, r2      @ encoding: [0x53,0xf2,0x08,0x07]
1626 @ CHECK: smusdxne       r7, r4, r3      @ encoding: [0x74,0xf3,0x07,0x17]
1627
1628
1629 @------------------------------------------------------------------------------
1630 @ FIXME: SRS
1631 @------------------------------------------------------------------------------
1632
1633
1634 @------------------------------------------------------------------------------
1635 @ SSAT
1636 @------------------------------------------------------------------------------
1637         ssat    r8, #1, r10
1638         ssat    r8, #1, r10, lsl #0
1639         ssat    r8, #1, r10, lsl #31
1640         ssat    r8, #1, r10, asr #32
1641         ssat    r8, #1, r10, asr #1
1642
1643 @ CHECK: ssat   r8, #1, r10             @ encoding: [0x1a,0x80,0xa0,0xe6]
1644 @ CHECK: ssat   r8, #1, r10             @ encoding: [0x1a,0x80,0xa0,0xe6]
1645 @ CHECK: ssat   r8, #1, r10, lsl #31    @ encoding: [0x9a,0x8f,0xa0,0xe6]
1646 @ CHECK: ssat   r8, #1, r10, asr #32    @ encoding: [0x5a,0x80,0xa0,0xe6]
1647 @ CHECK: ssat   r8, #1, r10, asr #1     @ encoding: [0xda,0x80,0xa0,0xe6]
1648
1649
1650 @------------------------------------------------------------------------------
1651 @ SSAT16
1652 @------------------------------------------------------------------------------
1653         ssat16  r2, #1, r7
1654         ssat16  r3, #16, r5
1655
1656 @ CHECK: ssat16 r2, #1, r7              @ encoding: [0x37,0x2f,0xa0,0xe6]
1657 @ CHECK: ssat16 r3, #16, r5             @ encoding: [0x35,0x3f,0xaf,0xe6]
1658
1659
1660 @------------------------------------------------------------------------------
1661 @ SSAX
1662 @------------------------------------------------------------------------------
1663         ssax r2, r3, r4
1664         ssaxlt r2, r3, r4
1665
1666 @ CHECK: ssax   r2, r3, r4              @ encoding: [0x54,0x2f,0x13,0xe6]
1667 @ CHECK: ssaxlt r2, r3, r4              @ encoding: [0x54,0x2f,0x13,0xb6]
1668
1669 @------------------------------------------------------------------------------
1670 @ SSUB16/SSUB8
1671 @------------------------------------------------------------------------------
1672         ssub16 r1, r0, r6
1673         ssub16ne r5, r3, r2
1674         ssub8 r9, r2, r4
1675         ssub8eq r5, r1, r2
1676
1677 @ CHECK: ssub16 r1, r0, r6              @ encoding: [0x76,0x1f,0x10,0xe6]
1678 @ CHECK: ssub16ne       r5, r3, r2      @ encoding: [0x72,0x5f,0x13,0x16]
1679 @ CHECK: ssub8  r9, r2, r4              @ encoding: [0xf4,0x9f,0x12,0xe6]
1680 @ CHECK: ssub8eq        r5, r1, r2      @ encoding: [0xf2,0x5f,0x11,0x06]
1681
1682
1683 @------------------------------------------------------------------------------
1684 @ STM*
1685 @------------------------------------------------------------------------------
1686         stm       r2, {r1,r3-r6,sp}
1687         stmia     r3, {r1,r3-r6,lr}
1688         stmib     r4, {r1,r3-r6,sp}
1689         stmda     r5, {r1,r3-r6,sp}
1690         stmdb     r6, {r1,r3-r6,r8}
1691         stmfd     sp, {r1,r3-r6,sp}
1692
1693         @ with update
1694         stm       r8!, {r1,r3-r6,sp}
1695         stmib     r9!, {r1,r3-r6,sp}
1696         stmda     sp!, {r1,r3-r6}
1697         stmdb     r0!, {r1,r5,r7,sp}
1698
1699 @ CHECK: stm    r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe8]
1700 @ CHECK: stm    r3, {lr, r1, r3, r4, r5, r6} @ encoding: [0x7a,0x40,0x83,0xe8]
1701 @ CHECK: stmib  r4, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x84,0xe9]
1702 @ CHECK: stmda  r5, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x05,0xe8]
1703 @ CHECK: stmdb  r6, {r1, r3, r4, r5, r6, r8} @ encoding: [0x7a,0x01,0x06,0xe9]
1704 @ CHECK: stmdb  sp, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x0d,0xe9]
1705
1706 @ CHECK: stm    r8!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa8,0xe8]
1707 @ CHECK: stmib  r9!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa9,0xe9]
1708 @ CHECK: stmda  sp!, {r1, r3, r4, r5, r6} @ encoding: [0x7a,0x00,0x2d,0xe8]
1709 @ CHECK: stmdb  r0!, {r1, r5, r7, sp}   @ encoding: [0xa2,0x20,0x20,0xe9]
1710
1711
1712 @------------------------------------------------------------------------------
1713 @ FIXME:STR*
1714 @------------------------------------------------------------------------------
1715 @------------------------------------------------------------------------------
1716 @ STREX/STREXB/STREXH/STREXD
1717 @------------------------------------------------------------------------------
1718         strexb  r1, r3, [r4]
1719         strexh  r4, r2, [r5]
1720         strex  r2, r1, [r7]
1721         strexd  r6, r2, r3, [r8]
1722
1723 @ CHECK: strexb r1, r3, [r4]            @ encoding: [0x93,0x1f,0xc4,0xe1]
1724 @ CHECK: strexh r4, r2, [r5]            @ encoding: [0x92,0x4f,0xe5,0xe1]
1725 @ CHECK: strex  r2, r1, [r7]            @ encoding: [0x91,0x2f,0x87,0xe1]
1726 @ CHECK: strexd r6, r2, r3, [r8]        @ encoding: [0x92,0x6f,0xa8,0xe1]
1727
1728
1729 @------------------------------------------------------------------------------
1730 @ SUB
1731 @------------------------------------------------------------------------------
1732         sub r4, r5, #0xf000
1733         sub r4, r5, r6
1734         sub r4, r5, r6, lsl #5
1735         sub r4, r5, r6, lsr #5
1736         sub r4, r5, r6, lsr #5
1737         sub r4, r5, r6, asr #5
1738         sub r4, r5, r6, ror #5
1739         sub r6, r7, r8, lsl r9
1740         sub r6, r7, r8, lsr r9
1741         sub r6, r7, r8, asr r9
1742         sub r6, r7, r8, ror r9
1743
1744         @ destination register is optional
1745         sub r5, #0xf000
1746         sub r4, r5
1747         sub r4, r5, lsl #5
1748         sub r4, r5, lsr #5
1749         sub r4, r5, lsr #5
1750         sub r4, r5, asr #5
1751         sub r4, r5, ror #5
1752         sub r6, r7, lsl r9
1753         sub r6, r7, lsr r9
1754         sub r6, r7, asr r9
1755         sub r6, r7, ror r9
1756
1757 @ CHECK: sub    r4, r5, #61440          @ encoding: [0x0f,0x4a,0x45,0xe2]
1758 @ CHECK: sub    r4, r5, r6              @ encoding: [0x06,0x40,0x45,0xe0]
1759 @ CHECK: sub    r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x45,0xe0]
1760 @ CHECK: sub    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x45,0xe0]
1761 @ CHECK: sub    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x45,0xe0]
1762 @ CHECK: sub    r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x45,0xe0]
1763 @ CHECK: sub    r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x45,0xe0]
1764 @ CHECK: sub    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x47,0xe0]
1765 @ CHECK: sub    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x47,0xe0]
1766 @ CHECK: sub    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x47,0xe0]
1767 @ CHECK: sub    r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x47,0xe0]
1768
1769
1770 @ CHECK: sub    r5, r5, #61440          @ encoding: [0x0f,0x5a,0x45,0xe2]
1771 @ CHECK: sub    r4, r4, r5              @ encoding: [0x05,0x40,0x44,0xe0]
1772 @ CHECK: sub    r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x44,0xe0]
1773 @ CHECK: sub    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x44,0xe0]
1774 @ CHECK: sub    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x44,0xe0]
1775 @ CHECK: sub    r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x44,0xe0]
1776 @ CHECK: sub    r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x44,0xe0]
1777 @ CHECK: sub    r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x46,0xe0]
1778 @ CHECK: sub    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x46,0xe0]
1779 @ CHECK: sub    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x46,0xe0]
1780 @ CHECK: sub    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x46,0xe0]
1781
1782
1783 @------------------------------------------------------------------------------
1784 @ SVC
1785 @------------------------------------------------------------------------------
1786         svc #16
1787         svc #0
1788         svc #0xffffff
1789
1790 @ CHECK: svc    #16                     @ encoding: [0x10,0x00,0x00,0xef]
1791 @ CHECK: svc    #0                      @ encoding: [0x00,0x00,0x00,0xef]
1792 @ CHECK: svc    #16777215               @ encoding: [0xff,0xff,0xff,0xef]
1793
1794
1795 @------------------------------------------------------------------------------
1796 @ SWP/SWPB
1797 @------------------------------------------------------------------------------
1798         swp r1, r2, [r3]
1799         swp r4, r4, [r6]
1800         swpb r5, r1, [r9]
1801
1802 @ CHECK: swp    r1, r2, [r3]            @ encoding: [0x92,0x10,0x03,0xe1]
1803 @ CHECK: swp    r4, r4, [r6]            @ encoding: [0x94,0x40,0x06,0xe1]
1804 @ CHECK: swpb   r5, r1, [r9]            @ encoding: [0x91,0x50,0x49,0xe1]
1805
1806
1807 @------------------------------------------------------------------------------
1808 @ SXTAB
1809 @------------------------------------------------------------------------------
1810         sxtab r2, r3, r4
1811         sxtab r4, r5, r6, ror #0
1812         sxtablt r6, r2, r9, ror #8
1813         sxtab r5, r1, r4, ror #16
1814         sxtab r7, r8, r3, ror #24
1815
1816 @ CHECK: sxtab  r2, r3, r4              @ encoding: [0x74,0x20,0xa3,0xe6]
1817 @ CHECK: sxtab  r4, r5, r6              @ encoding: [0x76,0x40,0xa5,0xe6]
1818 @ CHECK: sxtablt        r6, r2, r9, ror #8
1819                                         @ encoding: [0x79,0x64,0xa2,0xb6]
1820 @ CHECK: sxtab  r5, r1, r4, ror #16
1821                                         @ encoding: [0x74,0x58,0xa1,0xe6]
1822 @ CHECK: sxtab  r7, r8, r3, ror #24
1823                                         @ encoding: [0x73,0x7c,0xa8,0xe6]
1824
1825
1826 @------------------------------------------------------------------------------
1827 @ SXTAB16
1828 @------------------------------------------------------------------------------
1829         sxtab16ge r0, r1, r4
1830         sxtab16 r6, r2, r7, ror #0
1831         sxtab16 r3, r5, r8, ror #8
1832         sxtab16 r3, r2, r1, ror #16
1833         sxtab16eq r1, r2, r3, ror #24
1834
1835 @ CHECK: sxtab16ge      r0, r1, r4      @ encoding: [0x74,0x00,0x81,0xa6]
1836 @ CHECK: sxtab16        r6, r2, r7      @ encoding: [0x77,0x60,0x82,0xe6]
1837 @ CHECK: sxtab16        r3, r5, r8, ror #8
1838                                         @ encoding: [0x78,0x34,0x85,0xe6]
1839 @ CHECK: sxtab16        r3, r2, r1, ror #16
1840                                         @ encoding: [0x71,0x38,0x82,0xe6]
1841 @ CHECK: sxtab16eq      r1, r2, r3, ror #24
1842                                         @ encoding: [0x73,0x1c,0x82,0x06]
1843
1844 @------------------------------------------------------------------------------
1845 @ SXTAH
1846 @------------------------------------------------------------------------------
1847         sxtah r1, r3, r9
1848         sxtahhi r6, r1, r6, ror #0
1849         sxtah r3, r8, r3, ror #8
1850         sxtahlo r2, r2, r4, ror #16
1851         sxtah r9, r3, r3, ror #24
1852
1853 @ CHECK: sxtah  r1, r3, r9              @ encoding: [0x79,0x10,0xb3,0xe6]
1854 @ CHECK: sxtahhi        r6, r1, r6      @ encoding: [0x76,0x60,0xb1,0x86]
1855 @ CHECK: sxtah  r3, r8, r3, ror #8
1856                                         @ encoding: [0x73,0x34,0xb8,0xe6]
1857 @ CHECK: sxtahlo        r2, r2, r4, ror #16
1858                                         @ encoding: [0x74,0x28,0xb2,0x36]
1859 @ CHECK: sxtah  r9, r3, r3, ror #24
1860                                         @ encoding: [0x73,0x9c,0xb3,0xe6]
1861
1862 @------------------------------------------------------------------------------
1863 @ SXTB
1864 @------------------------------------------------------------------------------
1865         sxtbge r2, r4
1866         sxtb r5, r6, ror #0
1867         sxtb r6, r9, ror #8
1868         sxtbcc r5, r1, ror #16
1869         sxtb r8, r3, ror #24
1870
1871 @ CHECK: sxtbge r2, r4                  @ encoding: [0x74,0x20,0xaf,0xa6]
1872 @ CHECK: sxtb   r5, r6                  @ encoding: [0x76,0x50,0xaf,0xe6]
1873 @ CHECK: sxtb   r6, r9, ror #8
1874                                         @ encoding: [0x79,0x64,0xaf,0xe6]
1875 @ CHECK: sxtblo r5, r1, ror #16
1876                                         @ encoding: [0x71,0x58,0xaf,0x36]
1877 @ CHECK: sxtb   r8, r3, ror #24
1878                                         @ encoding: [0x73,0x8c,0xaf,0xe6]
1879
1880
1881 @------------------------------------------------------------------------------
1882 @ SXTB16
1883 @------------------------------------------------------------------------------
1884         sxtb16 r1, r4
1885         sxtb16 r6, r7, ror #0
1886         sxtb16cs r3, r5, ror #8
1887         sxtb16 r3, r1, ror #16
1888         sxtb16ge r2, r3, ror #24
1889
1890 @ CHECK: sxtb16 r1, r4                  @ encoding: [0x74,0x10,0x8f,0xe6]
1891 @ CHECK: sxtb16 r6, r7                  @ encoding: [0x77,0x60,0x8f,0xe6]
1892 @ CHECK: sxtb16hs       r3, r5, ror #8
1893                                         @ encoding: [0x75,0x34,0x8f,0x26]
1894 @ CHECK: sxtb16 r3, r1, ror #16
1895                                         @ encoding: [0x71,0x38,0x8f,0xe6]
1896 @ CHECK: sxtb16ge       r2, r3, ror #24
1897                                         @ encoding: [0x73,0x2c,0x8f,0xa6]
1898
1899
1900 @------------------------------------------------------------------------------
1901 @ SXTH
1902 @------------------------------------------------------------------------------
1903         sxthne r3, r9
1904         sxth r1, r6, ror #0
1905         sxth r3, r8, ror #8
1906         sxthle r2, r2, ror #16
1907         sxth r9, r3, ror #24
1908
1909 @ CHECK: sxthne r3, r9                  @ encoding: [0x79,0x30,0xbf,0x16]
1910 @ CHECK: sxth   r1, r6                  @ encoding: [0x76,0x10,0xbf,0xe6]
1911 @ CHECK: sxth   r3, r8, ror #8
1912                                         @ encoding: [0x78,0x34,0xbf,0xe6]
1913 @ CHECK: sxthle r2, r2, ror #16
1914                                         @ encoding: [0x72,0x28,0xbf,0xd6]
1915 @ CHECK: sxth   r9, r3, ror #24
1916                                         @ encoding: [0x73,0x9c,0xbf,0xe6]
1917
1918
1919 @------------------------------------------------------------------------------
1920 @ FIXME: TBB/TBH
1921 @------------------------------------------------------------------------------
1922
1923
1924 @------------------------------------------------------------------------------
1925 @ TEQ
1926 @------------------------------------------------------------------------------
1927         teq r5, #0xf000
1928         teq r4, r5
1929         teq r4, r5, lsl #5
1930         teq r4, r5, lsr #5
1931         teq r4, r5, lsr #5
1932         teq r4, r5, asr #5
1933         teq r4, r5, ror #5
1934         teq r6, r7, lsl r9
1935         teq r6, r7, lsr r9
1936         teq r6, r7, asr r9
1937         teq r6, r7, ror r9
1938
1939 @ CHECK: teq    r5, #61440              @ encoding: [0x0f,0x0a,0x35,0xe3]
1940 @ CHECK: teq    r4, r5                  @ encoding: [0x05,0x00,0x34,0xe1]
1941 @ CHECK: teq    r4, r5, lsl #5          @ encoding: [0x85,0x02,0x34,0xe1]
1942 @ CHECK: teq    r4, r5, lsr #5          @ encoding: [0xa5,0x02,0x34,0xe1]
1943 @ CHECK: teq    r4, r5, lsr #5          @ encoding: [0xa5,0x02,0x34,0xe1]
1944 @ CHECK: teq    r4, r5, asr #5          @ encoding: [0xc5,0x02,0x34,0xe1]
1945 @ CHECK: teq    r4, r5, ror #5          @ encoding: [0xe5,0x02,0x34,0xe1]
1946 @ CHECK: teq    r6, r7, lsl r9          @ encoding: [0x17,0x09,0x36,0xe1]
1947 @ CHECK: teq    r6, r7, lsr r9          @ encoding: [0x37,0x09,0x36,0xe1]
1948 @ CHECK: teq    r6, r7, asr r9          @ encoding: [0x57,0x09,0x36,0xe1]
1949 @ CHECK: teq    r6, r7, ror r9          @ encoding: [0x77,0x09,0x36,0xe1]
1950
1951
1952 @------------------------------------------------------------------------------
1953 @ TST
1954 @------------------------------------------------------------------------------
1955         tst r5, #0xf000
1956         tst r4, r5
1957         tst r4, r5, lsl #5
1958         tst r4, r5, lsr #5
1959         tst r4, r5, lsr #5
1960         tst r4, r5, asr #5
1961         tst r4, r5, ror #5
1962         tst r6, r7, lsl r9
1963         tst r6, r7, lsr r9
1964         tst r6, r7, asr r9
1965         tst r6, r7, ror r9
1966
1967 @ CHECK: tst    r5, #61440              @ encoding: [0x0f,0x0a,0x15,0xe3]
1968 @ CHECK: tst    r4, r5                  @ encoding: [0x05,0x00,0x14,0xe1]
1969 @ CHECK: tst    r4, r5, lsl #5          @ encoding: [0x85,0x02,0x14,0xe1]
1970 @ CHECK: tst    r4, r5, lsr #5          @ encoding: [0xa5,0x02,0x14,0xe1]
1971 @ CHECK: tst    r4, r5, lsr #5          @ encoding: [0xa5,0x02,0x14,0xe1]
1972 @ CHECK: tst    r4, r5, asr #5          @ encoding: [0xc5,0x02,0x14,0xe1]
1973 @ CHECK: tst    r4, r5, ror #5          @ encoding: [0xe5,0x02,0x14,0xe1]
1974 @ CHECK: tst    r6, r7, lsl r9          @ encoding: [0x17,0x09,0x16,0xe1]
1975 @ CHECK: tst    r6, r7, lsr r9          @ encoding: [0x37,0x09,0x16,0xe1]
1976 @ CHECK: tst    r6, r7, asr r9          @ encoding: [0x57,0x09,0x16,0xe1]
1977 @ CHECK: tst    r6, r7, ror r9          @ encoding: [0x77,0x09,0x16,0xe1]
1978