math.m4 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. dnl GCC_CHECK_LIBM
  2. dnl
  3. dnl Check whether -lm is available. This is a pre-requisite for
  4. dnl GCC_CHECK_MATH_FUNC so that it will link with -lm.
  5. AC_DEFUN([GCC_CHECK_LIBM],
  6. [AC_CHECK_LIB([m],[sin])])
  7. dnl GCC_CHECK_MATH_HEADERS
  8. dnl
  9. dnl Check for math.h and complex.h. This is a pre-requisite for
  10. dnl GCC_CHECK_MATH_FUNC so that it includes the right headers.
  11. dnl (Some systems, such as AIX or OpenVMS may define macro for math
  12. dnl functions).
  13. AC_DEFUN([GCC_CHECK_MATH_HEADERS],
  14. [AC_CHECK_HEADERS_ONCE(math.h complex.h)])
  15. dnl GCC_CHECK_MATH_FUNC([name])
  16. dnl
  17. dnl Check whether math function NAME is available on the system (by compiling
  18. dnl and linking a C program) and run define HAVE_name on success.
  19. dnl
  20. dnl Note that OpenVMS system insists on including complex.h before math.h
  21. AC_DEFUN([GCC_CHECK_MATH_FUNC],
  22. [
  23. AC_REQUIRE([GCC_CHECK_LIBM])
  24. AC_REQUIRE([GCC_CHECK_MATH_HEADERS])
  25. AC_CACHE_CHECK([for $1], [gcc_cv_math_func_$1],
  26. [AC_LINK_IFELSE([AC_LANG_SOURCE([
  27. #ifdef HAVE_COMPLEX_H
  28. #include <complex.h>
  29. #endif
  30. #ifdef HAVE_MATH_H
  31. #include <math.h>
  32. #endif
  33. int (*ptr)() = (int (*)())$1;
  34. int
  35. main ()
  36. {
  37. return 0;
  38. }
  39. ])],
  40. [gcc_cv_math_func_$1=yes],
  41. [gcc_cv_math_func_$1=no])])
  42. if test $gcc_cv_math_func_$1 = yes; then
  43. AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1),[1],
  44. [Define to 1 if you have the `$1' function.])
  45. fi
  46. ])
  47. dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1([name], [type])
  48. dnl
  49. dnl Check if math function NAME fallback for function with single
  50. dnl TYPE argument and TYPE result can be implemented using
  51. dnl __builtin_NAME expanded inline without needing unavailable math
  52. dnl library function.
  53. AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1],
  54. [
  55. AC_REQUIRE([GCC_CHECK_LIBM])
  56. if test $gcc_cv_math_func_$1 = no; then
  57. AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1],
  58. [AC_LINK_IFELSE([AC_LANG_SOURCE([
  59. $2
  60. $1_fallback ($2 x)
  61. {
  62. return __builtin_$1 (x);
  63. }
  64. int
  65. main ()
  66. {
  67. return 0;
  68. }
  69. ])],
  70. [gcc_cv_math_inline_builtin_$1=yes],
  71. [gcc_cv_math_inline_builtin_$1=no])])
  72. if test $gcc_cv_math_inline_builtin_$1 = yes; then
  73. AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1],
  74. [Define to 1 if `__builtin_$1' is expanded inline.])
  75. fi
  76. fi])
  77. dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2([name], [type])
  78. dnl
  79. dnl Check if math function NAME fallback for function with two
  80. dnl TYPE arguments and TYPE result can be implemented using
  81. dnl __builtin_NAME expanded inline without needing unavailable math
  82. dnl library function.
  83. AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2],
  84. [
  85. AC_REQUIRE([GCC_CHECK_LIBM])
  86. if test $gcc_cv_math_func_$1 = no; then
  87. AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1],
  88. [AC_LINK_IFELSE([AC_LANG_SOURCE([
  89. $2
  90. $1_fallback ($2 x, $2 y)
  91. {
  92. return __builtin_$1 (x, y);
  93. }
  94. int
  95. main ()
  96. {
  97. return 0;
  98. }
  99. ])],
  100. [gcc_cv_math_inline_builtin_$1=yes],
  101. [gcc_cv_math_inline_builtin_$1=no])])
  102. if test $gcc_cv_math_inline_builtin_$1 = yes; then
  103. AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1],
  104. [Define to 1 if `__builtin_$1' is expanded inline.])
  105. fi
  106. fi])