This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[v3] additional branch patch (Re: staging headers patch onto 3-branch?)


On Thu, Jul 26, 2001 at 10:53:26AM +0200, Gabriel Dos Reis wrote:
> Phil Edwards <pedwards@disaster.jaj.com> writes:
> | On Wed, Jul 25, 2001 at 05:14:48PM -0700, Benjamin Kosnik wrote:
> | > > 3.0 branch tomorrow afternoon?
> | > 
> | > No. Please do so.
> | 
> | Okay.  I'll do this shortly, then, while the tree is quiet.
> 
> I wanted to wait for one day before comitting yesterday math stuff on
> branch. 
> Please could you take care of it as well?

Done.  Also tested on x86/linux.



2001-07-26  Gabriel Dos Reis  <gdr@merlin.codesourcery.com>

	* acinclude.m4: CHECK_MATH_DECL_AND_LINKAGE for hypot, hypotf,
	hypotl, atan2f, atan2l.  Remove from REPLACE_MATHFUNCS list.
	* aclocal.m4: Regenerate.
	* config.h.in: Likewise.
	* configure: Likewise.
	* libmath/Makefile.am (EXTRA_LONG_DOUBLE_yes): Remove hypotl.c
	(EXTRA_DIST): Remove hypot.c hypotf.c.
	* libmath/Makefile.am: Regenerate.
	* libmath/hypotf.c: Remove.
	* libmath/hypot.c: Likewise.
	* libmath/hypotl.c: Likewise.
	* libmath/stubs.c: The macros seen here are HAVE_xxx, not
	_GLIBCPP_HAVE_xxx.  Add long double versions.


Index: acinclude.m4
===================================================================
RCS file: /home/pme/Repositories/GCC/gcc/libstdc++-v3/acinclude.m4,v
retrieving revision 1.129.2.26
diff -u -3 -r1.129.2.26 acinclude.m4
--- acinclude.m4	2001/07/26 07:51:00	1.129.2.26
+++ acinclude.m4	2001/07/26 17:20:37
@@ -641,6 +641,7 @@
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypot)
 
   dnl Check to see if basic C math functions have float versions.
   GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
@@ -653,9 +654,11 @@
                                           ceilf floorf)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypotf)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
@@ -682,6 +685,7 @@
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(hypotl)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
@@ -726,23 +730,22 @@
 dnl
 dnl Don't compile bits in math/* if native support exits.
 dnl
