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