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