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

Bruce Evans bde at FreeBSD.org
Sat Feb 23 12:53:21 UTC 2008


bde         2008-02-23 12:53:21 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 some more by avoiding an
  fabs(), a conditional branch, and sign adjustments of 3 variables for
  x < 0 when the branch is taken.  In double precision, even when the
  branch is perfectly predicted, this saves about 10 cycles or 10% on
  amd64 (A64) and i386 (A64) for the negative half of the range, but
  makes little difference for the positive half of the range.  In float
  precision, it also saves about 4 cycles for the positive half of the
  range on i386, and many more cycles in both halves on amd64 (28 in the
  negative half and 11 in the positive half for tanf), but the amd64
  times for float precision are anomalously slow so the larger
  improvement is only a side effect.
  
  Previous commits arranged for the x < 0 case to be handled simply:
  - one part of the rounding method uses the magic number 0x1.8p52
    instead of the usual 0x1.0p52.  The latter is required for large |x|,
    but it doesn't work for negative x and we don't need it for large |x|.
  - another part of the rounding method no longer needs to add `half'.
    It would have needed to add -half for negative x.
  - removing the "quick check no cancellation" in the double precision
    case removed the need to take the absolute value of the quadrant
    number.
  
  Add my noncopyright in e_rem_pio2.c
  
  Revision  Changes    Path
  1.15      +4 -5      src/lib/msun/src/e_rem_pio2.c
  1.24      +4 -6      src/lib/msun/src/e_rem_pio2f.c


More information about the cvs-src mailing list