> 
> 
> 
> Yes I see now... a quite complicated way to express the choice logic:
> 
> 1. if -fcx-limited-range is set go straight for the quick overflowing  
> version.
> 2. be strict in case of ISO C99.
> 3. handle floaing poing divisions more precisely then multiplications  
> else.

if you look at where flag_complex_method is defined in toplev.c:
there is a nice comment:
/* 0 means straightforward implementation of complex divide acceptable.
   1 means wide ranges of inputs must work for complex divide.
   2 means C99-like requirements for complex multiply and divide.  */


> 
> >> 2. Shouldn't the logic when to decide which kind of implementation to
> >> take
> >> not look a bit more like in the multiplication case?
> >
> > It is the same in general anyways but division is the one that is
> > different between flag_complex_method==0 and flag_complex_method==1.
> 
> OK. This confirms that the three state flag_complex_method could be
> eliminated, and fcx_limited_range used directly instead.
> (My final goal is of course something in the way of #pragma STDC  
> CX_LIMITED_RANGE)...

No, they cannot.
We default to flag_complex_method == 1.
Then with -fcx-limited-range we get = 0:
  /* With -fcx-limited-range, we do cheap and quick complex arithmetic.  */
  if (flag_cx_limited_range)
    flag_complex_method = 0;

And with -std=c99, we get 2:
  /* C99 requires special handling of complex multiplication and division;
     -ffast-math and -fcx-limited-range are handled in process_options.  */
  if (flag_isoc99)
    flag_complex_method = 2;

I don't see why you think we can elimitate the three state variable.

We allow complex types in GNU C89.  Plus other front-ends use complex types
so getting rid of the three state variable will cause regressions in
say fortran.

-- Pinski

Reply via email to