use vfp mnemonics rather than hard-coded opcodes in arm setjmp/longjmp
[musl] / src / setjmp / arm / setjmp.s
1 .global __setjmp
2 .global _setjmp
3 .global setjmp
4 .type __setjmp,%function
5 .type _setjmp,%function
6 .type setjmp,%function
7 __setjmp:
8 _setjmp:
9 setjmp:
10         mov ip,r0
11         stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp,sp,lr}
12         mov r0,#0
13
14         adr r1,1f
15         ldr r2,1f
16         ldr r1,[r1,r2]
17
18         tst r1,#0x260
19         beq 3f
20         tst r1,#0x20
21         beq 2f
22         stc p2, cr4, [ip], #48
23 2:      tst r1,#0x40
24         beq 2f
25         .fpu vfp
26         vstmia ip!, {d8-d15}
27         .fpu softvfp
28         .eabi_attribute 10, 0
29         .eabi_attribute 27, 0
30 2:      tst r1,#0x200
31         beq 3f
32         stcl p1, cr10, [ip], #8
33         stcl p1, cr11, [ip], #8
34         stcl p1, cr12, [ip], #8
35         stcl p1, cr13, [ip], #8
36         stcl p1, cr14, [ip], #8
37         stcl p1, cr15, [ip], #8
38 3:      tst lr,#1
39         moveq pc,lr
40         bx lr
41
42 .hidden __hwcap
43 1:      .word __hwcap-1b