https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99773
Bug ID: 99773
Summary: ARM v8.1-m MVE interaction with -mfloat-abi not clear
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: clyon at gcc dot gnu.org
Target Milestone: ---
I noticed an unexpected linker error when compiling with
-march=armv8.1-m.main+mve -mfloat-abi=hard -mcpu=cortex-m55 -mthumb
error: /tmp/ccQvvmcJ.o uses VFP register arguments, ./XXX.exe does not
Using mve.fp instead of mve fixes that.
However, I'm used to -mfloat-abi=hard defining the eabi attribute:
Tag_ABI_VFP_args: VFP registers
Compiling
===================================
typedef int __attribute((vector_size(16))) v4si;
float g(float x, float y)
{
x += y;
return x;
}
v4si f(v4si x, v4si y)
{
return x + y;
}
===================================
with -O2 -march=armv8.1-m.main+mve -mfloat-abi=hard
generates for f:
vadd.i32 q0, q0, q1
bx lr
which uses the MVE registers for the parameters, but the object files does not
have the Tag_ABI_VFP_args: VFP registers attribute I would expect.
It does have
Tag_MVE_arch: MVE Integer only
is that enough?
Is the current behavior expected or is there a bug?