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