2005-07-29 Paul Brook <paul@codesourcery.com>
[binutils.git] / gas / testsuite / gas / arm / thumb32.s
blob5189ef06e68afbb381089d19981d45d1b2ea0130
1 .text
2 .thumb
3 .syntax unified
5 encode_thumb32_immediate:
6 orr r0, r1, #0x00000000
7 orr r0, r1, #0x000000a5
8 orr r0, r1, #0x00a500a5
9 orr r0, r1, #0xa500a500
10 orr r0, r1, #0xa5a5a5a5
12 orr r0, r1, #0xa5 << 31
13 orr r0, r1, #0xa5 << 30
14 orr r0, r1, #0xa5 << 29
15 orr r0, r1, #0xa5 << 28
16 orr r0, r1, #0xa5 << 27
17 orr r0, r1, #0xa5 << 26
18 orr r0, r1, #0xa5 << 25
19 orr r0, r1, #0xa5 << 24
20 orr r0, r1, #0xa5 << 23
21 orr r0, r1, #0xa5 << 22
22 orr r0, r1, #0xa5 << 21
23 orr r0, r1, #0xa5 << 20
24 orr r0, r1, #0xa5 << 19
25 orr r0, r1, #0xa5 << 18
26 orr r0, r1, #0xa5 << 17
27 orr r0, r1, #0xa5 << 16
28 orr r0, r1, #0xa5 << 15
29 orr r0, r1, #0xa5 << 14
30 orr r0, r1, #0xa5 << 13
31 orr r0, r1, #0xa5 << 12
32 orr r0, r1, #0xa5 << 11
33 orr r0, r1, #0xa5 << 10
34 orr r0, r1, #0xa5 << 9
35 orr r0, r1, #0xa5 << 8
36 orr r0, r1, #0xa5 << 7
37 orr r0, r1, #0xa5 << 6
38 orr r0, r1, #0xa5 << 5
39 orr r0, r1, #0xa5 << 4
40 orr r0, r1, #0xa5 << 3
41 orr r0, r1, #0xa5 << 2
42 orr r0, r1, #0xa5 << 1
44 add_sub:
45 adds r0, r0, #0 @ format 1
46 adds r5, r0, #0
47 adds r0, r5, #0
48 adds r0, r0, #5
50 adds r0, #129 @ format 2
51 adds r0, r0, #129
52 adds r5, #126
54 adds r0, r0, r0 @ format 3
55 adds r5, r0, r0
56 adds r0, r5, r0
57 adds r0, r0, r5
58 adds r1, r2, r3
60 add r8, r0 @ format 4
61 add r0, r8
62 add r0, r8, r0
63 add r0, r0, r8
64 add r8, r0, r0 @ ... not this one
66 add r1, r0
67 add r0, r1
69 add r0, pc, #0 @ format 5
70 add r5, pc, #0
71 add r0, pc, #516
73 add r0, sp, #0 @ format 6
74 add r5, sp, #0
75 add r0, sp, #516
77 add sp, #0 @ format 7
78 add sp, sp, #0
79 add sp, #260
81 add.w r0, r0, #0 @ T32 format 1
82 adds.w r0, r0, #0
83 add.w r9, r0, #0
84 add.w r0, r9, #0
85 add.w r0, r0, #129
87 add.w r0, r0, r0 @ T32 format 2
88 adds.w r0, r0, r0
89 add.w r9, r0, r0
90 add.w r0, r9, r0
91 add.w r0, r0, r9
93 add.w r8, r9, r10
94 add.w r8, r9, r10, lsl #17
95 add.w r8, r8, r10, lsr #32
96 add.w r8, r8, r10, lsr #17
97 add.w r8, r9, r10, asr #32
98 add.w r8, r9, r10, asr #17
99 add.w r8, r9, r10, rrx
100 add.w r8, r9, r10, ror #17
102 subs r0, r0, #0 @ format 1
103 subs r5, r0, #0
104 subs r0, r5, #0
105 subs r0, r0, #5
107 subs r0, r0, #129
108 subs r5, #8
110 subs r0, r0, r0 @ format 3
111 subs r5, r0, r0
112 subs r0, r5, r0
113 subs r0, r0, r5
115 sub sp, #260 @ format 4
116 sub sp, sp, #260
118 subs r8, r0 @ T32 format 2
119 subs r0, r8
120 subs r0, #260 @ T32 format 1
122 arit3:
123 .macro arit3 op ops opw opsw
124 \ops r0, r0
125 \ops r5, r0
126 \ops r0, r5
127 \ops r0, r0, r5
128 \ops r0, r5, r0
129 \op r0, r5, r0
130 \op r0, r1, r2
131 \op r9, r0, r0
132 \op r0, r9, r0
133 \op r0, r0, r9
134 \opsw r0, r0, r0
135 \opw r0, r1, r2, asr #17
136 \opw r0, r1, #129
137 .endm
139 arit3 adc adcs adc.w adcs.w
140 arit3 and ands and.w ands.w
141 arit3 bic bics bic.w bics.w
142 arit3 eor eors eor.w eors.w
143 arit3 orr orrs orr.w orrs.w
144 arit3 rsb rsbs rsb.w rsbs.w
145 arit3 sbc sbcs sbc.w sbcs.w
147 .purgem arit3
149 bfc_bfi_bfx:
150 bfc r0, #0, #1
151 bfc r9, #0, #1
152 bfi r9, #0, #0, #1
153 bfc r0, #21, #1
154 bfc r0, #0, #18
156 bfi r0, r0, #0, #1
157 bfi r9, r0, #0, #1
158 bfi r0, r9, #0, #1
159 bfi r0, r0, #21, #1
160 bfi r0, r0, #0, #18
162 sbfx r0, r0, #0, #1
163 ubfx r9, r0, #0, #1
164 sbfx r0, r9, #0, #1
165 ubfx r0, r0, #21, #1
166 sbfx r0, r0, #0, #18
168 .globl branches
169 branches:
170 .macro bra op
171 \op 1b
172 \op 1f
173 .endm
175 bra beq.n
176 bra bne.n
177 bra bcs.n
178 bra bhs.n
179 bra bcc.n
180 bra bul.n
181 bra blo.n
182 bra bmi.n
183 bra bpl.n
184 bra bvs.n
185 bra bvc.n
186 bra bhi.n
187 bra bls.n
188 bra bvc.n
189 bra bhi.n
190 bra bls.n
191 bra bge.n
192 bra blt.n
193 bra bgt.n
194 bra ble.n
195 bra bal.n
196 bra b.n
197 @ bl, blx have no short form.
198 .balign 4
200 bra beq
201 bra bne
202 bra bcs
203 bra bhs
204 bra bcc
205 bra bul
206 bra blo
207 bra bmi
208 bra bpl
209 bra bvs
210 bra bvc
211 bra bhi
212 bra bls
213 bra bvc
214 bra bhi
215 bra bls
216 bra bge
217 bra blt
218 bra bgt
219 bra ble
220 bra b
221 bra bl
222 bra blx
223 .balign 4
225 bx r9
226 blx r0
227 blx r9
228 bxj r0
229 bxj r9
230 .purgem bra
232 clz:
233 clz r0, r0
234 clz r9, r0
235 clz r0, r9
237 cps:
238 cpsie f
239 cpsid i
240 cpsie a
241 cpsid.w f
242 cpsie.w i
243 cpsid.w a
244 cpsie i, #0
245 cpsid i, #17
246 cps #0
247 cps #17
249 cpy:
250 cpy r0, r0
251 cpy r9, r0
252 cpy r0, r9
253 cpy.w r0, r0
254 cpy.w r9, r0
255 cpy.w r0, r9
257 czb:
258 cbnz r0, 2f
259 cbz r5, 1f
261 nop_hint:
263 1: yield
264 2: wfe
268 nop.w
269 yield.w
270 wfe.w
271 wfi.w
272 sev.w
274 nop {9}
275 nop {129}
278 .macro itx opc cond n
279 \opc \cond
280 .rept \n
282 .endr
283 .endm
285 itx it eq 1
286 itx it ne 1
287 itx it cs 1
288 itx it hs 1
289 itx it cc 1
290 itx it ul 1
291 itx it lo 1
292 itx it mi 1
293 itx it pl 1
294 itx it vs 1
295 itx it vc 1
296 itx it hi 1
297 itx it ge 1
298 itx it lt 1
299 itx it gt 1
300 itx it le 1
301 itx it al 1
303 itx itt eq 2
304 itx ite eq 2
305 itx ittt eq 3
306 itx itet eq 3
307 itx itte eq 3
308 itx itee eq 3
309 itx itttt eq 4
310 itx itett eq 4
311 itx ittet eq 4
312 itx ittte eq 4
313 itx ittee eq 4
314 itx itete eq 4
315 itx iteet eq 4
316 itx iteee eq 4
318 itx itt ne 2
319 itx ite ne 2
320 itx ittt ne 3
321 itx itet ne 3
322 itx itte ne 3
323 itx itee ne 3
324 itx itttt ne 4
325 itx itett ne 4
326 itx ittet ne 4
327 itx ittte ne 4
328 itx ittee ne 4
329 itx itete ne 4
330 itx iteet ne 4
331 itx iteee ne 4
333 .purgem itx
335 ldst:
336 .macro ls op
337 \op r1, [r5]
338 \op r1, [r5, #0x330]
339 \op r1, [r5, #-0x30]
340 \op r1, [r5], #0x30
341 \op r1, [r5], #-0x30
342 \op r1, [r5, #0x30]!
343 \op r1, [r5, #-0x30]!
344 \op r1, [r5, r4]
345 \op r1, [r9, ip]
346 \op r1, 1f
347 \op r1, 1b
348 .endm
350 ls ldrb
351 ls ldrsb
352 ls ldrh
353 ls ldrsh
354 ls ldr
356 ls strb
357 ls strh
358 ls str
360 pld [r5]
361 pld [r5, #0x330]
362 pld [r5, #-0x30]
363 pld [r5], #0x30
364 pld [r5], #-0x30
365 pld [r5, #0x30]!
366 pld [r5, #-0x30]!
367 pld [r5, r4]
368 pld [r9, ip]
369 pld 1f
370 pld 1b
373 ldrd r2, r3, [r5]
374 ldrd r2, [r5, #0x30]
375 ldrd r2, [r5, #-0x30]
376 strd r2, r3, [r5]
377 strd r2, [r5, #0x30]
378 strd r2, [r5, #-0x30]
380 ldrbt r1, [r5]
381 ldrbt r1, [r5, #0x30]
382 ldrsbt r1, [r5]
383 ldrsbt r1, [r5, #0x30]
384 ldrht r1, [r5]
385 ldrht r1, [r5, #0x30]
386 ldrsht r1, [r5]
387 ldrsht r1, [r5, #0x30]
388 ldrt r1, [r5]
389 ldrt r1, [r5, #0x30]
391 .purgem ls
393 ldxstx:
394 ldrexb r1, [r4]
395 ldrexh r1, [r4]
396 ldrex r1, [r4]
397 ldrexd r1, r2, [r4]
399 strexb r1, r2, [r4]
400 strexh r1, r2, [r4]
401 strex r1, r2, [r4]
402 strexd r1, r2, r3, [r4]
404 ldrex r1, [r4,#516]
405 strex r1, r2, [r4,#516]
407 ldmstm:
408 ldmia r0!, {r1,r2,r3}
409 ldmia r2, {r0,r1,r2}
410 ldmia.w r2, {r0,r1,r2}
411 ldmia r9, {r0,r1,r2}
412 ldmia r0, {r7,r8,r10}
413 ldmia r0!, {r7,r8,r10}
415 stmia r0!, {r1,r2,r3}
416 stmia r2!, {r0,r1,r3}
417 stmia.w r2!, {r0,r1,r3}
418 stmia r9, {r0,r1,r2}
419 stmia r0, {r7,r8,r10}
420 stmia r0!, {r7,r8,r10}
422 ldmdb r0, {r7,r8,r10}
423 stmdb r0, {r7,r8,r10}
425 mlas:
426 mla r0, r0, r0, r0
427 mls r0, r0, r0, r0
428 mla r9, r0, r0, r0
429 mla r0, r9, r0, r0
430 mla r0, r0, r9, r0
431 mla r0, r0, r0, r9
433 tst_teq_cmp_cmn_mov_mvn:
434 .macro mt op ops opw opsw
435 \ops r0, r0
436 \op r0, r0
437 \ops r5, r0
438 \op r0, r5
439 \op r0, r5, asr #17
440 \opw r0, r0
441 \ops r9, r0
442 \opsw r0, r9
443 \op r0, #129
444 \op r5, #129
445 .endm
447 mt tst tsts tst.w tsts.w
448 mt teq teqs teq.w teqs.w
449 mt cmp cmps cmp.w cmps.w
450 mt cmn cmns cmn.w cmns.w
451 mt mov movs mov.w movs.w
452 mt mvn mvns mvn.w mvns.w
453 .purgem mt
455 mov16:
456 movw r0, #0
457 movt r0, #0
458 movw r9, #0
459 movw r0, #0x9000
460 movw r0, #0x0800
461 movw r0, #0x0500
462 movw r0, #0x0081
463 movw r0, #0xffff
465 mrs_msr:
466 mrs r0, CPSR
467 mrs r0, SPSR
468 mrs r9, CPSR_all
469 mrs r9, SPSR_all
471 msr CPSR_c, r0
472 msr SPSR_c, r0
473 msr CPSR_c, r9
474 msr CPSR_x, r0
475 msr CPSR_s, r0
476 msr CPSR_f, r0
478 mul:
479 mul r0, r0, r0
480 mul r0, r9, r0
481 mul r0, r0, r9
482 mul r0, r0
483 mul r9, r0
484 muls r5, r0
485 muls r5, r0, r5
486 muls r0, r5
488 mull:
489 smull r0, r1, r0, r0
490 umull r0, r1, r0, r0
491 smlal r0, r1, r0, r0
492 umlal r0, r1, r0, r0
493 smull r9, r0, r0, r0
494 smull r0, r9, r0, r0
495 smull r0, r1, r9, r0
496 smull r0, r1, r0, r9
498 neg:
499 negs r0, r0
500 negs r0, r5
501 negs r5, r0
502 negs.w r0, r0
503 negs.w r5, r0
504 negs.w r0, r5
506 neg r0, r9
507 neg r9, r0
508 negs r0, r9
509 negs r9, r0
511 pkh:
512 pkhbt r0, r0, r0
513 pkhbt r9, r0, r0
514 pkhbt r0, r9, r0
515 pkhbt r0, r0, r9
516 pkhbt r0, r0, r0, lsl #0x14
517 pkhbt r0, r0, r0, lsl #3
518 pkhtb r1, r2, r3
519 pkhtb r1, r2, r3, asr #0x11
521 push_pop:
522 push {r0}
523 pop {r0}
524 push {r1,lr}
525 pop {r1,pc}
526 push {r8,r9,r10,r11,r12}
527 pop {r8,r9,r10,r11,r12}
529 qadd:
530 qadd16 r1, r2, r3
531 qadd8 r1, r2, r3
532 qaddsubx r1, r2, r3
533 qsub16 r1, r2, r3
534 qsub8 r1, r2, r3
535 qsubaddx r1, r2, r3
536 sadd16 r1, r2, r3
537 sadd8 r1, r2, r3
538 saddsubx r1, r2, r3
539 ssub16 r1, r2, r3
540 ssub8 r1, r2, r3
541 ssubaddx r1, r2, r3
542 shadd16 r1, r2, r3
543 shadd8 r1, r2, r3
544 shaddsubx r1, r2, r3
545 shsub16 r1, r2, r3
546 shsub8 r1, r2, r3
547 shsubaddx r1, r2, r3
548 uadd16 r1, r2, r3
549 uadd8 r1, r2, r3
550 uaddsubx r1, r2, r3
551 usub16 r1, r2, r3
552 usub8 r1, r2, r3
553 usubaddx r1, r2, r3
554 uhadd16 r1, r2, r3
555 uhadd8 r1, r2, r3
556 uhaddsubx r1, r2, r3
557 uhsub16 r1, r2, r3
558 uhsub8 r1, r2, r3
559 uhsubaddx r1, r2, r3
560 uqadd16 r1, r2, r3
561 uqadd8 r1, r2, r3
562 uqaddsubx r1, r2, r3
563 uqsub16 r1, r2, r3
564 uqsub8 r1, r2, r3
565 uqsubaddx r1, r2, r3
566 sel r1, r2, r3
568 rbit_rev:
569 .macro rx op opw
570 \op r0, r0
571 \opw r0, r0
572 \op r0, r5
573 \op r5, r0
574 \op r0, r9
575 \op r9, r0
576 .endm
578 rx rev rev.w
579 rx rev16 rev16.w
580 rx revsh revsh.w
581 rx rbit rbit.w
583 .purgem rx
585 shift:
586 .macro sh op ops opw opsw
587 \ops r0, #17 @ 16-bit format 1
588 \ops r0, r0, #14
589 \ops r5, r0, #17
590 \ops r0, r5, #14
591 \ops r0, r0 @ 16-bit format 2
592 \ops r0, r5
593 \ops r0, r0, r5
594 \op r9, #17 @ 32-bit format 1
595 \op r9, r9, #14
596 \ops r0, r9, #17
597 \op r9, r0, #14
598 \opw r0, r0, r0 @ 32-bit format 2
599 \op r9, r9
600 \ops r9, r0
601 \op r0, r9
602 \op r0, r5
603 \ops r0, r1, r2
604 .endm
606 sh lsl lsls lsl.w lsls.w
607 sh lsr lsrs lsr.w lsrs.w
608 sh asr asrs asr.w asrs.w
609 sh ror rors ror.w rors.w
611 .purgem sh
613 smi:
614 smi #0
615 smi #0xabcd
617 smla:
618 smlabb r0, r0, r0, r0
619 smlabb r9, r0, r0, r0
620 smlabb r0, r9, r0, r0
621 smlabb r0, r0, r9, r0
622 smlabb r0, r0, r0, r9
624 smlatb r0, r0, r0, r0
625 smlabt r0, r0, r0, r0
626 smlatt r0, r0, r0, r0
627 smlawb r0, r0, r0, r0
628 smlawt r0, r0, r0, r0
629 smlad r0, r0, r0, r0
630 smladx r0, r0, r0, r0
631 smlsd r0, r0, r0, r0
632 smlsdx r0, r0, r0, r0
633 smmla r0, r0, r0, r0
634 smmlar r0, r0, r0, r0
635 smmls r0, r0, r0, r0
636 smmlsr r0, r0, r0, r0
637 usada8 r0, r0, r0, r0
639 smlal:
640 smlalbb r0, r0, r0, r0
641 smlalbb r9, r0, r0, r0
642 smlalbb r0, r9, r0, r0
643 smlalbb r0, r0, r9, r0
644 smlalbb r0, r0, r0, r9
646 smlaltb r0, r0, r0, r0
647 smlalbt r0, r0, r0, r0
648 smlaltt r0, r0, r0, r0
649 smlald r0, r0, r0, r0
650 smlaldx r0, r0, r0, r0
651 smlsld r0, r0, r0, r0
652 smlsldx r0, r0, r0, r0
653 umaal r0, r0, r0, r0
655 smul:
656 smulbb r0, r0, r0
657 smulbb r9, r0, r0
658 smulbb r0, r9, r0
659 smulbb r0, r0, r9
661 smultb r0, r0, r0
662 smulbt r0, r0, r0
663 smultt r0, r0, r0
664 smulwb r0, r0, r0
665 smulwt r0, r0, r0
666 smmul r0, r0, r0
667 smmulr r0, r0, r0
668 smuad r0, r0, r0
669 smuadx r0, r0, r0
670 smusd r0, r0, r0
671 smusdx r0, r0, r0
672 usad8 r0, r0, r0
674 sat:
675 ssat r0, #1, r0
676 ssat r0, #1, r0, lsl #0
677 ssat r0, #1, r0, asr #0
678 ssat r9, #1, r0
679 ssat r0, #18, r0
680 ssat r0, #1, r9
681 ssat r0, #1, r0, lsl #0x1c
682 ssat r0, #1, r0, asr #0x03
684 ssat16 r0, #1, r0
685 ssat16 r9, #1, r0
686 ssat16 r0, #10, r0
687 ssat16 r0, #1, r9
689 usat r0, #0, r0
690 usat r0, #0, r0, lsl #0
691 usat r0, #0, r0, asr #0
692 usat r9, #0, r0
693 usat r0, #17, r0
694 usat r0, #0, r9
695 usat r0, #0, r0, lsl #0x1c
696 usat r0, #0, r0, asr #0x03
698 usat16 r0, #0, r0
699 usat16 r9, #0, r0
700 usat16 r0, #9, r0
701 usat16 r0, #0, r9
704 sxtb r0, r0
705 sxtb r0, r0, ror #0
706 sxtb r5, r0
707 sxtb r0, r5
708 sxtb.w r1, r2
709 sxtb r1, r2, ror #8
710 sxtb r1, r2, ror #16
711 sxtb r1, r2, ror #24
713 sxtb16 r1, r2
714 sxtb16 r8, r9
715 sxth r1, r2
716 sxth r8, r9
717 uxtb r1, r2
718 uxtb r8, r9
719 uxtb16 r1, r2
720 uxtb16 r8, r9
721 uxth r1, r2
722 uxth r8, r9
724 xta:
725 sxtab r0, r0, r0
726 sxtab r0, r0, r0, ror #0
727 sxtab r9, r0, r0, ror #8
728 sxtab r0, r9, r0, ror #16
729 sxtab r0, r0, r9, ror #24
731 sxtab16 r1, r2, r3
732 sxtah r1, r2, r3
733 uxtab r1, r2, r3
734 uxtab16 r1, r2, r3
735 uxtah r1, r2, r3
737 .macro ldpcimm op
738 \op r1, [pc, #0x2aa]
739 \op r1, [pc, #0x155]
740 \op r1, [pc, #-0x2aa]
741 \op r1, [pc, #-0x155]
742 .endm
743 ldpcimm ldrb
744 ldpcimm ldrsb
745 ldpcimm ldrh
746 ldpcimm ldrsh
747 ldpcimm ldr
748 addw r9, r0, #0
749 addw r6, pc, #0xfff
750 subw r6, r9, #0xa85
751 subw r6, r9, #0x57a
752 tbb [pc, r6]
753 tbb [r0, r9]
754 tbh [pc, r7, lsl #1]
755 tbh [r0, r8, lsl #1]
757 push {r8}
758 pop {r8}