sqrtl: Simplify for platforms where 'long double' == 'double'.
authorBruno Haible <bruno@clisp.org>
Mon, 10 Oct 2011 21:46:26 +0000 (23:46 +0200)
committerBruno Haible <bruno@clisp.org>
Mon, 10 Oct 2011 21:46:26 +0000 (23:46 +0200)
* lib/sqrtl.c (sqrtl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New
alternative implementation.
* m4/sqrtl.m4 (gl_FUNC_SQRTL): Require gl_LONG_DOUBLE_VS_DOUBLE.
Determine SQRTL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE.
* modules/sqrtl (Depends-on): Update conditions.

ChangeLog
lib/sqrtl.c
m4/sqrtl.m4
modules/sqrtl

index 5a12fa9..a55d7b0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2011-10-10  Bruno Haible  <bruno@clisp.org>
 
+       sqrtl: Simplify for platforms where 'long double' == 'double'.
+       * lib/sqrtl.c (sqrtl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New
+       alternative implementation.
+       * m4/sqrtl.m4 (gl_FUNC_SQRTL): Require gl_LONG_DOUBLE_VS_DOUBLE.
+       Determine SQRTL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE.
+       * modules/sqrtl (Depends-on): Update conditions.
+
+2011-10-10  Bruno Haible  <bruno@clisp.org>
+
        ldexpl: Simplify for platforms where 'long double' == 'double'.
        * lib/ldexpl.c (ldexpl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New
        alternative implementation.
index 299e70d..6795d66 100644 (file)
 /* Specification.  */
 #include <math.h>
 
-#include <float.h>
+#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+
+long double
+sqrtl (long double x)
+{
+  return sqrt (x);
+}
+
+#else
+
+# include <float.h>
 
 /* A simple Newton-Raphson method. */
 long double
@@ -57,3 +67,5 @@ sqrtl (long double x)
 
   return y;
 }
+
+#endif
index aa8522b..5f09530 100644 (file)
@@ -1,4 +1,4 @@
-# sqrtl.m4 serial 5
+# sqrtl.m4 serial 6
 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -7,6 +7,8 @@ dnl with or without modifications, as long as this notice is preserved.
 AC_DEFUN([gl_FUNC_SQRTL],
 [
   AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+
   dnl Persuade glibc <math.h> to declare sqrtl().
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
 
@@ -56,30 +58,35 @@ AC_DEFUN([gl_FUNC_SQRTL],
     HAVE_DECL_SQRTL=0
     HAVE_SQRTL=0
     dnl Find libraries needed to link lib/sqrtl.c.
-    AC_REQUIRE([gl_FUNC_ISNANL])
-    AC_REQUIRE([gl_FUNC_FREXPL])
-    AC_REQUIRE([gl_FUNC_LDEXPL])
-    AC_REQUIRE([gl_FUNC_SQRT])
-    dnl Append $ISNANL_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates.
-    case " $SQRTL_LIBM " in
-      *" $ISNANL_LIBM "*) ;;
-      *) SQRTL_LIBM="$SQRTL_LIBM $ISNANL_LIBM" ;;
-    esac
-    dnl Append $FREXPL_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates.
-    case " $SQRTL_LIBM " in
-      *" $FREXPL_LIBM "*) ;;
-      *) SQRTL_LIBM="$SQRTL_LIBM $FREXPL_LIBM" ;;
-    esac
-    dnl Append $LDEXPL_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates.
-    case " $SQRTL_LIBM " in
-      *" $LDEXPL_LIBM "*) ;;
-      *) SQRTL_LIBM="$SQRTL_LIBM $LDEXPL_LIBM" ;;
-    esac
-    dnl Append $SQRT_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates.
-    case " $SQRTL_LIBM " in
-      *" $SQRT_LIBM "*) ;;
-      *) SQRTL_LIBM="$SQRTL_LIBM $SQRT_LIBM" ;;
-    esac
+    if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
+      AC_REQUIRE([gl_FUNC_SQRT])
+      SQRTL_LIBM="$SQRT_LIBM"
+    else
+      AC_REQUIRE([gl_FUNC_ISNANL])
+      AC_REQUIRE([gl_FUNC_FREXPL])
+      AC_REQUIRE([gl_FUNC_LDEXPL])
+      AC_REQUIRE([gl_FUNC_SQRT])
+      dnl Append $ISNANL_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates.
+      case " $SQRTL_LIBM " in
+        *" $ISNANL_LIBM "*) ;;
+        *) SQRTL_LIBM="$SQRTL_LIBM $ISNANL_LIBM" ;;
+      esac
+      dnl Append $FREXPL_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates.
+      case " $SQRTL_LIBM " in
+        *" $FREXPL_LIBM "*) ;;
+        *) SQRTL_LIBM="$SQRTL_LIBM $FREXPL_LIBM" ;;
+      esac
+      dnl Append $LDEXPL_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates.
+      case " $SQRTL_LIBM " in
+        *" $LDEXPL_LIBM "*) ;;
+        *) SQRTL_LIBM="$SQRTL_LIBM $LDEXPL_LIBM" ;;
+      esac
+      dnl Append $SQRT_LIBM to SQRTL_LIBM, avoiding gratuitous duplicates.
+      case " $SQRTL_LIBM " in
+        *" $SQRT_LIBM "*) ;;
+        *) SQRTL_LIBM="$SQRTL_LIBM $SQRT_LIBM" ;;
+      esac
+    fi
   fi
   AC_SUBST([SQRTL_LIBM])
 ])
index df01005..9bfa381 100644 (file)
@@ -8,11 +8,11 @@ m4/sqrtl.m4
 Depends-on:
 math
 extensions
-float           [test $HAVE_SQRTL = 0]
-isnanl          [test $HAVE_SQRTL = 0]
-frexpl          [test $HAVE_SQRTL = 0]
-ldexpl          [test $HAVE_SQRTL = 0]
 sqrt            [test $HAVE_SQRTL = 0]
+float           [test $HAVE_SQRTL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0]
+isnanl          [test $HAVE_SQRTL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0]
+frexpl          [test $HAVE_SQRTL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0]
+ldexpl          [test $HAVE_SQRTL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0]
 
 configure.ac:
 gl_FUNC_SQRTL