[Bug target/106763] Armv8.2 vmov.f16 instruction sometimes causes SIGILL
rearnsha at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Sep 1 09:57:11 GMT 2022
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
More information about the Gcc-bugs
mailing list