On Monday 02 October 2006 12:57, Joseph S. Myers wrote:
> On Mon, 2 Oct 2006, Jan van Dijk wrote:
> >  * the C99 and C++ standards say *nothing* about the details of compex
> > multiplication
>
> The C99 standard says that real operands aren't converted to complex, but
> as I note in bug 24581, the compiler doesn't expect PLUS_EXPR and
> MULT_EXPR to have arguments of different types, so the front ends might
> need adapting to handle real * complex and real + complex specially.

        Dear Joseph,

My question was a slightly different one. To me it is not clear whether the 
standard allows the treatment of (r,0) as r in complex operations. For 
example: is it allowed to handle (r,0)*(x,y) as r*(x,y)?

If this *is* the case, the special treatment of real*complex etc. that you 
suggested seems unnecessary: we merely have to teach the builtin 
multiplication routines to gracefully handle something like r*(Inf,0) by 
special handling of multiplications in which 0 is involved. lower_complex 
already has this effect (for -O1 and higher).

If this is *not* the case, r*z may need to be handled separately by the front 
ends. But note that this implies that lower_complex and friends are 
off-specs. The 0*whatever-terms cannot be discarded, as is presently done.

I repeat my previous mail: there does not seem to be consensus about what 
standard(s) to implement (Annex G? LIA-x,...), and how to interpret the free 
space in those documents. Could you clarify? 

> Patches welcome, see <http://gcc.gnu.org/contribute.html>.

Triggered by 1*(Inf,0) = (Inf,NaN), I looked inside the compiler for the first 
time, yesterday. I am still leaning what a tree is. So that patch will not be 
rolled by me anytime soon, although I am eagerly learning gcc's internals. 
Thank you for your encouraging words, nevertheless :-)

Regards, Jan.

Reply via email to