acinclude.m4: CHECK_MATH_DECL_AND_LINKAGE for hypot, hypotf, hypotl, atan2f, atan2l.

* 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.

From-SVN: r44334
This commit is contained in:
Gabriel Dos Reis 2001-07-25 08:06:47 +00:00 committed by Gabriel Dos Reis
parent 40a25731d6
commit d38cd8ae50
11 changed files with 1751 additions and 856 deletions

View File

@ -1,3 +1,19 @@
2001-07-25 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.
2001-07-23 David Edelsohn <edelsohn@gnu.org>
* include/bits/limits_generic.h (int): Set digits and digits10

View File

@ -643,6 +643,7 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
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,
@ -655,9 +656,11 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
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)
@ -684,6 +687,7 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
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)
@ -728,23 +732,22 @@ dnl Check to see if there is native support for complex
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)

View File

@ -655,6 +655,7 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
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,
@ -667,9 +668,11 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
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)
@ -696,6 +699,7 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
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)
@ -740,23 +744,22 @@ dnl Check to see if there is native support for complex
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)

View File

@ -87,6 +87,9 @@
/* Define if you have the _asinl function. */
#undef HAVE__ASINL
/* Define if you have the _atan2f function. */
#undef HAVE__ATAN2F
/* Define if you have the _atan2l function. */
#undef HAVE__ATAN2L
@ -159,6 +162,15 @@
/* Define if you have the _frexpl function. */
#undef HAVE__FREXPL
/* Define if you have the _hypot function. */
#undef HAVE__HYPOT
/* Define if you have the _hypotf function. */
#undef HAVE__HYPOTF
/* Define if you have the _hypotl function. */
#undef HAVE__HYPOTL
/* Define if you have the _isinf function. */
#undef HAVE__ISINF
@ -261,6 +273,9 @@
/* Define if you have the asinl function. */
#undef HAVE_ASINL
/* Define if you have the atan2f function. */
#undef HAVE_ATAN2F
/* Define if you have the atan2l function. */
#undef HAVE_ATAN2L

2238
libstdc++-v3/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -27,12 +27,9 @@ mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs
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@ \

View File

@ -129,11 +129,9 @@ mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs
noinst_LTLIBRARIES = libmath.la
EXTRA_LONG_DOUBLE_yes = hypotl.c signbitl.c
EXTRA_DIST = hypot.c hypotf.c $(EXTRA_LONG_DOUBLE_yes)
EXTRA_LONG_DOUBLE_yes = signbitl.c
EXTRA_DIST = $(EXTRA_LONG_DOUBLE_yes)
libmath_la_LIBADD = @LIBMATHOBJS@ $(EXTRA_LONG_DOUBLE_$(USE_COMPLEX_LONG_DOUBLE))
@ -278,7 +276,7 @@ distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \
cp -pr $$/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \

View File

@ -1,38 +0,0 @@
/* Compute hypothenuse. */
/* Copyright (C) 1997-1999 Free Software Foundation, Inc.
This file is part of the GNU ISO C++ Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA.
As a special exception, you may use this file as part of a free software
library without restriction. Specifically, if other files instantiate
templates or use macros or inline functions from this file, or you compile
this file and link it with other files to produce an executable, this
file does not by itself cause the resulting executable to be covered by
the GNU General Public License. This exception does not however
invalidate any other reasons why the executable file might be covered by
the GNU General Public License. */
/* If the platform is so pathetic that is has no hypot function it does
not deserve it better than getting this version. */
extern double sqrt (double);
double
hypot (double x, double y)
{
return sqrt (x * x + y * y);
}

View File

