summaryrefslogtreecommitdiff
path: root/libstdc++-v3/libmath
diff options
context:
space:
mode:
authorgdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-25 08:06:47 +0000
committergdr <gdr@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-25 08:06:47 +0000
commit1e59e631f4883b34561e3807ce3829a4b36fdcff (patch)
tree3c9a527aa129d17798187094a56296270e1eb09a /libstdc++-v3/libmath
parent2809d86d7e40497c3229168d3a7ce3b687fd0233 (diff)
downloadgcc-1e59e631f4883b34561e3807ce3829a4b36fdcff.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44334 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/libmath')
-rw-r--r--libstdc++-v3/libmath/Makefile.am7
-rw-r--r--libstdc++-v3/libmath/Makefile.in8
-rw-r--r--libstdc++-v3/libmath/hypot.c38
-rw-r--r--libstdc++-v3/libmath/hypotf.c48
-rw-r--r--libstdc++-v3/libmath/hypotl.c37
-rw-r--r--libstdc++-v3/libmath/stubs.c170
6 files changed, 162 insertions, 146 deletions
diff --git a/libstdc++-v3/libmath/Makefile.am b/libstdc++-v3/libmath/Makefile.am
index 2f696f9e7a1..c0cea3ce35f 100644
--- a/libstdc++-v3/libmath/Makefile.am
+++ b/libstdc++-v3/libmath/Makefile.am
@@ -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@ \
diff --git a/libstdc++-v3/libmath/Makefile.in b/libstdc++-v3/libmath/Makefile.in
index 17581f23533..95e7ce02cbf 100644
--- a/libstdc++-v3/libmath/Makefile.in
+++ b/libstdc++-v3/libmath/Makefile.in
@@ -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 \
diff --git a/libstdc++-v3/libmath/hypot.c b/libstdc++-v3/libmath/hypot.c
deleted file mode 100644
index 9e3c07b0222..00000000000
--- a/libstdc++-v3/libmath/hypot.c
+++ /dev/null
@@ -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);
-}
diff --git a/libstdc++-v3/libmath/hypotf.c b/libstdc++-v3/libmath/hypotf.c
deleted file mode 100644
index 29d1681f5cc..00000000000
--- a/libstdc++-v3/libmath/hypotf.c
+++ /dev/null
@@ -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
-}
diff --git a/libstdc++-v3/libmath/hypotl.c b/libstdc++-v3/libmath/hypotl.c
deleted file mode 100644
index 1ec8a9ce7ee..00000000000
--- a/libstdc++-v3/libmath/hypotl.c
+++ /dev/null
@@ -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);
-}
diff --git a/libstdc++-v3/libmath/stubs.c b/libstdc++-v3/libmath/stubs.c
index cba6f8441fc..9a0f5f63954 100644
--- a/libstdc++-v3/libmath/stubs.c
+++ b/libstdc++-v3/libmath/stubs.c
@@ -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