use vfp mnemonics rather than hard-coded opcodes in arm setjmp/longjmp
[musl.git] / src / setjmp / arm / setjmp.s
blob32db7d873c27ed235bc2e07de4236bef5373fc09
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
14 adr r1,1f
15 ldr r2,1f
16 ldr r1,[r1,r2]
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
42 .hidden __hwcap
43 1: .word __hwcap-1b