16b6ff53fc20494165a55126855a4ab6ebf1ec40
[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 @ FIXME: LSL
627 @------------------------------------------------------------------------------
628 @------------------------------------------------------------------------------
629 @ FIXME: LSR
630 @------------------------------------------------------------------------------
631
632 @------------------------------------------------------------------------------
633 @ MCR/MCR2
634 @------------------------------------------------------------------------------
635         mcr  p7, #1, r5, c1, c1, #4
636         mcr2  p7, #1, r5, c1, c1, #4
637
638 @ CHECK: mcr  p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xee]
639 @ CHECK: mcr2  p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xfe]
640
641 @------------------------------------------------------------------------------
642 @ MCRR/MCRR2
643 @------------------------------------------------------------------------------
644         mcrr  p7, #15, r5, r4, c1
645         mcrr2  p7, #15, r5, r4, c1
646
647 @ CHECK: mcrr  p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xec]
648 @ CHECK: mcrr2  p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xfc]
649
650
651 @------------------------------------------------------------------------------
652 @ MLA
653 @------------------------------------------------------------------------------
654         mla  r1,r2,r3,r4
655         mlas r1,r2,r3,r4
656         mlane  r1,r2,r3,r4
657         mlasne r1,r2,r3,r4
658
659 @ CHECK: mla    r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0xe0]
660 @ CHECK: mlas   r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0xe0]
661 @ CHECK: mlane  r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0x10]
662 @ CHECK: mlasne r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0x10]
663
664 @------------------------------------------------------------------------------
665 @ MLS
666 @------------------------------------------------------------------------------
667         mls  r2,r5,r6,r3
668         mlsne  r2,r5,r6,r3
669
670 @ CHECK: mls    r2, r5, r6, r3          @ encoding: [0x95,0x36,0x62,0xe0]
671 @ CHECK: mlsne  r2, r5, r6, r3          @ encoding: [0x95,0x36,0x62,0x10]
672
673 @------------------------------------------------------------------------------
674 @ MOV (immediate)
675 @------------------------------------------------------------------------------
676     mov r3, #7
677     mov r4, #0xff0
678     mov r5, #0xff0000
679     mov r6, #0xffff
680     movw r9, #0xffff
681     movs r3, #7
682     moveq r4, #0xff0
683     movseq r5, #0xff0000
684
685 @ CHECK: mov    r3, #7                  @ encoding: [0x07,0x30,0xa0,0xe3]
686 @ CHECK: mov    r4, #4080               @ encoding: [0xff,0x4e,0xa0,0xe3]
687 @ CHECK: mov    r5, #16711680           @ encoding: [0xff,0x58,0xa0,0xe3]
688 @ CHECK: movw   r6, #65535              @ encoding: [0xff,0x6f,0x0f,0xe3]
689 @ CHECK: movw   r9, #65535              @ encoding: [0xff,0x9f,0x0f,0xe3]
690 @ CHECK: movs   r3, #7                  @ encoding: [0x07,0x30,0xb0,0xe3]
691 @ CHECK: moveq  r4, #4080               @ encoding: [0xff,0x4e,0xa0,0x03]
692 @ CHECK: movseq r5, #16711680           @ encoding: [0xff,0x58,0xb0,0x03]
693
694 @------------------------------------------------------------------------------
695 @ MOV (register)
696 @------------------------------------------------------------------------------
697         mov r2, r3
698         movs r2, r3
699         moveq r2, r3
700         movseq r2, r3
701
702 @ CHECK: mov    r2, r3                  @ encoding: [0x03,0x20,0xa0,0xe1]
703 @ CHECK: movs   r2, r3                  @ encoding: [0x03,0x20,0xb0,0xe1]
704 @ CHECK: moveq  r2, r3                  @ encoding: [0x03,0x20,0xa0,0x01]
705 @ CHECK: movseq r2, r3                  @ encoding: [0x03,0x20,0xb0,0x01]
706
707 @------------------------------------------------------------------------------
708 @ MOVT
709 @------------------------------------------------------------------------------
710     movt r3, #7
711     movt r6, #0xffff
712     movteq r4, #0xff0
713
714 @ CHECK: movt   r3, #7                  @ encoding: [0x07,0x30,0x40,0xe3]
715 @ CHECK: movt   r6, #65535              @ encoding: [0xff,0x6f,0x4f,0xe3]
716 @ CHECK: movteq r4, #4080               @ encoding: [0xf0,0x4f,0x40,0x03]
717
718
719 @------------------------------------------------------------------------------
720 @ MRC/MRC2
721 @------------------------------------------------------------------------------
722         mrc  p14, #0, r1, c1, c2, #4
723         mrc2  p14, #0, r1, c1, c2, #4
724
725 @ CHECK: mrc  p14, #0, r1, c1, c2, #4   @ encoding: [0x92,0x1e,0x11,0xee]
726 @ CHECK: mrc2  p14, #0, r1, c1, c2, #4  @ encoding: [0x92,0x1e,0x11,0xfe]
727
728 @------------------------------------------------------------------------------
729 @ MRRC/MRRC2
730 @------------------------------------------------------------------------------
731         mrrc  p7, #1, r5, r4, c1
732         mrrc2  p7, #1, r5, r4, c1
733
734 @ CHECK: mrrc  p7, #1, r5, r4, c1       @ encoding: [0x11,0x57,0x54,0xec]
735 @ CHECK: mrrc2  p7, #1, r5, r4, c1      @ encoding: [0x11,0x57,0x54,0xfc]
736
737
738 @------------------------------------------------------------------------------
739 @ MRS
740 @------------------------------------------------------------------------------
741         mrs  r8, apsr
742         mrs  r8, cpsr
743         mrs  r8, spsr
744 @ CHECK: mrs  r8, apsr @ encoding: [0x00,0x80,0x0f,0xe1]
745 @ CHECK: mrs  r8, apsr @ encoding: [0x00,0x80,0x0f,0xe1]
746 @ CHECK: mrs  r8, spsr @ encoding: [0x00,0x80,0x4f,0xe1]
747
748
749
750 @------------------------------------------------------------------------------
751 @ MSR
752 @------------------------------------------------------------------------------
753
754         msr  apsr, #5
755         msr  apsr_g, #5
756         msr  apsr_nzcvq, #5
757         msr  APSR_nzcvq, #5
758         msr  apsr_nzcvqg, #5
759         msr  cpsr_fc, #5
760         msr  cpsr_c, #5
761         msr  cpsr_x, #5
762         msr  cpsr_fc, #5
763         msr  cpsr_all, #5
764         msr  cpsr_fsx, #5
765         msr  spsr_fc, #5
766         msr  SPSR_fsxc, #5
767         msr  cpsr_fsxc, #5
768
769 @ CHECK: msr    CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
770 @ CHECK: msr    APSR_g, #5              @ encoding: [0x05,0xf0,0x24,0xe3]
771 @ CHECK: msr    APSR_nzcvq, #5          @ encoding: [0x05,0xf0,0x28,0xe3]
772 @ CHECK: msr    APSR_nzcvq, #5          @ encoding: [0x05,0xf0,0x28,0xe3]
773 @ CHECK: msr    APSR_nzcvqg, #5         @ encoding: [0x05,0xf0,0x2c,0xe3]
774 @ CHECK: msr    CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
775 @ CHECK: msr    CPSR_c, #5              @ encoding: [0x05,0xf0,0x21,0xe3]
776 @ CHECK: msr    CPSR_x, #5              @ encoding: [0x05,0xf0,0x22,0xe3]
777 @ CHECK: msr    CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
778 @ CHECK: msr    CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
779 @ CHECK: msr    CPSR_fsx, #5            @ encoding: [0x05,0xf0,0x2e,0xe3]
780 @ CHECK: msr    SPSR_fc, #5             @ encoding: [0x05,0xf0,0x69,0xe3]
781 @ CHECK: msr    SPSR_fsxc, #5           @ encoding: [0x05,0xf0,0x6f,0xe3]
782 @ CHECK: msr    CPSR_fsxc, #5           @ encoding: [0x05,0xf0,0x2f,0xe3]
783
784         msr  apsr, r0
785         msr  apsr_g, r0
786         msr  apsr_nzcvq, r0
787         msr  APSR_nzcvq, r0
788         msr  apsr_nzcvqg, r0
789         msr  cpsr_fc, r0
790         msr  cpsr_c, r0
791         msr  cpsr_x, r0
792         msr  cpsr_fc, r0
793         msr  cpsr_all, r0
794         msr  cpsr_fsx, r0
795         msr  spsr_fc, r0
796         msr  SPSR_fsxc, r0
797         msr  cpsr_fsxc, r0
798
799 @ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
800 @ CHECK: msr  APSR_g, r0 @ encoding: [0x00,0xf0,0x24,0xe1]
801 @ CHECK: msr  APSR_nzcvq, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
802 @ CHECK: msr  APSR_nzcvq, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
803 @ CHECK: msr  APSR_nzcvqg, r0 @ encoding: [0x00,0xf0,0x2c,0xe1]
804 @ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
805 @ CHECK: msr  CPSR_c, r0 @ encoding: [0x00,0xf0,0x21,0xe1]
806 @ CHECK: msr  CPSR_x, r0 @ encoding: [0x00,0xf0,0x22,0xe1]
807 @ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
808 @ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
809 @ CHECK: msr  CPSR_fsx, r0 @ encoding: [0x00,0xf0,0x2e,0xe1]
810 @ CHECK: msr  SPSR_fc, r0 @ encoding: [0x00,0xf0,0x69,0xe1]
811 @ CHECK: msr  SPSR_fsxc, r0 @ encoding: [0x00,0xf0,0x6f,0xe1]
812 @ CHECK: msr  CPSR_fsxc, r0 @ encoding: [0x00,0xf0,0x2f,0xe1]
813
814 @------------------------------------------------------------------------------
815 @ MUL
816 @------------------------------------------------------------------------------
817
818   mul r5, r6, r7
819   muls r5, r6, r7
820   mulgt r5, r6, r7
821   mulsle r5, r6, r7
822
823 @ CHECK: mul    r5, r6, r7              @ encoding: [0x96,0x07,0x05,0xe0]
824 @ CHECK: muls   r5, r6, r7              @ encoding: [0x96,0x07,0x15,0xe0]
825 @ CHECK: mulgt  r5, r6, r7              @ encoding: [0x96,0x07,0x05,0xc0]
826 @ CHECK: mulsle r5, r6, r7              @ encoding: [0x96,0x07,0x15,0xd0]
827
828
829 @------------------------------------------------------------------------------
830 @ MVN (immediate)
831 @------------------------------------------------------------------------------
832     mvn r3, #7
833     mvn r4, #0xff0
834     mvn r5, #0xff0000
835     mvns r3, #7
836     mvneq r4, #0xff0
837     mvnseq r5, #0xff0000
838
839 @ CHECK: mvn    r3, #7                  @ encoding: [0x07,0x30,0xe0,0xe3]
840 @ CHECK: mvn    r4, #4080               @ encoding: [0xff,0x4e,0xe0,0xe3]
841 @ CHECK: mvn    r5, #16711680           @ encoding: [0xff,0x58,0xe0,0xe3]
842 @ CHECK: mvns   r3, #7                  @ encoding: [0x07,0x30,0xf0,0xe3]
843 @ CHECK: mvneq  r4, #4080               @ encoding: [0xff,0x4e,0xe0,0x03]
844 @ CHECK: mvnseq r5, #16711680           @ encoding: [0xff,0x58,0xf0,0x03]
845
846
847 @------------------------------------------------------------------------------
848 @ MVN (register)
849 @------------------------------------------------------------------------------
850         mvn r2, r3
851         mvns r2, r3
852         mvn r5, r6, lsl #19
853         mvn r5, r6, lsr #9
854         mvn r5, r6, asr #4
855         mvn r5, r6, ror #6
856         mvn r5, r6, rrx
857         mvneq r2, r3
858         mvnseq r2, r3, lsl #10
859
860 @ CHECK: mvn    r2, r3                  @ encoding: [0x03,0x20,0xe0,0xe1]
861 @ CHECK: mvns   r2, r3                  @ encoding: [0x03,0x20,0xf0,0xe1]
862 @ CHECK: mvn    r5, r6, lsl #19         @ encoding: [0x86,0x59,0xe0,0xe1]
863 @ CHECK: mvn    r5, r6, lsr #9          @ encoding: [0xa6,0x54,0xe0,0xe1]
864 @ CHECK: mvn    r5, r6, asr #4          @ encoding: [0x46,0x52,0xe0,0xe1]
865 @ CHECK: mvn    r5, r6, ror #6          @ encoding: [0x66,0x53,0xe0,0xe1]
866 @ CHECK: mvn    r5, r6, rrx             @ encoding: [0x66,0x50,0xe0,0xe1]
867 @ CHECK: mvneq  r2, r3                  @ encoding: [0x03,0x20,0xe0,0x01]
868 @ CHECK: mvnseq r2, r3, lsl #10         @ encoding: [0x03,0x25,0xf0,0x01]
869
870
871 @------------------------------------------------------------------------------
872 @ MVN (shifted register)
873 @------------------------------------------------------------------------------
874         mvn r5, r6, lsl r7
875         mvns r5, r6, lsr r7
876         mvngt r5, r6, asr r7
877         mvnslt r5, r6, ror r7
878
879 @ CHECK: mvn    r5, r6, lsl r7          @ encoding: [0x16,0x57,0xe0,0xe1]
880 @ CHECK: mvns   r5, r6, lsr r7          @ encoding: [0x36,0x57,0xf0,0xe1]
881 @ CHECK: mvngt  r5, r6, asr r7          @ encoding: [0x56,0x57,0xe0,0xc1]
882 @ CHECK: mvnslt r5, r6, ror r7          @ encoding: [0x76,0x57,0xf0,0xb1]
883
884 @------------------------------------------------------------------------------
885 @ NOP
886 @------------------------------------------------------------------------------
887         nop
888         nopgt
889
890 @ CHECK: nop @ encoding: [0x00,0xf0,0x20,0xe3]
891 @ CHECK: nopgt @ encoding: [0x00,0xf0,0x20,0xc3]
892
893
894 @------------------------------------------------------------------------------
895 @ ORR
896 @------------------------------------------------------------------------------
897         orr r4, r5, #0xf000
898         orr r4, r5, r6
899         orr r4, r5, r6, lsl #5
900         orr r4, r5, r6, lsr #5
901         orr r4, r5, r6, lsr #5
902         orr r4, r5, r6, asr #5
903         orr r4, r5, r6, ror #5
904         orr r6, r7, r8, lsl r9
905         orr r6, r7, r8, lsr r9
906         orr r6, r7, r8, asr r9
907         orr r6, r7, r8, ror r9
908         orr r4, r5, r6, rrx
909
910         @ destination register is optional
911         orr r5, #0xf000
912         orr r4, r5
913         orr r4, r5, lsl #5
914         orr r4, r5, lsr #5
915         orr r4, r5, lsr #5
916         orr r4, r5, asr #5
917         orr r4, r5, ror #5
918         orr r6, r7, lsl r9
919         orr r6, r7, lsr r9
920         orr r6, r7, asr r9
921         orr r6, r7, ror r9
922         orr r4, r5, rrx
923
924 @ CHECK: orr    r4, r5, #61440          @ encoding: [0x0f,0x4a,0x85,0xe3]
925 @ CHECK: orr    r4, r5, r6              @ encoding: [0x06,0x40,0x85,0xe1]
926 @ CHECK: orr    r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x85,0xe1]
927 @ CHECK: orr    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe1]
928 @ CHECK: orr    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe1]
929 @ CHECK: orr    r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x85,0xe1]
930 @ CHECK: orr    r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x85,0xe1]
931 @ CHECK: orr    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x87,0xe1]
932 @ CHECK: orr    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x87,0xe1]
933 @ CHECK: orr    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x87,0xe1]
934 @ CHECK: orr    r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0xe1]
935 @ CHECK: orr    r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x85,0xe1]
936
937 @ CHECK: orr    r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0xe3]
938 @ CHECK: orr    r4, r4, r5              @ encoding: [0x05,0x40,0x84,0xe1]
939 @ CHECK: orr    r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x84,0xe1]
940 @ CHECK: orr    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe1]
941 @ CHECK: orr    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x84,0xe1]
942 @ CHECK: orr    r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x84,0xe1]
943 @ CHECK: orr    r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x84,0xe1]
944 @ CHECK: orr    r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x86,0xe1]
945 @ CHECK: orr    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x86,0xe1]
946 @ CHECK: orr    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x86,0xe1]
947 @ CHECK: orr    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x86,0xe1]
948 @ CHECK: orr    r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x84,0xe1]
949
950         orrseq r4, r5, #0xf000
951         orrne r4, r5, r6
952         orrseq r4, r5, r6, lsl #5
953         orrlo r6, r7, r8, ror r9
954         orrshi r4, r5, r6, rrx
955         orrcs r5, #0xf000
956         orrseq r4, r5
957         orrne r6, r7, asr r9
958         orrslt r6, r7, ror r9
959         orrsgt r4, r5, rrx
960
961 @ CHECK: orrseq r4, r5, #61440          @ encoding: [0x0f,0x4a,0x95,0x03]
962 @ CHECK: orrne  r4, r5, r6              @ encoding: [0x06,0x40,0x85,0x11]
963 @ CHECK: orrseq r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x95,0x01]
964 @ CHECK: orrlo  r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0x31]
965 @ CHECK: orrshi r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x95,0x81]
966 @ CHECK: orrhs  r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0x23]
967 @ CHECK: orrseq r4, r4, r5              @ encoding: [0x05,0x40,0x94,0x01]
968 @ CHECK: orrne  r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x86,0x11]
969 @ CHECK: orrslt r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x96,0xb1]
970 @ CHECK: orrsgt r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x94,0xc1]
971
972 @------------------------------------------------------------------------------
973 @ PKH
974 @------------------------------------------------------------------------------
975         pkhbt r2, r2, r3
976         pkhbt r2, r2, r3, lsl #31
977         pkhbt r2, r2, r3, lsl #0
978         pkhbt r2, r2, r3, lsl #15
979
980         pkhtb r2, r2, r3
981         pkhtb r2, r2, r3, asr #31
982         pkhtb r2, r2, r3, asr #15
983
984 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
985 @ CHECK: pkhbt  r2, r2, r3, lsl #31     @ encoding: [0x93,0x2f,0x82,0xe6]
986 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
987 @ CHECK: pkhbt  r2, r2, r3, lsl #15     @ encoding: [0x93,0x27,0x82,0xe6]
988
989 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0x13,0x20,0x82,0xe6]
990 @ CHECK: pkhtb  r2, r2, r3, asr #31     @ encoding: [0xd3,0x2f,0x82,0xe6]
991 @ CHECK: pkhtb  r2, r2, r3, asr #15     @ encoding: [0xd3,0x27,0x82,0xe6]
992
993 @------------------------------------------------------------------------------
994 @ FIXME: PLD
995 @------------------------------------------------------------------------------
996 @------------------------------------------------------------------------------
997 @ FIXME: PLI
998 @------------------------------------------------------------------------------
999
1000
1001 @------------------------------------------------------------------------------
1002 @ POP
1003 @------------------------------------------------------------------------------
1004         pop {r7}
1005         pop {r7, r8, r9, r10}
1006
1007 @ FIXME: pop of a single register should encode as "ldr r7, [sp], #4"
1008 @ CHECK-FIXME: pop      {r7}                    @ encoding: [0x04,0x70,0x9d,0xe4]
1009 @ CHECK: pop    {r7, r8, r9, r10}       @ encoding: [0x80,0x07,0xbd,0xe8]
1010
1011
1012 @------------------------------------------------------------------------------
1013 @ PUSH
1014 @------------------------------------------------------------------------------
1015         push {r7}
1016         push {r7, r8, r9, r10}
1017
1018 @ FIXME: push of a single register should encode as "str r7, [sp, #-4]!"
1019 @ CHECK-FIXME: push     {r7}                    @ encoding: [0x04,0x70,0x2d,0xe5]
1020 @ CHECK: push   {r7, r8, r9, r10}       @ encoding: [0x80,0x07,0x2d,0xe9]
1021
1022
1023 @------------------------------------------------------------------------------
1024 @ QADD/QADD16/QADD8
1025 @------------------------------------------------------------------------------
1026         qadd r1, r2, r3
1027         qaddne r1, r2, r3
1028         qadd16 r1, r2, r3
1029         qadd16gt r1, r2, r3
1030         qadd8 r1, r2, r3
1031         qadd8le r1, r2, r3
1032
1033 @ CHECK: qadd   r1, r2, r3              @ encoding: [0x52,0x10,0x03,0xe1]
1034 @ CHECK: qaddne r1, r2, r3              @ encoding: [0x52,0x10,0x03,0x11]
1035 @ CHECK: qadd16 r1, r2, r3              @ encoding: [0x13,0x1f,0x22,0xe6]
1036 @ CHECK: qadd16gt       r1, r2, r3      @ encoding: [0x13,0x1f,0x22,0xc6]
1037 @ CHECK: qadd8  r1, r2, r3              @ encoding: [0x93,0x1f,0x22,0xe6]
1038 @ CHECK: qadd8le r1, r2, r3             @ encoding: [0x93,0x1f,0x22,0xd6]
1039
1040
1041 @------------------------------------------------------------------------------
1042 @ QDADD/QDSUB
1043 @------------------------------------------------------------------------------
1044         qdadd r6, r7, r8
1045         qdaddhi r6, r7, r8
1046         qdsub r6, r7, r8
1047         qdsubhi r6, r7, r8
1048
1049 @ CHECK: qdadd  r6, r7, r8              @ encoding: [0x57,0x60,0x48,0xe1]
1050 @ CHECK: qdaddhi r6, r7, r8             @ encoding: [0x57,0x60,0x48,0x81]
1051 @ CHECK: qdsub  r6, r7, r8              @ encoding: [0x57,0x60,0x68,0xe1]
1052 @ CHECK: qdsubhi r6, r7, r8             @ encoding: [0x57,0x60,0x68,0x81]
1053
1054
1055 @------------------------------------------------------------------------------
1056 @ QSAX
1057 @------------------------------------------------------------------------------
1058         qsax r9, r12, r0
1059         qsaxeq r9, r12, r0
1060
1061 @ CHECK: qsax   r9, r12, r0             @ encoding: [0x50,0x9f,0x2c,0xe6]
1062 @ CHECK: qsaxeq r9, r12, r0             @ encoding: [0x50,0x9f,0x2c,0x06]
1063
1064
1065 @------------------------------------------------------------------------------
1066 @ QADD/QADD16/QADD8
1067 @------------------------------------------------------------------------------
1068         qsub r1, r2, r3
1069         qsubne r1, r2, r3
1070         qsub16 r1, r2, r3
1071         qsub16gt r1, r2, r3
1072         qsub8 r1, r2, r3
1073         qsub8le r1, r2, r3
1074
1075 @ CHECK: qsub   r1, r2, r3              @ encoding: [0x52,0x10,0x23,0xe1]
1076 @ CHECK: qsubne r1, r2, r3              @ encoding: [0x52,0x10,0x23,0x11]
1077 @ CHECK: qsub16 r1, r2, r3              @ encoding: [0x73,0x1f,0x22,0xe6]
1078 @ CHECK: qsub16gt       r1, r2, r3      @ encoding: [0x73,0x1f,0x22,0xc6]
1079 @ CHECK: qsub8  r1, r2, r3              @ encoding: [0xf3,0x1f,0x22,0xe6]
1080 @ CHECK: qsub8le r1, r2, r3             @ encoding: [0xf3,0x1f,0x22,0xd6]
1081
1082
1083 @------------------------------------------------------------------------------
1084 @ RBIT
1085 @------------------------------------------------------------------------------
1086         rbit r1, r2
1087         rbitne r1, r2
1088
1089 @ CHECK: rbit   r1, r2                  @ encoding: [0x32,0x1f,0xff,0xe6]
1090 @ CHECK: rbitne r1, r2                  @ encoding: [0x32,0x1f,0xff,0x16]
1091
1092
1093 @------------------------------------------------------------------------------
1094 @ REV/REV16/REVSH
1095 @------------------------------------------------------------------------------
1096         rev r1, r9
1097         revne r1, r5
1098         rev16 r8, r3
1099         rev16ne r12, r4
1100         revsh r4, r9
1101         revshne r9, r1
1102
1103 @ CHECK: rev    r1, r9                  @ encoding: [0x39,0x1f,0xbf,0xe6]
1104 @ CHECK: revne  r1, r5                  @ encoding: [0x35,0x1f,0xbf,0x16]
1105 @ CHECK: rev16  r8, r3                  @ encoding: [0xb3,0x8f,0xbf,0xe6]
1106 @ CHECK: rev16ne r12, r4                @ encoding: [0xb4,0xcf,0xbf,0x16]
1107 @ CHECK: revsh  r4, r9                  @ encoding: [0xb9,0x4f,0xff,0xe6]
1108 @ CHECK: revshne r9, r1                 @ encoding: [0xb1,0x9f,0xff,0x16]
1109
1110
1111 @------------------------------------------------------------------------------
1112 @ RSB
1113 @------------------------------------------------------------------------------
1114         rsb r4, r5, #0xf000
1115         rsb r4, r5, r6
1116         rsb r4, r5, r6, lsl #5
1117         rsblo r4, r5, r6, lsr #5
1118         rsb r4, r5, r6, lsr #5
1119         rsb r4, r5, r6, asr #5
1120         rsb r4, r5, r6, ror #5
1121         rsb r6, r7, r8, lsl r9
1122         rsb r6, r7, r8, lsr r9
1123         rsb r6, r7, r8, asr r9
1124         rsble r6, r7, r8, ror r9
1125         rsb r4, r5, r6, rrx
1126
1127         @ destination register is optional
1128         rsb r5, #0xf000
1129         rsb r4, r5
1130         rsb r4, r5, lsl #5
1131         rsb r4, r5, lsr #5
1132         rsbne r4, r5, lsr #5
1133         rsb r4, r5, asr #5
1134         rsb r4, r5, ror #5
1135         rsbgt r6, r7, lsl r9
1136         rsb r6, r7, lsr r9
1137         rsb r6, r7, asr r9
1138         rsb r6, r7, ror r9
1139         rsb r4, r5, rrx
1140
1141 @ CHECK: rsb    r4, r5, #61440          @ encoding: [0x0f,0x4a,0x65,0xe2]
1142 @ CHECK: rsb    r4, r5, r6              @ encoding: [0x06,0x40,0x65,0xe0]
1143 @ CHECK: rsb    r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x65,0xe0]
1144 @ CHECK: rsblo  r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x65,0x30]
1145 @ CHECK: rsb    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x65,0xe0]
1146 @ CHECK: rsb    r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x65,0xe0]
1147 @ CHECK: rsb    r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x65,0xe0]
1148 @ CHECK: rsb    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x67,0xe0]
1149 @ CHECK: rsb    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x67,0xe0]
1150 @ CHECK: rsb    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x67,0xe0]
1151 @ CHECK: rsble  r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x67,0xd0]
1152 @ CHECK: rsb    r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x65,0xe0]
1153
1154 @ CHECK: rsb    r5, r5, #61440          @ encoding: [0x0f,0x5a,0x65,0xe2]
1155 @ CHECK: rsb    r4, r4, r5              @ encoding: [0x05,0x40,0x64,0xe0]
1156 @ CHECK: rsb    r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x64,0xe0]
1157 @ CHECK: rsb    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x64,0xe0]
1158 @ CHECK: rsbne  r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0x64,0x10]
1159 @ CHECK: rsb    r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0x64,0xe0]
1160 @ CHECK: rsb    r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0x64,0xe0]
1161 @ CHECK: rsbgt  r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0x66,0xc0]
1162 @ CHECK: rsb    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0x66,0xe0]
1163 @ CHECK: rsb    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x66,0xe0]
1164 @ CHECK: rsb    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x66,0xe0]
1165 @ CHECK: rsb    r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x64,0xe0]
1166
1167 @------------------------------------------------------------------------------
1168 @ RSC
1169 @------------------------------------------------------------------------------
1170         rsc r4, r5, #0xf000
1171         rsc r4, r5, r6
1172         rsc r4, r5, r6, lsl #5
1173         rsclo r4, r5, r6, lsr #5
1174         rsc r4, r5, r6, lsr #5
1175         rsc r4, r5, r6, asr #5
1176         rsc r4, r5, r6, ror #5
1177         rsc r6, r7, r8, lsl r9
1178         rsc r6, r7, r8, lsr r9
1179         rsc r6, r7, r8, asr r9
1180         rscle r6, r7, r8, ror r9
1181
1182         @ destination register is optional
1183         rsc r5, #0xf000
1184         rsc r4, r5
1185         rsc r4, r5, lsl #5
1186         rsc r4, r5, lsr #5
1187         rscne r4, r5, lsr #5
1188         rsc r4, r5, asr #5
1189         rsc r4, r5, ror #5
1190         rscgt r6, r7, lsl r9
1191         rsc r6, r7, lsr r9
1192         rsc r6, r7, asr r9
1193         rsc r6, r7, ror r9
1194
1195 @ CHECK: rsc    r4, r5, #61440          @ encoding: [0x0f,0x4a,0xe5,0xe2]
1196 @ CHECK: rsc    r4, r5, r6              @ encoding: [0x06,0x40,0xe5,0xe0]
1197 @ CHECK: rsc    r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0xe5,0xe0]
1198 @ CHECK: rsclo  r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xe5,0x30]
1199 @ CHECK: rsc    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xe5,0xe0]
1200 @ CHECK: rsc    r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0xe5,0xe0]
1201 @ CHECK: rsc    r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0xe5,0xe0]
1202 @ CHECK: rsc    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0xe7,0xe0]
1203 @ CHECK: rsc    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0xe7,0xe0]
1204 @ CHECK: rsc    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0xe7,0xe0]
1205 @ CHECK: rscle  r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0xe7,0xd0]
1206
1207 @ CHECK: rsc    r5, r5, #61440          @ encoding: [0x0f,0x5a,0xe5,0xe2]
1208 @ CHECK: rsc    r4, r4, r5              @ encoding: [0x05,0x40,0xe4,0xe0]
1209 @ CHECK: rsc    r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0xe4,0xe0]
1210 @ CHECK: rsc    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xe4,0xe0]
1211 @ CHECK: rscne  r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xe4,0x10]
1212 @ CHECK: rsc    r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0xe4,0xe0]
1213 @ CHECK: rsc    r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0xe4,0xe0]
1214 @ CHECK: rscgt  r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0xe6,0xc0]
1215 @ CHECK: rsc    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0xe6,0xe0]
1216 @ CHECK: rsc    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0xe6,0xe0]
1217 @ CHECK: rsc    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xe6,0xe0]
1218
1219 @------------------------------------------------------------------------------
1220 @ SADD16/SADD8
1221 @------------------------------------------------------------------------------
1222         sadd16 r1, r2, r3
1223         sadd16gt r1, r2, r3
1224         sadd8 r1, r2, r3
1225         sadd8le r1, r2, r3
1226
1227 @ CHECK: sadd16 r1, r2, r3              @ encoding: [0x13,0x1f,0x12,0xe6]
1228 @ CHECK: sadd16gt       r1, r2, r3      @ encoding: [0x13,0x1f,0x12,0xc6]
1229 @ CHECK: sadd8  r1, r2, r3              @ encoding: [0x93,0x1f,0x12,0xe6]
1230 @ CHECK: sadd8le r1, r2, r3             @ encoding: [0x93,0x1f,0x12,0xd6]
1231
1232
1233 @------------------------------------------------------------------------------
1234 @ SASX
1235 @------------------------------------------------------------------------------
1236         sasx r9, r12, r0
1237         sasxeq r9, r12, r0
1238
1239 @ CHECK: sasx   r9, r12, r0             @ encoding: [0x30,0x9f,0x1c,0xe6]
1240 @ CHECK: sasxeq r9, r12, r0             @ encoding: [0x30,0x9f,0x1c,0x06]
1241
1242
1243 @------------------------------------------------------------------------------
1244 @ SBC
1245 @------------------------------------------------------------------------------
1246         sbc r4, r5, #0xf000
1247         sbc r4, r5, r6
1248         sbc r4, r5, r6, lsl #5
1249         sbc r4, r5, r6, lsr #5
1250         sbc r4, r5, r6, lsr #5
1251         sbc r4, r5, r6, asr #5
1252         sbc r4, r5, r6, ror #5
1253         sbc r6, r7, r8, lsl r9
1254         sbc r6, r7, r8, lsr r9
1255         sbc r6, r7, r8, asr r9
1256         sbc r6, r7, r8, ror r9
1257
1258         @ destination register is optional
1259         sbc r5, #0xf000
1260         sbc r4, r5
1261         sbc r4, r5, lsl #5
1262         sbc r4, r5, lsr #5
1263         sbc r4, r5, lsr #5
1264         sbc r4, r5, asr #5
1265         sbc r4, r5, ror #5
1266         sbc r6, r7, lsl r9
1267         sbc r6, r7, lsr r9
1268         sbc r6, r7, asr r9
1269         sbc r6, r7, ror r9
1270
1271 @ CHECK: sbc    r4, r5, #61440          @ encoding: [0x0f,0x4a,0xc5,0xe2]
1272 @ CHECK: sbc    r4, r5, r6              @ encoding: [0x06,0x40,0xc5,0xe0]
1273 @ CHECK: sbc    r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0xc5,0xe0]
1274 @ CHECK: sbc    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xc5,0xe0]
1275 @ CHECK: sbc    r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0xc5,0xe0]
1276 @ CHECK: sbc    r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0xc5,0xe0]
1277 @ CHECK: sbc    r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0xc5,0xe0]
1278 @ CHECK: sbc    r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0xc7,0xe0]
1279 @ CHECK: sbc    r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0xc7,0xe0]
1280 @ CHECK: sbc    r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0xc7,0xe0]
1281 @ CHECK: sbc    r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0xc7,0xe0]
1282
1283 @ CHECK: sbc    r5, r5, #61440          @ encoding: [0x0f,0x5a,0xc5,0xe2]
1284 @ CHECK: sbc    r4, r4, r5              @ encoding: [0x05,0x40,0xc4,0xe0]
1285 @ CHECK: sbc    r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0xc4,0xe0]
1286 @ CHECK: sbc    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xc4,0xe0]
1287 @ CHECK: sbc    r4, r4, r5, lsr #5      @ encoding: [0xa5,0x42,0xc4,0xe0]
1288 @ CHECK: sbc    r4, r4, r5, asr #5      @ encoding: [0xc5,0x42,0xc4,0xe0]
1289 @ CHECK: sbc    r4, r4, r5, ror #5      @ encoding: [0xe5,0x42,0xc4,0xe0]
1290 @ CHECK: sbc    r6, r6, r7, lsl r9      @ encoding: [0x17,0x69,0xc6,0xe0]
1291 @ CHECK: sbc    r6, r6, r7, lsr r9      @ encoding: [0x37,0x69,0xc6,0xe0]
1292 @ CHECK: sbc    r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0xc6,0xe0]
1293 @ CHECK: sbc    r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xc6,0xe0]
1294
1295
1296 @------------------------------------------------------------------------------
1297 @ SEL
1298 @------------------------------------------------------------------------------
1299         sel r9, r2, r1
1300         selne r9, r2, r1
1301
1302 @ CHECK: sel    r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0xe6]
1303 @ CHECK: selne  r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0x16]
1304
1305
1306 @------------------------------------------------------------------------------
1307 @ SETEND
1308 @------------------------------------------------------------------------------
1309         setend be
1310         setend le
1311
1312         sel     r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0xe6]
1313         selne   r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0x16]
1314
1315
1316 @------------------------------------------------------------------------------
1317 @ SEV
1318 @------------------------------------------------------------------------------
1319         sev
1320         seveq
1321
1322 @ CHECK: sev                             @ encoding: [0x04,0xf0,0x20,0xe3]
1323 @ CHECK: seveq                           @ encoding: [0x04,0xf0,0x20,0x03]
1324
1325 @------------------------------------------------------------------------------
1326 @ SHADD16/SHADD8
1327 @------------------------------------------------------------------------------
1328         shadd16 r4, r8, r2
1329         shadd16gt r4, r8, r2
1330         shadd8 r4, r8, r2
1331         shadd8gt r4, r8, r2
1332
1333 @ CHECK: shadd16        r4, r8, r2      @ encoding: [0x12,0x4f,0x38,0xe6]
1334 @ CHECK: shadd16gt      r4, r8, r2      @ encoding: [0x12,0x4f,0x38,0xc6]
1335 @ CHECK: shadd8 r4, r8, r2              @ encoding: [0x92,0x4f,0x38,0xe6]
1336 @ CHECK: shadd8gt       r4, r8, r2      @ encoding: [0x92,0x4f,0x38,0xc6]
1337
1338
1339 @------------------------------------------------------------------------------
1340 @ SHASX
1341 @------------------------------------------------------------------------------
1342         shasx r4, r8, r2
1343         shasxgt r4, r8, r2
1344
1345 @ CHECK: shasx  r4, r8, r2              @ encoding: [0x32,0x4f,0x38,0xe6]
1346 @ CHECK: shasxgt r4, r8, r2             @ encoding: [0x32,0x4f,0x38,0xc6]
1347
1348
1349 @------------------------------------------------------------------------------
1350 @ SHSUB16/SHSUB8
1351 @------------------------------------------------------------------------------
1352         shsub16 r4, r8, r2
1353         shsub16gt r4, r8, r2
1354         shsub8 r4, r8, r2
1355         shsub8gt r4, r8, r2
1356
1357 @ CHECK: shsub16        r4, r8, r2      @ encoding: [0x72,0x4f,0x38,0xe6]
1358 @ CHECK: shsub16gt      r4, r8, r2      @ encoding: [0x72,0x4f,0x38,0xc6]
1359 @ CHECK: shsub8 r4, r8, r2              @ encoding: [0xf2,0x4f,0x38,0xe6]
1360 @ CHECK: shsub8gt       r4, r8, r2      @ encoding: [0xf2,0x4f,0x38,0xc6]
1361
1362 @------------------------------------------------------------------------------
1363 @ SMC
1364 @------------------------------------------------------------------------------
1365         smc #0xf
1366         smceq #0
1367
1368 @ CHECK: smc    #15                     @ encoding: [0x7f,0x00,0x60,0xe1]
1369 @ CHECK: smceq  #0                      @ encoding: [0x70,0x00,0x60,0x01]
1370
1371 @------------------------------------------------------------------------------
1372 @ SMLABB/SMLABT/SMLATB/SMLATT
1373 @------------------------------------------------------------------------------
1374         smlabb r3, r1, r9, r0
1375         smlabt r5, r6, r4, r1
1376         smlatb r4, r2, r3, r2
1377         smlatt r8, r3, r8, r4
1378         smlabbge r3, r1, r9, r0
1379         smlabtle r5, r6, r4, r1
1380         smlatbne r4, r2, r3, r2
1381         smlatteq r8, r3, r8, r4
1382
1383 @ CHECK: smlabb r3, r1, r9, r0          @ encoding: [0x81,0x09,0x03,0xe1]
1384 @ CHECK: smlabt r5, r6, r4, r1          @ encoding: [0xc6,0x14,0x05,0xe1]
1385 @ CHECK: smlatb r4, r2, r3, r2          @ encoding: [0xa2,0x23,0x04,0xe1]
1386 @ CHECK: smlatt r8, r3, r8, r4          @ encoding: [0xe3,0x48,0x08,0xe1]
1387 @ CHECK: smlabbge       r3, r1, r9, r0  @ encoding: [0x81,0x09,0x03,0xa1]
1388 @ CHECK: smlabtle       r5, r6, r4, r1  @ encoding: [0xc6,0x14,0x05,0xd1]
1389 @ CHECK: smlatbne       r4, r2, r3, r2  @ encoding: [0xa2,0x23,0x04,0x11]
1390 @ CHECK: smlatteq       r8, r3, r8, r4  @ encoding: [0xe3,0x48,0x08,0x01]
1391
1392 @------------------------------------------------------------------------------
1393 @ SMLAD/SMLADX
1394 @------------------------------------------------------------------------------
1395         smlad r2, r3, r5, r8
1396         smladx r2, r3, r5, r8
1397         smladeq r2, r3, r5, r8
1398         smladxhi r2, r3, r5, r8
1399
1400 @ CHECK: smlad  r2, r3, r5, r8          @ encoding: [0x13,0x85,0x02,0xe7]
1401 @ CHECK: smladx r2, r3, r5, r8          @ encoding: [0x33,0x85,0x02,0xe7]
1402 @ CHECK: smladeq        r2, r3, r5, r8  @ encoding: [0x13,0x85,0x02,0x07]
1403 @ CHECK: smladxhi       r2, r3, r5, r8  @ encoding: [0x33,0x85,0x02,0x87]
1404
1405
1406 @------------------------------------------------------------------------------
1407 @ SMLAD/SMLADX
1408 @------------------------------------------------------------------------------
1409         smlal r2, r3, r5, r8
1410         smlals r2, r3, r5, r8
1411         smlaleq r2, r3, r5, r8
1412         smlalshi r2, r3, r5, r8
1413
1414 @ CHECK: smlal  r2, r3, r5, r8          @ encoding: [0x95,0x28,0xe3,0xe0]
1415 @ CHECK: smlals r2, r3, r5, r8          @ encoding: [0x95,0x28,0xf3,0xe0]
1416 @ CHECK: smlaleq        r2, r3, r5, r8  @ encoding: [0x95,0x28,0xe3,0x00]
1417 @ CHECK: smlalshi       r2, r3, r5, r8  @ encoding: [0x95,0x28,0xf3,0x80]
1418
1419
1420 @------------------------------------------------------------------------------
1421 @ STM*
1422 @------------------------------------------------------------------------------
1423         stm       r2, {r1,r3-r6,sp}
1424         stmia     r2, {r1,r3-r6,sp}
1425         stmib     r2, {r1,r3-r6,sp}
1426         stmda     r2, {r1,r3-r6,sp}
1427         stmdb     r2, {r1,r3-r6,sp}
1428         stmfd     r2, {r1,r3-r6,sp}
1429
1430         @ with update
1431         stmia     r2!, {r1,r3-r6,sp}
1432         stmib     r2!, {r1,r3-r6,sp}
1433         stmda     r2!, {r1,r3-r6,sp}
1434         stmdb     r2!, {r1,r3-r6,sp}
1435 @ CHECK: stm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe8]
1436 @ CHECK: stm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe8]
1437 @ CHECK: stmib r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe9]
1438 @ CHECK: stmda r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x02,0xe8]
1439 @ CHECK: stmdb r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x02,0xe9]
1440 @ CHECK: stmdb r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x02,0xe9]
1441
1442 @ CHECK: stm   r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa2,0xe8]
1443 @ CHECK: stmib r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa2,0xe9]
1444 @ CHECK: stmda r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x22,0xe8]
1445 @ CHECK: stmdb r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x22,0xe9]