I'm trying to access ARM/Thumb FEAT_FHM vfmal instructions with the GNU tool chains, without success. With every combination of flags I try, I'm getting output like this from the compiler:
asmtest.S:50: Error: selected processor does not support `vfmal.f16 d0,s1,s2' in ARM modeasmtest.S:51: Error: selected processor does not support `vfmal.f16 q3,d4,d5' in ARM modeasmtest.S:57: Error: selected processor does not support `vfmal.f16 d6,s7,s8[1]' in ARM modeasmtest.S:58: Error: selected processor does not support `vfmal.f16 q9,d10,d11[0]' in ARM modeasmtest.S:64: Error: selected processor does not support `vfmsl.f16 d0,s1,s2' in ARM modeasmtest.S:65: Error: selected processor does not support `vfmsl.f16 q3,d4,d5' in ARM modeasmtest.S:71: Error: selected processor does not support `vfmsl.f16 d6,s7,s8[1]' in ARM modeasmtest.S:72: Error: selected processor does not support `vfmsl.f16 q9,d10,d11[0]' in ARM mode
What options do I need to set for these instructions to be enabled? And if I encounter a similar problem in future with other instructions, what is the process to use to find the exact flag combinations that allow instructions to be accessed?
Ideally, I would like to be able to disable this check altogether and just have the compiler do what I ask without question. Is this possible?
Thanks.
These instructions are optional in Arm Architecture 8.2A and 8.3A, mandatory in 8.4A and later.https://developer.arm.com/documentation/100076/0100/a32-t32-instruction-set-reference/advanced-simd-instructions--32-bit-/vfmal--vector-
Which processor are you using?
I tested the 2021.7 release as below, and built successfully:
arm-none-eabi-as -c -march=armv8.2-a+fp16fml vfmal.S arm-none-eabi-as -c -march=armv8.3-a+fp16fml vfmal.S arm-none-eabi-as -c -march=armv8.4-a+fp16 vfmal.S
These 'feature modifiers' are described here:https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html#g_t-march-and--mcpu-Feature-Modifiers
I am using this compile line:
gcc-arm-10.3-2021.07-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc -c -march=armv8.4-a+fp16 -mfpu=neon-fp-armv8 asmtest.S -o asmtest.S.o
So I am I think using what you specified as option 3 without success. What am I doing wrong?
I want to use the resulting executable on the Foundation Platform which I believe implements these instructions.
Ok, I need to use:
-Wa,-march=armv8.4-a+fp16
To get this down to the assember I think.