[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