Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Nov 2005 11:51:17 +0000 (UTC)
From:      Bruce Evans <bde@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/lib/msun/src k_cosf.c k_sinf.c
Message-ID:  <200511301151.jAUBpH8v019971@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
bde         2005-11-30 11:51:17 UTC

  FreeBSD src repository

  Modified files:
    lib/msun/src         k_cosf.c k_sinf.c 
  Log:
  Rearranged the polynomial evaluation to reduce dependencies, as in
  k_tanf.c but with different details.
  
  The polynomial is odd with degree 13 for tanf() and odd with degree
  9 for sinf(), so the details are not very different for sinf() -- the
  term with the x**11 and x**13 coefficients goes awaym and (mysteriously)
  it helps to do the evaluation of w = z*z early although moving it later
  was a key optimization for tanf().  The details are different but simpler
  for cosf() because the polynomial is even and of lower degree.
  
  On Athlons, for uniformly distributed args in [-2pi, 2pi], this gives
  an optimization of about 4 cycles (10%) in most cases (13% for sinf()
  on AXP, but 0% for cosf() with gcc-3.3 -O1 on AXP).  The best case
  (sinf() with gcc-3.4 -O1 -fcaller-saves on A64) now takes 33-39 cycles
  (was 37-45 cycles).  Hardware sinf takes 74-129 cycles.  Despite
  being fine tuned for Athlons, the optimization is even larger on
  some other arches (about 15% on ia64 (pluto2) and 20% on alpha (beast)
  with gcc -O2 -fomit-frame-pointer).
  
  Revision  Changes    Path
  1.15      +6 -4      src/lib/msun/src/k_cosf.c
  1.13      +7 -5      src/lib/msun/src/k_sinf.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200511301151.jAUBpH8v019971>