OSDN Git Service

gas:
[pf3gnuchains/pf3gnuchains4x.git] / gas / testsuite / gas / arm / thumb32.s
1         .text
2         .thumb
3         .syntax unified
4
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
11
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
43
44 add_sub:
45         @ Should be format 1, Some have equivalent format 2 encodings
46         adds    r0, r0, #0
47         adds    r5, r0, #0
48         adds    r0, r5, #0
49         adds    r0, r2, #5
50
51         adds    r0, #129        @ format 2
52         adds    r0, r0, #129
53         adds    r5, #126
54
55         adds    r0, r0, r0      @ format 3
56         adds    r5, r0, r0
57         adds    r0, r5, r0
58         adds    r0, r0, r5
59         adds    r1, r2, r3
60
61         add     r8, r0          @ format 4
62         add     r0, r8
63         add     r0, r8, r0
64         add     r0, r0, r8
65         add     r8, r0, r0      @ ... not this one
66
67         add     r1, r0
68         add     r0, r1
69
70         add     r0, pc, #0      @ format 5
71         add     r5, pc, #0
72         add     r0, pc, #516
73
74         add     r0, sp, #0      @ format 6
75         add     r5, sp, #0
76         add     r0, sp, #516
77
78         add     sp, #0          @ format 7
79         add     sp, sp, #0
80         add     sp, #260
81
82         add.w   r0, r0, #0      @ T32 format 1
83         adds.w  r0, r0, #0
84         add.w   r9, r0, #0
85         add.w   r0, r9, #0
86         add.w   r0, r0, #129
87         adds    r5, r3, #0x10000
88         add     r0, sp, #1
89         add     r9, sp, #0
90         add.w   sp, sp, #4
91
92         add.w   r0, r0, r0      @ T32 format 2
93         adds.w  r0, r0, r0
94         add.w   r9, r0, r0
95         add.w   r0, r9, r0
96         add.w   r0, r0, r9
97
98         add.w   r8, r9, r10
99         add.w   r8, r9, r10, lsl #17
100         add.w   r8, r8, r10, lsr #32
101         add.w   r8, r8, r10, lsr #17
102         add.w   r8, r9, r10, asr #32
103         add.w   r8, r9, r10, asr #17
104         add.w   r8, r9, r10, rrx
105         add.w   r8, r9, r10, ror #17
106
107         subs    r0, r0, #0      @ format 1
108         subs    r5, r0, #0
109         subs    r0, r5, #0
110         subs    r0, r2, #5
111
112         subs    r0, r0, #129
113         subs    r5, #8
114
115         subs    r0, r0, r0      @ format 3
116         subs    r5, r0, r0
117         subs    r0, r5, r0
118         subs    r0, r0, r5
119
120         sub     sp, #260        @ format 4
121         sub     sp, sp, #260
122
123         subs    r8, r0          @ T32 format 2
124         subs    r0, r8
125         subs    r0, #260        @ T32 format 1
126         subs.w  r1, r2, #4
127         subs    r5, r3, #0x10000
128         sub     r1, sp, #4
129         sub     r9, sp, #0
130         sub.w   sp, sp, #4
131
132 arit3:
133         .macro arit3 op ops opw opsw
134         \ops    r0, r0
135         \ops    r5, r0
136         \ops    r0, r5
137         \ops    r0, r0, r5
138         \ops    r0, r5, r0
139         \op     r0, r5, r0
140         \op     r0, r1, r2
141         \op     r9, r0, r0
142         \op     r0, r9, r0
143         \op     r0, r0, r9
144         \opsw   r0, r0, r0
145         \opw    r0, r1, r2, asr #17
146         \opw    r0, r1, #129
147         .endm
148
149         arit3   adc adcs adc.w adcs.w
150         arit3   and ands and.w ands.w
151         arit3   bic bics bic.w bics.w
152         arit3   eor eors eor.w eors.w
153         arit3   orr orrs orr.w orrs.w
154         arit3   rsb rsbs rsb.w rsbs.w
155         arit3   sbc sbcs sbc.w sbcs.w
156
157         .purgem arit3
158
159 bfc_bfi_bfx:
160         bfc     r0, #0, #1
161         bfc     r9, #0, #1
162         bfi     r9, #0, #0, #1
163         bfc     r0, #21, #1
164         bfc     r0, #0, #18
165
166         bfi     r0, r0, #0, #1
167         bfi     r9, r0, #0, #1
168         bfi     r0, r9, #0, #1
169         bfi     r0, r0, #21, #1
170         bfi     r0, r0, #0, #18
171
172         sbfx    r0, r0, #0, #1
173         ubfx    r9, r0, #0, #1
174         sbfx    r0, r9, #0, #1
175         ubfx    r0, r0, #21, #1
176         sbfx    r0, r0, #0, #18
177
178         .globl  branches
179 branches:
180         .macro bra op
181         \op     1b
182         \op     1f
183         .endm
184 1:
185         bra     beq.n
186         bra     bne.n
187         bra     bcs.n
188         bra     bhs.n
189         bra     bcc.n
190         bra     bul.n
191         bra     blo.n
192         bra     bmi.n
193         bra     bpl.n
194         bra     bvs.n
195         bra     bvc.n
196         bra     bhi.n
197         bra     bls.n
198         bra     bvc.n
199         bra     bhi.n
200         bra     bls.n
201         bra     bge.n
202         bra     blt.n
203         bra     bgt.n
204         bra     ble.n
205         bra     bal.n
206         bra     b.n
207         @ bl, blx have no short form.
208         .balign 4
209 1:
210         bra     beq.w
211         bra     bne.w
212         bra     bcs.w
213         bra     bhs.w
214         bra     bcc.w
215         bra     bul.w
216         bra     blo.w
217         bra     bmi.w
218         bra     bpl.w
219         bra     bvs.w
220         bra     bvc.w
221         bra     bhi.w
222         bra     bls.w
223         bra     bvc.w
224         bra     bhi.w
225         bra     bls.w
226         bra     bge.w
227         bra     blt.w
228         bra     bgt.w
229         bra     ble.w
230         bra     b.w
231         bra     bl
232         bra     blx
233         .balign 4
234 1:
235         bx      r9
236         blx     r0
237         blx     r9
238         bxj     r0
239         bxj     r9
240         .purgem bra
241
242 clz:
243         clz     r0, r0
244         clz     r9, r0
245         clz     r0, r9
246
247 cps:
248         cpsie   f
249         cpsid   i
250         cpsie   a
251         cpsid.w f
252         cpsie.w i
253         cpsid.w a
254         cpsie   i, #0
255         cpsid   i, #17
256         cps     #0
257         cps     #17
258
259 cpy:
260         cpy     r0, r0
261         cpy     r9, r0
262         cpy     r0, r9
263         cpy.w   r0, r0
264         cpy.w   r9, r0
265         cpy.w   r0, r9
266
267 czb:
268         cbnz    r0, 2f
269         cbz     r5, 1f
270
271 nop_hint:
272         nop
273 1:      yield
274 2:      wfe
275         wfi
276         sev
277
278         nop.w
279         yield.w
280         wfe.w
281         wfi.w
282         sev.w
283
284         nop {9}
285         nop {129}
286
287 it:
288         .macro nop1 cond ncond a
289         .ifc \a,t
290         nop\cond
291         .else
292         nop\ncond
293         .endif
294         .endm
295         .macro it0 cond m=
296         it\m \cond
297         nop\cond
298         .endm
299         .macro it1 cond ncond a m=
300         it0 \cond \a\m
301         nop1 \cond \ncond \a
302         .endm
303         .macro it2 cond ncond a b m=
304         it1 \cond \ncond \a \b\m
305         nop1 \cond \ncond \b
306         .endm
307         .macro it3 cond ncond a b c
308         it2 \cond \ncond \a \b \c
309         nop1 \cond \ncond \c
310         .endm
311
312         it0     eq
313         it0     ne
314         it0     cs
315         it0     hs
316         it0     cc
317         it0     ul
318         it0     lo
319         it0     mi
320         it0     pl
321         it0     vs
322         it0     vc
323         it0     hi
324         it0     ge
325         it0     lt
326         it0     gt
327         it0     le
328         it0     al
329         it1 eq ne t
330         it1 eq ne e
331         it2 eq ne t t
332         it2 eq ne e t
333         it2 eq ne t e
334         it2 eq ne e e
335         it3 eq ne t t t
336         it3 eq ne e t t
337         it3 eq ne t e t
338         it3 eq ne t t e
339         it3 eq ne t e e
340         it3 eq ne e t e
341         it3 eq ne e e t
342         it3 eq ne e e e
343
344         it1 ne eq t
345         it1 ne eq e
346         it2 ne eq t t
347         it2 ne eq e t
348         it2 ne eq t e
349         it2 ne eq e e
350         it3 ne eq t t t
351         it3 ne eq e t t
352         it3 ne eq t e t
353         it3 ne eq t t e
354         it3 ne eq t e e
355         it3 ne eq e t e
356         it3 ne eq e e t
357         it3 ne eq e e e
358
359 ldst:
360 1:
361         pld     [r5]
362         pld     [r5, #0x330]
363         pld     [r5, #-0x30]
364         pld     [r5], #0x30
365         pld     [r5], #-0x30
366         pld     [r5, #0x30]!
367         pld     [r5, #-0x30]!
368         pld     [r5, r4]
369         pld     [r9, ip]
370         pld     1f
371         pld     1b
372 1:
373
374         ldrd    r2, r3, [r5]
375         ldrd    r2, [r5, #0x30]
376         ldrd    r2, [r5, #-0x30]
377         strd    r2, r3, [r5]
378         strd    r2, [r5, #0x30]
379         strd    r2, [r5, #-0x30]
380
381         ldrbt   r1, [r5]
382         ldrbt   r1, [r5, #0x30]
383         ldrsbt  r1, [r5]
384         ldrsbt  r1, [r5, #0x30]
385         ldrht   r1, [r5]
386         ldrht   r1, [r5, #0x30]
387         ldrsht  r1, [r5]
388         ldrsht  r1, [r5, #0x30]
389         ldrt    r1, [r5]
390         ldrt    r1, [r5, #0x30]
391
392 ldxstx:
393         ldrexb  r1, [r4]
394         ldrexh  r1, [r4]
395         ldrex   r1, [r4]
396         ldrexd  r1, r2, [r4]
397
398         strexb  r1, r2, [r4]
399         strexh  r1, r2, [r4]
400         strex   r1, r2, [r4]
401         strexd  r1, r2, r3, [r4]
402
403         ldrex   r1, [r4,#516]
404         strex   r1, r2, [r4,#516]
405
406 ldmstm:
407         ldmia   r0!, {r1,r2,r3}
408         ldmia   r2, {r0,r1,r2}
409         ldmia.w r2, {r0,r1,r2}
410         ldmia   r9, {r0,r1,r2}
411         ldmia   r0, {r7,r8,r10}
412         ldmia   r0!, {r7,r8,r10}
413         
414         stmia   r0!, {r1,r2,r3}
415         stmia   r2!, {r0,r1,r3}
416         stmia.w r2!, {r0,r1,r3}
417         stmia   r9, {r0,r1,r2}
418         stmia   r0, {r7,r8,r10}
419         stmia   r0!, {r7,r8,r10}
420
421         ldmdb   r0, {r7,r8,r10}
422         stmdb   r0, {r7,r8,r10}
423
424 mlas:
425         mla     r0, r0, r0, r0
426         mls     r0, r0, r0, r0
427         mla     r9, r0, r0, r0
428         mla     r0, r9, r0, r0
429         mla     r0, r0, r9, r0
430         mla     r0, r0, r0, r9
431
432 tst_teq_cmp_cmn_mov_mvn:
433         .macro  mt op ops opw opsw
434         \ops    r0, r0
435         \op     r0, r0
436         \ops    r5, r0
437         \op     r0, r5
438         \op     r0, r5, asr #17
439         \opw    r0, r0
440         \ops    r9, r0
441         \opsw   r0, r9
442         \opw    r0, #129
443         \opw    r5, #129
444         .endm
445
446         mt      tst tsts tst.w tsts.w
447         mt      teq teqs teq.w teqs.w
448         mt      cmp cmps cmp.w cmps.w
449         mt      cmn cmns cmn.w cmns.w
450         mt      mov movs mov.w movs.w
451         mt      mvn mvns mvn.w mvns.w
452         .purgem mt
453
454 mov16:
455         movw    r0, #0
456         movt    r0, #0
457         movw    r9, #0
458         movw    r0, #0x9000
459         movw    r0, #0x0800
460         movw    r0, #0x0500
461         movw    r0, #0x0081
462         movw    r0, #0xffff
463
464 mrs_msr:
465         mrs     r0, CPSR
466         mrs     r0, SPSR
467         mrs     r9, CPSR_all
468         mrs     r9, SPSR_all
469
470         msr     CPSR_c, r0
471         msr     SPSR_c, r0
472         msr     CPSR_c, r9
473         msr     CPSR_x, r0
474         msr     CPSR_s, r0
475         msr     CPSR_f, r0
476
477 mul:
478         mul     r0, r0, r0
479         mul     r0, r9, r0
480         mul     r0, r0, r9
481         mul     r0, r0
482         mul     r9, r0
483         muls    r5, r0
484         muls    r5, r0, r5
485         muls    r0, r5
486
487 mull:
488         smull   r0, r1, r0, r0
489         umull   r0, r1, r0, r0
490         smlal   r0, r1, r0, r0
491         umlal   r0, r1, r0, r0
492         smull   r9, r0, r0, r0
493         smull   r0, r9, r0, r0
494         smull   r0, r1, r9, r0
495         smull   r0, r1, r0, r9
496
497 neg:
498         negs    r0, r0
499         negs    r0, r5
500         negs    r5, r0
501         negs.w  r0, r0
502         negs.w  r5, r0
503         negs.w  r0, r5
504
505         neg     r0, r9
506         neg     r9, r0
507         negs    r0, r9
508         negs    r9, r0
509
510 pkh:
511         pkhbt   r0, r0, r0
512         pkhbt   r9, r0, r0
513         pkhbt   r0, r9, r0
514         pkhbt   r0, r0, r9
515         pkhbt   r0, r0, r0, lsl #0x14
516         pkhbt   r0, r0, r0, lsl #3
517         pkhtb   r1, r2, r3
518         pkhtb   r1, r2, r3, asr #0x11
519
520 push_pop:
521         push    {r0}
522         pop     {r0}
523         push    {r1,lr}
524         pop     {r1,pc}
525         push    {r8,r9,r10,r11,r12}
526         pop     {r8,r9,r10,r11,r12}
527
528 qadd:
529         qadd            r1, r2, r3
530         qadd16          r1, r2, r3
531         qadd8           r1, r2, r3
532         qaddsubx        r1, r2, r3
533         qdadd           r1, r2, r3
534         qdsub           r1, r2, r3
535         qsub            r1, r2, r3
536         qsub16          r1, r2, r3
537         qsub8           r1, r2, r3
538         qsubaddx        r1, r2, r3
539         sadd16          r1, r2, r3
540         sadd8           r1, r2, r3
541         saddsubx        r1, r2, r3
542         ssub16          r1, r2, r3
543         ssub8           r1, r2, r3
544         ssubaddx        r1, r2, r3
545         shadd16         r1, r2, r3
546         shadd8          r1, r2, r3
547         shaddsubx       r1, r2, r3
548         shsub16         r1, r2, r3
549         shsub8          r1, r2, r3
550         shsubaddx       r1, r2, r3
551         uadd16          r1, r2, r3
552         uadd8           r1, r2, r3
553         uaddsubx        r1, r2, r3
554         usub16          r1, r2, r3
555         usub8           r1, r2, r3
556         usubaddx        r1, r2, r3
557         uhadd16         r1, r2, r3
558         uhadd8          r1, r2, r3
559         uhaddsubx       r1, r2, r3
560         uhsub16         r1, r2, r3
561         uhsub8          r1, r2, r3
562         uhsubaddx       r1, r2, r3
563         uqadd16         r1, r2, r3
564         uqadd8          r1, r2, r3
565         uqaddsubx       r1, r2, r3
566         uqsub16         r1, r2, r3
567         uqsub8          r1, r2, r3
568         uqsubaddx       r1, r2, r3
569         sel             r1, r2, r3
570
571 rbit_rev:
572         .macro  rx op opw
573         \op     r0, r0
574         \opw    r0, r0
575         \op     r0, r5
576         \op     r5, r0
577         \op     r0, r9
578         \op     r9, r0
579         .endm
580
581         rx      rev rev.w
582         rx      rev16 rev16.w
583         rx      revsh revsh.w
584         rx      rbit rbit.w
585
586         .purgem rx
587
588 shift:
589         .macro  sh op ops opw opsw
590         \ops    r0, #17         @ 16-bit format 1
591         \ops    r0, r0, #14
592         \ops    r5, r0, #17
593         \ops    r0, r5, #14
594         \ops    r0, r0          @ 16-bit format 2
595         \ops    r0, r5
596         \ops    r0, r0, r5
597         \op     r9, #17         @ 32-bit format 1
598         \op     r9, r9, #14
599         \ops    r0, r9, #17
600         \op     r9, r0, #14
601         \opw    r0, r0, r0      @ 32-bit format 2
602         \op     r9, r9
603         \ops    r9, r0
604         \op     r0, r9
605         \op     r0, r5
606         \ops    r0, r1, r2
607         .endm
608
609         sh      lsl lsls lsl.w lsls.w
610         sh      lsr lsrs lsr.w lsrs.w
611         sh      asr asrs asr.w asrs.w
612         sh      ror rors ror.w rors.w
613
614         .purgem sh
615
616 smc:
617         smc     #0
618         smc     #0xabcd
619
620 smla:
621         smlabb  r0, r0, r0, r0
622         smlabb  r9, r0, r0, r0
623         smlabb  r0, r9, r0, r0
624         smlabb  r0, r0, r9, r0
625         smlabb  r0, r0, r0, r9
626
627         smlatb  r0, r0, r0, r0
628         smlabt  r0, r0, r0, r0
629         smlatt  r0, r0, r0, r0
630         smlawb  r0, r0, r0, r0
631         smlawt  r0, r0, r0, r0
632         smlad   r0, r0, r0, r0
633         smladx  r0, r0, r0, r0
634         smlsd   r0, r0, r0, r0
635         smlsdx  r0, r0, r0, r0
636         smmla   r0, r0, r0, r0
637         smmlar  r0, r0, r0, r0
638         smmls   r0, r0, r0, r0
639         smmlsr  r0, r0, r0, r0
640         usada8  r0, r0, r0, r0
641
642 smlal:
643         smlalbb r0, r0, r0, r0
644         smlalbb r9, r0, r0, r0
645         smlalbb r0, r9, r0, r0
646         smlalbb r0, r0, r9, r0
647         smlalbb r0, r0, r0, r9
648
649         smlaltb r0, r0, r0, r0
650         smlalbt r0, r0, r0, r0
651         smlaltt r0, r0, r0, r0
652         smlald  r0, r0, r0, r0
653         smlaldx r0, r0, r0, r0
654         smlsld  r0, r0, r0, r0
655         smlsldx r0, r0, r0, r0
656         umaal   r0, r0, r0, r0
657
658 smul:
659         smulbb  r0, r0, r0
660         smulbb  r9, r0, r0
661         smulbb  r0, r9, r0
662         smulbb  r0, r0, r9
663
664         smultb  r0, r0, r0
665         smulbt  r0, r0, r0
666         smultt  r0, r0, r0
667         smulwb  r0, r0, r0
668         smulwt  r0, r0, r0
669         smmul   r0, r0, r0
670         smmulr  r0, r0, r0
671         smuad   r0, r0, r0
672         smuadx  r0, r0, r0
673         smusd   r0, r0, r0
674         smusdx  r0, r0, r0
675         usad8   r0, r0, r0
676
677 sat:
678         ssat    r0, #1, r0
679         ssat    r0, #1, r0, lsl #0
680         ssat    r0, #1, r0, asr #0
681         ssat    r9, #1, r0
682         ssat    r0, #18, r0
683         ssat    r0, #1, r9
684         ssat    r0, #1, r0, lsl #0x1c
685         ssat    r0, #1, r0, asr #0x03
686
687         ssat16  r0, #1, r0
688         ssat16  r9, #1, r0
689         ssat16  r0, #10, r0
690         ssat16  r0, #1, r9
691
692         usat    r0, #0, r0
693         usat    r0, #0, r0, lsl #0
694         usat    r0, #0, r0, asr #0
695         usat    r9, #0, r0
696         usat    r0, #17, r0
697         usat    r0, #0, r9
698         usat    r0, #0, r0, lsl #0x1c
699         usat    r0, #0, r0, asr #0x03
700
701         usat16  r0, #0, r0
702         usat16  r9, #0, r0
703         usat16  r0, #9, r0
704         usat16  r0, #0, r9
705
706 xt:
707         sxtb    r0, r0
708         sxtb    r0, r0, ror #0
709         sxtb    r5, r0
710         sxtb    r0, r5
711         sxtb.w  r1, r2
712         sxtb    r1, r2, ror #8
713         sxtb    r1, r2, ror #16
714         sxtb    r1, r2, ror #24
715
716         sxtb16  r1, r2
717         sxtb16  r8, r9
718         sxth    r1, r2
719         sxth    r8, r9
720         uxtb    r1, r2
721         uxtb    r8, r9
722         uxtb16  r1, r2
723         uxtb16  r8, r9
724         uxth    r1, r2
725         uxth    r8, r9
726
727 xta:    
728         sxtab   r0, r0, r0
729         sxtab   r0, r0, r0, ror #0
730         sxtab   r9, r0, r0, ror #8
731         sxtab   r0, r9, r0, ror #16
732         sxtab   r0, r0, r9, ror #24
733
734         sxtab16 r1, r2, r3
735         sxtah   r1, r2, r3
736         uxtab   r1, r2, r3
737         uxtab16 r1, r2, r3
738         uxtah   r1, r2, r3
739
740         .macro  ldpcimm op
741         \op     r1, [pc, #0x2aa]
742         \op     r1, [pc, #0x155]
743         \op     r1, [pc, #-0x2aa]
744         \op     r1, [pc, #-0x155]
745         .endm
746         ldpcimm ldrb
747         ldpcimm ldrsb
748         ldpcimm ldrh
749         ldpcimm ldrsh
750         ldpcimm ldr
751         addw r9, r0, #0
752         addw r6, pc, #0xfff
753         subw r6, r9, #0xa85
754         subw r6, r9, #0x57a
755         tbb [pc, r6]
756         tbb [r0, r9]
757         tbh [pc, r7, lsl #1]
758         tbh [r0, r8, lsl #1]
759
760         push    {r8}
761         pop     {r8}
762
763         ldmdb   r0!, {r7,r8,r10}
764         stmdb   r0!, {r7,r8,r10}
765
766         ldm     r0!, {r1, r2}
767         stm     r0!, {r1, r2}
768         ldm     r0, {r8, r9}
769         stm     r0, {r8, r9}
770         itttt eq
771         ldmeq   r0!, {r1, r2}
772         stmeq   r0!, {r1, r2}
773         ldmeq   r0, {r8, r9}
774         stmeq   r0, {r8, r9}
775         nop
776
777 srs:
778         srsia sp, #16
779         srsdb sp, #16
780         srsia sp!, #21
781         srsia sp!, #10
782
783         movs pc, lr
784         subs pc, lr, #0
785         subs pc, lr, #4
786         subs pc, lr, #255
787
788         ldrd r2, r4, [r9, #48]!
789         ldrd r2, r4, [r9, #-48]!
790         strd r2, r4, [r9, #48]!
791         strd r2, r4, [r9, #-48]!
792         ldrd r2, r4, [r9], #48
793         ldrd r2, r4, [r9], #-48
794         strd r2, r4, [r9], #48
795         strd r2, r4, [r9], #-48
796
797         .macro ldaddr op
798         ldr\op  r1, [r5, #0x301]
799         ldr\op  r1, [r5, #0x30]!
800         ldr\op  r1, [r5, #-0x30]!
801         ldr\op  r1, [r5], #0x30
802         ldr\op  r1, [r5], #-0x30
803         ldr\op  r1, [r5, r9]
804         .endm
805         ldaddr
806         ldaddr b
807         ldaddr sb
808         ldaddr h
809         ldaddr sh
810         .macro movshift op s="s"
811         movs r1, r4, \op #2
812         movs r3, r9, \op #2
813         movs r1, r2, \op r3
814         movs r1, r1, \op r3
815         movs r1, r1, \op r9
816         mov r1, r2, \op r3
817         mov r1, r1, \op r3
818         .endm
819         movshift lsl
820         movshift lsr
821         movshift asr
822         movshift ror
823         nop