Disable x87 inline functions for x86-64

This commit is contained in:
H.J. Lu 2012-06-15 06:52:47 -07:00
parent 36d54b744e
commit ed1825f858
2 changed files with 135 additions and 126 deletions

View File

@ -1,3 +1,10 @@
2012-06-15 H.J. Lu <hongjiu.lu@intel.com>
[BZ #14050]
[BZ #14117]
* sysdeps/i386/fpu/bits/mathinline.h: Disable x87 inline
functions if __x86_64__ is defined.
2012-06-15 Chung-Lin Tang <cltang@codesourcery.com>
* string/endian.h: Add !__ASSEMBLER__ condition for including

View File

@ -380,8 +380,10 @@ __NTH (floorf (float __x))
__END_NAMESPACE_C99
# endif
# endif
#endif
#if ((!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) \
#ifndef __x86_64__
# if ((!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) \
&& defined __OPTIMIZE__)
/* The inline functions do not set errno or raise necessarily the
@ -395,7 +397,7 @@ __END_NAMESPACE_C99
We define two sets of macros. The set with the additional NP
doesn't add a prototype declaration. */
#if defined __USE_MISC || defined __USE_ISOC99
# if defined __USE_MISC || defined __USE_ISOC99
# define __inline_mathop(func, op) \
__inline_mathop_ (double, func, op) \
__inline_mathop_ (float, __CONCAT(func,f), op) \
@ -404,20 +406,20 @@ __END_NAMESPACE_C99
__inline_mathopNP_ (double, func, op) \
__inline_mathopNP_ (float, __CONCAT(func,f), op) \
__inline_mathopNP_ (long double, __CONCAT(func,l), op)
#else
# else
# define __inline_mathop(func, op) \
__inline_mathop_ (double, func, op)
# define __inline_mathopNP(func, op) \
__inline_mathopNP_ (double, func, op)
#endif
# endif
#define __inline_mathop_(float_type, func, op) \
# define __inline_mathop_(float_type, func, op) \
__inline_mathop_decl_ (float_type, func, op, "0" (__x))
#define __inline_mathopNP_(float_type, func, op) \
# define __inline_mathopNP_(float_type, func, op) \
__inline_mathop_declNP_ (float_type, func, op, "0" (__x))
#if defined __USE_MISC || defined __USE_ISOC99
# if defined __USE_MISC || defined __USE_ISOC99
# define __inline_mathop_decl(func, op, params...) \
__inline_mathop_decl_ (double, func, op, params) \
__inline_mathop_decl_ (float, __CONCAT(func,f), op, params) \
@ -426,18 +428,18 @@ __END_NAMESPACE_C99
__inline_mathop_declNP_ (double, func, op, params) \
__inline_mathop_declNP_ (float, __CONCAT(func,f), op, params) \
__inline_mathop_declNP_ (long double, __CONCAT(func,l), op, params)
#else
# else
# define __inline_mathop_decl(func, op, params...) \
__inline_mathop_decl_ (double, func, op, params)
# define __inline_mathop_declNP(func, op, params...) \
__inline_mathop_declNP_ (double, func, op, params)
#endif
# endif
#define __inline_mathop_decl_(float_type, func, op, params...) \
# define __inline_mathop_decl_(float_type, func, op, params...) \
__MATH_INLINE float_type func (float_type) __THROW; \
__inline_mathop_declNP_ (float_type, func, op, params)
#define __inline_mathop_declNP_(float_type, func, op, params...) \
# define __inline_mathop_declNP_(float_type, func, op, params...) \
__MATH_INLINE float_type __NTH (func (float_type __x)) \
{ \
register float_type __result; \
@ -446,7 +448,7 @@ __END_NAMESPACE_C99
}
#if defined __USE_MISC || defined __USE_ISOC99
# if defined __USE_MISC || defined __USE_ISOC99
# define __inline_mathcode(func, arg, code) \
__inline_mathcode_ (double, func, arg, code) \
__inline_mathcode_ (float, __CONCAT(func,f), arg, code) \
@ -471,7 +473,7 @@ __END_NAMESPACE_C99
__inline_mathcodeNP3_ (double, func, arg1, arg2, arg3, code) \
__inline_mathcodeNP3_ (float, __CONCAT(func,f), arg1, arg2, arg3, code) \
__inline_mathcodeNP3_ (long double, __CONCAT(func,l), arg1, arg2, arg3, code)
#else
# else
# define __inline_mathcode(func, arg, code) \
__inline_mathcode_ (double, func, (arg), code)
# define __inline_mathcodeNP(func, arg, code) \
@ -484,47 +486,47 @@ __END_NAMESPACE_C99
__inline_mathcode3_ (double, func, arg1, arg2, arg3, code)
# define __inline_mathcodeNP3(func, arg1, arg2, arg3, code) \
__inline_mathcodeNP3_ (double, func, arg1, arg2, arg3, code)
#endif
# endif
#define __inline_mathcode_(float_type, func, arg, code) \
# define __inline_mathcode_(float_type, func, arg, code) \
__MATH_INLINE float_type func (float_type) __THROW; \
__inline_mathcodeNP_(float_type, func, arg, code)
#define __inline_mathcodeNP_(float_type, func, arg, code) \
# define __inline_mathcodeNP_(float_type, func, arg, code) \
__MATH_INLINE float_type __NTH (func (float_type arg)) \
{ \
code; \
}
#define __inline_mathcode2_(float_type, func, arg1, arg2, code) \
# define __inline_mathcode2_(float_type, func, arg1, arg2, code) \
__MATH_INLINE float_type func (float_type, float_type) __THROW; \
__inline_mathcodeNP2_ (float_type, func, arg1, arg2, code)
#define __inline_mathcodeNP2_(float_type, func, arg1, arg2, code) \
# define __inline_mathcodeNP2_(float_type, func, arg1, arg2, code) \
__MATH_INLINE float_type __NTH (func (float_type arg1, float_type arg2)) \
{ \
code; \
}
#define __inline_mathcode3_(float_type, func, arg1, arg2, arg3, code) \
# define __inline_mathcode3_(float_type, func, arg1, arg2, arg3, code) \
__MATH_INLINE float_type func (float_type, float_type, float_type) __THROW; \
__inline_mathcodeNP3_(float_type, func, arg1, arg2, arg3, code)
#define __inline_mathcodeNP3_(float_type, func, arg1, arg2, arg3, code) \
# define __inline_mathcodeNP3_(float_type, func, arg1, arg2, arg3, code) \
__MATH_INLINE float_type __NTH (func (float_type arg1, float_type arg2, \
float_type arg3)) \
{ \
code; \
}
#endif
# endif
#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
# if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
/* Miscellaneous functions */
/* __FAST_MATH__ is defined by gcc -ffast-math. */
#ifdef __FAST_MATH__
# ifdef __FAST_MATH__
# ifdef __USE_GNU
# define __sincos_code \
register long double __cosr; \
@ -635,13 +637,13 @@ __inline_mathcodeNP (tan, __x, \
: "=t" (__value2), "=u" (__value) : "0" (__x)); \
return __value)
# endif
#endif /* __FAST_MATH__ */
# endif /* __FAST_MATH__ */
#if __GNUC_PREREQ (3, 4)
# if __GNUC_PREREQ (3, 4)
__inline_mathcodeNP2_ (long double, __atan2l, __y, __x,
return __builtin_atan2l (__y, __x))
#else
# else
# define __atan2_code \
register long double __value; \
__asm __volatile__ \
@ -652,10 +654,10 @@ __inline_mathcodeNP2_ (long double, __atan2l, __y, __x,
__inline_mathcodeNP2 (atan2, __y, __x, __atan2_code)
# endif
__inline_mathcodeNP2_ (long double, __atan2l, __y, __x, __atan2_code)
#endif
# endif
#if defined __FAST_MATH__ && !__GNUC_PREREQ (3, 5)
# if defined __FAST_MATH__ && !__GNUC_PREREQ (3, 5)
__inline_mathcodeNP2 (fmod, __x, __y, \
register long double __value; \
__asm __volatile__ \
@ -665,10 +667,10 @@ __inline_mathcodeNP2 (fmod, __x, __y, \
"jp 1b" \
: "=t" (__value) : "0" (__x), "u" (__y) : "ax", "cc"); \
return __value)
#endif
# endif
#ifdef __FAST_MATH__
# ifdef __FAST_MATH__
# if !__GNUC_PREREQ (3,3)
__inline_mathopNP (sqrt, "fsqrt")
__inline_mathopNP_ (long double, __sqrtl, "fsqrt")
@ -676,21 +678,21 @@ __inline_mathopNP_ (long double, __sqrtl, "fsqrt")
# else
# define __libc_sqrtl(n) __builtin_sqrtl (n)
# endif
#endif
# endif
#if __GNUC_PREREQ (2, 8)
# if __GNUC_PREREQ (2, 8)
__inline_mathcodeNP_ (double, fabs, __x, return __builtin_fabs (__x))
# if defined __USE_MISC || defined __USE_ISOC99
__inline_mathcodeNP_ (float, fabsf, __x, return __builtin_fabsf (__x))
__inline_mathcodeNP_ (long double, fabsl, __x, return __builtin_fabsl (__x))
# endif
__inline_mathcodeNP_ (long double, __fabsl, __x, return __builtin_fabsl (__x))
#else
# else
__inline_mathop (fabs, "fabs")
__inline_mathop_ (long double, __fabsl, "fabs")
#endif
# endif
#ifdef __FAST_MATH__
# ifdef __FAST_MATH__
# if !__GNUC_PREREQ (3, 4)
/* The argument range of this inline version is reduced. */
__inline_mathopNP (sin, "fsin")
@ -710,7 +712,7 @@ __inline_mathcodeNP (acos, __x, return __atan2l (__libc_sqrtl (1.0 - __x * __x),
# if !__GNUC_PREREQ (3, 4)
__inline_mathop_declNP (atan, "fld1; fpatan", "0" (__x) : "st(1)")
# endif
#endif /* __FAST_MATH__ */
# endif /* __FAST_MATH__ */
__inline_mathcode_ (long double, __sgn1l, __x, \
__extension__ union { long double __xld; unsigned int __xi[3]; } __n = \
@ -721,7 +723,7 @@ __inline_mathcode_ (long double, __sgn1l, __x, \
return __n.__xld)
#ifdef __FAST_MATH__
# ifdef __FAST_MATH__
/* The argument range of the inline version of sinhl is slightly reduced. */
__inline_mathcodeNP (sinh, __x, \
register long double __exm1 = __expm1l (__fabsl (__x)); \
@ -734,7 +736,7 @@ __inline_mathcodeNP (cosh, __x, \
__inline_mathcodeNP (tanh, __x, \
register long double __exm1 = __expm1l (-__fabsl (__x + __x)); \
return __exm1 / (__exm1 + 2.0) * __sgn1l (-__x))
#endif
# endif
__inline_mathcodeNP (floor, __x, \
register long double __value; \
@ -772,7 +774,7 @@ __inline_mathcodeNP (ceil, __x, \
: "0" (__x)); \
return __value)
#ifdef __FAST_MATH__
# ifdef __FAST_MATH__
# define __ldexp_code \
register long double __value; \
__asm __volatile__ \
@ -785,11 +787,11 @@ __NTH (ldexp (double __x, int __y))
{
__ldexp_code;
}
#endif
# endif
/* Optimized versions for some non-standardized functions. */
#if defined __USE_ISOC99 || defined __USE_MISC
# if defined __USE_ISOC99 || defined __USE_MISC
# ifdef __FAST_MATH__
__inline_mathcodeNP (expm1, __x, __expm1_code)
@ -841,9 +843,9 @@ __inline_mathcodeNP(logb, __x, \
# endif
# endif
#endif
# endif
#ifdef __USE_ISOC99
# ifdef __USE_ISOC99
# ifdef __FAST_MATH__
# if !__GNUC_PREREQ (3, 5)
@ -911,10 +913,10 @@ __NTH (llrintl (long double __x))
}
# undef __llrint_code
#endif
# endif
#ifdef __USE_MISC
# ifdef __USE_MISC
# if defined __FAST_MATH__ && !__GNUC_PREREQ (3, 5)
__inline_mathcodeNP2 (drem, __x, __y, \
@ -939,21 +941,21 @@ __NTH (__finite (double __x))
| 0x800fffffu) + 1) >> 31));
}
#endif /* __USE_MISC */
# endif /* __USE_MISC */
/* Undefine some of the large macros which are not used anymore. */
#undef __atan2_code
#ifdef __FAST_MATH__
# undef __atan2_code
# ifdef __FAST_MATH__
# undef __expm1_code
# undef __exp_code
# undef __sincos_code
#endif /* __FAST_MATH__ */
# endif /* __FAST_MATH__ */
#endif /* __NO_MATH_INLINES */
# endif /* __NO_MATH_INLINES */
/* This code is used internally in the GNU libc. */
#ifdef __LIBC_INTERNAL_MATH_INLINES
# ifdef __LIBC_INTERNAL_MATH_INLINES
__inline_mathop (__ieee754_sqrt, "fsqrt")
__inline_mathcode2 (__ieee754_atan2, __y, __x,
register long double __value;
@ -961,6 +963,6 @@ __inline_mathcode2 (__ieee754_atan2, __y, __x,
: "=t" (__value)
: "0" (__x), "u" (__y) : "st(1)");
return __value;)
#endif
# endif
#endif /* __GNUC__ */
#endif /* !__x86_64__ */