This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[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