From mboxrd@z Thu Jan 1 00:00:00 1970 From: Weiwen Liu To: rth@cygnus.com Cc: egcs@cygnus.com Subject: Re: complex support on alpha Date: Thu, 02 Oct 1997 09:22:00 -0000 Message-id: References: <199710020532.WAA16123@dot.cygnus.com> X-SW-Source: 1997-10/msg00091.html On Wed, 1 Oct 1997, Richard Henderson wrote: > > 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; > } > I am working on this. I have a question concerning f1: How do we pass C of f1? Both real and imagine part on stack, or real on register and imagine on stack? Weiwen