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