[Ada] Postcondition checks performed before finalization
[gcc.git] / config / math.m4
index 5527c25aec30c96c744a990e9830bfbc78bbfb59..e1e88d075edeec4ac7eb731878750596b14dc37c 100644 (file)
@@ -14,10 +14,10 @@ dnl  functions).
 AC_DEFUN([GCC_CHECK_MATH_HEADERS],
 [AC_CHECK_HEADERS_ONCE(math.h complex.h)])
 
-dnl GCC_CHECK_MATH_FUNC([name],[if-present])
+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 if-present on success.
+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],
@@ -25,7 +25,7 @@ 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_LINK_IFELSE([AC_LANG_SOURCE([
 #ifdef HAVE_COMPLEX_H
 #include <complex.h>
 #endif
@@ -40,10 +40,75 @@ main ()
 {
   return 0;
 }
-],
+])],
 [gcc_cv_math_func_$1=yes],
 [gcc_cv_math_func_$1=no])])
   if test $gcc_cv_math_func_$1 = yes; then
-    $2
+    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])