@ -1,48 +0,0 @@
/* Compute hypothenuse. */
/* Copyright (C) 1997-1999 Free Software Foundation, Inc.
This file is part of the GNU ISO C++ Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA.
As a special exception, you may use this file as part of a free software
library without restriction. Specifically, if other files instantiate
templates or use macros or inline functions from this file, or you compile
this file and link it with other files to produce an executable, this
file does not by itself cause the resulting executable to be covered by
the GNU General Public License. This exception does not however
invalidate any other reasons why the executable file might be covered by
the GNU General Public License. */
#include <config.h>
/* If there is a `double' version use it. Otherwise make it simply and
stupid. */
extern double hypot (double, double);
extern double sqrt (double);
extern float sqrtf (float);
float
hypotf (float x, float y)
{
#ifdef HAVE_HYPOT
return hypot (x, y);
#elif HAVE_SQRTF
return sqrtf (x * x + y * y);
#else
return sqrt (x * x + y * y);
#endif
}

View File

@ -1,37 +0,0 @@
/* Compute hypothenuse. */
/* Copyright (C) 1997-1999 Free Software Foundation, Inc.
This file is part of the GNU ISO C++ Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA.
As a special exception, you may use this file as part of a free software
library without restriction. Specifically, if other files instantiate
templates or use macros or inline functions from this file, or you compile
this file and link it with other files to produce an executable, this
file does not by itself cause the resulting executable to be covered by
the GNU General Public License. This exception does not however
invalidate any other reasons why the executable file might be covered by
the GNU General Public License. */
/* The platform supports some long double functions but not hypotl. Blarg. */
extern long double sqrtl (long double);
long double
hypotl (long double x, long double y)
{
return sqrtl (x * x + y * y);
}

View File

@ -28,9 +28,13 @@
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)
{
@ -38,7 +42,16 @@ atan2f(float x, float y)
}
#endif
#if !defined(_GLIBCPP_HAVE_COSF) && !defined(_GLIBCPP_HAVE___BUILTIN_COSF)
#ifndef HAVE_ATAN2L
long double
atan2l(long double x, long double y)
{
return atan2((double) x, (double) y);
}
#endif
#if !defined(HAVE_COSF) && !defined(HAVE___BUILTIN_COSF)
float
cosf(float x)
{
@ -46,7 +59,16 @@ cosf(float x)
}
#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,7 +76,16 @@ coshf(float x)
}
#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)
{
@ -62,7 +93,49 @@ expf(float x)
}
#endif
#ifndef _GLIBCPP_HAVE_LOGF
#ifndef HAVE_EXPL
long double
expl(long double x)
{
return exp((double) x);
}
#endif
/* 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)
{
@ -70,7 +143,16 @@ logf(float x)
}
#endif
#ifndef _GLIBCPP_HAVE_LOG10F
#ifndef _GBLICPP_HAVE_LOGL
long double
logl(long double x)
{
return log((double) x);
}
#endif
#ifndef HAVE_LOG10F
float
log10f(float x)
{
@ -78,7 +160,16 @@ log10f(float x)
}
#endif
#ifndef _GLIBCPP_HAVE_POWF
#ifndef HAVE_LOG10L
long double
log10l(long double x)
{
return log10((double) x);
}
#endif
#ifndef HAVE_POWF
float
powf(float x, float y)
{
@ -86,7 +177,16 @@ powf(float x, float y)
}
#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)
{
@ -94,7 +194,16 @@ sinf(float x)
}
#endif
#ifndef _GLIBCPP_HAVE_SINHF
#ifndef HAVE_SINL
long double
sinl(long double x)
{
return sin((double) x);
}
#endif
#ifndef HAVE_SINHF
float
sinhf(float x)
{
@ -102,7 +211,16 @@ sinhf(float x)
}
#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)
{
@ -110,7 +228,16 @@ sqrtf(float x)
}
#endif
#ifndef _GLIBCPP_HAVE_TANF
#ifndef HAVE_SQRTL
long double
sqrtl(long double x)
{
return sqrt((double) x);
}
#endif
#ifndef HAVE_TANF
float
tanf(float x)
{
@ -118,10 +245,27 @@ tanf(float x)
}
#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