complex support on alpha

Richard Henderson rth@cygnus.com
Wed Oct 1 22:34:00 GMT 1997


> The following patch  will calculate number of registers for
> complex arguments correctly and compile complex-5.c correctly.

Well, it is enough to compile those examples properly, but it is
not completely correct.  The problem is that complex numbers should
be treated as two distinct arguments on Alpha, which affects padding
of the arguments passed on the stack.

Have a look at the appended samples.  Note the lossage in the 
handling of C in f1.  And the code generated for f2a and f2b
should be identical wrt g+h/d.

It was a this point I got stuck myself.



r~



typedef __complex__ float FC;

FC f1(int odd, FC a, FC b, FC c)
{
  return a + b + c;
}

FC f2a(float a, float b, float c, float d, float e, float f, float g, float h)
{
  return (a + c + e + g) + 1.0fi * (b + d + f + h);
}

FC f2b(FC a, FC b, FC c, FC d)
{
  return a + b + c + d;
}



More information about the Gcc mailing list