https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115732
Bug ID: 115732
Summary: Arm32 architecture definitions for v8+ appear to have
wrong FPU/SIMD defaults
Product: gcc
Version: 14.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: driver
Assignee: unassigned at gcc dot gnu.org
Reporter: alex at alexrp dot com
Target Milestone: ---
To my eye, it appears that GCC's architecture definitions in
`gcc/config/arm/arm-cpus.in` are incomplete for Arm v8+. These all have a
`nofp` option but no `fp` option, strongly indicating that the intent is for
them to have an FPU by default, which would make sense for v8+.
It's also worth noting that LLVM's definitions for these Arm versions include
FPU/SIMD:
https://github.com/llvm/llvm-project/blob/a8e1c3e1239604ac787b6a2d39b5278ddec8aa8a/llvm/lib/Target/ARM/ARMArchitectures.td#L85-L95
Unfortunately, this doesn't seem to be working as intended:
$ ./prefix/armv8a-linux-gnueabihf/bin/armv8a-linux-gnueabihf-gcc
-march=armv8-a -mfloat-abi=hard empty.c -c
cc1: error: ‘-mfloat-abi=hard’: selected architecture lacks an FPU
And due to the lack of an `fp` option, the obvious thing doesn't work:
$ ./prefix/armv8a-linux-gnueabihf/bin/armv8a-linux-gnueabihf-gcc
-march=armv8-a+fp -mfloat-abi=hard empty.c -c
armv8a-linux-gnueabihf-gcc: error: ‘armv8-a’ does not support feature ‘fp’
armv8a-linux-gnueabihf-gcc: note: valid feature names are: crc simd crypto
nocrypto nofp sb predres; did you mean ‘nofp’?
armv8a-linux-gnueabihf-gcc: error: ‘armv8-a’ does not support feature ‘fp’
armv8a-linux-gnueabihf-gcc: note: valid feature names are: crc simd crypto
nocrypto nofp sb predres; did you mean ‘nofp’?
This does, but again, seems suspect because SIMD probably ought to be default?:
$ ./prefix/armv8a-linux-gnueabihf/bin/armv8a-linux-gnueabihf-gcc
-march=armv8-a+simd -mfloat-abi=hard empty.c -c
The same issue occurs for every architecture definition after v8 (v8.1, v8.2,
etc).
GCC configuration:
$ Using built-in specs.
COLLECT_GCC=./prefix/armv8a-linux-gnueabihf/bin/armv8a-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/home/alexrp/Source/gcc/prefix/armv8a-linux-gnueabihf/libexec/gcc/armv8a-linux-gnueabihf/14.1.0/lto-wrapper
Target: armv8a-linux-gnueabihf
Configured with: ../configure --build=x86_64-cross-linux-gnu
--target=armv8a-linux-gnueabihf
--prefix=/home/alexrp/Source/gcc/prefix/armv8a-linux-gnueabihf
--program-prefix=armv8a-linux-gnueabihf-
--with-gxx-include-dir=/home/alexrp/Source/gcc/prefix/armv8a-linux-gnueabihf/sysroot/usr/include/c++
--with-sysroot=/home/alexrp/Source/gcc/prefix/armv8a-linux-gnueabihf/sysroot
--with-system-readline --with-system-zlib
--with-toolexeclibdir=/home/alexrp/Source/gcc/prefix/armv8a-linux-gnueabihf/sysroot/usr/lib
--enable-host-bind-now --enable-host-pie --enable-multiarch --disable-multilib
--enable-obsolete --with-arch=armv8-a --enable-languages=c,c++,jit
--enable-host-shared
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.1.0 (GCC)