ARM assembly parsing of MRS instruction.
[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 @ STM*
752 @------------------------------------------------------------------------------
753         stm       r2, {r1,r3-r6,sp}
754         stmia     r2, {r1,r3-r6,sp}
755         stmib     r2, {r1,r3-r6,sp}
756         stmda     r2, {r1,r3-r6,sp}
757         stmdb     r2, {r1,r3-r6,sp}
758         stmfd     r2, {r1,r3-r6,sp}
759
760         @ with update
761         stmia     r2!, {r1,r3-r6,sp}
762         stmib     r2!, {r1,r3-r6,sp}
763         stmda     r2!, {r1,r3-r6,sp}
764         stmdb     r2!, {r1,r3-r6,sp}
765 @ CHECK: stm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe8]
766 @ CHECK: stm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe8]
767 @ CHECK: stmib r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe9]
768 @ CHECK: stmda r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x02,0xe8]
769 @ CHECK: stmdb r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x02,0xe9]
770 @ CHECK: stmdb r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x02,0xe9]
771
772 @ CHECK: stm   r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa2,0xe8]
773 @ CHECK: stmib r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa2,0xe9]
774 @ CHECK: stmda r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x22,0xe8]
775 @ CHECK: stmdb r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x22,0xe9]