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