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

Bruce Evans bde at FreeBSD.org
Fri Feb 22 15:55:16 UTC 2008


bde         2008-02-22 15:55:15 UTC

  FreeBSD src repository

  Modified files:
    lib/msun/src         e_rem_pio2.c e_rem_pio2f.c 
  Log:
  Optimize the 9pi/2 < |x| <= 2**19pi/2 case on amd64 and i386 by avoiding
  the the double to int conversion operation which is very slow on these
  arches.  Assume that the current rounding mode is the default of
  round-to-nearest and use rounding operations in this mode instead of
  faking this mode using the round-towards-zero mode for conversion to
  int.  Round the double to an integer as a double first and as an int
  second since the double result is needed much earler.
  
  Double rounding isn't a problem since we only need a rough approximation.
  We didn't support other current rounding modes and produce much larger
  errors than before if called in a non-default mode.
  
  This saves an average about 10 cycles on amd64 (A64) and about 25 on
  i386 (A64) for x in the above range.  In some cases the saving is over
  25%.  Most cases with |x| < 1000pi now take about 88 cycles for cos
  and sin (with certain CFLAGS, etc.), except on i386 where cos and sin
  (but not cosf and sinf) are much slower at 111 and 121 cycles respectivly
  due to the compiler only optimizing well for float precision.  A64
  hardware cos and sin are slower at 105 cycles on i386 and 110 cycles
  on amd64.
  
  Revision  Changes    Path
  1.12      +9 -0      src/lib/msun/src/e_rem_pio2.c
  1.22      +9 -0      src/lib/msun/src/e_rem_pio2f.c


More information about the cvs-src mailing list