xref: /aosp_15_r20/external/musl/src/setjmp/arm/longjmp.S (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker.syntax unified
2*c9945492SAndroid Build Coastguard Worker.global _longjmp
3*c9945492SAndroid Build Coastguard Worker.global longjmp
4*c9945492SAndroid Build Coastguard Worker.type _longjmp,%function
5*c9945492SAndroid Build Coastguard Worker.type longjmp,%function
6*c9945492SAndroid Build Coastguard Worker_longjmp:
7*c9945492SAndroid Build Coastguard Workerlongjmp:
8*c9945492SAndroid Build Coastguard Worker	mov ip,r0
9*c9945492SAndroid Build Coastguard Worker	movs r0,r1
10*c9945492SAndroid Build Coastguard Worker	moveq r0,#1
11*c9945492SAndroid Build Coastguard Worker	ldmia ip!, {v1,v2,v3,v4,v5,v6,sl,fp}
12*c9945492SAndroid Build Coastguard Worker	ldmia ip!, {r2,lr}
13*c9945492SAndroid Build Coastguard Worker	mov sp,r2
14*c9945492SAndroid Build Coastguard Worker
15*c9945492SAndroid Build Coastguard Worker	adr r1,1f
16*c9945492SAndroid Build Coastguard Worker	ldr r2,1f
17*c9945492SAndroid Build Coastguard Worker	ldr r1,[r1,r2]
18*c9945492SAndroid Build Coastguard Worker
19*c9945492SAndroid Build Coastguard Worker#if __ARM_ARCH < 8
20*c9945492SAndroid Build Coastguard Worker	tst r1,#0x260
21*c9945492SAndroid Build Coastguard Worker	beq 3f
22*c9945492SAndroid Build Coastguard Worker	// HWCAP_ARM_FPA
23*c9945492SAndroid Build Coastguard Worker	tst r1,#0x20
24*c9945492SAndroid Build Coastguard Worker	beq 2f
25*c9945492SAndroid Build Coastguard Worker	ldc p2, cr4, [ip], #48
26*c9945492SAndroid Build Coastguard Worker#endif
27*c9945492SAndroid Build Coastguard Worker2:	tst r1,#0x40
28*c9945492SAndroid Build Coastguard Worker	beq 2f
29*c9945492SAndroid Build Coastguard Worker	.fpu vfp
30*c9945492SAndroid Build Coastguard Worker	vldmia ip!, {d8-d15}
31*c9945492SAndroid Build Coastguard Worker	.fpu softvfp
32*c9945492SAndroid Build Coastguard Worker	.eabi_attribute 10, 0
33*c9945492SAndroid Build Coastguard Worker	.eabi_attribute 27, 0
34*c9945492SAndroid Build Coastguard Worker#if __ARM_ARCH < 8
35*c9945492SAndroid Build Coastguard Worker	// HWCAP_ARM_IWMMXT
36*c9945492SAndroid Build Coastguard Worker2:	tst r1,#0x200
37*c9945492SAndroid Build Coastguard Worker	beq 3f
38*c9945492SAndroid Build Coastguard Worker	ldcl p1, cr10, [ip], #8
39*c9945492SAndroid Build Coastguard Worker	ldcl p1, cr11, [ip], #8
40*c9945492SAndroid Build Coastguard Worker	ldcl p1, cr12, [ip], #8
41*c9945492SAndroid Build Coastguard Worker	ldcl p1, cr13, [ip], #8
42*c9945492SAndroid Build Coastguard Worker	ldcl p1, cr14, [ip], #8
43*c9945492SAndroid Build Coastguard Worker	ldcl p1, cr15, [ip], #8
44*c9945492SAndroid Build Coastguard Worker#endif
45*c9945492SAndroid Build Coastguard Worker2:
46*c9945492SAndroid Build Coastguard Worker3:	bx lr
47*c9945492SAndroid Build Coastguard Worker
48*c9945492SAndroid Build Coastguard Worker.hidden __hwcap
49*c9945492SAndroid Build Coastguard Worker.align 2
50*c9945492SAndroid Build Coastguard Worker1:	.word __hwcap-1b
51