[Bug target/106763] Armv8.2 vmov.f16 instruction sometimes causes SIGILL
georgepee at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Sep 1 00:33:13 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106763
--- Comment #9 from George Pee <georgepee at gmail dot com> ---
Thank you for following up even after I closed the ticket.
Unfortunately, I'm unable to switch to a 64-bit kernel at the moment.
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
I am now using this simplified case, which fails somewhere between 100,000 and
1,000,000 iterations:
int c = 0;
while(1)
{
c++;
asm (
"vmov.f16 r6, s18\n"
);
if (c % 100 == 0)
printf("%d\n",c);
}
It's quite odd that it is intermittent. After instrumenting vfp enable/disable
in the kernel, it seems as though there is something disabling the vfp bit in
the fpexc register, but it doesn't seem to be the kernel.
I am able to reproduce this with other FP16 instructions, but not other
non-FP16 VFP instructions.
More information about the Gcc-bugs
mailing list