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