mirror of
https://github.com/ziglang/zig.git
synced 2024-12-14 15:20:13 +00:00
musl [PATCH] arm: fix setjmp and longjmp asm for armv8-a
From: Szabolcs Nagy <szabolcs.nagy@arm.com> armv8 removed the coprocessor instructions other than cp14, so on an armv8 system the related hwcaps should never be set. new llvm complains about the use of coprocessor instructions in armv8-a mode (even though they are never executed at runtime), so ifdef them out when musl is built for armv8. <dalias> i think the patch looks ok
This commit is contained in:
parent
dc3c4197c6
commit
40e77dad83
@ -16,11 +16,14 @@ longjmp:
|
||||
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
|
||||
@ -28,6 +31,8 @@ longjmp:
|
||||
.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
|
||||
@ -36,6 +41,8 @@ longjmp:
|
||||
ldcl p1, cr13, [ip], #8
|
||||
ldcl p1, cr14, [ip], #8
|
||||
ldcl p1, cr15, [ip], #8
|
||||
#endif
|
||||
2:
|
||||
3: bx lr
|
||||
|
||||
.hidden __hwcap
|
@ -18,11 +18,14 @@ setjmp:
|
||||
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
|
||||
@ -30,6 +33,8 @@ setjmp:
|
||||
.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
|
||||
@ -38,6 +43,8 @@ setjmp:
|
||||
stcl p1, cr13, [ip], #8
|
||||
stcl p1, cr14, [ip], #8
|
||||
stcl p1, cr15, [ip], #8
|
||||
#endif
|
||||
2:
|
||||
3: bx lr
|
||||
|
||||
.hidden __hwcap
|
@ -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",
|
||||
|
Loading…
Reference in New Issue
Block a user