This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Constant fold sqrt at compile time


Richard Henderson wrote:
> > My proposal is more efficient but requires the function:
> >
> > void real_inc_ulps(REAL_VALUE_TYPE *r, enum machine_mode mode)
> >
> > which will increment the value "r" by one ulps.
>
> Well, really I'd rather the sqrt function be implemented with
> the internal routines, which I think makes it a bit cleaner,
> and makes this function trivial.  It's add_significand with one
> of the significands with bit 1 set.

One of the advantages of using a "real_inc_ulps" is that it can be
implemented much more efficiently than using add_significands.  The
average carry chain for increment is about one bit (half of all
increments have no carry at all), so the probability of requiring
more than a single integer addition are exceedingly low.  A
real_inc_ulps routine could also handle the increment exponent on
mantissa overflow cases efficiently and transparently.

Hence even with sqrt implemented using internal routines, it would
still make sense to split out the "inc_ulps" functionality into its
own subroutine.  Clearly, this inc_ulps would need to use internal
routines, but real_sqrt would retain the choice of being internal or
external, if real_inc_ulps became a public interface.

Roger
--


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]