diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/setjmp/arm/longjmp.s | 28 | ||||
| -rw-r--r-- | src/setjmp/arm/setjmp.s | 28 | 
2 files changed, 54 insertions, 2 deletions
diff --git a/src/setjmp/arm/longjmp.s b/src/setjmp/arm/longjmp.s index 690a0089..84ddc22f 100644 --- a/src/setjmp/arm/longjmp.s +++ b/src/setjmp/arm/longjmp.s @@ -8,6 +8,32 @@ longjmp:  	movs r0,r1  	moveq r0,#1  	ldmia ip!, {v1,v2,v3,v4,v5,v6,sl,fp,sp,lr} -	tst lr,#1 + +	adr r1,1f +	ldr r2,1f +	ldr r1,[r1,r2] + +	tst r1,#0x260 +	beq 3f +	tst r1,#0x20 +	beq 2f +	ldc p2, cr4, [ip], #48 +2:	tst r1,#0x40 +	beq 2f +	ldc p11, cr8, [ip], #64 +	ldmia ip!, {r2,r3} +	mcr p10, 7, r3, cr1, cr0, 0 +2:	tst r1,#0x200 +	beq 3f +	ldcl p1, cr10, [ip], #8 +	ldcl p1, cr11, [ip], #8 +	ldcl p1, cr12, [ip], #8 +	ldcl p1, cr13, [ip], #8 +	ldcl p1, cr14, [ip], #8 +	ldcl p1, cr15, [ip], #8 +3:	tst lr,#1  	moveq pc,lr  	bx lr + +.hidden __hwcap +1:	.word __hwcap-1b diff --git a/src/setjmp/arm/setjmp.s b/src/setjmp/arm/setjmp.s index 6985caab..904ff102 100644 --- a/src/setjmp/arm/setjmp.s +++ b/src/setjmp/arm/setjmp.s @@ -10,6 +10,32 @@ setjmp:  	mov ip,r0  	stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp,sp,lr}  	mov r0,#0 -	tst lr,#1 + +	adr r1,1f +	ldr r2,1f +	ldr r1,[r1,r2] + +	tst r1,#0x260 +	beq 3f +	tst r1,#0x20 +	beq 2f +	stc p2, cr4, [ip], #48 +2:	tst r1,#0x40 +	beq 2f +	stc p11, cr8, [ip], #64 +	mrc p10, 7, r2, cr1, cr0, 0 +	stmia ip!, {r0,r2} +2:	tst r1,#0x200 +	beq 3f +	stcl p1, cr10, [ip], #8 +	stcl p1, cr11, [ip], #8 +	stcl p1, cr12, [ip], #8 +	stcl p1, cr13, [ip], #8 +	stcl p1, cr14, [ip], #8 +	stcl p1, cr15, [ip], #8 +3:	tst lr,#1  	moveq pc,lr  	bx lr + +.hidden __hwcap +1:	.word __hwcap-1b  | 
