floating point support for arm setjmp/longjmp
[musl] / src / setjmp / arm / longjmp.s
1 .global _longjmp
2 .global longjmp
3 .type _longjmp,%function
4 .type longjmp,%function
5 _longjmp:
6 longjmp:
7         mov ip,r0
8         movs r0,r1
9         moveq r0,#1
10         ldmia ip!, {v1,v2,v3,v4,v5,v6,sl,fp,sp,lr}
11
12         adr r1,1f
13         ldr r2,1f
14         ldr r1,[r1,r2]
15
16         tst r1,#0x260
17         beq 3f
18         tst r1,#0x20
19         beq 2f
20         ldc p2, cr4, [ip], #48
21 2:      tst r1,#0x40
22         beq 2f
23         ldc p11, cr8, [ip], #64
24         ldmia ip!, {r2,r3}
25         mcr p10, 7, r3, cr1, cr0, 0
26 2:      tst r1,#0x200
27         beq 3f
28         ldcl p1, cr10, [ip], #8
29         ldcl p1, cr11, [ip], #8
30         ldcl p1, cr12, [ip], #8
31         ldcl p1, cr13, [ip], #8
32         ldcl p1, cr14, [ip], #8
33         ldcl p1, cr15, [ip], #8
34 3:      tst lr,#1
35         moveq pc,lr
36         bx lr
37
38 .hidden __hwcap
39 1:      .word __hwcap-1b