| dnl GCC_CHECK_LIBM | |
| dnl | |
| dnl Check whether -lm is available. This is a pre-requisite for | |
| dnl GCC_CHECK_MATH_FUNC so that it will link with -lm. | |
| AC_DEFUN([GCC_CHECK_LIBM], | |
| [AC_CHECK_LIB([m],[sin])]) | |
| dnl GCC_CHECK_MATH_HEADERS | |
| dnl | |
| dnl Check for math.h and complex.h. This is a pre-requisite for | |
| dnl GCC_CHECK_MATH_FUNC so that it includes the right headers. | |
| dnl (Some systems, such as AIX or OpenVMS may define macro for math | |
| dnl functions). | |
| AC_DEFUN([GCC_CHECK_MATH_HEADERS], | |
| [AC_CHECK_HEADERS_ONCE(math.h complex.h)]) | |
| dnl GCC_CHECK_MATH_FUNC([name]) | |
| dnl | |
| dnl Check whether math function NAME is available on the system (by compiling | |
| dnl and linking a C program) and run define HAVE_name on success. | |
| dnl | |
| dnl Note that OpenVMS system insists on including complex.h before math.h | |
| AC_DEFUN([GCC_CHECK_MATH_FUNC], | |
| [ | |
| AC_REQUIRE([GCC_CHECK_LIBM]) | |
| AC_REQUIRE([GCC_CHECK_MATH_HEADERS]) | |
| AC_CACHE_CHECK([for $1], [gcc_cv_math_func_$1], | |
| [AC_LINK_IFELSE([AC_LANG_SOURCE([ | |
| #ifdef HAVE_COMPLEX_H | |
| #include <complex.h> | |
| #endif | |
| #ifdef HAVE_MATH_H | |
| #include <math.h> | |
| #endif | |
| int (*ptr)() = (int (*)())$1; | |
| int | |
| main () | |
| { | |
| return 0; | |
| } | |
| ])], | |
| [gcc_cv_math_func_$1=yes], | |
| [gcc_cv_math_func_$1=no])]) | |
| if test $gcc_cv_math_func_$1 = yes; then | |
| AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1),[1], | |
| [Define to 1 if you have the `$1' function.]) | |
| fi | |
| ]) | |
| dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1([name], [type]) | |
| dnl | |
| dnl Check if math function NAME fallback for function with single | |
| dnl TYPE argument and TYPE result can be implemented using | |
| dnl __builtin_NAME expanded inline without needing unavailable math | |
| dnl library function. | |
| AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1], | |
| [ | |
| AC_REQUIRE([GCC_CHECK_LIBM]) | |
| if test $gcc_cv_math_func_$1 = no; then | |
| AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1], | |
| [AC_LINK_IFELSE([AC_LANG_SOURCE([ | |
| $2 | |
| $1_fallback ($2 x) | |
| { | |
| return __builtin_$1 (x); | |
| } | |
| int | |
| main () | |
| { | |
| return 0; | |
| } | |
| ])], | |
| [gcc_cv_math_inline_builtin_$1=yes], | |
| [gcc_cv_math_inline_builtin_$1=no])]) | |
| if test $gcc_cv_math_inline_builtin_$1 = yes; then | |
| AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1], | |
| [Define to 1 if `__builtin_$1' is expanded inline.]) | |
| fi | |
| fi]) | |
| dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2([name], [type]) | |
| dnl | |
| dnl Check if math function NAME fallback for function with two | |
| dnl TYPE arguments and TYPE result can be implemented using | |
| dnl __builtin_NAME expanded inline without needing unavailable math | |
| dnl library function. | |
| AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2], | |
| [ | |
| AC_REQUIRE([GCC_CHECK_LIBM]) | |
| if test $gcc_cv_math_func_$1 = no; then | |
| AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1], | |
| [AC_LINK_IFELSE([AC_LANG_SOURCE([ | |
| $2 | |
| $1_fallback ($2 x, $2 y) | |
| { | |
| return __builtin_$1 (x, y); | |
| } | |
| int | |
| main () | |
| { | |
| return 0; | |
| } | |
| ])], | |
| [gcc_cv_math_inline_builtin_$1=yes], | |
| [gcc_cv_math_inline_builtin_$1=no])]) | |
| if test $gcc_cv_math_inline_builtin_$1 = yes; then | |
| AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1], | |
| [Define to 1 if `__builtin_$1' is expanded inline.]) | |
| fi | |
| fi]) |