c367ea8ca9719c5cecf15da908b9cae87a7c6e82
[oota-llvm.git] / test / MC / ARM / basic-thumb2-instructions.s
1 @ RUN: llvm-mc -triple=thumbv7-apple-darwin -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
52 @ CHECK: adc.w  r4, r5, r6              @ encoding: [0x45,0xeb,0x06,0x04]
53 @ CHECK: adcs.w r4, r5, r6              @ encoding: [0x55,0xeb,0x06,0x04]
54 @ CHECK: adc.w  r9, r1, r3              @ encoding: [0x41,0xeb,0x03,0x09]
55 @ CHECK: adcs.w r9, r1, r3              @ encoding: [0x51,0xeb,0x03,0x09]
56 @ CHECK: adc.w  r0, r1, r3, ror #4      @ encoding: [0x41,0xeb,0x33,0x10]
57 @ CHECK: adcs.w r0, r1, r3, lsl #7      @ encoding: [0x51,0xeb,0xc3,0x10]
58 @ CHECK: adc.w  r0, r1, r3, lsr #31     @ encoding: [0x41,0xeb,0xd3,0x70]
59 @ CHECK: adcs.w r0, r1, r3, asr #32     @ encoding: [0x51,0xeb,0x23,0x00]
60
61
62 @------------------------------------------------------------------------------
63 @ ADD (immediate)
64 @------------------------------------------------------------------------------
65         itet eq
66         addeq r1, r2, #4
67         addwne r5, r3, #1023
68         addeq r4, r5, #293
69         add r2, sp, #1024
70         add r2, r8, #0xff00
71         add r2, r3, #257
72         addw r2, r3, #257
73         add r12, r6, #0x100
74         addw r12, r6, #0x100
75         adds r1, r2, #0x1f0
76
77 @ CHECK: itet   eq                      @ encoding: [0x0a,0xbf]
78 @ CHECK: addeq  r1, r2, #4              @ encoding: [0x11,0x1d]
79 @ CHECK: addwne r5, r3, #1023           @ encoding: [0x03,0xf2,0xff,0x35]
80 @ CHECK: addweq r4, r5, #293            @ encoding: [0x05,0xf2,0x25,0x14]
81 @ CHECK: add.w  r2, sp, #1024           @ encoding: [0x0d,0xf5,0x80,0x62]
82 @ CHECK: add.w  r2, r8, #65280          @ encoding: [0x08,0xf5,0x7f,0x42]
83 @ CHECK: addw   r2, r3, #257            @ encoding: [0x03,0xf2,0x01,0x12]
84 @ CHECK: addw   r2, r3, #257            @ encoding: [0x03,0xf2,0x01,0x12]
85 @ CHECK: add.w  r12, r6, #256           @ encoding: [0x06,0xf5,0x80,0x7c]
86 @ CHECK: addw   r12, r6, #256           @ encoding: [0x06,0xf2,0x00,0x1c]
87 @ CHECK: adds.w r1, r2, #496            @ encoding: [0x12,0xf5,0xf8,0x71]
88
89
90 @------------------------------------------------------------------------------
91 @ ADD (register)
92 @------------------------------------------------------------------------------
93         add r1, r2, r8
94         add r5, r9, r2, asr #32
95         adds r7, r3, r1, lsl #31
96         adds.w r0, r3, r6, lsr #25
97         add.w r4, r8, r1, ror #12
98
99 @ CHECK: add.w  r1, r2, r8              @ encoding: [0x02,0xeb,0x08,0x01]
100 @ CHECK: add.w  r5, r9, r2, asr #32     @ encoding: [0x09,0xeb,0x22,0x05]
101 @ CHECK: adds.w r7, r3, r1, lsl #31     @ encoding: [0x13,0xeb,0xc1,0x77]
102 @ CHECK: adds.w r0, r3, r6, lsr #25     @ encoding: [0x13,0xeb,0x56,0x60]
103 @ CHECK: add.w  r4, r8, r1, ror #12     @ encoding: [0x08,0xeb,0x31,0x34]
104
105
106 @------------------------------------------------------------------------------
107 @ FIXME: ADR
108 @------------------------------------------------------------------------------
109
110         subw r11, pc, #3270
111         adr.w r11, #-826
112
113 @ CHECK: subw   r11, pc, #3270          @ encoding: [0xaf,0xf6,0xc6,0x4b]
114 @ CHECK: adr.w  r11, #-826              @ encoding: [0xaf,0xf2,0x3a,0x3b]
115
116 @------------------------------------------------------------------------------
117 @ AND (immediate)
118 @------------------------------------------------------------------------------
119         and r2, r5, #0xff000
120         ands r3, r12, #0xf
121         and r1, #0xff
122         and r1, r1, #0xff
123
124 @ CHECK: and    r2, r5, #1044480        @ encoding: [0x05,0xf4,0x7f,0x22]
125 @ CHECK: ands   r3, r12, #15            @ encoding: [0x1c,0xf0,0x0f,0x03]
126 @ CHECK: and    r1, r1, #255            @ encoding: [0x01,0xf0,0xff,0x01]
127 @ CHECK: and    r1, r1, #255            @ encoding: [0x01,0xf0,0xff,0x01]
128
129
130 @------------------------------------------------------------------------------
131 @ AND (register)
132 @------------------------------------------------------------------------------
133         and r4, r9, r8
134         and r1, r4, r8, asr #3
135         ands r2, r1, r7, lsl #1
136         ands.w r4, r5, r2, lsr #20
137         and.w r9, r12, r1, ror #17
138
139 @ CHECK: and.w  r4, r9, r8              @ encoding: [0x09,0xea,0x08,0x04]
140 @ CHECK: and.w  r1, r4, r8, asr #3      @ encoding: [0x04,0xea,0xe8,0x01]
141 @ CHECK: ands.w r2, r1, r7, lsl #1      @ encoding: [0x11,0xea,0x47,0x02]
142 @ CHECK: ands.w r4, r5, r2, lsr #20     @ encoding: [0x15,0xea,0x12,0x54]
143 @ CHECK: and.w  r9, r12, r1, ror #17    @ encoding: [0x0c,0xea,0x71,0x49]
144
145 @------------------------------------------------------------------------------
146 @ ASR (immediate)
147 @------------------------------------------------------------------------------
148         asr r2, r3, #12
149         asrs r8, r3, #32
150         asrs.w r2, r3, #1
151         asr r2, r3, #4
152         asrs r2, r12, #15
153
154         asr r3, #19
155         asrs r8, #2
156         asrs.w r7, #5
157         asr.w r12, #21
158
159 @ CHECK: asr.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x23,0x32]
160 @ CHECK: asrs.w r8, r3, #32             @ encoding: [0x5f,0xea,0x23,0x08]
161 @ CHECK: asrs.w r2, r3, #1              @ encoding: [0x5f,0xea,0x63,0x02]
162 @ CHECK: asr.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x23,0x12]
163 @ CHECK: asrs.w r2, r12, #15            @ encoding: [0x5f,0xea,0xec,0x32]
164
165 @ CHECK: asr.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xe3,0x43]
166 @ CHECK: asrs.w r8, r8, #2              @ encoding: [0x5f,0xea,0xa8,0x08]
167 @ CHECK: asrs.w r7, r7, #5              @ encoding: [0x5f,0xea,0x67,0x17]
168 @ CHECK: asr.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x6c,0x5c]
169
170
171 @------------------------------------------------------------------------------
172 @ ASR (register)
173 @------------------------------------------------------------------------------
174         asr r3, r4, r2
175         asr.w r1, r2
176         asrs r3, r4, r8
177
178 @ CHECK: asr.w  r3, r4, r2              @ encoding: [0x44,0xfa,0x02,0xf3]
179 @ CHECK: asr.w  r1, r1, r2              @ encoding: [0x41,0xfa,0x02,0xf1]
180 @ CHECK: asrs.w r3, r4, r8              @ encoding: [0x54,0xfa,0x08,0xf3]
181
182
183 @------------------------------------------------------------------------------
184 @ B
185 @------------------------------------------------------------------------------
186         b.w   _bar
187         beq.w   _bar
188         it eq
189         beq.w _bar
190         bmi.w   #-183396
191
192 @ CHECK: b.w    _bar                    @ encoding: [A,0xf0'A',A,0x90'A']
193           @   fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch
194 @ CHECK: beq.w  _bar                    @ encoding: [A,0xf0'A',A,0x80'A']
195           @   fixup A - offset: 0, value: _bar, kind: fixup_t2_condbranch
196 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
197 @ CHECK: beq.w  _bar                    @ encoding: [A,0xf0'A',A,0x90'A']
198           @   fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch
199 @ CHECK: bmi.w   #-183396                @ encoding: [0x13,0xf5,0xce,0xa9]
200
201
202 @------------------------------------------------------------------------------
203 @ BFC
204 @------------------------------------------------------------------------------
205         bfc r5, #3, #17
206         it lo
207         bfccc r5, #3, #17
208
209 @ CHECK: bfc    r5, #3, #17             @ encoding: [0x6f,0xf3,0xd3,0x05]
210 @ CHECK: it     lo                      @ encoding: [0x38,0xbf]
211 @ CHECK: bfclo  r5, #3, #17             @ encoding: [0x6f,0xf3,0xd3,0x05]
212
213
214 @------------------------------------------------------------------------------
215 @ BFI
216 @------------------------------------------------------------------------------
217         bfi r5, r2, #3, #17
218         it ne
219         bfine r5, r2, #3, #17
220
221 @ CHECK: bfi    r5, r2, #3, #17         @ encoding: [0x62,0xf3,0xd3,0x05]
222 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
223 @ CHECK: bfine  r5, r2, #3, #17         @ encoding: [0x62,0xf3,0xd3,0x05]
224
225
226 @------------------------------------------------------------------------------
227 @ BIC
228 @------------------------------------------------------------------------------
229         bic r10, r1, #0xf
230         bic r12, r3, r6
231         bic r11, r2, r6, lsl #12
232         bic r8, r4, r1, lsr #11
233         bic r7, r5, r7, lsr #15
234         bic r6, r7, r9, asr #32
235         bic r5, r6, r8, ror #1
236
237         @ destination register is optional
238         bic r1, #0xf
239         bic r1, r1
240         bic r4, r2, lsl #31
241         bic r6, r3, lsr #12
242         bic r7, r4, lsr #7
243         bic r8, r5, asr #15
244         bic r12, r6, ror #29
245
246 @ CHECK: bic    r10, r1, #15            @ encoding: [0x21,0xf0,0x0f,0x0a]
247 @ CHECK: bic.w  r12, r3, r6             @ encoding: [0x23,0xea,0x06,0x0c]
248 @ CHECK: bic.w  r11, r2, r6, lsl #12    @ encoding: [0x22,0xea,0x06,0x3b]
249 @ CHECK: bic.w  r8, r4, r1, lsr #11     @ encoding: [0x24,0xea,0xd1,0x28]
250 @ CHECK: bic.w  r7, r5, r7, lsr #15     @ encoding: [0x25,0xea,0xd7,0x37]
251 @ CHECK: bic.w  r6, r7, r9, asr #32     @ encoding: [0x27,0xea,0x29,0x06]
252 @ CHECK: bic.w  r5, r6, r8, ror #1      @ encoding: [0x26,0xea,0x78,0x05]
253
254 @ CHECK: bic    r1, r1, #15             @ encoding: [0x21,0xf0,0x0f,0x01]
255 @ CHECK: bic.w  r1, r1, r1              @ encoding: [0x21,0xea,0x01,0x01]
256 @ CHECK: bic.w  r4, r4, r2, lsl #31     @ encoding: [0x24,0xea,0xc2,0x74]
257 @ CHECK: bic.w  r6, r6, r3, lsr #12     @ encoding: [0x26,0xea,0x13,0x36]
258 @ CHECK: bic.w  r7, r7, r4, lsr #7      @ encoding: [0x27,0xea,0xd4,0x17]
259 @ CHECK: bic.w  r8, r8, r5, asr #15     @ encoding: [0x28,0xea,0xe5,0x38]
260 @ CHECK: bic.w  r12, r12, r6, ror #29   @ encoding: [0x2c,0xea,0x76,0x7c]
261
262 @------------------------------------------------------------------------------
263 @ BKPT
264 @------------------------------------------------------------------------------
265         it pl
266         bkpt #234
267
268 @ CHECK: it pl                      @ encoding: [0x58,0xbf]
269 @ CHECK: bkpt #234                    @ encoding: [0xea,0xbe]
270
271 @------------------------------------------------------------------------------
272 @ BXJ
273 @------------------------------------------------------------------------------
274         bxj r5
275         it ne
276         bxjne r7
277
278 @ CHECK: bxj    r5                      @ encoding: [0xc5,0xf3,0x00,0x8f]
279 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
280 @ CHECK: bxjne  r7                      @ encoding: [0xc7,0xf3,0x00,0x8f]
281
282
283 @------------------------------------------------------------------------------
284 @ CBZ/CBNZ
285 @------------------------------------------------------------------------------
286         cbnz    r7, #6
287         cbnz    r7, #12
288         cbz   r6, _bar
289         cbnz   r6, _bar
290
291 @ CHECK: cbnz    r7, #6                  @ encoding: [0x1f,0xb9]
292 @ CHECK: cbnz    r7, #12                 @ encoding: [0x37,0xb9]
293 @ CHECK: cbz    r6, _bar                @ encoding: [0x06'A',0xb1'A']
294            @   fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
295 @ CHECK: cbnz   r6, _bar                @ encoding: [0x06'A',0xb9'A']
296            @   fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
297
298
299 @------------------------------------------------------------------------------
300 @ CDP/CDP2
301 @------------------------------------------------------------------------------
302   cdp  p7, #1, c1, c1, c1, #4
303   cdp2  p7, #1, c1, c1, c1, #4
304
305 @ CHECK: cdp    p7, #1, c1, c1, c1, #4  @ encoding: [0x11,0xee,0x81,0x17]
306 @ CHECK: cdp2   p7, #1, c1, c1, c1, #4  @ encoding: [0x11,0xfe,0x81,0x17]
307
308
309 @------------------------------------------------------------------------------
310 @ CLREX
311 @------------------------------------------------------------------------------
312         clrex
313         it ne
314         clrexne
315
316 @ CHECK: clrex                           @ encoding: [0xbf,0xf3,0x2f,0x8f]
317 @ CHECK: it     ne                       @ encoding: [0x18,0xbf]
318 @ CHECK: clrexne                         @ encoding: [0xbf,0xf3,0x2f,0x8f]
319
320
321 @------------------------------------------------------------------------------
322 @ CLZ
323 @------------------------------------------------------------------------------
324         clz r1, r2
325         it eq
326         clzeq r1, r2
327
328 @ CHECK: clz    r1, r2                  @ encoding: [0xb2,0xfa,0x82,0xf1]
329 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
330 @ CHECK: clzeq  r1, r2                  @ encoding: [0xb2,0xfa,0x82,0xf1]
331
332
333 @------------------------------------------------------------------------------
334 @ CMN
335 @------------------------------------------------------------------------------
336         cmn r1, #0xf
337         cmn r8, r6
338         cmn r1, r6, lsl #10
339         cmn r1, r6, lsr #10
340         cmn sp, r6, lsr #10
341         cmn r1, r6, asr #10
342         cmn r1, r6, ror #10
343
344 @ CHECK: cmn.w  r1, #15                 @ encoding: [0x11,0xf1,0x0f,0x0f]
345 @ CHECK: cmn.w  r8, r6                  @ encoding: [0x18,0xeb,0x06,0x0f]
346 @ CHECK: cmn.w  r1, r6, lsl #10         @ encoding: [0x11,0xeb,0x86,0x2f]
347 @ CHECK: cmn.w  r1, r6, lsr #10         @ encoding: [0x11,0xeb,0x96,0x2f]
348 @ CHECK: cmn.w  sp, r6, lsr #10         @ encoding: [0x1d,0xeb,0x96,0x2f]
349 @ CHECK: cmn.w  r1, r6, asr #10         @ encoding: [0x11,0xeb,0xa6,0x2f]
350 @ CHECK: cmn.w  r1, r6, ror #10         @ encoding: [0x11,0xeb,0xb6,0x2f]
351
352
353 @------------------------------------------------------------------------------
354 @ CMP
355 @------------------------------------------------------------------------------
356         cmp r5, #0xff00
357         cmp.w r4, r12
358         cmp r9, r6, lsl #12
359         cmp r3, r7, lsr #31
360         cmp sp, r6, lsr #1
361         cmp r2, r5, asr #24
362         cmp r1, r4, ror #15
363
364 @ CHECK: cmp.w  r5, #65280              @ encoding: [0xb5,0xf5,0x7f,0x4f]
365 @ CHECK: cmp.w  r4, r12                 @ encoding: [0xb4,0xeb,0x0c,0x0f]
366 @ CHECK: cmp.w  r9, r6, lsl #12         @ encoding: [0xb9,0xeb,0x06,0x3f]
367 @ CHECK: cmp.w  r3, r7, lsr #31         @ encoding: [0xb3,0xeb,0xd7,0x7f]
368 @ CHECK: cmp.w  sp, r6, lsr #1          @ encoding: [0xbd,0xeb,0x56,0x0f]
369 @ CHECK: cmp.w  r2, r5, asr #24         @ encoding: [0xb2,0xeb,0x25,0x6f]
370 @ CHECK: cmp.w  r1, r4, ror #15         @ encoding: [0xb1,0xeb,0xf4,0x3f]
371
372
373 @------------------------------------------------------------------------------
374 @ DBG
375 @------------------------------------------------------------------------------
376         dbg #5
377         dbg #0
378         dbg #15
379
380 @ CHECK: dbg    #5                      @ encoding: [0xaf,0xf3,0xf5,0x80]
381 @ CHECK: dbg    #0                      @ encoding: [0xaf,0xf3,0xf0,0x80]
382 @ CHECK: dbg    #15                     @ encoding: [0xaf,0xf3,0xff,0x80]
383
384
385 @------------------------------------------------------------------------------
386 @ DMB
387 @------------------------------------------------------------------------------
388         dmb sy
389         dmb st
390         dmb sh
391         dmb ish
392         dmb shst
393         dmb ishst
394         dmb un
395         dmb nsh
396         dmb unst
397         dmb nshst
398         dmb osh
399         dmb oshst
400         dmb
401
402 @ CHECK: dmb    sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
403 @ CHECK: dmb    st                      @ encoding: [0xbf,0xf3,0x5e,0x8f]
404 @ CHECK: dmb    ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
405 @ CHECK: dmb    ish                     @ encoding: [0xbf,0xf3,0x5b,0x8f]
406 @ CHECK: dmb    ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
407 @ CHECK: dmb    ishst                   @ encoding: [0xbf,0xf3,0x5a,0x8f]
408 @ CHECK: dmb    nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
409 @ CHECK: dmb    nsh                     @ encoding: [0xbf,0xf3,0x57,0x8f]
410 @ CHECK: dmb    nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
411 @ CHECK: dmb    nshst                   @ encoding: [0xbf,0xf3,0x56,0x8f]
412 @ CHECK: dmb    osh                     @ encoding: [0xbf,0xf3,0x53,0x8f]
413 @ CHECK: dmb    oshst                   @ encoding: [0xbf,0xf3,0x52,0x8f]
414 @ CHECK: dmb    sy                      @ encoding: [0xbf,0xf3,0x5f,0x8f]
415
416
417 @------------------------------------------------------------------------------
418 @ DSB
419 @------------------------------------------------------------------------------
420         dsb sy
421         dsb st
422         dsb sh
423         dsb ish
424         dsb shst
425         dsb ishst
426         dsb un
427         dsb nsh
428         dsb unst
429         dsb nshst
430         dsb osh
431         dsb oshst
432         dsb
433
434 @ CHECK: dsb    sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
435 @ CHECK: dsb    st                      @ encoding: [0xbf,0xf3,0x4e,0x8f]
436 @ CHECK: dsb    ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
437 @ CHECK: dsb    ish                     @ encoding: [0xbf,0xf3,0x4b,0x8f]
438 @ CHECK: dsb    ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
439 @ CHECK: dsb    ishst                   @ encoding: [0xbf,0xf3,0x4a,0x8f]
440 @ CHECK: dsb    nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
441 @ CHECK: dsb    nsh                     @ encoding: [0xbf,0xf3,0x47,0x8f]
442 @ CHECK: dsb    nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
443 @ CHECK: dsb    nshst                   @ encoding: [0xbf,0xf3,0x46,0x8f]
444 @ CHECK: dsb    osh                     @ encoding: [0xbf,0xf3,0x43,0x8f]
445 @ CHECK: dsb    oshst                   @ encoding: [0xbf,0xf3,0x42,0x8f]
446 @ CHECK: dsb    sy                      @ encoding: [0xbf,0xf3,0x4f,0x8f]
447
448
449 @------------------------------------------------------------------------------
450 @ EOR
451 @------------------------------------------------------------------------------
452         eor r4, r5, #0xf000
453         eor r4, r5, r6
454         eor r4, r5, r6, lsl #5
455         eor r4, r5, r6, lsr #5
456         eor r4, r5, r6, lsr #5
457         eor r4, r5, r6, asr #5
458         eor r4, r5, r6, ror #5
459
460 @ CHECK: eor    r4, r5, #61440          @ encoding: [0x85,0xf4,0x70,0x44]
461 @ CHECK: eor.w  r4, r5, r6              @ encoding: [0x85,0xea,0x06,0x04]
462 @ CHECK: eor.w  r4, r5, r6, lsl #5      @ encoding: [0x85,0xea,0x46,0x14]
463 @ CHECK: eor.w  r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
464 @ CHECK: eor.w  r4, r5, r6, lsr #5      @ encoding: [0x85,0xea,0x56,0x14]
465 @ CHECK: eor.w  r4, r5, r6, asr #5      @ encoding: [0x85,0xea,0x66,0x14]
466 @ CHECK: eor.w  r4, r5, r6, ror #5      @ encoding: [0x85,0xea,0x76,0x14]
467
468
469 @------------------------------------------------------------------------------
470 @ ISB
471 @------------------------------------------------------------------------------
472         isb sy
473         isb
474
475 @ CHECK: isb    sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
476 @ CHECK: isb    sy                      @ encoding: [0xbf,0xf3,0x6f,0x8f]
477
478
479 @------------------------------------------------------------------------------
480 @ IT
481 @------------------------------------------------------------------------------
482 @ Test encodings of a few full IT blocks, not just the IT instruction
483
484         iteet eq
485         addeq r0, r1, r2
486         nopne
487         subne r5, r6, r7
488         addeq r1, r2, #4
489
490 @ CHECK: iteet  eq                      @ encoding: [0x0d,0xbf]
491 @ CHECK: addeq  r0, r1, r2              @ encoding: [0x88,0x18]
492 @ CHECK: nopne                          @ encoding: [0x00,0xbf]
493 @ CHECK: subne  r5, r6, r7              @ encoding: [0xf5,0x1b]
494 @ CHECK: addeq  r1, r2, #4              @ encoding: [0x11,0x1d]
495
496
497 @------------------------------------------------------------------------------
498 @ LDMIA
499 @------------------------------------------------------------------------------
500         ldmia.w r4, {r4, r5, r8, r9}
501         ldmia.w r4, {r5, r6}
502         ldmia.w r5!, {r3, r8}
503         ldm.w r4, {r4, r5, r8, r9}
504         ldm.w r4, {r5, r6}
505         ldm.w r5!, {r3, r8}
506         ldm.w r5!, {r1, r2}
507         ldm.w r2, {r1, r2}
508
509         ldmia r4, {r4, r5, r8, r9}
510         ldmia r4, {r5, r6}
511         ldmia r5!, {r3, r8}
512         ldm r4, {r4, r5, r8, r9}
513         ldm r4, {r5, r6}
514         ldm r5!, {r3, r8}
515         ldmfd r5!, {r3, r8}
516
517 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
518 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
519 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
520 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
521 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
522 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
523 @ CHECK: ldm.w  r5!, {r1, r2}           @ encoding: [0xb5,0xe8,0x06,0x00]
524 @ CHECK: ldm.w  r2, {r1, r2}            @ encoding: [0x92,0xe8,0x06,0x00]
525
526 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
527 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
528 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
529 @ CHECK: ldm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x94,0xe8,0x30,0x03]
530 @ CHECK: ldm.w  r4, {r5, r6}            @ encoding: [0x94,0xe8,0x60,0x00]
531 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
532 @ CHECK: ldm.w  r5!, {r3, r8}           @ encoding: [0xb5,0xe8,0x08,0x01]
533
534
535 @------------------------------------------------------------------------------
536 @ LDMDB
537 @------------------------------------------------------------------------------
538         ldmdb r4, {r4, r5, r8, r9}
539         ldmdb r4, {r5, r6}
540         ldmdb r5!, {r3, r8}
541         ldmea r5!, {r3, r8}
542
543 @ CHECK: ldmdb  r4, {r4, r5, r8, r9}    @ encoding: [0x14,0xe9,0x30,0x03]
544 @ CHECK: ldmdb  r4, {r5, r6}            @ encoding: [0x14,0xe9,0x60,0x00]
545 @ CHECK: ldmdb  r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
546 @ CHECK: ldmdb  r5!, {r3, r8}           @ encoding: [0x35,0xe9,0x08,0x01]
547
548
549 @------------------------------------------------------------------------------
550 @ LDR(immediate)
551 @------------------------------------------------------------------------------
552         ldr r5, [r5, #-4]
553         ldr r5, [r6, #32]
554         ldr r5, [r6, #33]
555         ldr r5, [r6, #257]
556         ldr.w pc, [r7, #257]
557         ldr r2, [r4, #255]!
558         ldr r8, [sp, #4]!
559         ldr lr, [sp, #-4]!
560         ldr r2, [r4], #255
561         ldr r8, [sp], #4
562         ldr lr, [sp], #-4
563
564 @ CHECK: ldr    r5, [r5, #-4]           @ encoding: [0x55,0xf8,0x04,0x5c]
565 @ CHECK: ldr    r5, [r6, #32]           @ encoding: [0x35,0x6a]
566 @ CHECK: ldr.w  r5, [r6, #33]           @ encoding: [0xd6,0xf8,0x21,0x50]
567 @ CHECK: ldr.w  r5, [r6, #257]          @ encoding: [0xd6,0xf8,0x01,0x51]
568 @ CHECK: ldr.w  pc, [r7, #257]          @ encoding: [0xd7,0xf8,0x01,0xf1]
569 @ CHECK: ldr    r2, [r4, #255]!         @ encoding: [0x54,0xf8,0xff,0x2f]
570 @ CHECK: ldr    r8, [sp, #4]!           @ encoding: [0x5d,0xf8,0x04,0x8f]
571 @ CHECK: ldr    lr, [sp, #-4]!          @ encoding: [0x5d,0xf8,0x04,0xed]
572 @ CHECK: ldr    r2, [r4], #255          @ encoding: [0x54,0xf8,0xff,0x2b]
573 @ CHECK: ldr    r8, [sp], #4            @ encoding: [0x5d,0xf8,0x04,0x8b]
574 @ CHECK: ldr    lr, [sp], #-4           @ encoding: [0x5d,0xf8,0x04,0xe9]
575
576
577 @------------------------------------------------------------------------------
578 @ LDR(literal)
579 @------------------------------------------------------------------------------
580         ldr.w r5, _foo
581
582 @ CHECK: ldr.w  r5, _foo                @ encoding: [0x5f'A',0xf8'A',A,0x50'A']
583             @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
584
585
586 @------------------------------------------------------------------------------
587 @ LDR(register)
588 @------------------------------------------------------------------------------
589         ldr r1, [r8, r1]
590         ldr.w r4, [r5, r2]
591         ldr r6, [r0, r2, lsl #3]
592         ldr r8, [r8, r2, lsl #2]
593         ldr r7, [sp, r2, lsl #1]
594         ldr r7, [sp, r2, lsl #0]
595
596 @ CHECK: ldr.w  r1, [r8, r1]            @ encoding: [0x58,0xf8,0x01,0x10]
597 @ CHECK: ldr.w  r4, [r5, r2]            @ encoding: [0x55,0xf8,0x02,0x40]
598 @ CHECK: ldr.w  r6, [r0, r2, lsl #3]    @ encoding: [0x50,0xf8,0x32,0x60]
599 @ CHECK: ldr.w  r8, [r8, r2, lsl #2]    @ encoding: [0x58,0xf8,0x22,0x80]
600 @ CHECK: ldr.w  r7, [sp, r2, lsl #1]    @ encoding: [0x5d,0xf8,0x12,0x70]
601 @ CHECK: ldr.w  r7, [sp, r2]            @ encoding: [0x5d,0xf8,0x02,0x70]
602
603
604 @------------------------------------------------------------------------------
605 @ LDRB(immediate)
606 @------------------------------------------------------------------------------
607         ldrb r5, [r5, #-4]
608         ldrb r5, [r6, #32]
609         ldrb r5, [r6, #33]
610         ldrb r5, [r6, #257]
611         ldrb.w lr, [r7, #257]
612         ldrb r5, [r8, #255]!
613         ldrb r2, [r5, #4]!
614         ldrb r1, [r4, #-4]!
615         ldrb lr, [r3], #255
616         ldrb r9, [r2], #4
617         ldrb r3, [sp], #-4
618
619 @ CHECK: ldrb   r5, [r5, #-4]           @ encoding: [0x15,0xf8,0x04,0x5c]
620 @ CHECK: ldrb.w r5, [r6, #32]           @ encoding: [0x96,0xf8,0x20,0x50]
621 @ CHECK: ldrb.w r5, [r6, #33]           @ encoding: [0x96,0xf8,0x21,0x50]
622 @ CHECK: ldrb.w r5, [r6, #257]          @ encoding: [0x96,0xf8,0x01,0x51]
623 @ CHECK: ldrb.w lr, [r7, #257]          @ encoding: [0x97,0xf8,0x01,0xe1]
624 @ CHECK: ldrb   r5, [r8, #255]!         @ encoding: [0x18,0xf8,0xff,0x5f]
625 @ CHECK: ldrb   r2, [r5, #4]!           @ encoding: [0x15,0xf8,0x04,0x2f]
626 @ CHECK: ldrb   r1, [r4, #-4]!          @ encoding: [0x14,0xf8,0x04,0x1d]
627 @ CHECK: ldrb   lr, [r3], #255          @ encoding: [0x13,0xf8,0xff,0xeb]
628 @ CHECK: ldrb   r9, [r2], #4            @ encoding: [0x12,0xf8,0x04,0x9b]
629 @ CHECK: ldrb   r3, [sp], #-4           @ encoding: [0x1d,0xf8,0x04,0x39]
630
631
632 @------------------------------------------------------------------------------
633 @ LDRB(register)
634 @------------------------------------------------------------------------------
635         ldrb r1, [r8, r1]
636         ldrb.w r4, [r5, r2]
637         ldrb r6, [r0, r2, lsl #3]
638         ldrb r8, [r8, r2, lsl #2]
639         ldrb r7, [sp, r2, lsl #1]
640         ldrb r7, [sp, r2, lsl #0]
641
642 @ CHECK: ldrb.w r1, [r8, r1]            @ encoding: [0x18,0xf8,0x01,0x10]
643 @ CHECK: ldrb.w r4, [r5, r2]            @ encoding: [0x15,0xf8,0x02,0x40]
644 @ CHECK: ldrb.w r6, [r0, r2, lsl #3]    @ encoding: [0x10,0xf8,0x32,0x60]
645 @ CHECK: ldrb.w r8, [r8, r2, lsl #2]    @ encoding: [0x18,0xf8,0x22,0x80]
646 @ CHECK: ldrb.w r7, [sp, r2, lsl #1]    @ encoding: [0x1d,0xf8,0x12,0x70]
647 @ CHECK: ldrb.w r7, [sp, r2]            @ encoding: [0x1d,0xf8,0x02,0x70]
648
649
650 @------------------------------------------------------------------------------
651 @ LDRBT
652 @------------------------------------------------------------------------------
653         ldrbt r1, [r2]
654         ldrbt r1, [r8, #0]
655         ldrbt r1, [r8, #3]
656         ldrbt r1, [r8, #255]
657
658 @ CHECK: ldrbt  r1, [r2]                @ encoding: [0x12,0xf8,0x00,0x1e]
659 @ CHECK: ldrbt  r1, [r8]                @ encoding: [0x18,0xf8,0x00,0x1e]
660 @ CHECK: ldrbt  r1, [r8, #3]            @ encoding: [0x18,0xf8,0x03,0x1e]
661 @ CHECK: ldrbt  r1, [r8, #255]          @ encoding: [0x18,0xf8,0xff,0x1e]
662
663
664 @------------------------------------------------------------------------------
665 @ LDRD
666 @------------------------------------------------------------------------------
667         ldrd r3, r5, [r6, #24]
668         ldrd r3, r5, [r6, #24]!
669         ldrd r3, r5, [r6], #4
670         ldrd r3, r5, [r6], #-8
671         ldrd r3, r5, [r6]
672         ldrd r8, r1, [r3, #0]
673
674 @ CHECK: ldrd   r3, r5, [r6, #24]       @ encoding: [0xd6,0xe9,0x06,0x35]
675 @ CHECK: ldrd   r3, r5, [r6, #24]!      @ encoding: [0xf6,0xe9,0x06,0x35]
676 @ CHECK: ldrd   r3, r5, [r6], #4        @ encoding: [0xf6,0xe8,0x01,0x35]
677 @ CHECK: ldrd   r3, r5, [r6], #-8       @ encoding: [0x76,0xe8,0x02,0x35]
678 @ CHECK: ldrd   r3, r5, [r6]            @ encoding: [0xd6,0xe9,0x00,0x35]
679 @ CHECK: ldrd   r8, r1, [r3]            @ encoding: [0xd3,0xe9,0x00,0x81]
680
681
682 @------------------------------------------------------------------------------
683 @ FIXME: LDRD(literal)
684 @------------------------------------------------------------------------------
685
686
687 @------------------------------------------------------------------------------
688 @ LDREX/LDREXB/LDREXH/LDREXD
689 @------------------------------------------------------------------------------
690         ldrex r1, [r4]
691         ldrex r8, [r4, #0]
692         ldrex r2, [sp, #128]
693         ldrexb r5, [r7]
694         ldrexh r9, [r12]
695         ldrexd r9, r3, [r4]
696
697 @ CHECK: ldrex  r1, [r4]                @ encoding: [0x54,0xe8,0x00,0x1f]
698 @ CHECK: ldrex  r8, [r4]                @ encoding: [0x54,0xe8,0x00,0x8f]
699 @ CHECK: ldrex  r2, [sp, #128]          @ encoding: [0x5d,0xe8,0x20,0x2f]
700 @ CHECK: ldrexb r5, [r7]                @ encoding: [0xd7,0xe8,0x4f,0x5f]
701 @ CHECK: ldrexh r9, [r12]               @ encoding: [0xdc,0xe8,0x5f,0x9f]
702 @ CHECK: ldrexd r9, r3, [r4]            @ encoding: [0xd4,0xe8,0x7f,0x93]
703
704
705 @------------------------------------------------------------------------------
706 @ LDRH(immediate)
707 @------------------------------------------------------------------------------
708         ldrh r5, [r5, #-4]
709         ldrh r5, [r6, #32]
710         ldrh r5, [r6, #33]
711         ldrh r5, [r6, #257]
712         ldrh.w lr, [r7, #257]
713         ldrh r5, [r8, #255]!
714         ldrh r2, [r5, #4]!
715         ldrh r1, [r4, #-4]!
716         ldrh lr, [r3], #255
717         ldrh r9, [r2], #4
718         ldrh r3, [sp], #-4
719
720 @ CHECK: ldrh   r5, [r5, #-4]           @ encoding: [0x35,0xf8,0x04,0x5c]
721 @ CHECK: ldrh   r5, [r6, #32]           @ encoding: [0x35,0x8c]
722 @ CHECK: ldrh.w r5, [r6, #33]           @ encoding: [0xb6,0xf8,0x21,0x50]
723 @ CHECK: ldrh.w r5, [r6, #257]          @ encoding: [0xb6,0xf8,0x01,0x51]
724 @ CHECK: ldrh.w lr, [r7, #257]          @ encoding: [0xb7,0xf8,0x01,0xe1]
725 @ CHECK: ldrh   r5, [r8, #255]!         @ encoding: [0x38,0xf8,0xff,0x5f]
726 @ CHECK: ldrh   r2, [r5, #4]!           @ encoding: [0x35,0xf8,0x04,0x2f]
727 @ CHECK: ldrh   r1, [r4, #-4]!          @ encoding: [0x34,0xf8,0x04,0x1d]
728 @ CHECK: ldrh   lr, [r3], #255          @ encoding: [0x33,0xf8,0xff,0xeb]
729 @ CHECK: ldrh   r9, [r2], #4            @ encoding: [0x32,0xf8,0x04,0x9b]
730 @ CHECK: ldrh   r3, [sp], #-4           @ encoding: [0x3d,0xf8,0x04,0x39]
731
732
733 @------------------------------------------------------------------------------
734 @ LDRH(register)
735 @------------------------------------------------------------------------------
736         ldrh r1, [r8, r1]
737         ldrh.w r4, [r5, r2]
738         ldrh r6, [r0, r2, lsl #3]
739         ldrh r8, [r8, r2, lsl #2]
740         ldrh r7, [sp, r2, lsl #1]
741         ldrh r7, [sp, r2, lsl #0]
742
743 @ CHECK: ldrh.w r1, [r8, r1]            @ encoding: [0x38,0xf8,0x01,0x10]
744 @ CHECK: ldrh.w r4, [r5, r2]            @ encoding: [0x35,0xf8,0x02,0x40]
745 @ CHECK: ldrh.w r6, [r0, r2, lsl #3]    @ encoding: [0x30,0xf8,0x32,0x60]
746 @ CHECK: ldrh.w r8, [r8, r2, lsl #2]    @ encoding: [0x38,0xf8,0x22,0x80]
747 @ CHECK: ldrh.w r7, [sp, r2, lsl #1]    @ encoding: [0x3d,0xf8,0x12,0x70]
748 @ CHECK: ldrh.w r7, [sp, r2]            @ encoding: [0x3d,0xf8,0x02,0x70]
749
750
751 @------------------------------------------------------------------------------
752 @ LDRH(literal)
753 @------------------------------------------------------------------------------
754         ldrh r5, _bar
755
756 @ CHECK: ldrh.w r5, _bar                @ encoding: [0xbf'A',0xf8'A',A,0x50'A']
757 @ CHECK:     @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
758
759
760 @------------------------------------------------------------------------------
761 @ LDRHT
762 @------------------------------------------------------------------------------
763         ldrht r1, [r2]
764         ldrht r1, [r8, #0]
765         ldrht r1, [r8, #3]
766         ldrht r1, [r8, #255]
767
768 @ CHECK: ldrht  r1, [r2]                @ encoding: [0x32,0xf8,0x00,0x1e]
769 @ CHECK: ldrht  r1, [r8]                @ encoding: [0x38,0xf8,0x00,0x1e]
770 @ CHECK: ldrht  r1, [r8, #3]            @ encoding: [0x38,0xf8,0x03,0x1e]
771 @ CHECK: ldrht  r1, [r8, #255]          @ encoding: [0x38,0xf8,0xff,0x1e]
772
773
774 @------------------------------------------------------------------------------
775 @ LDRSB(immediate)
776 @------------------------------------------------------------------------------
777         ldrsb r5, [r5, #-4]
778         ldrsb r5, [r6, #32]
779         ldrsb r5, [r6, #33]
780         ldrsb r5, [r6, #257]
781         ldrsb.w lr, [r7, #257]
782
783 @ CHECK: ldrsb  r5, [r5, #-4]            @ encoding: [0x15,0xf9,0x04,0x5c]
784 @ CHECK: ldrsb.w r5, [r6, #32]           @ encoding: [0x96,0xf9,0x20,0x50]
785 @ CHECK: ldrsb.w r5, [r6, #33]           @ encoding: [0x96,0xf9,0x21,0x50]
786 @ CHECK: ldrsb.w r5, [r6, #257]          @ encoding: [0x96,0xf9,0x01,0x51]
787 @ CHECK: ldrsb.w lr, [r7, #257]          @ encoding: [0x97,0xf9,0x01,0xe1]
788
789
790 @------------------------------------------------------------------------------
791 @ LDRSB(register)
792 @------------------------------------------------------------------------------
793         ldrsb r1, [r8, r1]
794         ldrsb.w r4, [r5, r2]
795         ldrsb r6, [r0, r2, lsl #3]
796         ldrsb r8, [r8, r2, lsl #2]
797         ldrsb r7, [sp, r2, lsl #1]
798         ldrsb r7, [sp, r2, lsl #0]
799         ldrsb r5, [r8, #255]!
800         ldrsb r2, [r5, #4]!
801         ldrsb r1, [r4, #-4]!
802         ldrsb lr, [r3], #255
803         ldrsb r9, [r2], #4
804         ldrsb r3, [sp], #-4
805
806 @ CHECK: ldrsb.w r1, [r8, r1]           @ encoding: [0x18,0xf9,0x01,0x10]
807 @ CHECK: ldrsb.w r4, [r5, r2]           @ encoding: [0x15,0xf9,0x02,0x40]
808 @ CHECK: ldrsb.w r6, [r0, r2, lsl #3]   @ encoding: [0x10,0xf9,0x32,0x60]
809 @ CHECK: ldrsb.w r8, [r8, r2, lsl #2]   @ encoding: [0x18,0xf9,0x22,0x80]
810 @ CHECK: ldrsb.w r7, [sp, r2, lsl #1]   @ encoding: [0x1d,0xf9,0x12,0x70]
811 @ CHECK: ldrsb.w r7, [sp, r2]           @ encoding: [0x1d,0xf9,0x02,0x70]
812 @ CHECK: ldrsb  r5, [r8, #255]!         @ encoding: [0x18,0xf9,0xff,0x5f]
813 @ CHECK: ldrsb  r2, [r5, #4]!           @ encoding: [0x15,0xf9,0x04,0x2f]
814 @ CHECK: ldrsb  r1, [r4, #-4]!          @ encoding: [0x14,0xf9,0x04,0x1d]
815 @ CHECK: ldrsb  lr, [r3], #255          @ encoding: [0x13,0xf9,0xff,0xeb]
816 @ CHECK: ldrsb  r9, [r2], #4            @ encoding: [0x12,0xf9,0x04,0x9b]
817 @ CHECK: ldrsb  r3, [sp], #-4           @ encoding: [0x1d,0xf9,0x04,0x39]
818
819
820 @------------------------------------------------------------------------------
821 @ LDRSB(literal)
822 @------------------------------------------------------------------------------
823         ldrsb r5, _bar
824
825 @ CHECK: ldrsb.w r5, _bar               @ encoding: [0x9f'A',0xf9'A',A,0x50'A']
826 @ CHECK:      @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
827
828
829 @------------------------------------------------------------------------------
830 @ LDRSBT
831 @------------------------------------------------------------------------------
832         ldrsbt r1, [r2]
833         ldrsbt r1, [r8, #0]
834         ldrsbt r1, [r8, #3]
835         ldrsbt r1, [r8, #255]
836
837 @ CHECK: ldrsbt r1, [r2]                @ encoding: [0x12,0xf9,0x00,0x1e]
838 @ CHECK: ldrsbt r1, [r8]                @ encoding: [0x18,0xf9,0x00,0x1e]
839 @ CHECK: ldrsbt r1, [r8, #3]            @ encoding: [0x18,0xf9,0x03,0x1e]
840 @ CHECK: ldrsbt r1, [r8, #255]          @ encoding: [0x18,0xf9,0xff,0x1e]
841
842
843 @------------------------------------------------------------------------------
844 @ LDRSH(immediate)
845 @------------------------------------------------------------------------------
846         ldrsh r5, [r5, #-4]
847         ldrsh r5, [r6, #32]
848         ldrsh r5, [r6, #33]
849         ldrsh r5, [r6, #257]
850         ldrsh.w lr, [r7, #257]
851
852 @ CHECK: ldrsh  r5, [r5, #-4]           @ encoding: [0x35,0xf9,0x04,0x5c]
853 @ CHECK: ldrsh.w r5, [r6, #32]          @ encoding: [0xb6,0xf9,0x20,0x50]
854 @ CHECK: ldrsh.w r5, [r6, #33]          @ encoding: [0xb6,0xf9,0x21,0x50]
855 @ CHECK: ldrsh.w r5, [r6, #257]         @ encoding: [0xb6,0xf9,0x01,0x51]
856 @ CHECK: ldrsh.w lr, [r7, #257]         @ encoding: [0xb7,0xf9,0x01,0xe1]
857
858
859 @------------------------------------------------------------------------------
860 @ LDRSH(register)
861 @------------------------------------------------------------------------------
862         ldrsh r1, [r8, r1]
863         ldrsh.w r4, [r5, r2]
864         ldrsh r6, [r0, r2, lsl #3]
865         ldrsh r8, [r8, r2, lsl #2]
866         ldrsh r7, [sp, r2, lsl #1]
867         ldrsh r7, [sp, r2, lsl #0]
868         ldrsh r5, [r8, #255]!
869         ldrsh r2, [r5, #4]!
870         ldrsh r1, [r4, #-4]!
871         ldrsh lr, [r3], #255
872         ldrsh r9, [r2], #4
873         ldrsh r3, [sp], #-4
874
875 @ CHECK: ldrsh.w r1, [r8, r1]           @ encoding: [0x38,0xf9,0x01,0x10]
876 @ CHECK: ldrsh.w r4, [r5, r2]           @ encoding: [0x35,0xf9,0x02,0x40]
877 @ CHECK: ldrsh.w r6, [r0, r2, lsl #3]   @ encoding: [0x30,0xf9,0x32,0x60]
878 @ CHECK: ldrsh.w r8, [r8, r2, lsl #2]   @ encoding: [0x38,0xf9,0x22,0x80]
879 @ CHECK: ldrsh.w r7, [sp, r2, lsl #1]   @ encoding: [0x3d,0xf9,0x12,0x70]
880 @ CHECK: ldrsh.w r7, [sp, r2]           @ encoding: [0x3d,0xf9,0x02,0x70]
881 @ CHECK: ldrsh  r5, [r8, #255]!         @ encoding: [0x38,0xf9,0xff,0x5f]
882 @ CHECK: ldrsh  r2, [r5, #4]!           @ encoding: [0x35,0xf9,0x04,0x2f]
883 @ CHECK: ldrsh  r1, [r4, #-4]!          @ encoding: [0x34,0xf9,0x04,0x1d]
884 @ CHECK: ldrsh  lr, [r3], #255          @ encoding: [0x33,0xf9,0xff,0xeb]
885 @ CHECK: ldrsh  r9, [r2], #4            @ encoding: [0x32,0xf9,0x04,0x9b]
886 @ CHECK: ldrsh  r3, [sp], #-4           @ encoding: [0x3d,0xf9,0x04,0x39]
887
888
889 @------------------------------------------------------------------------------
890 @ LDRSH(literal)
891 @------------------------------------------------------------------------------
892         ldrsh r5, _bar
893         ldrsh.w r4, #1435
894
895 @ CHECK: ldrsh.w r5, _bar               @ encoding: [0xbf'A',0xf9'A',A,0x50'A']
896 @ CHECK:      @   fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
897 @ CHECK: ldrsh.w r4, #1435               @ encoding: [0x3f,0xf9,0x9b,0x45]
898
899 @------------------------------------------------------------------------------
900 @ LDRSHT
901 @------------------------------------------------------------------------------
902         ldrsht r1, [r2]
903         ldrsht r1, [r8, #0]
904         ldrsht r1, [r8, #3]
905         ldrsht r1, [r8, #255]
906
907 @ CHECK: ldrsht r1, [r2]                @ encoding: [0x32,0xf9,0x00,0x1e]
908 @ CHECK: ldrsht r1, [r8]                @ encoding: [0x38,0xf9,0x00,0x1e]
909 @ CHECK: ldrsht r1, [r8, #3]            @ encoding: [0x38,0xf9,0x03,0x1e]
910 @ CHECK: ldrsht r1, [r8, #255]          @ encoding: [0x38,0xf9,0xff,0x1e]
911
912
913 @------------------------------------------------------------------------------
914 @ LDRT
915 @------------------------------------------------------------------------------
916         ldrt r1, [r2]
917         ldrt r2, [r6, #0]
918         ldrt r3, [r7, #3]
919         ldrt r4, [r9, #255]
920
921 @ CHECK: ldrt   r1, [r2]                @ encoding: [0x52,0xf8,0x00,0x1e]
922 @ CHECK: ldrt   r2, [r6]                @ encoding: [0x56,0xf8,0x00,0x2e]
923 @ CHECK: ldrt   r3, [r7, #3]            @ encoding: [0x57,0xf8,0x03,0x3e]
924 @ CHECK: ldrt   r4, [r9, #255]          @ encoding: [0x59,0xf8,0xff,0x4e]
925
926
927 @------------------------------------------------------------------------------
928 @ LSL (immediate)
929 @------------------------------------------------------------------------------
930         lsl r2, r3, #12
931         lsls r8, r3, #31
932         lsls.w r2, r3, #1
933         lsl r2, r3, #4
934         lsls r2, r12, #15
935
936         lsl r3, #19
937         lsls r8, #2
938         lsls.w r7, #5
939         lsl.w r12, #21
940
941 @ CHECK: lsl.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x03,0x32]
942 @ CHECK: lsls.w r8, r3, #31             @ encoding: [0x5f,0xea,0xc3,0x78]
943 @ CHECK: lsls.w r2, r3, #1              @ encoding: [0x5f,0xea,0x43,0x02]
944 @ CHECK: lsl.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x03,0x12]
945 @ CHECK: lsls.w r2, r12, #15            @ encoding: [0x5f,0xea,0xcc,0x32]
946
947 @ CHECK: lsl.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xc3,0x43]
948 @ CHECK: lsls.w r8, r8, #2              @ encoding: [0x5f,0xea,0x88,0x08]
949 @ CHECK: lsls.w r7, r7, #5              @ encoding: [0x5f,0xea,0x47,0x17]
950 @ CHECK: lsl.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x4c,0x5c]
951
952
953 @------------------------------------------------------------------------------
954 @ LSL (register)
955 @------------------------------------------------------------------------------
956         lsl r3, r4, r2
957         lsl.w r1, r2
958         lsls r3, r4, r8
959
960 @ CHECK: lsl.w  r3, r4, r2              @ encoding: [0x04,0xfa,0x02,0xf3]
961 @ CHECK: lsl.w  r1, r1, r2              @ encoding: [0x01,0xfa,0x02,0xf1]
962 @ CHECK: lsls.w r3, r4, r8              @ encoding: [0x14,0xfa,0x08,0xf3]
963
964
965 @------------------------------------------------------------------------------
966 @ LSR (immediate)
967 @------------------------------------------------------------------------------
968         lsr r2, r3, #12
969         lsrs r8, r3, #32
970         lsrs.w r2, r3, #1
971         lsr r2, r3, #4
972         lsrs r2, r12, #15
973
974         lsr r3, #19
975         lsrs r8, #2
976         lsrs.w r7, #5
977         lsr.w r12, #21
978
979 @ CHECK: lsr.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x13,0x32]
980 @ CHECK: lsrs.w r8, r3, #32             @ encoding: [0x5f,0xea,0x13,0x08]
981 @ CHECK: lsrs.w r2, r3, #1              @ encoding: [0x5f,0xea,0x53,0x02]
982 @ CHECK: lsr.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x13,0x12]
983 @ CHECK: lsrs.w r2, r12, #15            @ encoding: [0x5f,0xea,0xdc,0x32]
984
985 @ CHECK: lsr.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xd3,0x43]
986 @ CHECK: lsrs.w r8, r8, #2              @ encoding: [0x5f,0xea,0x98,0x08]
987 @ CHECK: lsrs.w r7, r7, #5              @ encoding: [0x5f,0xea,0x57,0x17]
988 @ CHECK: lsr.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x5c,0x5c]
989
990
991 @------------------------------------------------------------------------------
992 @ LSR (register)
993 @------------------------------------------------------------------------------
994         lsr r3, r4, r2
995         lsr.w r1, r2
996         lsrs r3, r4, r8
997
998 @ CHECK: lsr.w  r3, r4, r2              @ encoding: [0x24,0xfa,0x02,0xf3]
999 @ CHECK: lsr.w  r1, r1, r2              @ encoding: [0x21,0xfa,0x02,0xf1]
1000 @ CHECK: lsrs.w r3, r4, r8              @ encoding: [0x34,0xfa,0x08,0xf3]
1001
1002 @------------------------------------------------------------------------------
1003 @ MCR/MCR2
1004 @------------------------------------------------------------------------------
1005         mcr  p7, #1, r5, c1, c1, #4
1006         mcr2  p7, #1, r5, c1, c1, #4
1007
1008 @ CHECK: mcr    p7, #1, r5, c1, c1, #4  @ encoding: [0x21,0xee,0x91,0x57]
1009 @ CHECK: mcr2   p7, #1, r5, c1, c1, #4  @ encoding: [0x21,0xfe,0x91,0x57]
1010
1011
1012 @------------------------------------------------------------------------------
1013 @ MCRR/MCRR2
1014 @------------------------------------------------------------------------------
1015         mcrr  p7, #15, r5, r4, c1
1016         mcrr2  p7, #15, r5, r4, c1
1017
1018 @ CHECK: mcrr   p7, #15, r5, r4, c1     @ encoding: [0x44,0xec,0xf1,0x57]
1019 @ CHECK: mcrr2  p7, #15, r5, r4, c1     @ encoding: [0x44,0xfc,0xf1,0x57]
1020
1021
1022 @------------------------------------------------------------------------------
1023 @ MLA/MLS
1024 @------------------------------------------------------------------------------
1025         mla  r1,r2,r3,r4
1026         mls  r1,r2,r3,r4
1027
1028 @ CHECK: mla    r1, r2, r3, r4          @ encoding: [0x02,0xfb,0x03,0x41]
1029 @ CHECK: mls    r1, r2, r3, r4          @ encoding: [0x02,0xfb,0x13,0x41]
1030
1031
1032 @------------------------------------------------------------------------------
1033 @ MOV(immediate)
1034 @------------------------------------------------------------------------------
1035         movs r1, #21
1036         movs.w r1, #21
1037         movs r8, #21
1038         movw r0, #65535
1039         movw r1, #43777
1040         movw r1, #43792
1041         mov.w r0, #0x3fc0000
1042         mov r0, #0x3fc0000
1043         movs.w r0, #0x3fc0000
1044         itte eq
1045         movseq r1, #12
1046         moveq r1, #12
1047         movne.w r1, #12
1048         mov.w r6, #450
1049
1050 @ CHECK: movs   r1, #21                 @ encoding: [0x15,0x21]
1051 @ CHECK: movs.w r1, #21                 @ encoding: [0x5f,0xf0,0x15,0x01]
1052 @ CHECK: movs.w r8, #21                 @ encoding: [0x5f,0xf0,0x15,0x08]
1053 @ CHECK: movw   r0, #65535              @ encoding: [0x4f,0xf6,0xff,0x70]
1054 @ CHECK: movw   r1, #43777              @ encoding: [0x4a,0xf6,0x01,0x31]
1055 @ CHECK: movw   r1, #43792              @ encoding: [0x4a,0xf6,0x10,0x31]
1056 @ CHECK: mov.w  r0, #66846720           @ encoding: [0x4f,0xf0,0x7f,0x70]
1057 @ CHECK: mov.w  r0, #66846720           @ encoding: [0x4f,0xf0,0x7f,0x70]
1058 @ CHECK: movs.w r0, #66846720           @ encoding: [0x5f,0xf0,0x7f,0x70]
1059 @ CHECK: itte   eq                      @ encoding: [0x06,0xbf]
1060 @ CHECK: movseq.w       r1, #12         @ encoding: [0x5f,0xf0,0x0c,0x01]
1061 @ CHECK: moveq  r1, #12                 @ encoding: [0x0c,0x21]
1062 @ CHECK: movne.w r1, #12                @ encoding: [0x4f,0xf0,0x0c,0x01]
1063 @ CHECK: mov.w  r6, #450                @ encoding: [0x4f,0xf4,0xe1,0x76]
1064
1065
1066 @------------------------------------------------------------------------------
1067 @ MOVT
1068 @------------------------------------------------------------------------------
1069         movt r3, #7
1070         movt r6, #0xffff
1071         it eq
1072         movteq r4, #0xff0
1073
1074 @ CHECK: movt   r3, #7                  @ encoding: [0xc0,0xf2,0x07,0x03]
1075 @ CHECK: movt   r6, #65535              @ encoding: [0xcf,0xf6,0xff,0x76]
1076 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1077 @ CHECK: movteq r4, #4080               @ encoding: [0xc0,0xf6,0xf0,0x74]
1078
1079 @------------------------------------------------------------------------------
1080 @ MRC/MRC2
1081 @------------------------------------------------------------------------------
1082         mrc  p14, #0, r1, c1, c2, #4
1083         mrc2  p14, #0, r1, c1, c2, #4
1084
1085 @ CHECK: mrc    p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xee,0x92,0x1e]
1086 @ CHECK: mrc2   p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xfe,0x92,0x1e]
1087
1088
1089 @------------------------------------------------------------------------------
1090 @ MRRC/MRRC2
1091 @------------------------------------------------------------------------------
1092         mrrc  p7, #1, r5, r4, c1
1093         mrrc2  p7, #1, r5, r4, c1
1094
1095 @ CHECK: mrrc   p7, #1, r5, r4, c1      @ encoding: [0x54,0xec,0x11,0x57]
1096 @ CHECK: mrrc2  p7, #1, r5, r4, c1      @ encoding: [0x54,0xfc,0x11,0x57]
1097
1098
1099 @------------------------------------------------------------------------------
1100 @ MRS
1101 @------------------------------------------------------------------------------
1102         mrs  r8, apsr
1103         mrs  r8, cpsr
1104         mrs  r8, spsr
1105
1106 @ CHECK: mrs    r8, apsr                @ encoding: [0xef,0xf3,0x00,0x88]
1107 @ CHECK: mrs    r8, apsr                @ encoding: [0xef,0xf3,0x00,0x88]
1108 @ CHECK: mrs    r8, spsr                @ encoding: [0xff,0xf3,0x00,0x88]
1109
1110
1111 @------------------------------------------------------------------------------
1112 @ MSR
1113 @------------------------------------------------------------------------------
1114         msr  apsr, r1
1115         msr  apsr_g, r2
1116         msr  apsr_nzcvq, r3
1117         msr  APSR_nzcvq, r4
1118         msr  apsr_nzcvqg, r5
1119         msr  cpsr_fc, r6
1120         msr  cpsr_c, r7
1121         msr  cpsr_x, r8
1122         msr  cpsr_fc, r9
1123         msr  cpsr_all, r11
1124         msr  cpsr_fsx, r12
1125         msr  spsr_fc, r0
1126         msr  SPSR_fsxc, r5
1127         msr  cpsr_fsxc, r8
1128
1129 @ CHECK: msr    APSR_nzcvq, r1          @ encoding: [0x81,0xf3,0x00,0x88]
1130 @ CHECK: msr    APSR_g, r2              @ encoding: [0x82,0xf3,0x00,0x84]
1131 @ CHECK: msr    APSR_nzcvq, r3          @ encoding: [0x83,0xf3,0x00,0x88]
1132 @ CHECK: msr    APSR_nzcvq, r4          @ encoding: [0x84,0xf3,0x00,0x88]
1133 @ CHECK: msr    APSR_nzcvqg, r5         @ encoding: [0x85,0xf3,0x00,0x8c]
1134 @ CHECK: msr    CPSR_fc, r6             @ encoding: [0x86,0xf3,0x00,0x89]
1135 @ CHECK: msr    CPSR_c, r7              @ encoding: [0x87,0xf3,0x00,0x81]
1136 @ CHECK: msr    CPSR_x, r8              @ encoding: [0x88,0xf3,0x00,0x82]
1137 @ CHECK: msr    CPSR_fc, r9             @ encoding: [0x89,0xf3,0x00,0x89]
1138 @ CHECK: msr    CPSR_fc, r11            @ encoding: [0x8b,0xf3,0x00,0x89]
1139 @ CHECK: msr    CPSR_fsx, r12           @ encoding: [0x8c,0xf3,0x00,0x8e]
1140 @ CHECK: msr    SPSR_fc, r0             @ encoding: [0x90,0xf3,0x00,0x89]
1141 @ CHECK: msr    SPSR_fsxc, r5           @ encoding: [0x95,0xf3,0x00,0x8f]
1142 @ CHECK: msr    CPSR_fsxc, r8           @ encoding: [0x88,0xf3,0x00,0x8f]
1143
1144
1145 @------------------------------------------------------------------------------
1146 @ MUL
1147 @------------------------------------------------------------------------------
1148         muls r3, r4, r3
1149         mul r3, r4, r3
1150         mul r3, r4, r6
1151         it eq
1152         muleq r3, r4, r5
1153
1154 @ CHECK: muls   r3, r4, r3              @ encoding: [0x63,0x43]
1155 @ CHECK: mul    r3, r4, r3              @ encoding: [0x04,0xfb,0x03,0xf3]
1156 @ CHECK: mul    r3, r4, r6              @ encoding: [0x04,0xfb,0x06,0xf3]
1157 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1158 @ CHECK: muleq  r3, r4, r5              @ encoding: [0x04,0xfb,0x05,0xf3]
1159
1160
1161 @------------------------------------------------------------------------------
1162 @ MVN(immediate)
1163 @------------------------------------------------------------------------------
1164         mvns r8, #21
1165         mvn r0, #0x3fc0000
1166         mvns r0, #0x3fc0000
1167         itte eq
1168         mvnseq r1, #12
1169         mvneq r1, #12
1170         mvnne r1, #12
1171
1172 @ CHECK: mvns   r8, #21                 @ encoding: [0x7f,0xf0,0x15,0x08]
1173 @ CHECK: mvn    r0, #66846720           @ encoding: [0x6f,0xf0,0x7f,0x70]
1174 @ CHECK: mvns   r0, #66846720           @ encoding: [0x7f,0xf0,0x7f,0x70]
1175 @ CHECK: itte   eq                      @ encoding: [0x06,0xbf]
1176 @ CHECK: mvnseq r1, #12                 @ encoding: [0x7f,0xf0,0x0c,0x01]
1177 @ CHECK: mvneq  r1, #12                 @ encoding: [0x6f,0xf0,0x0c,0x01]
1178 @ CHECK: mvnne  r1, #12                 @ encoding: [0x6f,0xf0,0x0c,0x01]
1179
1180
1181 @------------------------------------------------------------------------------
1182 @ MVN(register)
1183 @------------------------------------------------------------------------------
1184         mvn r2, r3
1185         mvns r2, r3
1186         mvn r5, r6, lsl #19
1187         mvn r5, r6, lsr #9
1188         mvn r5, r6, asr #4
1189         mvn r5, r6, ror #6
1190         mvn r5, r6, rrx
1191         it eq
1192         mvneq r2, r3
1193
1194 @ CHECK: mvn.w  r2, r3                  @ encoding: [0x6f,0xea,0x03,0x02]
1195 @ CHECK: mvns   r2, r3                  @ encoding: [0xda,0x43]
1196 @ CHECK: mvn.w  r5, r6, lsl #19         @ encoding: [0x6f,0xea,0xc6,0x45]
1197 @ CHECK: mvn.w  r5, r6, lsr #9          @ encoding: [0x6f,0xea,0x56,0x25]
1198 @ CHECK: mvn.w  r5, r6, asr #4          @ encoding: [0x6f,0xea,0x26,0x15]
1199 @ CHECK: mvn.w  r5, r6, ror #6          @ encoding: [0x6f,0xea,0xb6,0x15]
1200 @ CHECK: mvn.w  r5, r6, rrx             @ encoding: [0x6f,0xea,0x36,0x05]
1201 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1202 @ CHECK: mvneq  r2, r3                  @ encoding: [0xda,0x43]
1203
1204 @------------------------------------------------------------------------------
1205 @ NOP
1206 @------------------------------------------------------------------------------
1207         nop.w
1208
1209 @ CHECK: nop.w                          @ encoding: [0xaf,0xf3,0x00,0x80]
1210
1211
1212 @------------------------------------------------------------------------------
1213 @ ORN
1214 @------------------------------------------------------------------------------
1215         orn r4, r5, #0xf000
1216         orn r4, r5, r6
1217         orns r4, r5, r6
1218         orn r4, r5, r6, lsl #5
1219         orns r4, r5, r6, lsr #5
1220         orn r4, r5, r6, lsr #5
1221         orns r4, r5, r6, asr #5
1222         orn r4, r5, r6, ror #5
1223
1224 @ CHECK: orn    r4, r5, #61440          @ encoding: [0x65,0xf4,0x70,0x44]
1225 @ CHECK: orn    r4, r5, r6              @ encoding: [0x65,0xea,0x06,0x04]
1226 @ CHECK: orns   r4, r5, r6              @ encoding: [0x75,0xea,0x06,0x04]
1227 @ CHECK: orn    r4, r5, r6, lsl #5      @ encoding: [0x65,0xea,0x46,0x14]
1228 @ CHECK: orns   r4, r5, r6, lsr #5      @ encoding: [0x75,0xea,0x56,0x14]
1229 @ CHECK: orn    r4, r5, r6, lsr #5      @ encoding: [0x65,0xea,0x56,0x14]
1230 @ CHECK: orns   r4, r5, r6, asr #5      @ encoding: [0x75,0xea,0x66,0x14]
1231 @ CHECK: orn    r4, r5, r6, ror #5      @ encoding: [0x65,0xea,0x76,0x14]
1232
1233
1234 @------------------------------------------------------------------------------
1235 @ ORR
1236 @------------------------------------------------------------------------------
1237         orr r4, r5, #0xf000
1238         orr r4, r5, r6
1239         orr r4, r5, r6, lsl #5
1240         orrs r4, r5, r6, lsr #5
1241         orr r4, r5, r6, lsr #5
1242         orrs r4, r5, r6, asr #5
1243         orr r4, r5, r6, ror #5
1244
1245 @ CHECK: orr    r4, r5, #61440          @ encoding: [0x45,0xf4,0x70,0x44]
1246 @ CHECK: orr.w  r4, r5, r6              @ encoding: [0x45,0xea,0x06,0x04]
1247 @ CHECK: orr.w  r4, r5, r6, lsl #5      @ encoding: [0x45,0xea,0x46,0x14]
1248 @ CHECK: orrs.w r4, r5, r6, lsr #5      @ encoding: [0x55,0xea,0x56,0x14]
1249 @ CHECK: orr.w  r4, r5, r6, lsr #5      @ encoding: [0x45,0xea,0x56,0x14]
1250 @ CHECK: orrs.w r4, r5, r6, asr #5      @ encoding: [0x55,0xea,0x66,0x14]
1251 @ CHECK: orr.w  r4, r5, r6, ror #5      @ encoding: [0x45,0xea,0x76,0x14]
1252
1253
1254 @------------------------------------------------------------------------------
1255 @ PKH
1256 @------------------------------------------------------------------------------
1257         pkhbt r2, r2, r3
1258         pkhbt r2, r2, r3, lsl #31
1259         pkhbt r2, r2, r3, lsl #0
1260         pkhbt r2, r2, r3, lsl #15
1261
1262         pkhtb r2, r2, r3
1263         pkhtb r2, r2, r3, asr #31
1264         pkhtb r2, r2, r3, asr #15
1265
1266 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1267 @ CHECK: pkhbt  r2, r2, r3, lsl #31     @ encoding: [0xc2,0xea,0xc3,0x72]
1268 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1269 @ CHECK: pkhbt  r2, r2, r3, lsl #15     @ encoding: [0xc2,0xea,0xc3,0x32]
1270
1271 @ CHECK: pkhbt  r2, r2, r3              @ encoding: [0xc2,0xea,0x03,0x02]
1272 @ CHECK: pkhtb  r2, r2, r3, asr #31     @ encoding: [0xc2,0xea,0xe3,0x72]
1273 @ CHECK: pkhtb  r2, r2, r3, asr #15     @ encoding: [0xc2,0xea,0xe3,0x32]
1274
1275
1276 @------------------------------------------------------------------------------
1277 @ PLD(immediate)
1278 @------------------------------------------------------------------------------
1279         pld [r5, #-4]
1280         pld [r6, #32]
1281         pld [r6, #33]
1282         pld [r6, #257]
1283         pld [r7, #257]
1284
1285 @ CHECK: pld    [r5, #-4]               @ encoding: [0x15,0xf8,0x04,0xfc]
1286 @ CHECK: pld    [r6, #32]               @ encoding: [0x96,0xf8,0x20,0xf0]
1287 @ CHECK: pld    [r6, #33]               @ encoding: [0x96,0xf8,0x21,0xf0]
1288 @ CHECK: pld    [r6, #257]              @ encoding: [0x96,0xf8,0x01,0xf1]
1289 @ CHECK: pld    [r7, #257]              @ encoding: [0x97,0xf8,0x01,0xf1]
1290
1291
1292 @------------------------------------------------------------------------------
1293 @ PLD(literal)
1294 @------------------------------------------------------------------------------
1295         pld  _foo
1296
1297 @ CHECK: pld    _foo                    @ encoding: [0x9f'A',0xf8'A',A,0xf0'A']
1298             @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
1299
1300
1301 @------------------------------------------------------------------------------
1302 @ PLD(register)
1303 @------------------------------------------------------------------------------
1304         pld [r8, r1]
1305         pld [r5, r2]
1306         pld [r0, r2, lsl #3]
1307         pld [r8, r2, lsl #2]
1308         pld [sp, r2, lsl #1]
1309         pld [sp, r2, lsl #0]
1310
1311 @ CHECK: pld    [r8, r1]                @ encoding: [0x18,0xf8,0x01,0xf0]
1312 @ CHECK: pld    [r5, r2]                @ encoding: [0x15,0xf8,0x02,0xf0]
1313 @ CHECK: pld    [r0, r2, lsl #3]        @ encoding: [0x10,0xf8,0x32,0xf0]
1314 @ CHECK: pld    [r8, r2, lsl #2]        @ encoding: [0x18,0xf8,0x22,0xf0]
1315 @ CHECK: pld    [sp, r2, lsl #1]        @ encoding: [0x1d,0xf8,0x12,0xf0]
1316 @ CHECK: pld    [sp, r2]                @ encoding: [0x1d,0xf8,0x02,0xf0]
1317
1318 @------------------------------------------------------------------------------
1319 @ PLI(immediate)
1320 @------------------------------------------------------------------------------
1321         pli [r5, #-4]
1322         pli [r6, #32]
1323         pli [r6, #33]
1324         pli [r6, #257]
1325         pli [r7, #257]
1326
1327 @ CHECK: pli    [r5, #-4]               @ encoding: [0x15,0xf9,0x04,0xfc]
1328 @ CHECK: pli    [r6, #32]               @ encoding: [0x96,0xf9,0x20,0xf0]
1329 @ CHECK: pli    [r6, #33]               @ encoding: [0x96,0xf9,0x21,0xf0]
1330 @ CHECK: pli    [r6, #257]              @ encoding: [0x96,0xf9,0x01,0xf1]
1331 @ CHECK: pli    [r7, #257]              @ encoding: [0x97,0xf9,0x01,0xf1]
1332
1333
1334 @------------------------------------------------------------------------------
1335 @ PLI(literal)
1336 @------------------------------------------------------------------------------
1337         pli  _foo
1338
1339
1340 @ CHECK: pli    _foo                    @ encoding: [0x9f'A',0xf9'A',A,0xf0'A']
1341            @   fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
1342
1343
1344 @------------------------------------------------------------------------------
1345 @ PLI(register)
1346 @------------------------------------------------------------------------------
1347         pli [r8, r1]
1348         pli [r5, r2]
1349         pli [r0, r2, lsl #3]
1350         pli [r8, r2, lsl #2]
1351         pli [sp, r2, lsl #1]
1352         pli [sp, r2, lsl #0]
1353
1354 @ CHECK: pli    [r8, r1]                @ encoding: [0x18,0xf9,0x01,0xf0]
1355 @ CHECK: pli    [r5, r2]                @ encoding: [0x15,0xf9,0x02,0xf0]
1356 @ CHECK: pli    [r0, r2, lsl #3]        @ encoding: [0x10,0xf9,0x32,0xf0]
1357 @ CHECK: pli    [r8, r2, lsl #2]        @ encoding: [0x18,0xf9,0x22,0xf0]
1358 @ CHECK: pli    [sp, r2, lsl #1]        @ encoding: [0x1d,0xf9,0x12,0xf0]
1359 @ CHECK: pli    [sp, r2]                @ encoding: [0x1d,0xf9,0x02,0xf0]
1360
1361
1362 @------------------------------------------------------------------------------
1363 @ QADD/QADD16/QADD8
1364 @------------------------------------------------------------------------------
1365         qadd r1, r2, r3
1366         qadd16 r1, r2, r3
1367         qadd8 r1, r2, r3
1368         itte gt
1369         qaddgt r1, r2, r3
1370         qadd16gt r1, r2, r3
1371         qadd8le r1, r2, r3
1372
1373 @ CHECK: qadd   r1, r2, r3              @ encoding: [0x83,0xfa,0x82,0xf1]
1374 @ CHECK: qadd16 r1, r2, r3              @ encoding: [0x92,0xfa,0x13,0xf1]
1375 @ CHECK: qadd8  r1, r2, r3              @ encoding: [0x82,0xfa,0x13,0xf1]
1376 @ CHECK: itte   gt                      @ encoding: [0xc6,0xbf]
1377 @ CHECK: qaddgt r1, r2, r3              @ encoding: [0x83,0xfa,0x82,0xf1]
1378 @ CHECK: qadd16gt r1, r2, r3            @ encoding: [0x92,0xfa,0x13,0xf1]
1379 @ CHECK: qadd8le r1, r2, r3             @ encoding: [0x82,0xfa,0x13,0xf1]
1380
1381
1382 @------------------------------------------------------------------------------
1383 @ QDADD/QDSUB
1384 @------------------------------------------------------------------------------
1385         qdadd r6, r7, r8
1386         qdsub r6, r7, r8
1387         itt hi
1388         qdaddhi r6, r7, r8
1389         qdsubhi r6, r7, r8
1390
1391 @ CHECK: qdadd  r6, r7, r8              @ encoding: [0x88,0xfa,0x97,0xf6]
1392 @ CHECK: qdsub  r6, r7, r8              @ encoding: [0x88,0xfa,0xb7,0xf6]
1393 @ CHECK: itt    hi                      @ encoding: [0x84,0xbf]
1394 @ CHECK: qdaddhi r6, r7, r8             @ encoding: [0x88,0xfa,0x97,0xf6]
1395 @ CHECK: qdsubhi r6, r7, r8             @ encoding: [0x88,0xfa,0xb7,0xf6]
1396
1397
1398 @------------------------------------------------------------------------------
1399 @ QSAX
1400 @------------------------------------------------------------------------------
1401         qsax r9, r12, r0
1402         it eq
1403         qsaxeq r9, r12, r0
1404
1405 @ CHECK: qsax   r9, r12, r0             @ encoding: [0xec,0xfa,0x10,0xf9]
1406 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1407 @ CHECK: qsaxeq r9, r12, r0             @ encoding: [0xec,0xfa,0x10,0xf9]
1408
1409
1410 @------------------------------------------------------------------------------
1411 @ QSUB/QSUB16/QSUB8
1412 @------------------------------------------------------------------------------
1413         qsub r1, r2, r3
1414         qsub16 r1, r2, r3
1415         qsub8 r1, r2, r3
1416         itet le
1417         qsuble r1, r2, r3
1418         qsub16gt r1, r2, r3
1419         qsub8le r1, r2, r3
1420
1421 @ CHECK: qsub   r1, r2, r3              @ encoding: [0x83,0xfa,0xa2,0xf1]
1422 @ CHECK: qsub16 r1, r2, r3              @ encoding: [0xd2,0xfa,0x13,0xf1]
1423 @ CHECK: qsub8  r1, r2, r3              @ encoding: [0xc2,0xfa,0x13,0xf1]
1424 @ CHECK: itet   le                      @ encoding: [0xd6,0xbf]
1425 @ CHECK: qsuble r1, r2, r3              @ encoding: [0x83,0xfa,0xa2,0xf1]
1426 @ CHECK: qsub16gt       r1, r2, r3      @ encoding: [0xd2,0xfa,0x13,0xf1]
1427 @ CHECK: qsub8le r1, r2, r3             @ encoding: [0xc2,0xfa,0x13,0xf1]
1428
1429
1430 @------------------------------------------------------------------------------
1431 @ RBIT
1432 @------------------------------------------------------------------------------
1433         rbit r1, r2
1434         it ne
1435         rbitne r1, r2
1436
1437 @ CHECK: rbit   r1, r2                  @ encoding: [0x92,0xfa,0xa2,0xf1]
1438 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1439 @ CHECK: rbitne r1, r2                  @ encoding: [0x92,0xfa,0xa2,0xf1]
1440
1441
1442 @------------------------------------------------------------------------------
1443 @ REV
1444 @------------------------------------------------------------------------------
1445         rev.w r1, r2
1446         rev r2, r8
1447         itt ne
1448         revne r1, r2
1449         revne r1, r8
1450
1451 @ CHECK: rev.w  r1, r2                  @ encoding: [0x92,0xfa,0x82,0xf1]
1452 @ CHECK: rev.w  r2, r8                  @ encoding: [0x98,0xfa,0x88,0xf2]
1453 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
1454 @ CHECK: revne  r1, r2                  @ encoding: [0x11,0xba]
1455 @ CHECK: revne.w r1, r8                 @ encoding: [0x98,0xfa,0x88,0xf1]
1456
1457
1458 @------------------------------------------------------------------------------
1459 @ REV16
1460 @------------------------------------------------------------------------------
1461         rev16.w r1, r2
1462         rev16 r2, r8
1463         itt ne
1464         rev16ne r1, r2
1465         rev16ne r1, r8
1466
1467 @ CHECK: rev16.w r1, r2                 @ encoding: [0x92,0xfa,0x92,0xf1]
1468 @ CHECK: rev16.w r2, r8                 @ encoding: [0x98,0xfa,0x98,0xf2]
1469 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
1470 @ CHECK: rev16ne r1, r2                 @ encoding: [0x51,0xba]
1471 @ CHECK: rev16ne.w      r1, r8          @ encoding: [0x98,0xfa,0x98,0xf1]
1472
1473
1474 @------------------------------------------------------------------------------
1475 @ REVSH
1476 @------------------------------------------------------------------------------
1477         revsh.w r1, r2
1478         revsh r2, r8
1479         itt ne
1480         revshne r1, r2
1481         revshne r1, r8
1482
1483 @ CHECK: revsh.w r1, r2                 @ encoding: [0x92,0xfa,0xb2,0xf1]
1484 @ CHECK: revsh.w r2, r8                 @ encoding: [0x98,0xfa,0xb8,0xf2]
1485 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
1486 @ CHECK: revshne r1, r2                 @ encoding: [0xd1,0xba]
1487 @ CHECK: revshne.w      r1, r8          @ encoding: [0x98,0xfa,0xb8,0xf1]
1488
1489
1490 @------------------------------------------------------------------------------
1491 @ ROR (immediate)
1492 @------------------------------------------------------------------------------
1493         ror r2, r3, #12
1494         rors r8, r3, #31
1495         rors.w r2, r3, #1
1496         ror r2, r3, #4
1497         rors r2, r12, #15
1498
1499         ror r3, #19
1500         rors r8, #2
1501         rors.w r7, #5
1502         ror.w r12, #21
1503
1504 @ CHECK: ror.w  r2, r3, #12             @ encoding: [0x4f,0xea,0x33,0x32]
1505 @ CHECK: rors.w r8, r3, #31             @ encoding: [0x5f,0xea,0xf3,0x78]
1506 @ CHECK: rors.w r2, r3, #1              @ encoding: [0x5f,0xea,0x73,0x02]
1507 @ CHECK: ror.w  r2, r3, #4              @ encoding: [0x4f,0xea,0x33,0x12]
1508 @ CHECK: rors.w r2, r12, #15            @ encoding: [0x5f,0xea,0xfc,0x32]
1509
1510 @ CHECK: ror.w  r3, r3, #19             @ encoding: [0x4f,0xea,0xf3,0x43]
1511 @ CHECK: rors.w r8, r8, #2              @ encoding: [0x5f,0xea,0xb8,0x08]
1512 @ CHECK: rors.w r7, r7, #5              @ encoding: [0x5f,0xea,0x77,0x17]
1513 @ CHECK: ror.w  r12, r12, #21           @ encoding: [0x4f,0xea,0x7c,0x5c]
1514
1515
1516 @------------------------------------------------------------------------------
1517 @ ROR (register)
1518 @------------------------------------------------------------------------------
1519         ror r3, r4, r2
1520         ror.w r1, r2
1521         rors r3, r4, r8
1522
1523 @ CHECK: ror.w  r3, r4, r2              @ encoding: [0x64,0xfa,0x02,0xf3]
1524 @ CHECK: ror.w  r1, r1, r2              @ encoding: [0x61,0xfa,0x02,0xf1]
1525 @ CHECK: rors.w r3, r4, r8              @ encoding: [0x74,0xfa,0x08,0xf3]
1526
1527
1528 @------------------------------------------------------------------------------
1529 @ RRX
1530 @------------------------------------------------------------------------------
1531         rrx r1, r2
1532         rrxs r1, r2
1533         ite lt
1534         rrxlt r9, r12
1535         rrxsge r8, r3
1536
1537 @ CHECK: rrx    r1, r2                  @ encoding: [0x4f,0xea,0x32,0x01]
1538 @ CHECK: rrxs   r1, r2                  @ encoding: [0x5f,0xea,0x32,0x01]
1539 @ CHECK: ite    lt                      @ encoding: [0xb4,0xbf]
1540 @ CHECK: rrxlt  r9, r12                 @ encoding: [0x4f,0xea,0x3c,0x09]
1541 @ CHECK: rrxsge r8, r3                  @ encoding: [0x5f,0xea,0x33,0x08]
1542
1543 @------------------------------------------------------------------------------
1544 @ RSB (immediate)
1545 @------------------------------------------------------------------------------
1546         rsb r2, r5, #0xff000
1547         rsbs r3, r12, #0xf
1548         rsb r1, #0xff
1549         rsb r1, r1, #0xff
1550
1551 @ CHECK: rsb.w  r2, r5, #1044480        @ encoding: [0xc5,0xf5,0x7f,0x22]
1552 @ CHECK: rsbs.w r3, r12, #15            @ encoding: [0xdc,0xf1,0x0f,0x03]
1553 @ CHECK: rsb.w  r1, r1, #255            @ encoding: [0xc1,0xf1,0xff,0x01]
1554 @ CHECK: rsb.w  r1, r1, #255            @ encoding: [0xc1,0xf1,0xff,0x01]
1555
1556
1557 @------------------------------------------------------------------------------
1558 @ RSB (register)
1559 @------------------------------------------------------------------------------
1560         rsb r4, r8
1561         rsb r4, r9, r8
1562         rsb r1, r4, r8, asr #3
1563         rsbs r2, r1, r7, lsl #1
1564
1565 @ CHECK: rsb    r4, r4, r8              @ encoding: [0xc4,0xeb,0x08,0x04]
1566 @ CHECK: rsb    r4, r9, r8              @ encoding: [0xc9,0xeb,0x08,0x04]
1567 @ CHECK: rsb    r1, r4, r8, asr #3      @ encoding: [0xc4,0xeb,0xe8,0x01]
1568 @ CHECK: rsbs   r2, r1, r7, lsl #1      @ encoding: [0xd1,0xeb,0x47,0x02]
1569
1570
1571 @------------------------------------------------------------------------------
1572 @ SADD16
1573 @------------------------------------------------------------------------------
1574         sadd16 r3, r4, r8
1575         it ne
1576         sadd16ne r3, r4, r8
1577
1578 @ CHECK: sadd16 r3, r4, r8              @ encoding: [0x94,0xfa,0x08,0xf3]
1579 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1580 @ CHECK: sadd16ne       r3, r4, r8      @ encoding: [0x94,0xfa,0x08,0xf3]
1581
1582
1583 @------------------------------------------------------------------------------
1584 @ SADD8
1585 @------------------------------------------------------------------------------
1586         sadd8 r3, r4, r8
1587         it ne
1588         sadd8ne r3, r4, r8
1589
1590 @ CHECK: sadd8  r3, r4, r8              @ encoding: [0x84,0xfa,0x08,0xf3]
1591 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1592 @ CHECK: sadd8ne r3, r4, r8             @ encoding: [0x84,0xfa,0x08,0xf3]
1593
1594
1595 @------------------------------------------------------------------------------
1596 @ SASX
1597 @------------------------------------------------------------------------------
1598         saddsubx r9, r2, r7
1599         it ne
1600         saddsubxne r2, r5, r6
1601         sasx r9, r2, r7
1602         it ne
1603         sasxne r2, r5, r6
1604
1605 @ CHECK: sasx   r9, r2, r7              @ encoding: [0xa2,0xfa,0x07,0xf9]
1606 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1607 @ CHECK: sasxne r2, r5, r6              @ encoding: [0xa5,0xfa,0x06,0xf2]
1608 @ CHECK: sasx   r9, r2, r7              @ encoding: [0xa2,0xfa,0x07,0xf9]
1609 @ CHECK: it     ne                      @ encoding: [0x18,0xbf]
1610 @ CHECK: sasxne r2, r5, r6              @ encoding: [0xa5,0xfa,0x06,0xf2]
1611
1612
1613 @------------------------------------------------------------------------------
1614 @ SBC (immediate)
1615 @------------------------------------------------------------------------------
1616         sbc r0, r1, #4
1617         sbcs r0, r1, #0
1618         sbc r1, r2, #255
1619         sbc r3, r7, #0x00550055
1620         sbc r8, r12, #0xaa00aa00
1621         sbc r9, r7, #0xa5a5a5a5
1622         sbc r5, r3, #0x87000000
1623         sbc r4, r2, #0x7f800000
1624         sbc r4, r2, #0x00000680
1625
1626 @ CHECK: sbc    r0, r1, #4              @ encoding: [0x61,0xf1,0x04,0x00]
1627 @ CHECK: sbcs   r0, r1, #0              @ encoding: [0x71,0xf1,0x00,0x00]
1628 @ CHECK: sbc    r1, r2, #255            @ encoding: [0x62,0xf1,0xff,0x01]
1629 @ CHECK: sbc    r3, r7, #5570645        @ encoding: [0x67,0xf1,0x55,0x13]
1630 @ CHECK: sbc    r8, r12, #2852170240    @ encoding: [0x6c,0xf1,0xaa,0x28]
1631 @ CHECK: sbc    r9, r7, #2779096485     @ encoding: [0x67,0xf1,0xa5,0x39]
1632 @ CHECK: sbc    r5, r3, #2264924160     @ encoding: [0x63,0xf1,0x07,0x45]
1633 @ CHECK: sbc    r4, r2, #2139095040     @ encoding: [0x62,0xf1,0xff,0x44]
1634 @ CHECK: sbc    r4, r2, #1664           @ encoding: [0x62,0xf5,0xd0,0x64]
1635
1636
1637 @------------------------------------------------------------------------------
1638 @ SBC (register)
1639 @------------------------------------------------------------------------------
1640         sbc r4, r5, r6
1641         sbcs r4, r5, r6
1642         sbc.w r9, r1, r3
1643         sbcs.w r9, r1, r3
1644         sbc     r0, r1, r3, ror #4
1645         sbcs    r0, r1, r3, lsl #7
1646         sbc.w   r0, r1, r3, lsr #31
1647         sbcs.w  r0, r1, r3, asr #32
1648
1649 @ CHECK: sbc.w  r4, r5, r6              @ encoding: [0x65,0xeb,0x06,0x04]
1650 @ CHECK: sbcs.w r4, r5, r6              @ encoding: [0x75,0xeb,0x06,0x04]
1651 @ CHECK: sbc.w  r9, r1, r3              @ encoding: [0x61,0xeb,0x03,0x09]
1652 @ CHECK: sbcs.w r9, r1, r3              @ encoding: [0x71,0xeb,0x03,0x09]
1653 @ CHECK: sbc.w  r0, r1, r3, ror #4      @ encoding: [0x61,0xeb,0x33,0x10]
1654 @ CHECK: sbcs.w r0, r1, r3, lsl #7      @ encoding: [0x71,0xeb,0xc3,0x10]
1655 @ CHECK: sbc.w  r0, r1, r3, lsr #31     @ encoding: [0x61,0xeb,0xd3,0x70]
1656 @ CHECK: sbcs.w r0, r1, r3, asr #32     @ encoding: [0x71,0xeb,0x23,0x00]
1657
1658
1659 @------------------------------------------------------------------------------
1660 @ SBFX
1661 @------------------------------------------------------------------------------
1662         sbfx r4, r5, #16, #1
1663         it gt
1664         sbfxgt r4, r5, #16, #16
1665
1666 @ CHECK: sbfx   r4, r5, #16, #1         @ encoding: [0x45,0xf3,0x00,0x44]
1667 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
1668 @ CHECK: sbfxgt r4, r5, #16, #16        @ encoding: [0x45,0xf3,0x0f,0x44]
1669
1670
1671 @------------------------------------------------------------------------------
1672 @ SEL
1673 @------------------------------------------------------------------------------
1674         sel r5, r9, r2
1675         it le
1676         selle r5, r9, r2
1677
1678 @ CHECK: sel    r5, r9, r2              @ encoding: [0xa9,0xfa,0x82,0xf5]
1679 @ CHECK: it     le                      @ encoding: [0xd8,0xbf]
1680 @ CHECK: selle  r5, r9, r2              @ encoding: [0xa9,0xfa,0x82,0xf5]
1681
1682
1683 @------------------------------------------------------------------------------
1684 @ SEV
1685 @------------------------------------------------------------------------------
1686         sev.w
1687         it eq
1688         seveq.w
1689
1690 @ CHECK: sev.w                           @ encoding: [0xaf,0xf3,0x04,0x80]
1691 @ CHECK: it     eq                       @ encoding: [0x08,0xbf]
1692 @ CHECK: seveq.w                         @ encoding: [0xaf,0xf3,0x04,0x80]
1693
1694
1695 @------------------------------------------------------------------------------
1696 @ SADD16/SADD8
1697 @------------------------------------------------------------------------------
1698         sadd16 r1, r2, r3
1699         sadd8 r1, r2, r3
1700         ite gt
1701         sadd16gt r1, r2, r3
1702         sadd8le r1, r2, r3
1703
1704 @ CHECK: sadd16 r1, r2, r3              @ encoding: [0x92,0xfa,0x03,0xf1]
1705 @ CHECK: sadd8  r1, r2, r3              @ encoding: [0x82,0xfa,0x03,0xf1]
1706 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
1707 @ CHECK: sadd16gt       r1, r2, r3      @ encoding: [0x92,0xfa,0x03,0xf1]
1708 @ CHECK: sadd8le r1, r2, r3             @ encoding: [0x82,0xfa,0x03,0xf1]
1709
1710
1711 @------------------------------------------------------------------------------
1712 @ SHASX
1713 @------------------------------------------------------------------------------
1714         shasx r4, r8, r2
1715         it gt
1716         shasxgt r4, r8, r2
1717         shaddsubx r4, r8, r2
1718         it gt
1719         shaddsubxgt r4, r8, r2
1720
1721 @ CHECK: shasx  r4, r8, r2              @ encoding: [0xa8,0xfa,0x22,0xf4]
1722 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
1723 @ CHECK: shasxgt r4, r8, r2             @ encoding: [0xa8,0xfa,0x22,0xf4]
1724 @ CHECK: shasx  r4, r8, r2              @ encoding: [0xa8,0xfa,0x22,0xf4]
1725 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
1726 @ CHECK: shasxgt r4, r8, r2             @ encoding: [0xa8,0xfa,0x22,0xf4]
1727
1728
1729 @------------------------------------------------------------------------------
1730 @ SHASX
1731 @------------------------------------------------------------------------------
1732         shsax r4, r8, r2
1733         it gt
1734         shsaxgt r4, r8, r2
1735         shsubaddx r4, r8, r2
1736         it gt
1737         shsubaddxgt r4, r8, r2
1738
1739 @ CHECK: shsax  r4, r8, r2              @ encoding: [0xe8,0xfa,0x22,0xf4]
1740 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
1741 @ CHECK: shsaxgt r4, r8, r2             @ encoding: [0xe8,0xfa,0x22,0xf4]
1742 @ CHECK: shsax  r4, r8, r2              @ encoding: [0xe8,0xfa,0x22,0xf4]
1743 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
1744 @ CHECK: shsaxgt r4, r8, r2             @ encoding: [0xe8,0xfa,0x22,0xf4]
1745
1746
1747 @------------------------------------------------------------------------------
1748 @ SHSUB16/SHSUB8
1749 @------------------------------------------------------------------------------
1750         shsub16 r4, r8, r2
1751         shsub8 r4, r8, r2
1752         itt gt
1753         shsub16gt r4, r8, r2
1754         shsub8gt r4, r8, r2
1755
1756 @ CHECK: shsub16 r4, r8, r2             @ encoding: [0xd8,0xfa,0x22,0xf4]
1757 @ CHECK: shsub8 r4, r8, r2              @ encoding: [0xc8,0xfa,0x22,0xf4]
1758 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
1759 @ CHECK: shsub16gt      r4, r8, r2      @ encoding: [0xd8,0xfa,0x22,0xf4]
1760 @ CHECK: shsub8gt       r4, r8, r2      @ encoding: [0xc8,0xfa,0x22,0xf4]
1761
1762
1763 @------------------------------------------------------------------------------
1764 @ SMLABB/SMLABT/SMLATB/SMLATT
1765 @------------------------------------------------------------------------------
1766         smlabb r3, r1, r9, r0
1767         smlabt r5, r6, r4, r1
1768         smlatb r4, r2, r3, r2
1769         smlatt r8, r3, r8, r4
1770         itete gt
1771         smlabbgt r3, r1, r9, r0
1772         smlabtle r5, r6, r4, r1
1773         smlatbgt r4, r2, r3, r2
1774         smlattle r8, r3, r8, r4
1775
1776 @ CHECK: smlabb r3, r1, r9, r0          @ encoding: [0x11,0xfb,0x09,0x03]
1777 @ CHECK: smlabt r5, r6, r4, r1          @ encoding: [0x16,0xfb,0x14,0x15]
1778 @ CHECK: smlatb r4, r2, r3, r2          @ encoding: [0x12,0xfb,0x23,0x24]
1779 @ CHECK: smlatt r8, r3, r8, r4          @ encoding: [0x13,0xfb,0x38,0x48]
1780 @ CHECK: itete  gt                      @ encoding: [0xcb,0xbf]
1781 @ CHECK: smlabbgt       r3, r1, r9, r0  @ encoding: [0x11,0xfb,0x09,0x03]
1782 @ CHECK: smlabtle       r5, r6, r4, r1  @ encoding: [0x16,0xfb,0x14,0x15]
1783 @ CHECK: smlatbgt       r4, r2, r3, r2  @ encoding: [0x12,0xfb,0x23,0x24]
1784 @ CHECK: smlattle       r8, r3, r8, r4  @ encoding: [0x13,0xfb,0x38,0x48]
1785
1786
1787 @------------------------------------------------------------------------------
1788 @ SMLAD/SMLADX
1789 @------------------------------------------------------------------------------
1790         smlad r2, r3, r5, r8
1791         smladx r2, r3, r5, r8
1792         itt hi
1793         smladhi r2, r3, r5, r8
1794         smladxhi r2, r3, r5, r8
1795
1796 @ CHECK: smlad  r2, r3, r5, r8          @ encoding: [0x23,0xfb,0x05,0x82]
1797 @ CHECK: smladx r2, r3, r5, r8          @ encoding: [0x23,0xfb,0x15,0x82]
1798 @ CHECK: itt    hi                      @ encoding: [0x84,0xbf]
1799 @ CHECK: smladhi r2, r3, r5, r8         @ encoding: [0x23,0xfb,0x05,0x82]
1800 @ CHECK: smladxhi       r2, r3, r5, r8  @ encoding: [0x23,0xfb,0x15,0x82]
1801
1802
1803 @------------------------------------------------------------------------------
1804 @ SMLAL
1805 @------------------------------------------------------------------------------
1806         smlal r2, r3, r5, r8
1807         it eq
1808         smlaleq r2, r3, r5, r8
1809
1810 @ CHECK: smlal  r2, r3, r5, r8          @ encoding: [0xc5,0xfb,0x08,0x23]
1811 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
1812 @ CHECK: smlaleq r2, r3, r5, r8         @ encoding: [0xc5,0xfb,0x08,0x23]
1813
1814
1815 @------------------------------------------------------------------------------
1816 @ SMLALBB/SMLALBT/SMLALTB/SMLALTT
1817 @------------------------------------------------------------------------------
1818         smlalbb r3, r1, r9, r0
1819         smlalbt r5, r6, r4, r1
1820         smlaltb r4, r2, r3, r2
1821         smlaltt r8, r3, r8, r4
1822         iteet ge
1823         smlalbbge r3, r1, r9, r0
1824         smlalbtlt r5, r6, r4, r1
1825         smlaltblt r4, r2, r3, r2
1826         smlalttge r8, r3, r8, r4
1827
1828 @ CHECK: smlalbb r3, r1, r9, r0         @ encoding: [0xc9,0xfb,0x80,0x31]
1829 @ CHECK: smlalbt r5, r6, r4, r1         @ encoding: [0xc4,0xfb,0x91,0x56]
1830 @ CHECK: smlaltb r4, r2, r3, r2         @ encoding: [0xc3,0xfb,0xa2,0x42]
1831 @ CHECK: smlaltt r8, r3, r8, r4         @ encoding: [0xc8,0xfb,0xb4,0x83]
1832 @ CHECK: iteet  ge                      @ encoding: [0xad,0xbf]
1833 @ CHECK: smlalbbge      r3, r1, r9, r0  @ encoding: [0xc9,0xfb,0x80,0x31]
1834 @ CHECK: smlalbtlt      r5, r6, r4, r1  @ encoding: [0xc4,0xfb,0x91,0x56]
1835 @ CHECK: smlaltblt      r4, r2, r3, r2  @ encoding: [0xc3,0xfb,0xa2,0x42]
1836 @ CHECK: smlalttge      r8, r3, r8, r4  @ encoding: [0xc8,0xfb,0xb4,0x83]
1837
1838
1839 @------------------------------------------------------------------------------
1840 @ SMLALD/SMLALDX
1841 @------------------------------------------------------------------------------
1842         smlald r2, r3, r5, r8
1843         smlaldx r2, r3, r5, r8
1844         ite eq
1845         smlaldeq r2, r3, r5, r8
1846         smlaldxne r2, r3, r5, r8
1847
1848 @ CHECK: smlald r2, r3, r5, r8          @ encoding: [0xc5,0xfb,0xc8,0x23]
1849 @ CHECK: smlaldx r2, r3, r5, r8         @ encoding: [0xc5,0xfb,0xd8,0x23]
1850 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
1851 @ CHECK: smlaldeq       r2, r3, r5, r8  @ encoding: [0xc5,0xfb,0xc8,0x23]
1852 @ CHECK: smlaldxne      r2, r3, r5, r8  @ encoding: [0xc5,0xfb,0xd8,0x23]
1853
1854
1855 @------------------------------------------------------------------------------
1856 @ SMLAWB/SMLAWT
1857 @------------------------------------------------------------------------------
1858         smlawb r2, r3, r10, r8
1859         smlawt r8, r3, r5, r9
1860         ite eq
1861         smlawbeq r2, r7, r5, r8
1862         smlawtne r1, r3, r0, r8
1863
1864 @ CHECK: smlawb r2, r3, r10, r8         @ encoding: [0x33,0xfb,0x0a,0x82]
1865 @ CHECK: smlawt r8, r3, r5, r9          @ encoding: [0x33,0xfb,0x15,0x98]
1866 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
1867 @ CHECK: smlawbeq       r2, r7, r5, r8  @ encoding: [0x37,0xfb,0x05,0x82]
1868 @ CHECK: smlawtne       r1, r3, r0, r8  @ encoding: [0x33,0xfb,0x10,0x81]
1869
1870
1871 @------------------------------------------------------------------------------
1872 @ SMLSD/SMLSDX
1873 @------------------------------------------------------------------------------
1874         smlsd r2, r3, r5, r8
1875         smlsdx r2, r3, r5, r8
1876         ite le
1877         smlsdle r2, r3, r5, r8
1878         smlsdxgt r2, r3, r5, r8
1879
1880 @ CHECK: smlsd  r2, r3, r5, r8          @ encoding: [0x43,0xfb,0x05,0x82]
1881 @ CHECK: smlsdx r2, r3, r5, r8          @ encoding: [0x43,0xfb,0x15,0x82]
1882 @ CHECK: ite    le                      @ encoding: [0xd4,0xbf]
1883 @ CHECK: smlsdle        r2, r3, r5, r8  @ encoding: [0x43,0xfb,0x05,0x82]
1884 @ CHECK: smlsdxgt       r2, r3, r5, r8  @ encoding: [0x43,0xfb,0x15,0x82]
1885
1886
1887 @------------------------------------------------------------------------------
1888 @ SMLSLD/SMLSLDX
1889 @------------------------------------------------------------------------------
1890         smlsld r2, r9, r5, r1
1891         smlsldx r4, r11, r2, r8
1892         ite ge
1893         smlsldge r8, r2, r5, r6
1894         smlsldxlt r1, r0, r3, r8
1895
1896 @ CHECK: smlsld r2, r9, r5, r1          @ encoding: [0xd5,0xfb,0xc1,0x29]
1897 @ CHECK: smlsldx        r4, r11, r2, r8 @ encoding: [0xd2,0xfb,0xd8,0x4b]
1898 @ CHECK: ite    ge                      @ encoding: [0xac,0xbf]
1899 @ CHECK: smlsldge       r8, r2, r5, r6  @ encoding: [0xd5,0xfb,0xc6,0x82]
1900 @ CHECK: smlsldxlt      r1, r0, r3, r8  @ encoding: [0xd3,0xfb,0xd8,0x10]
1901
1902
1903 @------------------------------------------------------------------------------
1904 @ SMMLA/SMMLAR
1905 @------------------------------------------------------------------------------
1906         smmla r1, r2, r3, r4
1907         smmlar r4, r3, r2, r1
1908         ite lo
1909         smmlalo r1, r2, r3, r4
1910         smmlarcs r4, r3, r2, r1
1911
1912 @ CHECK: smmla  r1, r2, r3, r4          @ encoding: [0x52,0xfb,0x03,0x41]
1913 @ CHECK: smmlar r4, r3, r2, r1          @ encoding: [0x53,0xfb,0x12,0x14]
1914 @ CHECK: ite    lo                      @ encoding: [0x34,0xbf]
1915 @ CHECK: smmlalo        r1, r2, r3, r4  @ encoding: [0x52,0xfb,0x03,0x41]
1916 @ CHECK: smmlarhs       r4, r3, r2, r1  @ encoding: [0x53,0xfb,0x12,0x14]
1917
1918
1919 @------------------------------------------------------------------------------
1920 @ SMMLS/SMMLSR
1921 @------------------------------------------------------------------------------
1922         smmls r1, r2, r3, r4
1923         smmlsr r4, r3, r2, r1
1924         ite lo
1925         smmlslo r1, r2, r3, r4
1926         smmlsrcs r4, r3, r2, r1
1927
1928 @ CHECK: smmls  r1, r2, r3, r4          @ encoding: [0x62,0xfb,0x03,0x41]
1929 @ CHECK: smmlsr r4, r3, r2, r1          @ encoding: [0x63,0xfb,0x12,0x14]
1930 @ CHECK: ite    lo                      @ encoding: [0x34,0xbf]
1931 @ CHECK: smmlslo        r1, r2, r3, r4  @ encoding: [0x62,0xfb,0x03,0x41]
1932 @ CHECK: smmlsrhs       r4, r3, r2, r1  @ encoding: [0x63,0xfb,0x12,0x14]
1933
1934
1935 @------------------------------------------------------------------------------
1936 @ SMMUL/SMMULR
1937 @------------------------------------------------------------------------------
1938         smmul r2, r3, r4
1939         smmulr r3, r2, r1
1940         ite cc
1941         smmulcc r2, r3, r4
1942         smmulrhs r3, r2, r1
1943
1944 @ CHECK: smmul  r2, r3, r4              @ encoding: [0x53,0xfb,0x04,0xf2]
1945 @ CHECK: smmulr r3, r2, r1              @ encoding: [0x52,0xfb,0x11,0xf3]
1946 @ CHECK: ite    lo                      @ encoding: [0x34,0xbf]
1947 @ CHECK: smmullo        r2, r3, r4      @ encoding: [0x53,0xfb,0x04,0xf2]
1948 @ CHECK: smmulrhs       r3, r2, r1      @ encoding: [0x52,0xfb,0x11,0xf3]
1949
1950
1951 @------------------------------------------------------------------------------
1952 @ SMUAD/SMUADX
1953 @------------------------------------------------------------------------------
1954         smuad r2, r3, r4
1955         smuadx r3, r2, r1
1956         ite lt
1957         smuadlt r2, r3, r4
1958         smuadxge r3, r2, r1
1959
1960 @ CHECK: smuad  r2, r3, r4              @ encoding: [0x23,0xfb,0x04,0xf2]
1961 @ CHECK: smuadx r3, r2, r1              @ encoding: [0x22,0xfb,0x11,0xf3]
1962 @ CHECK: ite    lt                      @ encoding: [0xb4,0xbf]
1963 @ CHECK: smuadlt        r2, r3, r4      @ encoding: [0x23,0xfb,0x04,0xf2]
1964 @ CHECK: smuadxge       r3, r2, r1      @ encoding: [0x22,0xfb,0x11,0xf3]
1965
1966
1967 @------------------------------------------------------------------------------
1968 @ SMULBB/SMULBT/SMULTB/SMULTT
1969 @------------------------------------------------------------------------------
1970         smulbb r3, r9, r0
1971         smulbt r5, r4, r1
1972         smultb r4, r2, r2
1973         smultt r8, r3, r4
1974         itete ge
1975         smulbbge r1, r9, r0
1976         smulbtlt r5, r6, r4
1977         smultbge r2, r3, r2
1978         smulttlt r8, r3, r4
1979
1980 @ CHECK: smulbb r3, r9, r0              @ encoding: [0x19,0xfb,0x00,0xf3]
1981 @ CHECK: smulbt r5, r4, r1              @ encoding: [0x14,0xfb,0x11,0xf5]
1982 @ CHECK: smultb r4, r2, r2              @ encoding: [0x12,0xfb,0x22,0xf4]
1983 @ CHECK: smultt r8, r3, r4              @ encoding: [0x13,0xfb,0x34,0xf8]
1984 @ CHECK: itete  ge                      @ encoding: [0xab,0xbf]
1985 @ CHECK: smulbbge       r1, r9, r0      @ encoding: [0x19,0xfb,0x00,0xf1]
1986 @ CHECK: smulbtlt       r5, r6, r4      @ encoding: [0x16,0xfb,0x14,0xf5]
1987 @ CHECK: smultbge       r2, r3, r2      @ encoding: [0x13,0xfb,0x22,0xf2]
1988 @ CHECK: smulttlt       r8, r3, r4      @ encoding: [0x13,0xfb,0x34,0xf8]
1989
1990
1991 @------------------------------------------------------------------------------
1992 @ SMULL
1993 @------------------------------------------------------------------------------
1994         smull r3, r9, r0, r1
1995         it eq
1996         smulleq r8, r3, r4, r5
1997
1998 @ CHECK: smull  r3, r9, r0, r1          @ encoding: [0x80,0xfb,0x01,0x39]
1999 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
2000 @ CHECK: smulleq r8, r3, r4, r5         @ encoding: [0x84,0xfb,0x05,0x83]
2001
2002
2003 @------------------------------------------------------------------------------
2004 @ SMULWB/SMULWT
2005 @------------------------------------------------------------------------------
2006         smulwb r3, r9, r0
2007         smulwt r3, r9, r2
2008         ite gt
2009         smulwbgt r3, r9, r0
2010         smulwtle r3, r9, r2
2011
2012 @ CHECK: smulwb r3, r9, r0              @ encoding: [0x39,0xfb,0x00,0xf3]
2013 @ CHECK: smulwt r3, r9, r2              @ encoding: [0x39,0xfb,0x12,0xf3]
2014 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
2015 @ CHECK: smulwbgt       r3, r9, r0      @ encoding: [0x39,0xfb,0x00,0xf3]
2016 @ CHECK: smulwtle       r3, r9, r2      @ encoding: [0x39,0xfb,0x12,0xf3]
2017
2018
2019 @------------------------------------------------------------------------------
2020 @ SMUSD/SMUSDX
2021 @------------------------------------------------------------------------------
2022         smusd r3, r0, r1
2023         smusdx r3, r9, r2
2024         ite eq
2025         smusdeq r8, r3, r2
2026         smusdxne r7, r4, r3
2027
2028 @ CHECK: smusd  r3, r0, r1              @ encoding: [0x40,0xfb,0x01,0xf3]
2029 @ CHECK: smusdx r3, r9, r2              @ encoding: [0x49,0xfb,0x12,0xf3]
2030 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
2031 @ CHECK: smusdeq        r8, r3, r2      @ encoding: [0x43,0xfb,0x02,0xf8]
2032 @ CHECK: smusdxne       r7, r4, r3      @ encoding: [0x44,0xfb,0x13,0xf7]
2033
2034
2035 @------------------------------------------------------------------------------
2036 @ SRS
2037 @------------------------------------------------------------------------------
2038         srsdb sp, #1
2039         srsia sp, #0
2040
2041         srsdb sp!, #19
2042         srsia sp!, #2
2043
2044         srsea sp, #10
2045         srsfd sp, #9
2046
2047         srsea sp!, #5
2048         srsfd sp!, #5
2049
2050         srs sp, #5
2051         srs sp!, #5
2052
2053 @ CHECK: srsdb  sp, #1                  @ encoding: [0x0d,0xe8,0x01,0xc0]
2054 @ CHECK: srsia  sp, #0                  @ encoding: [0x8d,0xe9,0x00,0xc0]
2055 @ CHECK: srsdb  sp!, #19                @ encoding: [0x2d,0xe8,0x13,0xc0]
2056 @ CHECK: srsia  sp!, #2                 @ encoding: [0xad,0xe9,0x02,0xc0]
2057 @ CHECK: srsdb  sp, #10                 @ encoding: [0x0d,0xe8,0x0a,0xc0]
2058 @ CHECK: srsia  sp, #9                  @ encoding: [0x8d,0xe9,0x09,0xc0]
2059 @ CHECK: srsdb  sp!, #5                 @ encoding: [0x2d,0xe8,0x05,0xc0]
2060 @ CHECK: srsia  sp!, #5                 @ encoding: [0xad,0xe9,0x05,0xc0]
2061 @ CHECK: srsia  sp, #5                  @ encoding: [0x8d,0xe9,0x05,0xc0]
2062 @ CHECK: srsia  sp!, #5                 @ encoding: [0xad,0xe9,0x05,0xc0]
2063
2064
2065 @------------------------------------------------------------------------------
2066 @ SSAT
2067 @------------------------------------------------------------------------------
2068         ssat    r8, #1, r10
2069         ssat    r8, #1, r10, lsl #0
2070         ssat    r8, #1, r10, lsl #31
2071         ssat    r8, #1, r10, asr #32
2072         ssat    r8, #1, r10, asr #1
2073
2074 @ CHECK: ssat   r8, #1, r10             @ encoding: [0x0a,0xf3,0x00,0x08]
2075 @ CHECK: ssat   r8, #1, r10             @ encoding: [0x0a,0xf3,0x00,0x08]
2076 @ CHECK: ssat   r8, #1, r10, lsl #31    @ encoding: [0x0a,0xf3,0xc0,0x78]
2077 @ CHECK: ssat   r8, #1, r10, asr #32    @ encoding: [0x2a,0xf3,0x00,0x08]
2078 @ CHECK: ssat   r8, #1, r10, asr #1     @ encoding: [0x2a,0xf3,0x40,0x08]
2079
2080
2081 @------------------------------------------------------------------------------
2082 @ SSAT16
2083 @------------------------------------------------------------------------------
2084         ssat16  r2, #1, r7
2085         ssat16  r3, #16, r5
2086
2087 @ CHECK: ssat16 r2, #1, r7              @ encoding: [0x27,0xf3,0x00,0x02]
2088 @ CHECK: ssat16 r3, #16, r5             @ encoding: [0x25,0xf3,0x0f,0x03]
2089
2090
2091 @------------------------------------------------------------------------------
2092 @ SSAX
2093 @------------------------------------------------------------------------------
2094         ssubaddx r2, r3, r4
2095         it lt
2096         ssubaddxlt r2, r3, r4
2097         ssax r2, r3, r4
2098         it lt
2099         ssaxlt r2, r3, r4
2100
2101 @ CHECK: ssax   r2, r3, r4              @ encoding: [0xe3,0xfa,0x04,0xf2]
2102 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
2103 @ CHECK: ssaxlt r2, r3, r4              @ encoding: [0xe3,0xfa,0x04,0xf2]
2104 @ CHECK: ssax   r2, r3, r4              @ encoding: [0xe3,0xfa,0x04,0xf2]
2105 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
2106 @ CHECK: ssaxlt r2, r3, r4              @ encoding: [0xe3,0xfa,0x04,0xf2]
2107
2108
2109 @------------------------------------------------------------------------------
2110 @ SSUB16/SSUB8
2111 @------------------------------------------------------------------------------
2112         ssub16 r1, r0, r6
2113         ssub8 r9, r2, r4
2114         ite ne
2115         ssub16ne r5, r3, r2
2116         ssub8eq r5, r1, r2
2117
2118 @ CHECK: ssub16 r1, r0, r6              @ encoding: [0xd0,0xfa,0x06,0xf1]
2119 @ CHECK: ssub8  r9, r2, r4              @ encoding: [0xc2,0xfa,0x04,0xf9]
2120 @ CHECK: ite    ne                      @ encoding: [0x14,0xbf]
2121 @ CHECK: ssub16ne       r5, r3, r2      @ encoding: [0xd3,0xfa,0x02,0xf5]
2122 @ CHECK: ssub8eq        r5, r1, r2      @ encoding: [0xc1,0xfa,0x02,0xf5]
2123
2124
2125 @------------------------------------------------------------------------------
2126 @ STMIA
2127 @------------------------------------------------------------------------------
2128         stmia.w r4, {r4, r5, r8, r9}
2129         stmia.w r4, {r5, r6}
2130         stmia.w r5!, {r3, r8}
2131         stm.w r4, {r4, r5, r8, r9}
2132         stm.w r4, {r5, r6}
2133         stm.w r5!, {r3, r8}
2134         stm.w r5!, {r1, r2}
2135         stm.w r2, {r1, r2}
2136
2137         stmia r4, {r4, r5, r8, r9}
2138         stmia r4, {r5, r6}
2139         stmia r5!, {r3, r8}
2140         stm r4, {r4, r5, r8, r9}
2141         stm r4, {r5, r6}
2142         stm r5!, {r3, r8}
2143         stmea r5!, {r3, r8}
2144
2145 @ CHECK: stm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x84,0xe8,0x30,0x03]
2146 @ CHECK: stm.w  r4, {r5, r6}            @ encoding: [0x84,0xe8,0x60,0x00]
2147 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2148 @ CHECK: stm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x84,0xe8,0x30,0x03]
2149 @ CHECK: stm.w  r4, {r5, r6}            @ encoding: [0x84,0xe8,0x60,0x00]
2150 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2151 @ CHECK: stm.w  r5!, {r1, r2}           @ encoding: [0xa5,0xe8,0x06,0x00]
2152 @ CHECK: stm.w  r2, {r1, r2}            @ encoding: [0x82,0xe8,0x06,0x00]
2153
2154 @ CHECK: stm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x84,0xe8,0x30,0x03]
2155 @ CHECK: stm.w  r4, {r5, r6}            @ encoding: [0x84,0xe8,0x60,0x00]
2156 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2157 @ CHECK: stm.w  r4, {r4, r5, r8, r9}    @ encoding: [0x84,0xe8,0x30,0x03]
2158 @ CHECK: stm.w  r4, {r5, r6}            @ encoding: [0x84,0xe8,0x60,0x00]
2159 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2160 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2161
2162
2163 @------------------------------------------------------------------------------
2164 @ STMDB
2165 @------------------------------------------------------------------------------
2166         stmdb r4, {r4, r5, r8, r9}
2167         stmdb r4, {r5, r6}
2168         stmdb r5!, {r3, r8}
2169         stmea r5!, {r3, r8}
2170
2171 @ CHECK: stmdb  r4, {r4, r5, r8, r9}    @ encoding: [0x04,0xe9,0x30,0x03]
2172 @ CHECK: stmdb  r4, {r5, r6}            @ encoding: [0x04,0xe9,0x60,0x00]
2173 @ CHECK: stmdb  r5!, {r3, r8}           @ encoding: [0x25,0xe9,0x08,0x01]
2174 @ CHECK: stm.w  r5!, {r3, r8}           @ encoding: [0xa5,0xe8,0x08,0x01]
2175
2176
2177 @------------------------------------------------------------------------------
2178 @ STR(immediate)
2179 @------------------------------------------------------------------------------
2180         str r5, [r5, #-4]
2181         str r5, [r6, #32]
2182         str r5, [r6, #33]
2183         str r5, [r6, #257]
2184         str.w pc, [r7, #257]
2185         str r2, [r4, #255]!
2186         str r8, [sp, #4]!
2187         str lr, [sp, #-4]!
2188         str r2, [r4], #255
2189         str r8, [sp], #4
2190         str lr, [sp], #-4
2191
2192 @ CHECK: str    r5, [r5, #-4]           @ encoding: [0x45,0xf8,0x04,0x5c]
2193 @ CHECK: str    r5, [r6, #32]           @ encoding: [0x35,0x62]
2194 @ CHECK: str.w  r5, [r6, #33]           @ encoding: [0xc6,0xf8,0x21,0x50]
2195 @ CHECK: str.w  r5, [r6, #257]          @ encoding: [0xc6,0xf8,0x01,0x51]
2196 @ CHECK: str.w  pc, [r7, #257]          @ encoding: [0xc7,0xf8,0x01,0xf1]
2197 @ CHECK: str    r2, [r4, #255]!         @ encoding: [0x44,0xf8,0xff,0x2f]
2198 @ CHECK: str    r8, [sp, #4]!           @ encoding: [0x4d,0xf8,0x04,0x8f]
2199 @ CHECK: str    lr, [sp, #-4]!          @ encoding: [0x4d,0xf8,0x04,0xed]
2200 @ CHECK: str    r2, [r4], #255          @ encoding: [0x44,0xf8,0xff,0x2b]
2201 @ CHECK: str    r8, [sp], #4            @ encoding: [0x4d,0xf8,0x04,0x8b]
2202 @ CHECK: str    lr, [sp], #-4           @ encoding: [0x4d,0xf8,0x04,0xe9]
2203
2204
2205 @------------------------------------------------------------------------------
2206 @ STR(register)
2207 @------------------------------------------------------------------------------
2208         str r1, [r8, r1]
2209         str.w r4, [r5, r2]
2210         str r6, [r0, r2, lsl #3]
2211         str r8, [r8, r2, lsl #2]
2212         str r7, [sp, r2, lsl #1]
2213         str r7, [sp, r2, lsl #0]
2214
2215 @ CHECK: str.w  r1, [r8, r1]            @ encoding: [0x48,0xf8,0x01,0x10]
2216 @ CHECK: str.w  r4, [r5, r2]            @ encoding: [0x45,0xf8,0x02,0x40]
2217 @ CHECK: str.w  r6, [r0, r2, lsl #3]    @ encoding: [0x40,0xf8,0x32,0x60]
2218 @ CHECK: str.w  r8, [r8, r2, lsl #2]    @ encoding: [0x48,0xf8,0x22,0x80]
2219 @ CHECK: str.w  r7, [sp, r2, lsl #1]    @ encoding: [0x4d,0xf8,0x12,0x70]
2220 @ CHECK: str.w  r7, [sp, r2]            @ encoding: [0x4d,0xf8,0x02,0x70]
2221
2222
2223 @------------------------------------------------------------------------------
2224 @ STRB(immediate)
2225 @------------------------------------------------------------------------------
2226         strb r5, [r5, #-4]
2227         strb r5, [r6, #32]
2228         strb r5, [r6, #33]
2229         strb r5, [r6, #257]
2230         strb.w lr, [r7, #257]
2231         strb r5, [r8, #255]!
2232         strb r2, [r5, #4]!
2233         strb r1, [r4, #-4]!
2234         strb lr, [r3], #255
2235         strb r9, [r2], #4
2236         strb r3, [sp], #-4
2237
2238 @ CHECK: strb   r5, [r5, #-4]           @ encoding: [0x05,0xf8,0x04,0x5c]
2239 @ CHECK: strb.w r5, [r6, #32]           @ encoding: [0x86,0xf8,0x20,0x50]
2240 @ CHECK: strb.w r5, [r6, #33]           @ encoding: [0x86,0xf8,0x21,0x50]
2241 @ CHECK: strb.w r5, [r6, #257]          @ encoding: [0x86,0xf8,0x01,0x51]
2242 @ CHECK: strb.w lr, [r7, #257]          @ encoding: [0x87,0xf8,0x01,0xe1]
2243 @ CHECK: strb   r5, [r8, #255]!         @ encoding: [0x08,0xf8,0xff,0x5f]
2244 @ CHECK: strb   r2, [r5, #4]!           @ encoding: [0x05,0xf8,0x04,0x2f]
2245 @ CHECK: strb   r1, [r4, #-4]!          @ encoding: [0x04,0xf8,0x04,0x1d]
2246 @ CHECK: strb   lr, [r3], #255          @ encoding: [0x03,0xf8,0xff,0xeb]
2247 @ CHECK: strb   r9, [r2], #4            @ encoding: [0x02,0xf8,0x04,0x9b]
2248 @ CHECK: strb   r3, [sp], #-4           @ encoding: [0x0d,0xf8,0x04,0x39]
2249
2250
2251 @------------------------------------------------------------------------------
2252 @ STRB(register)
2253 @------------------------------------------------------------------------------
2254         strb r1, [r8, r1]
2255         strb.w r4, [r5, r2]
2256         strb r6, [r0, r2, lsl #3]
2257         strb r8, [r8, r2, lsl #2]
2258         strb r7, [sp, r2, lsl #1]
2259         strb r7, [sp, r2, lsl #0]
2260
2261 @ CHECK: strb.w r1, [r8, r1]            @ encoding: [0x08,0xf8,0x01,0x10]
2262 @ CHECK: strb.w r4, [r5, r2]            @ encoding: [0x05,0xf8,0x02,0x40]
2263 @ CHECK: strb.w r6, [r0, r2, lsl #3]    @ encoding: [0x00,0xf8,0x32,0x60]
2264 @ CHECK: strb.w r8, [r8, r2, lsl #2]    @ encoding: [0x08,0xf8,0x22,0x80]
2265 @ CHECK: strb.w r7, [sp, r2, lsl #1]    @ encoding: [0x0d,0xf8,0x12,0x70]
2266 @ CHECK: strb.w r7, [sp, r2]            @ encoding: [0x0d,0xf8,0x02,0x70]
2267
2268
2269 @------------------------------------------------------------------------------
2270 @ STRBT
2271 @------------------------------------------------------------------------------
2272         strbt r1, [r2]
2273         strbt r1, [r8, #0]
2274         strbt r1, [r8, #3]
2275         strbt r1, [r8, #255]
2276
2277 @ CHECK: strbt  r1, [r2]                @ encoding: [0x02,0xf8,0x00,0x1e]
2278 @ CHECK: strbt  r1, [r8]                @ encoding: [0x08,0xf8,0x00,0x1e]
2279 @ CHECK: strbt  r1, [r8, #3]            @ encoding: [0x08,0xf8,0x03,0x1e]
2280 @ CHECK: strbt  r1, [r8, #255]          @ encoding: [0x08,0xf8,0xff,0x1e]
2281
2282
2283 @------------------------------------------------------------------------------
2284 @ STRD
2285 @------------------------------------------------------------------------------
2286         strd r3, r5, [r6, #24]
2287         strd r3, r5, [r6, #24]!
2288         strd r3, r5, [r6], #4
2289         strd r3, r5, [r6], #-8
2290         strd r3, r5, [r6]
2291         strd r8, r1, [r3, #0]
2292
2293 @ CHECK: strd   r3, r5, [r6, #24]       @ encoding: [0xc6,0xe9,0x06,0x35]
2294 @ CHECK: strd   r3, r5, [r6, #24]!      @ encoding: [0xe6,0xe9,0x06,0x35]
2295 @ CHECK: strd   r3, r5, [r6], #4        @ encoding: [0xe6,0xe8,0x01,0x35]
2296 @ CHECK: strd   r3, r5, [r6], #-8       @ encoding: [0x66,0xe8,0x02,0x35]
2297 @ CHECK: strd   r3, r5, [r6]            @ encoding: [0xc6,0xe9,0x00,0x35]
2298 @ CHECK: strd   r8, r1, [r3]            @ encoding: [0xc3,0xe9,0x00,0x81]
2299
2300
2301 @------------------------------------------------------------------------------
2302 @ STREX/STREXB/STREXH/STREXD
2303 @------------------------------------------------------------------------------
2304         strex r1, r8, [r4]
2305         strex r8, r2, [r4, #0]
2306         strex r2, r12, [sp, #128]
2307         strexb r5, r1, [r7]
2308         strexh r9, r7, [r12]
2309         strexd r9, r3, r6, [r4]
2310
2311 @ CHECK: strex  r1, r8, [r4]            @ encoding: [0x44,0xe8,0x00,0x81]
2312 @ CHECK: strex  r8, r2, [r4]            @ encoding: [0x44,0xe8,0x00,0x28]
2313 @ CHECK: strex  r2, r12, [sp, #128]     @ encoding: [0x4d,0xe8,0x20,0xc2]
2314 @ CHECK: strexb r5, r1, [r7]            @ encoding: [0xc7,0xe8,0x45,0x1f]
2315 @ CHECK: strexh r9, r7, [r12]           @ encoding: [0xcc,0xe8,0x59,0x7f]
2316 @ CHECK: strexd r9, r3, r6, [r4]        @ encoding: [0xc4,0xe8,0x79,0x36]
2317
2318
2319 @------------------------------------------------------------------------------
2320 @ STRH(immediate)
2321 @------------------------------------------------------------------------------
2322         strh r5, [r5, #-4]
2323         strh r5, [r6, #32]
2324         strh r5, [r6, #33]
2325         strh r5, [r6, #257]
2326         strh.w lr, [r7, #257]
2327         strh r5, [r8, #255]!
2328         strh r2, [r5, #4]!
2329         strh r1, [r4, #-4]!
2330         strh lr, [r3], #255
2331         strh r9, [r2], #4
2332         strh r3, [sp], #-4
2333
2334 @ CHECK: strh   r5, [r5, #-4]           @ encoding: [0x25,0xf8,0x04,0x5c]
2335 @ CHECK: strh   r5, [r6, #32]           @ encoding: [0x35,0x84]
2336 @ CHECK: strh.w r5, [r6, #33]           @ encoding: [0xa6,0xf8,0x21,0x50]
2337 @ CHECK: strh.w r5, [r6, #257]          @ encoding: [0xa6,0xf8,0x01,0x51]
2338 @ CHECK: strh.w lr, [r7, #257]          @ encoding: [0xa7,0xf8,0x01,0xe1]
2339 @ CHECK: strh   r5, [r8, #255]!         @ encoding: [0x28,0xf8,0xff,0x5f]
2340 @ CHECK: strh   r2, [r5, #4]!           @ encoding: [0x25,0xf8,0x04,0x2f]
2341 @ CHECK: strh   r1, [r4, #-4]!          @ encoding: [0x24,0xf8,0x04,0x1d]
2342 @ CHECK: strh   lr, [r3], #255          @ encoding: [0x23,0xf8,0xff,0xeb]
2343 @ CHECK: strh   r9, [r2], #4            @ encoding: [0x22,0xf8,0x04,0x9b]
2344 @ CHECK: strh   r3, [sp], #-4           @ encoding: [0x2d,0xf8,0x04,0x39]
2345
2346
2347 @------------------------------------------------------------------------------
2348 @ STRH(register)
2349 @------------------------------------------------------------------------------
2350         strh r1, [r8, r1]
2351         strh.w r4, [r5, r2]
2352         strh r6, [r0, r2, lsl #3]
2353         strh r8, [r8, r2, lsl #2]
2354         strh r7, [sp, r2, lsl #1]
2355         strh r7, [sp, r2, lsl #0]
2356
2357 @ CHECK: strh.w r1, [r8, r1]            @ encoding: [0x28,0xf8,0x01,0x10]
2358 @ CHECK: strh.w r4, [r5, r2]            @ encoding: [0x25,0xf8,0x02,0x40]
2359 @ CHECK: strh.w r6, [r0, r2, lsl #3]    @ encoding: [0x20,0xf8,0x32,0x60]
2360 @ CHECK: strh.w r8, [r8, r2, lsl #2]    @ encoding: [0x28,0xf8,0x22,0x80]
2361 @ CHECK: strh.w r7, [sp, r2, lsl #1]    @ encoding: [0x2d,0xf8,0x12,0x70]
2362 @ CHECK: strh.w r7, [sp, r2]            @ encoding: [0x2d,0xf8,0x02,0x70]
2363
2364
2365 @------------------------------------------------------------------------------
2366 @ STRHT
2367 @------------------------------------------------------------------------------
2368         strht r1, [r2]
2369         strht r1, [r8, #0]
2370         strht r1, [r8, #3]
2371         strht r1, [r8, #255]
2372
2373 @ CHECK: strht  r1, [r2]                @ encoding: [0x22,0xf8,0x00,0x1e]
2374 @ CHECK: strht  r1, [r8]                @ encoding: [0x28,0xf8,0x00,0x1e]
2375 @ CHECK: strht  r1, [r8, #3]            @ encoding: [0x28,0xf8,0x03,0x1e]
2376 @ CHECK: strht  r1, [r8, #255]          @ encoding: [0x28,0xf8,0xff,0x1e]
2377
2378
2379 @------------------------------------------------------------------------------
2380 @ STRT
2381 @------------------------------------------------------------------------------
2382         strt r1, [r2]
2383         strt r1, [r8, #0]
2384         strt r1, [r8, #3]
2385         strt r1, [r8, #255]
2386
2387 @ CHECK: strt   r1, [r2]                @ encoding: [0x42,0xf8,0x00,0x1e]
2388 @ CHECK: strt   r1, [r8]                @ encoding: [0x48,0xf8,0x00,0x1e]
2389 @ CHECK: strt   r1, [r8, #3]            @ encoding: [0x48,0xf8,0x03,0x1e]
2390 @ CHECK: strt   r1, [r8, #255]          @ encoding: [0x48,0xf8,0xff,0x1e]
2391
2392
2393 @------------------------------------------------------------------------------
2394 @ SUB (immediate)
2395 @------------------------------------------------------------------------------
2396         itet eq
2397         subeq r1, r2, #4
2398         subwne r5, r3, #1023
2399         subeq r4, r5, #293
2400         sub r2, sp, #1024
2401         sub r2, r8, #0xff00
2402         sub r2, r3, #257
2403         subw r2, r3, #257
2404         sub r12, r6, #0x100
2405         subw r12, r6, #0x100
2406         subs r1, r2, #0x1f0
2407
2408 @ CHECK: itet   eq                      @ encoding: [0x0a,0xbf]
2409 @ CHECK: subeq  r1, r2, #4              @ encoding: [0x11,0x1f]
2410 @ CHECK: subwne r5, r3, #1023           @ encoding: [0xa3,0xf2,0xff,0x35]
2411 @ CHECK: subweq r4, r5, #293            @ encoding: [0xa5,0xf2,0x25,0x14]
2412 @ CHECK: sub.w  r2, sp, #1024           @ encoding: [0xad,0xf5,0x80,0x62]
2413 @ CHECK: sub.w  r2, r8, #65280          @ encoding: [0xa8,0xf5,0x7f,0x42]
2414 @ CHECK: subw   r2, r3, #257            @ encoding: [0xa3,0xf2,0x01,0x12]
2415 @ CHECK: subw   r2, r3, #257            @ encoding: [0xa3,0xf2,0x01,0x12]
2416 @ CHECK: sub.w  r12, r6, #256           @ encoding: [0xa6,0xf5,0x80,0x7c]
2417 @ CHECK: subw   r12, r6, #256           @ encoding: [0xa6,0xf2,0x00,0x1c]
2418 @ CHECK: subs.w r1, r2, #496            @ encoding: [0xb2,0xf5,0xf8,0x71]
2419
2420
2421 @------------------------------------------------------------------------------
2422 @ SUB (register)
2423 @------------------------------------------------------------------------------
2424         sub r4, r5, r6
2425         sub r4, r5, r6, lsl #5
2426         sub r4, r5, r6, lsr #5
2427         sub.w r4, r5, r6, lsr #5
2428         sub r4, r5, r6, asr #5
2429         sub r4, r5, r6, ror #5
2430         sub.w r5, r2, r12, rrx
2431
2432 @ CHECK: sub.w  r4, r5, r6              @ encoding: [0xa5,0xeb,0x06,0x04]
2433 @ CHECK: sub.w  r4, r5, r6, lsl #5      @ encoding: [0xa5,0xeb,0x46,0x14]
2434 @ CHECK: sub.w  r4, r5, r6, lsr #5      @ encoding: [0xa5,0xeb,0x56,0x14]
2435 @ CHECK: sub.w  r4, r5, r6, lsr #5      @ encoding: [0xa5,0xeb,0x56,0x14]
2436 @ CHECK: sub.w  r4, r5, r6, asr #5      @ encoding: [0xa5,0xeb,0x66,0x14]
2437 @ CHECK: sub.w  r4, r5, r6, ror #5      @ encoding: [0xa5,0xeb,0x76,0x14]
2438 @ CHECK: sub.w r5, r2, r12, rrx         @ encoding: [0xa2,0xeb,0x3c,0x05]
2439
2440
2441 @------------------------------------------------------------------------------
2442 @ SVC
2443 @------------------------------------------------------------------------------
2444         svc #0
2445         ite eq
2446         svceq #255
2447         swine #33
2448
2449 @ CHECK: svc    #0                      @ encoding: [0x00,0xdf]
2450 @ CHECK: ite    eq                      @ encoding: [0x0c,0xbf]
2451 @ CHECK: svceq  #255                    @ encoding: [0xff,0xdf]
2452 @ CHECK: svcne  #33                     @ encoding: [0x21,0xdf]
2453
2454
2455 @------------------------------------------------------------------------------
2456 @ SXTAB
2457 @------------------------------------------------------------------------------
2458         sxtab r2, r3, r4
2459         sxtab r4, r5, r6, ror #0
2460         it lt
2461         sxtablt r6, r2, r9, ror #8
2462         sxtab r5, r1, r4, ror #16
2463         sxtab r7, r8, r3, ror #24
2464
2465 @ CHECK: sxtab  r2, r3, r4              @ encoding: [0x43,0xfa,0x84,0xf2]
2466 @ CHECK: sxtab  r4, r5, r6              @ encoding: [0x45,0xfa,0x86,0xf4]
2467 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
2468 @ CHECK: sxtablt r6, r2, r9, ror #8     @ encoding: [0x42,0xfa,0x99,0xf6]
2469 @ CHECK: sxtab  r5, r1, r4, ror #16     @ encoding: [0x41,0xfa,0xa4,0xf5]
2470 @ CHECK: sxtab  r7, r8, r3, ror #24     @ encoding: [0x48,0xfa,0xb3,0xf7]
2471
2472
2473 @------------------------------------------------------------------------------
2474 @ SXTAB16
2475 @------------------------------------------------------------------------------
2476         sxtab16 r6, r2, r7, ror #0
2477         sxtab16 r3, r5, r8, ror #8
2478         sxtab16 r3, r2, r1, ror #16
2479         ite ne
2480         sxtab16ne r0, r1, r4
2481         sxtab16eq r1, r2, r3, ror #24
2482
2483 @ CHECK: sxtab16 r6, r2, r7             @ encoding: [0x22,0xfa,0x87,0xf6]
2484 @ CHECK: sxtab16 r3, r5, r8, ror #8     @ encoding: [0x25,0xfa,0x98,0xf3]
2485 @ CHECK: sxtab16 r3, r2, r1, ror #16    @ encoding: [0x22,0xfa,0xa1,0xf3]
2486 @ CHECK: ite    ne                      @ encoding: [0x14,0xbf]
2487 @ CHECK: sxtab16ne r0, r1, r4           @ encoding: [0x21,0xfa,0x84,0xf0]
2488 @ CHECK: sxtab16eq r1, r2, r3, ror #24  @ encoding: [0x22,0xfa,0xb3,0xf1]
2489
2490
2491 @------------------------------------------------------------------------------
2492 @ SXTAH
2493 @------------------------------------------------------------------------------
2494         sxtah r1, r3, r9
2495         sxtah r3, r8, r3, ror #8
2496         sxtah r9, r3, r3, ror #24
2497         ite hi
2498         sxtahhi r6, r1, r6, ror #0
2499         sxtahls r2, r2, r4, ror #16
2500
2501 @ CHECK: sxtah  r1, r3, r9              @ encoding: [0x03,0xfa,0x89,0xf1]
2502 @ CHECK: sxtah  r3, r8, r3, ror #8      @ encoding: [0x08,0xfa,0x93,0xf3]
2503 @ CHECK: sxtah  r9, r3, r3, ror #24     @ encoding: [0x03,0xfa,0xb3,0xf9]
2504 @ CHECK: ite    hi                      @ encoding: [0x8c,0xbf]
2505 @ CHECK: sxtahhi r6, r1, r6             @ encoding: [0x01,0xfa,0x86,0xf6]
2506 @ CHECK: sxtahls r2, r2, r4, ror #16    @ encoding: [0x02,0xfa,0xa4,0xf2]
2507
2508
2509 @------------------------------------------------------------------------------
2510 @ SXTB
2511 @------------------------------------------------------------------------------
2512         sxtb r5, r6, ror #0
2513         sxtb r6, r9, ror #8
2514         sxtb r8, r3, ror #24
2515         ite ge
2516         sxtbge r2, r4
2517         sxtblt r5, r1, ror #16
2518
2519 @ CHECK: sxtb   r5, r6                  @ encoding: [0x75,0xb2]
2520 @ CHECK: sxtb.w r6, r9, ror #8          @ encoding: [0x4f,0xfa,0x99,0xf6]
2521 @ CHECK: sxtb.w r8, r3, ror #24         @ encoding: [0x4f,0xfa,0xb3,0xf8]
2522 @ CHECK: ite    ge                      @ encoding: [0xac,0xbf]
2523 @ CHECK: sxtbge r2, r4                  @ encoding: [0x62,0xb2]
2524 @ CHECK: sxtblt.w       r5, r1, ror #16 @ encoding: [0x4f,0xfa,0xa1,0xf5]
2525
2526
2527 @------------------------------------------------------------------------------
2528 @ SXTB16
2529 @------------------------------------------------------------------------------
2530         sxtb16 r1, r4
2531         sxtb16 r6, r7, ror #0
2532         sxtb16 r3, r1, ror #16
2533         ite cs
2534         sxtb16cs r3, r5, ror #8
2535         sxtb16lo r2, r3, ror #24
2536
2537 @ CHECK: sxtb16 r1, r4                  @ encoding: [0x2f,0xfa,0x84,0xf1]
2538 @ CHECK: sxtb16 r6, r7                  @ encoding: [0x2f,0xfa,0x87,0xf6]
2539 @ CHECK: sxtb16 r3, r1, ror #16         @ encoding: [0x2f,0xfa,0xa1,0xf3]
2540 @ CHECK: ite    hs                      @ encoding: [0x2c,0xbf]
2541 @ CHECK: sxtb16hs       r3, r5, ror #8  @ encoding: [0x2f,0xfa,0x95,0xf3]
2542 @ CHECK: sxtb16lo       r2, r3, ror #24 @ encoding: [0x2f,0xfa,0xb3,0xf2]
2543
2544
2545 @------------------------------------------------------------------------------
2546 @ SXTH
2547 @------------------------------------------------------------------------------
2548         sxth r1, r6, ror #0
2549         sxth r3, r8, ror #8
2550         sxth r9, r3, ror #24
2551         itt ne
2552         sxthne r3, r9
2553         sxthne r2, r2, ror #16
2554
2555 @ CHECK: sxth   r1, r6                  @ encoding: [0x31,0xb2]
2556 @ CHECK: sxth.w r3, r8, ror #8          @ encoding: [0x0f,0xfa,0x98,0xf3]
2557 @ CHECK: sxth.w r9, r3, ror #24         @ encoding: [0x0f,0xfa,0xb3,0xf9]
2558 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
2559 @ CHECK: sxthne.w       r3, r9          @ encoding: [0x0f,0xfa,0x89,0xf3]
2560 @ CHECK: sxthne.w       r2, r2, ror #16 @ encoding: [0x0f,0xfa,0xa2,0xf2]
2561
2562
2563 @------------------------------------------------------------------------------
2564 @ SXTB
2565 @------------------------------------------------------------------------------
2566         sxtb r5, r6, ror #0
2567         sxtb.w r6, r9, ror #8
2568         sxtb r8, r3, ror #24
2569         ite ge
2570         sxtbge r2, r4
2571         sxtblt r5, r1, ror #16
2572
2573 @ CHECK: sxtb   r5, r6                  @ encoding: [0x75,0xb2]
2574 @ CHECK: sxtb.w r6, r9, ror #8          @ encoding: [0x4f,0xfa,0x99,0xf6]
2575 @ CHECK: sxtb.w r8, r3, ror #24         @ encoding: [0x4f,0xfa,0xb3,0xf8]
2576 @ CHECK: ite    ge                      @ encoding: [0xac,0xbf]
2577 @ CHECK: sxtbge r2, r4                  @ encoding: [0x62,0xb2]
2578 @ CHECK: sxtblt.w       r5, r1, ror #16 @ encoding: [0x4f,0xfa,0xa1,0xf5]
2579
2580
2581 @------------------------------------------------------------------------------
2582 @ SXTB16
2583 @------------------------------------------------------------------------------
2584         sxtb16 r1, r4
2585         sxtb16 r6, r7, ror #0
2586         sxtb16 r3, r1, ror #16
2587         ite cs
2588         sxtb16cs r3, r5, ror #8
2589         sxtb16lo r2, r3, ror #24
2590
2591 @ CHECK: sxtb16 r1, r4                  @ encoding: [0x2f,0xfa,0x84,0xf1]
2592 @ CHECK: sxtb16 r6, r7                  @ encoding: [0x2f,0xfa,0x87,0xf6]
2593 @ CHECK: sxtb16 r3, r1, ror #16         @ encoding: [0x2f,0xfa,0xa1,0xf3]
2594 @ CHECK: ite    hs                      @ encoding: [0x2c,0xbf]
2595 @ CHECK: sxtb16hs       r3, r5, ror #8  @ encoding: [0x2f,0xfa,0x95,0xf3]
2596 @ CHECK: sxtb16lo       r2, r3, ror #24 @ encoding: [0x2f,0xfa,0xb3,0xf2]
2597
2598
2599 @------------------------------------------------------------------------------
2600 @ SXTH
2601 @------------------------------------------------------------------------------
2602         sxth r1, r6, ror #0
2603         sxth.w r3, r8, ror #8
2604         sxth r9, r3, ror #24
2605         itt ne
2606         sxthne r3, r9
2607         sxthne r2, r2, ror #16
2608
2609 @ CHECK: sxth   r1, r6                  @ encoding: [0x31,0xb2]
2610 @ CHECK: sxth.w r3, r8, ror #8          @ encoding: [0x0f,0xfa,0x98,0xf3]
2611 @ CHECK: sxth.w r9, r3, ror #24         @ encoding: [0x0f,0xfa,0xb3,0xf9]
2612 @ CHECK: itt    ne                      @ encoding: [0x1c,0xbf]
2613 @ CHECK: sxthne.w       r3, r9          @ encoding: [0x0f,0xfa,0x89,0xf3]
2614 @ CHECK: sxthne.w       r2, r2, ror #16 @ encoding: [0x0f,0xfa,0xa2,0xf2]
2615
2616
2617 @------------------------------------------------------------------------------
2618 @ TBB/TBH
2619 @------------------------------------------------------------------------------
2620         tbb [r3, r8]
2621         tbh [r3, r8, lsl #1]
2622         it eq
2623         tbbeq [r3, r8]
2624         it cs
2625         tbhcs [r3, r8, lsl #1]
2626
2627 @ CHECK: tbb    [r3, r8]                @ encoding: [0xd3,0xe8,0x08,0xf0]
2628 @ CHECK: tbh    [r3, r8, lsl #1]        @ encoding: [0xd3,0xe8,0x18,0xf0]
2629 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
2630 @ CHECK: tbbeq  [r3, r8]                @ encoding: [0xd3,0xe8,0x08,0xf0]
2631 @ CHECK: it     hs                      @ encoding: [0x28,0xbf]
2632 @ CHECK: tbhhs  [r3, r8, lsl #1]        @ encoding: [0xd3,0xe8,0x18,0xf0]
2633
2634
2635 @------------------------------------------------------------------------------
2636 @ TEQ
2637 @------------------------------------------------------------------------------
2638         teq r5, #0xf000
2639         teq r4, r5
2640         teq r4, r5, lsl #5
2641         teq r4, r5, lsr #5
2642         teq r4, r5, lsr #5
2643         teq r4, r5, asr #5
2644         teq r4, r5, ror #5
2645
2646 @ CHECK: teq.w  r5, #61440              @ encoding: [0x95,0xf4,0x70,0x4f]
2647 @ CHECK: teq.w  r4, r5                  @ encoding: [0x94,0xea,0x05,0x0f]
2648 @ CHECK: teq.w  r4, r5, lsl #5          @ encoding: [0x94,0xea,0x45,0x1f]
2649 @ CHECK: teq.w  r4, r5, lsr #5          @ encoding: [0x94,0xea,0x55,0x1f]
2650 @ CHECK: teq.w  r4, r5, lsr #5          @ encoding: [0x94,0xea,0x55,0x1f]
2651 @ CHECK: teq.w  r4, r5, asr #5          @ encoding: [0x94,0xea,0x65,0x1f]
2652 @ CHECK: teq.w  r4, r5, ror #5          @ encoding: [0x94,0xea,0x75,0x1f]
2653
2654
2655 @------------------------------------------------------------------------------
2656 @ TST
2657 @------------------------------------------------------------------------------
2658         tst r5, #0xf000
2659         tst r2, r5
2660         tst r3, r12, lsl #5
2661         tst r4, r11, lsr #4
2662         tst r5, r10, lsr #12
2663         tst r6, r9, asr #30
2664         tst r7, r8, ror #2
2665
2666 @ CHECK: tst.w  r5, #61440              @ encoding: [0x15,0xf4,0x70,0x4f]
2667 @ CHECK: tst    r2, r5                  @ encoding: [0x2a,0x42]
2668 @ CHECK: tst.w  r3, r12, lsl #5         @ encoding: [0x13,0xea,0x4c,0x1f]
2669 @ CHECK: tst.w  r4, r11, lsr #4         @ encoding: [0x14,0xea,0x1b,0x1f]
2670 @ CHECK: tst.w  r5, r10, lsr #12        @ encoding: [0x15,0xea,0x1a,0x3f]
2671 @ CHECK: tst.w  r6, r9, asr #30         @ encoding: [0x16,0xea,0xa9,0x7f]
2672 @ CHECK: tst.w  r7, r8, ror #2          @ encoding: [0x17,0xea,0xb8,0x0f]
2673
2674
2675 @------------------------------------------------------------------------------
2676 @ UADD16/UADD8
2677 @------------------------------------------------------------------------------
2678         uadd16 r1, r2, r3
2679         uadd8 r1, r2, r3
2680         ite gt
2681         uadd16gt r1, r2, r3
2682         uadd8le r1, r2, r3
2683
2684 @ CHECK: uadd16 r1, r2, r3              @ encoding: [0x92,0xfa,0x43,0xf1]
2685 @ CHECK: uadd8  r1, r2, r3              @ encoding: [0x82,0xfa,0x43,0xf1]
2686 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
2687 @ CHECK: uadd16gt       r1, r2, r3      @ encoding: [0x92,0xfa,0x43,0xf1]
2688 @ CHECK: uadd8le        r1, r2, r3      @ encoding: [0x82,0xfa,0x43,0xf1]
2689
2690
2691 @------------------------------------------------------------------------------
2692 @ UASX
2693 @------------------------------------------------------------------------------
2694         uasx r9, r12, r0
2695         it eq
2696         uasxeq r9, r12, r0
2697         uaddsubx r9, r12, r0
2698         it eq
2699         uaddsubxeq r9, r12, r0
2700
2701 @ CHECK: uasx   r9, r12, r0             @ encoding: [0xac,0xfa,0x40,0xf9]
2702 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
2703 @ CHECK: uasxeq r9, r12, r0             @ encoding: [0xac,0xfa,0x40,0xf9]
2704 @ CHECK: uasx   r9, r12, r0             @ encoding: [0xac,0xfa,0x40,0xf9]
2705 @ CHECK: it     eq                      @ encoding: [0x08,0xbf]
2706 @ CHECK: uasxeq r9, r12, r0             @ encoding: [0xac,0xfa,0x40,0xf9]
2707
2708
2709 @------------------------------------------------------------------------------
2710 @ UBFX
2711 @------------------------------------------------------------------------------
2712         ubfx r4, r5, #16, #1
2713         it gt
2714         ubfxgt r4, r5, #16, #16
2715
2716 @ CHECK: ubfx   r4, r5, #16, #1         @ encoding: [0xc5,0xf3,0x00,0x44]
2717 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
2718 @ CHECK: ubfxgt r4, r5, #16, #16        @ encoding: [0xc5,0xf3,0x0f,0x44]
2719
2720
2721 @------------------------------------------------------------------------------
2722 @ UHADD16/UHADD8
2723 @------------------------------------------------------------------------------
2724         uhadd16 r4, r8, r2
2725         uhadd8 r4, r8, r2
2726         itt gt
2727         uhadd16gt r4, r8, r2
2728         uhadd8gt r4, r8, r2
2729
2730 @ CHECK: uhadd16        r4, r8, r2      @ encoding: [0x98,0xfa,0x62,0xf4]
2731 @ CHECK: uhadd8 r4, r8, r2              @ encoding: [0x88,0xfa,0x62,0xf4]
2732 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
2733 @ CHECK: uhadd16gt      r4, r8, r2      @ encoding: [0x98,0xfa,0x62,0xf4]
2734 @ CHECK: uhadd8gt       r4, r8, r2      @ encoding: [0x88,0xfa,0x62,0xf4]
2735
2736
2737 @------------------------------------------------------------------------------
2738 @ UHASX/UHSAX
2739 @------------------------------------------------------------------------------
2740         uhasx r4, r1, r5
2741         uhsax r5, r6, r6
2742         itt gt
2743         uhasxgt r6, r9, r8
2744         uhsaxgt r7, r8, r12
2745         uhaddsubx r4, r1, r5
2746         uhsubaddx r5, r6, r6
2747         itt gt
2748         uhaddsubxgt r6, r9, r8
2749         uhsubaddxgt r7, r8, r12
2750
2751 @ CHECK: uhasx  r4, r1, r5              @ encoding: [0xa1,0xfa,0x65,0xf4]
2752 @ CHECK: uhsax  r5, r6, r6              @ encoding: [0xe6,0xfa,0x66,0xf5]
2753 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
2754 @ CHECK: uhasxgt r6, r9, r8             @ encoding: [0xa9,0xfa,0x68,0xf6]
2755 @ CHECK: uhsaxgt r7, r8, r12            @ encoding: [0xe8,0xfa,0x6c,0xf7]
2756 @ CHECK: uhasx  r4, r1, r5              @ encoding: [0xa1,0xfa,0x65,0xf4]
2757 @ CHECK: uhsax  r5, r6, r6              @ encoding: [0xe6,0xfa,0x66,0xf5]
2758 @ CHECK: itt    gt                      @ encoding: [0xc4,0xbf]
2759 @ CHECK: uhasxgt r6, r9, r8             @ encoding: [0xa9,0xfa,0x68,0xf6]
2760 @ CHECK: uhsaxgt r7, r8, r12            @ encoding: [0xe8,0xfa,0x6c,0xf7]
2761
2762
2763 @------------------------------------------------------------------------------
2764 @ UHSUB16/UHSUB8
2765 @------------------------------------------------------------------------------
2766         uhsub16 r5, r8, r3
2767         uhsub8 r1, r7, r6
2768         itt lt
2769         uhsub16lt r4, r9, r12
2770         uhsub8lt r3, r1, r5
2771
2772 @ CHECK: uhsub16        r5, r8, r3      @ encoding: [0xd8,0xfa,0x63,0xf5]
2773 @ CHECK: uhsub8 r1, r7, r6              @ encoding: [0xc7,0xfa,0x66,0xf1]
2774 @ CHECK: itt    lt                      @ encoding: [0xbc,0xbf]
2775 @ CHECK: uhsub16lt      r4, r9, r12     @ encoding: [0xd9,0xfa,0x6c,0xf4]
2776 @ CHECK: uhsub8lt       r3, r1, r5      @ encoding: [0xc1,0xfa,0x65,0xf3]
2777
2778
2779 @------------------------------------------------------------------------------
2780 @ UMAAL
2781 @------------------------------------------------------------------------------
2782         umaal r3, r4, r5, r6
2783         it lt
2784         umaallt r3, r4, r5, r6
2785
2786 @ CHECK: umaal  r3, r4, r5, r6          @ encoding: [0xe5,0xfb,0x66,0x34]
2787 @ CHECK: it     lt                      @ encoding: [0xb8,0xbf]
2788 @ CHECK: umaallt        r3, r4, r5, r6  @ encoding: [0xe5,0xfb,0x66,0x34]
2789
2790
2791 @------------------------------------------------------------------------------
2792 @ UMLAL
2793 @------------------------------------------------------------------------------
2794         umlal r2, r4, r6, r8
2795         it gt
2796         umlalgt r6, r1, r2, r6
2797
2798 @ CHECK: umlal  r2, r4, r6, r8          @ encoding: [0xe6,0xfb,0x08,0x24]
2799 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
2800 @ CHECK: umlalgt        r6, r1, r2, r6  @ encoding: [0xe2,0xfb,0x06,0x61]
2801
2802
2803 @------------------------------------------------------------------------------
2804 @ UMULL
2805 @------------------------------------------------------------------------------
2806         umull r2, r4, r6, r8
2807         it gt
2808         umullgt r6, r1, r2, r6
2809
2810 @ CHECK: umull  r2, r4, r6, r8          @ encoding: [0xa6,0xfb,0x08,0x24]
2811 @ CHECK: it     gt                      @ encoding: [0xc8,0xbf]
2812 @ CHECK: umullgt        r6, r1, r2, r6  @ encoding: [0xa2,0xfb,0x06,0x61]
2813
2814
2815 @------------------------------------------------------------------------------
2816 @ UQADD16/UQADD8
2817 @------------------------------------------------------------------------------
2818         uqadd16 r1, r2, r3
2819         uqadd8 r3, r4, r8
2820         ite gt
2821         uqadd16gt r4, r7, r9
2822         uqadd8le r8, r1, r2
2823
2824 @ CHECK: uqadd16        r1, r2, r3      @ encoding: [0x92,0xfa,0x53,0xf1]
2825 @ CHECK: uqadd8 r3, r4, r8              @ encoding: [0x84,0xfa,0x58,0xf3]
2826 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
2827 @ CHECK: uqadd16gt      r4, r7, r9      @ encoding: [0x97,0xfa,0x59,0xf4]
2828 @ CHECK: uqadd8le       r8, r1, r2      @ encoding: [0x81,0xfa,0x52,0xf8]
2829
2830
2831 @------------------------------------------------------------------------------
2832 @ UQASX/UQSAX
2833 @------------------------------------------------------------------------------
2834         uqasx r1, r2, r3
2835         uqsax r3, r4, r8
2836         ite gt
2837         uqasxgt r4, r7, r9
2838         uqsaxle r8, r1, r2
2839
2840         uqaddsubx r1, r2, r3
2841         uqsubaddx r3, r4, r8
2842         ite gt
2843         uqaddsubxgt r4, r7, r9
2844         uqsubaddxle r8, r1, r2
2845
2846 @ CHECK: uqasx  r1, r2, r3              @ encoding: [0xa2,0xfa,0x53,0xf1]
2847 @ CHECK: uqsax  r3, r4, r8              @ encoding: [0xe4,0xfa,0x58,0xf3]
2848 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
2849 @ CHECK: uqasxgt r4, r7, r9             @ encoding: [0xa7,0xfa,0x59,0xf4]
2850 @ CHECK: uqsaxle r8, r1, r2             @ encoding: [0xe1,0xfa,0x52,0xf8]
2851
2852 @ CHECK: uqasx  r1, r2, r3              @ encoding: [0xa2,0xfa,0x53,0xf1]
2853 @ CHECK: uqsax  r3, r4, r8              @ encoding: [0xe4,0xfa,0x58,0xf3]
2854 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
2855 @ CHECK: uqasxgt r4, r7, r9             @ encoding: [0xa7,0xfa,0x59,0xf4]
2856 @ CHECK: uqsaxle r8, r1, r2             @ encoding: [0xe1,0xfa,0x52,0xf8]
2857
2858
2859 @------------------------------------------------------------------------------
2860 @ UQSUB16/UQSUB8
2861 @------------------------------------------------------------------------------
2862         uqsub8 r8, r2, r9
2863         uqsub16 r1, r9, r7
2864         ite gt
2865         uqsub8gt r3, r1, r6
2866         uqsub16le r4, r6, r4
2867
2868 @ CHECK: uqsub8 r8, r2, r9              @ encoding: [0xc2,0xfa,0x59,0xf8]
2869 @ CHECK: uqsub16 r1, r9, r7             @ encoding: [0xd9,0xfa,0x57,0xf1]
2870 @ CHECK: ite    gt                      @ encoding: [0xcc,0xbf]
2871 @ CHECK: uqsub8gt       r3, r1, r6      @ encoding: [0xc1,0xfa,0x56,0xf3]
2872 @ CHECK: uqsub16le      r4, r6, r4      @ encoding: [0xd6,0xfa,0x54,0xf4]