-dnl Define USE_COMPLEX_LONG_DOUBLE etc if "atan2l/copysignl" is found.
+dnl Define USE_COMPLEX_LONG_DOUBLE etc if "copysignl" is found.
 dnl
 dnl GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
 AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT, [
   dnl Check for complex versions of math functions of platform.
   AC_CHECK_LIB(m, main)
-  AC_REPLACE_MATHFUNCS(nan hypot hypotf copysignf)
+  AC_REPLACE_MATHFUNCS(nan copysignf)
 
   dnl Compile the long double complex functions only if the function 
   dnl provides the non-complex long double functions that are needed.
-  dnl Currently this includes copysignl and atan2l, which should be
+  dnl Currently this includes copysignl, which should be
   dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
   USE_COMPLEX_LONG_DOUBLE=no
-  if test x$ac_cv_func_atan2l = x"yes" \
-     && test x$ac_cv_func_copysignl = x"yes"; then
+  if test x$ac_cv_func_copysignl = x"yes"; then
     USE_COMPLEX_LONG_DOUBLE=yes
-    AC_REPLACE_MATHFUNCS(hypotl signbitl)
+    AC_REPLACE_MATHFUNCS(signbitl)
   fi
 
   AC_SUBST(USE_COMPLEX_LONG_DOUBLE)
Index: libmath/Makefile.am
===================================================================
RCS file: /home/pme/Repositories/GCC/gcc/libstdc++-v3/libmath/Makefile.am,v
retrieving revision 1.11.2.4
diff -u -3 -r1.11.2.4 Makefile.am
--- libmath/Makefile.am	2001/07/26 07:52:20	1.11.2.4
+++ libmath/Makefile.am	2001/07/26 17:22:00
@@ -27,12 +27,9 @@
 
 noinst_LTLIBRARIES = libmath.la
 
-EXTRA_LONG_DOUBLE_yes = \
-	hypotl.c signbitl.c
+EXTRA_LONG_DOUBLE_yes = signbitl.c
 
-EXTRA_DIST = \
-	hypot.c hypotf.c \
-	$(EXTRA_LONG_DOUBLE_yes) 
+EXTRA_DIST = $(EXTRA_LONG_DOUBLE_yes) 
 
 libmath_la_LIBADD = \
 	@LIBMATHOBJS@ \
Index: libmath/stubs.c
===================================================================
RCS file: /home/pme/Repositories/GCC/gcc/libstdc++-v3/libmath/stubs.c,v
retrieving revision 1.5.2.3
diff -u -3 -r1.5.2.3 stubs.c
--- libmath/stubs.c	2001/07/26 07:52:20	1.5.2.3
+++ libmath/stubs.c	2001/07/26 17:23:34
@@ -28,17 +28,30 @@
    the GNU General Public License.  */
 
 #include <math.h>
-#include <config.h>
+#include "config.h"
 
-#ifndef _GLIBCPP_HAVE_ATAN2F
+/* For targets which do not have support for long double versions,
+   we use the crude approximation.  We'll do better later.  */
+
+
+#ifndef HAVE_ATAN2F
 float
 atan2f(float x, float y)
 {
   return (float) atan2(x, y);
 }
 #endif
+
+#ifndef HAVE_ATAN2L
+long double
+atan2l(long double x, long double y)
+{
+  return atan2((double) x, (double) y);
+}
+#endif
+
 
-#if !defined(_GLIBCPP_HAVE_COSF) && !defined(_GLIBCPP_HAVE___BUILTIN_COSF)
+#if !defined(HAVE_COSF) && !defined(HAVE___BUILTIN_COSF)
 float
 cosf(float x)
 {
@@ -46,7 +59,16 @@
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_COSHF
+#ifndef HAVE_COSL
+long double
+cosl(long double x)
+{
+  return cos((double) x);
+}
+#endif
+
+
+#ifndef HAVE_COSHF
 float
 coshf(float x)
 {
@@ -54,31 +76,100 @@
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_EXPF
+#ifndef HAVE_COSHL
+long double
+coshl(long double x)
+{
+  return cosh((double) x);
+}
+#endif
+
+
+#ifndef HAVE_EXPF
 float
 expf(float x)
 {
   return (float) exp(x);
 }
 #endif
+
+#ifndef HAVE_EXPL
+long double
+expl(long double x)
+{
+  return exp((double) x);
+}
+#endif
+
 
-#ifndef _GLIBCPP_HAVE_LOGF
+/* Compute the hypothenuse of a right triangle with side x and y.  */
+#ifndef HAVE_HYPOTF
 float
+hypotf(float x, float y)
+{
+  float s = fabsf(x) + fabsf(y);
+  x /= s; y /= s;
+  return s * sqrtf(x * x + y * y);
+}
+#endif
+
+#ifndef HAVE_HYPOT
+double
+hypot(double x, double y)
+{
+  double s = fabs(x) + fabs(y);
+  x /= s; y /= s;
+  return s * sqrt(x * x + y * y);
+}
+#endif
+
+#ifndef HAVE_HYPOTL
+long double
+hypotl(long double x, long double y)
+{
+  long double s = fabsl(x) + fabsl(y);
+  x /= s; y /= s;
+  return s * sqrtl(x * x + y * y);
+}
+#endif
+
+
+
+#ifndef HAVE_LOGF
+float
 logf(float x)
 {
   return (float) log(x);
 }
 #endif
+
+#ifndef _GBLICPP_HAVE_LOGL
+long double
+logl(long double x)
+{
+  return log((double) x);
+}
+#endif
 
-#ifndef _GLIBCPP_HAVE_LOG10F
+
+#ifndef HAVE_LOG10F
 float
 log10f(float x)
 {
   return (float) log10(x);
 }
 #endif
+
+#ifndef HAVE_LOG10L
+long double
+log10l(long double x)
+{
+  return log10((double) x);
+}
+#endif
 
-#ifndef _GLIBCPP_HAVE_POWF
+
+#ifndef HAVE_POWF
 float
 powf(float x, float y)
 {
@@ -86,15 +177,33 @@
 }
 #endif
 
-#if !defined(_GLIBCPP_HAVE_SINF) && !defined(_GLIBCPP_HAVE___BUILTIN_SINF)
+#ifndef HAVE_POWL
+long double
+powl(long double x, long double y)
+{
+  return pow((double) x, (double) y);
+}
+#endif
+
+
+#if !defined(HAVE_SINF) && !defined(HAVE___BUILTIN_SINF)
 float
 sinf(float x)
 {
   return (float) sin(x);
 }
 #endif
+
+#ifndef HAVE_SINL
+long double
+sinl(long double x)
+{
+  return sin((double) x);
+}
+#endif
+
 
-#ifndef _GLIBCPP_HAVE_SINHF
+#ifndef HAVE_SINHF
 float
 sinhf(float x)
 {
@@ -102,15 +211,33 @@
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_SQRTF
+#ifndef HAVE_SINHL
+long double
+sinhl(long double x)
+{
+  return sinh((double) x);
+}
+#endif
+
+
+#ifndef HAVE_SQRTF
 float
 sqrtf(float x)
 {
   return (float) sqrt(x);
 }
 #endif
+
+#ifndef HAVE_SQRTL
+long double
+sqrtl(long double x)
+{
+  return  sqrt((double) x);
+}
+#endif
+
 
-#ifndef _GLIBCPP_HAVE_TANF
+#ifndef HAVE_TANF
 float
 tanf(float x)
 {
@@ -118,10 +245,27 @@
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_TANHF
+#ifndef HAVE_TANL
+long double
+tanl(long double x)
+{
+  return tan((double) x);
+}
+#endif
+
+
+#ifndef HAVE_TANHF
 float
 tanhf(float x)
 {
   return (float) tanh(x);
+}
+#endif
+
+#ifndef HAVE_TANHL
+long double
+tanhl(long double x)
+{
+  return tanh((double) x);
 }
 #endif


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]