This is the mail archive of the libc-hacker@sourceware.cygnus.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
>>>>> Ulrich Drepper writes: > I have generally no problem with this but the granularity of the patch > is not OK. The -ffast-math flag should only enable additional > function which really behave differently then the libm functions. > Looking briefly through the mathinline.h file this at least excludes > lrintf > lrint > lrintl > llrintf > llrint > llrintl > finite > Perhaps > ldexpf > ldexp > ldexpl Here's a patch for mathinline and the documentation. Jakub, could you check whether sysdeps/sparc/fpu/bits/mathinline also needs some #ifdef __FAST_MATH__ ? Thanks, Andreas 2000-04-15 Andreas Jaeger <aj@suse.de> * manual/math.texi (FP Function Optimizations): Document gcc -ffast-math behaviour with mathinlines. * sysdeps/i386/fpu/bits/mathinline.h: Only use save inline functions unless -ffast-math is given to gcc. --- libc-clean/sysdeps/i386/fpu/bits/mathinline.h Tue Mar 28 22:16:56 2000 +++ glibc-2.2/sysdeps/i386/fpu/bits/mathinline.h Sat Apr 15 20:00:22 2000 @@ -281,6 +281,8 @@ __inline_mathcode (__sgn, __x, \ return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0)) +/* __FAST_MATH__ is defined by gcc -ffast-math. */ +#ifdef __FAST_MATH__ __inline_mathcode (__pow2, __x, \ register long double __value; \ register long double __exponent; \ @@ -474,7 +476,8 @@ __inline_mathopNP (sqrt, "fsqrt") __inline_mathopNP_ (long double, __sqrtl, "fsqrt") - +#endif /* __FAST_MATH__ */ + #if __GNUC_PREREQ (2, 8) __inline_mathcodeNP_ (double, fabs, __x, return __builtin_fabs (__x)) __inline_mathcodeNP_ (float, fabsf, __x, return __builtin_fabsf (__x)) @@ -485,6 +488,7 @@ __inline_mathop_ (long double, __fabsl, "fabs") #endif +#ifdef __FAST_MATH__ /* The argument range of this inline version is reduced. */ __inline_mathopNP (sin, "fsin") /* The argument range of this inline version is reduced. */ @@ -540,7 +544,8 @@ __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); \ __asm __volatile ("fldcw %0" : : "m" (__cw)); \ return __value) - +#endif /* __FAST_MATH__ */ + #define __ldexp_code \ register long double __value; \ __asm __volatile__ \ @@ -557,7 +562,7 @@ /* Optimized versions for some non-standardized functions. */ #if defined __USE_ISOC99 || defined __USE_MISC - +#ifdef __FAST_MATH__ __inline_mathcodeNP (expm1, __x, __expm1_code) /* We cannot rely on M_SQRT being defined. So we do it for ourself @@ -600,11 +605,13 @@ ("fxtract\n\t" \ : "=t" (__junk), "=u" (__value) : "0" (__x)); \ return __value) - +#endif /* __FAST_MATH__ */ #endif #ifdef __USE_ISOC99 +#ifdef __FAST_MATH__ __inline_mathop_declNP (log2, "fld1; fxch; fyl2x", "0" (__x) : "st(1)") +#endif /* __FAST_MATH__ */ __MATH_INLINE float ldexpf (float __x, int __y) @@ -618,9 +625,11 @@ __ldexp_code; } +#ifdef __FAST_MATH__ __inline_mathcodeNP3 (fma, __x, __y, __z, return (__x * __y) + __z) __inline_mathopNP (rint, "frndint") +#endif /* __FAST_MATH__ */ #define __lrint_code \ long int __lrintres; \ @@ -672,7 +681,7 @@ #ifdef __USE_MISC - +#ifdef __FAST_MATH__ __inline_mathcodeNP2 (drem, __x, __y, \ register double __value; \ register int __clobbered; \ @@ -683,6 +692,7 @@ "jp 1b" \ : "=t" (__value), "=&a" (__clobbered) : "0" (__x), "u" (__y) : "cc"); \ return __value) +#endif /* __FAST_MATH__ */ /* This function is used in the `isfinite' macro. */ @@ -695,23 +705,24 @@ } /* Miscellaneous functions */ - +#ifdef __FAST_MATH__ __inline_mathcode (__coshm1, __x, \ register long double __exm1 = __expm1l (__fabsl (__x)); \ return 0.5 * (__exm1 / (__exm1 + 1.0)) * __exm1) __inline_mathcode (__acosh1p, __x, \ return log1pl (__x + __sqrtl (__x) * __sqrtl (__x + 2.0))) - +#endif /* __FAST_MATH__ */ #endif /* __USE_MISC */ /* Undefine some of the large macros which are not used anymore. */ +#ifdef __FAST_MATH__ #undef __expm1_code #undef __exp_code #undef __atan2_code #undef __sincos_code - -#endif /* __NO_MATH_INLINES */ +#endif /* __FAST_MATH__ */ +#endif /* __NO_MATH_INLINES && __OPTIMIZE */ /* This code is used internally in the GNU libc. */ --- libc-clean/manual/math.texi Sun Oct 31 09:19:58 1999 +++ glibc-2.2/manual/math.texi Sat Apr 15 20:09:59 2000 @@ -1770,9 +1770,10 @@ can increase the speed of generated code significantly. The drawback is that code size will increase, and the increase is not always negligible. -The speed increase has one drawback: the inline functions might not set -@code{errno} and might not have the same precission as the library -functions. +There are two kind of inline functions: Those that give the same result +as the library functions and others that might not set @code{errno} and +might not have the same precission as the library functions. The latter +are only available if the flag @code{-ffast-math} is given to GNU CC. In cases where the inline functions and macros are not wanted the symbol @code{__NO_MATH_INLINES} should be defined before any system header is -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.rhein-neckar.de currently: aj@oss.sgi.com
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |