https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121784

--- Comment #4 from Heinrich Schuchardt <xypron.glpk at gmx dot de> ---
Hello Andrew,

Thank you for your analysis. I experimented a bit with the type of F in your
reduced example.

These fail:
using F = __attribute__((vector_size(16))) double;
using F = __attribute__((vector_size(16))) float;
using F = __attribute__((vector_size(16))) short;
using F = struct {float x0; float x1; float x2; float x3;};
using F = struct {float x0; float x1; float x2;};

These succeed:
using F = __attribute__((vector_size(8))) double;
using F = __attribute__((vector_size(8))) float;
using F = __attribute__((vector_size(8))) short;
using F = struct {float x0; float x1;};

I then tried with a higher count of arguments:
using StageFn = void (*)(StageList list, int src, int dst, F r, F g, F b, F v,
F w, F x, F y, F z); 

These fail:
using F = __attribute__((vector_size(8))) double;
using F = __attribute__((vector_size(8))) float;
using F = __attribute__((vector_size(8))) short;
using F = struct {double a; double b;};

These succeed:
using F = double;
using F = struct {float a; float b;};

It is weird that `__attribute__((vector_size(8))) double` differently than
`double`
and `__attribute__((vector_size(8))) float` differently than `struct {float a;
float b;};`.

With a lower count of arguments:
using StageFn = void (*)(StageList list, F a);

These fail:
using F = __attribute__((vector_size(32))) double;
using F = __attribute__((vector_size(32))) float;

These succeed:
using F = __attribute__((vector_size(16))) double;
using F = __attribute__((vector_size(16))) float;

Is the number of tail call arguments limited by available registers?

According to the documentation in
https://gcc.gnu.org/onlinedocs/gcc-15.2.0/gcc/Statement-Attributes.html the
only differentiation should be between trivially destructible and non-trivially
destructible arguments. If the arguments are passed by value, it should not
matter if they are in registers or on the stack.

Best regards

Heinrich

Reply via email to