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