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