arm: fix setjmp and longjmp asm for armv8-a
[musl] / src / setjmp / arm / setjmp.S
1 .syntax unified
2 .global __setjmp
3 .global _setjmp
4 .global setjmp
5 .type __setjmp,%function
6 .type _setjmp,%function
7 .type setjmp,%function
8 __setjmp:
9 _setjmp:
10 setjmp:
11         mov ip,r0
12         stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp}
13         mov r2,sp
14         stmia ip!,{r2,lr}
15         mov r0,#0
16
17         adr r1,1f
18         ldr r2,1f
19         ldr r1,[r1,r2]
20
21 #if __ARM_ARCH < 8
22         tst r1,#0x260
23         beq 3f
24         // HWCAP_ARM_FPA
25         tst r1,#0x20
26         beq 2f
27         stc p2, cr4, [ip], #48
28 #endif
29 2:      tst r1,#0x40
30         beq 2f
31         .fpu vfp
32         vstmia ip!, {d8-d15}
33         .fpu softvfp
34         .eabi_attribute 10, 0
35         .eabi_attribute 27, 0
36 #if __ARM_ARCH < 8
37         // HWCAP_ARM_IWMMXT
38 2:      tst r1,#0x200
39         beq 3f
40         stcl p1, cr10, [ip], #8
41         stcl p1, cr11, [ip], #8
42         stcl p1, cr12, [ip], #8
43         stcl p1, cr13, [ip], #8
44         stcl p1, cr14, [ip], #8
45         stcl p1, cr15, [ip], #8
46 #endif
47 2:
48 3:      bx lr
49
50 .hidden __hwcap
51 .align 2
52 1:      .word __hwcap-1b