diff --git a/lib/libc/musl/src/setjmp/arm/longjmp.S b/lib/libc/musl/src/setjmp/arm/longjmp.S new file mode 100644 index 0000000000000000000000000000000000000000..8df0b8190dd7c8f8be90f6c089b7469c43d7a373 --- /dev/null +++ b/lib/libc/musl/src/setjmp/arm/longjmp.S @@ -0,0 +1,50 @@ +.syntax unified +.global _longjmp +.global longjmp +.type _longjmp,%function +.type longjmp,%function +_longjmp: +longjmp: + mov ip,r0 + movs r0,r1 + moveq r0,#1 + ldmia ip!, {v1,v2,v3,v4,v5,v6,sl,fp} + ldmia ip!, {r2,lr} + mov sp,r2 + + adr r1,1f + ldr r2,1f + ldr r1,[r1,r2] + +#if __ARM_ARCH < 8 + tst r1,#0x260 + beq 3f + // HWCAP_ARM_FPA + tst r1,#0x20 + beq 2f + ldc p2, cr4, [ip], #48 +#endif +2: tst r1,#0x40 + beq 2f + .fpu vfp + vldmia ip!, {d8-d15} + .fpu softvfp + .eabi_attribute 10, 0 + .eabi_attribute 27, 0 +#if __ARM_ARCH < 8 + // HWCAP_ARM_IWMMXT +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 +#endif +2: +3: bx lr + +.hidden __hwcap +.align 2 +1: .word __hwcap-1b diff --git a/lib/libc/musl/src/setjmp/arm/longjmp.s b/lib/libc/musl/src/setjmp/arm/longjmp.s deleted file mode 100644 index 76cc2920a3c9f0654fde5a9c6006afb9169f3666..0000000000000000000000000000000000000000 --- a/lib/libc/musl/src/setjmp/arm/longjmp.s +++ /dev/null @@ -1,43 +0,0 @@ -.syntax unified -.global _longjmp -.global longjmp -.type _longjmp,%function -.type longjmp,%function -_longjmp: -longjmp: - mov ip,r0 - movs r0,r1 - moveq r0,#1 - ldmia ip!, {v1,v2,v3,v4,v5,v6,sl,fp} - ldmia ip!, {r2,lr} - mov sp,r2 - - 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 - .fpu vfp - vldmia ip!, {d8-d15} - .fpu softvfp - .eabi_attribute 10, 0 - .eabi_attribute 27, 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: bx lr - -.hidden __hwcap -.align 2 -1: .word __hwcap-1b diff --git a/lib/libc/musl/src/setjmp/arm/setjmp.S b/lib/libc/musl/src/setjmp/arm/setjmp.S new file mode 100644 index 0000000000000000000000000000000000000000..45731d228e80fb236b98d2f614a1c29854beea3a --- /dev/null +++ b/lib/libc/musl/src/setjmp/arm/setjmp.S @@ -0,0 +1,52 @@ +.syntax unified +.global __setjmp +.global _setjmp +.global setjmp +.type __setjmp,%function +.type _setjmp,%function +.type setjmp,%function +__setjmp: +_setjmp: +setjmp: + mov ip,r0 + stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp} + mov r2,sp + stmia ip!,{r2,lr} + mov r0,#0 + + adr r1,1f + ldr r2,1f + ldr r1,[r1,r2] + +#if __ARM_ARCH < 8 + tst r1,#0x260 + beq 3f + // HWCAP_ARM_FPA + tst r1,#0x20 + beq 2f + stc p2, cr4, [ip], #48 +#endif +2: tst r1,#0x40 + beq 2f + .fpu vfp + vstmia ip!, {d8-d15} + .fpu softvfp + .eabi_attribute 10, 0 + .eabi_attribute 27, 0 +#if __ARM_ARCH < 8 + // HWCAP_ARM_IWMMXT +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 +#endif +2: +3: bx lr + +.hidden __hwcap +.align 2 +1: .word __hwcap-1b diff --git a/lib/libc/musl/src/setjmp/arm/setjmp.s b/lib/libc/musl/src/setjmp/arm/setjmp.s deleted file mode 100644 index 011315b70f94b2e3d5cdc5d86d2333a34a1fb442..0000000000000000000000000000000000000000 --- a/lib/libc/musl/src/setjmp/arm/setjmp.s +++ /dev/null @@ -1,45 +0,0 @@ -.syntax unified -.global __setjmp -.global _setjmp -.global setjmp -.type __setjmp,%function -.type _setjmp,%function -.type setjmp,%function -__setjmp: -_setjmp: -setjmp: - mov ip,r0 - stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp} - mov r2,sp - stmia ip!,{r2,lr} - mov r0,#0 - - 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 - .fpu vfp - vstmia ip!, {d8-d15} - .fpu softvfp - .eabi_attribute 10, 0 - .eabi_attribute 27, 0 -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: bx lr - -.hidden __hwcap -.align 2 -1: .word __hwcap-1b diff --git a/src/install_files.h b/src/install_files.h index 138d0f5278a75557f023b830b466468ac24bbcde..5e89c07b54f6fdbf85dcad7c60670b78e93633e7 100644 --- a/src/install_files.h +++ b/src/install_files.h @@ -1155,8 +1155,8 @@ static const char *ZIG_MUSL_SRC_FILES[] = { "musl/src/select/select.c", "musl/src/setjmp/aarch64/longjmp.s", "musl/src/setjmp/aarch64/setjmp.s", -"musl/src/setjmp/arm/longjmp.s", -"musl/src/setjmp/arm/setjmp.s", +"musl/src/setjmp/arm/longjmp.S", +"musl/src/setjmp/arm/setjmp.S", "musl/src/setjmp/i386/longjmp.s", "musl/src/setjmp/i386/setjmp.s", "musl/src/setjmp/longjmp.c",