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?

Reply via email to