cvs commit: src/lib/msun/src e_rem_pio2.c

Bruce Evans bde at
Tue Feb 19 07:30:59 PST 2008

bde         2008-02-19 15:30:58 UTC

  FreeBSD src repository

  Modified files:
    lib/msun/src         e_rem_pio2.c 
  Optimize for 3pi/4 <= |x| <= 9pi/4 in much the same way as for
  pi/4 <= |x| <= 3pi/4.  Use the same branch ladder as for float precision.
  Remove the optimization for |x| near pi/2 and don't do it near the
  multiples of pi/2 in the newly optimized range, since it requires
  fairly large code to handle only relativley few cases.  Ifdef out
  optimization for |x| <= pi/4 since this case can't occur because it
  is done in callers.
  On amd64 (A64), for cos() and sin() with uniformly distributed args,
  no cache misses, some parallelism in the caller, and good but not great
  CC and CFLAGS, etc., this saves about 40 cycles or 38% in the newly
  optimized range, or about 27% on average across the range |x| <= 2pi
  (~65 cycles for most args, while the A64 hardware fcos and fsin take
  ~75 cycles for half the args and 125 cycles for the other half).  The
  speedup for tan() is much smaller, especially relatively.  The speedup
  on i386 (A64) is slightly smaller, especially relatively.  i386 is
  still much slower than amd64 here (unlike in the float case where it
  is slightly faster).
  Revision  Changes    Path
  1.11      +56 -18    src/lib/msun/src/e_rem_pio2.c

More information about the cvs-src mailing list