https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106763
--- Comment #11 from Richard Earnshaw <rearnsha at gcc dot gnu.org> --- (In reply to George Pee from comment #9) > Using this works around the issue by treating it via a neon path and > enabling the vfp bit and retrying the instruction. > > @@ -824,6 +824,9 @@ call_fpe: > .align 6 > > .LCneon_arm_opcodes: > + .word 0xee000000 @ mask > + .word 0xee000000 @ opcode > + > .word 0xfe000000 @ mask > .word 0xf2000000 @ opcode > > No, that's not going to be the right change (and wouldn't support Thumb, either). I'd start off by trying the following, though it's completely untested: diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 0ea8529a4872..df6e3c8533fa 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S @@ -629,11 +629,12 @@ call_fpe: #endif ret.w lr @ CP#7 ret.w lr @ CP#8 - ret.w lr @ CP#9 #ifdef CONFIG_VFP + W(b) do_vfp @ CP#9 (VFP) W(b) do_vfp @ CP#10 (VFP) W(b) do_vfp @ CP#11 (VFP) #else + ret.w lr @ CP#9 (VFP) ret.w lr @ CP#10 (VFP) ret.w lr @ CP#11 (VFP) #endif