cvs commit: src/lib/msun/src e_rem_pio2.c s_cos.c s_sin.c s_tan.c

Bruce Evans bde at
Mon Feb 18 06:02:13 PST 2008

bde         2008-02-18 14:02:12 UTC

  FreeBSD src repository

  Modified files:
    lib/msun/src         e_rem_pio2.c s_cos.c s_sin.c s_tan.c 
  Inline __ieee754__rem_pio2().  With gcc4-2, this gives an average
  optimization of about 10% for cos(x), sin(x) and tan(x) on
  |x| < 2**19*pi/2.  We didn't do this before because __ieee754__rem_pio2()
  is too large and complicated for gcc-3.3 to inline very well.  We don't
  do this for float precision because it interferes with optimization
  of the usual (?) case (|x| < 9pi/4) which is manually inlined for float
  precision only.
  This has some rough edges:
  - some static data is duplicated unnecessarily.  There isn't much after
    the recent move of large tables to k_rem_pio2.c, and some static data
    is duplicated to good affect (all the data static const, so that the
    compiler can evaluate expressions like 2*pio2 at compile time and
    generate even more static data for the constant for this).
  - extern inline is used (for the same reason as in previous inlining of
    k_cosf.c etc.), but C99 apparently doesn't allow extern inline
    functions with static data, and gcc will eventually warn about this.
  Convert to __FBSDID().
  Indent __ieee754_rem_pio2()'s declaration consistently (its style was
  made inconsistent with fdlibm a while ago, so complete this).
  Fix __ieee754_rem_pio2()'s return type to match its prototype.  Someone
  changed too many ints to int32_t's when fixing the assumption that all
  ints are int32_t's.
  Revision  Changes    Path
  1.10      +7 -4      src/lib/msun/src/e_rem_pio2.c
  1.12      +4 -3      src/lib/msun/src/s_cos.c
  1.12      +4 -3      src/lib/msun/src/s_sin.c
  1.12      +4 -3      src/lib/msun/src/s_tan.c

More information about the cvs-src mailing list