aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJennifer Averett <jennifer.averett@oarcorp.com>2023-05-05 13:39:17 -0500
committerJoel Sherrill <joel@rtems.org>2023-05-16 09:05:36 -0500
commit048ebea9819b67daefc1ab3cda2add6ebe6f27a0 (patch)
treee208ce66bedbfd432df77cf73dbfcaaaf5e528e5
parentc630a6a837fd581d741fb94602aed6a4a5ed9bf4 (diff)
downloadnewlib-048ebea9819b67daefc1ab3cda2add6ebe6f27a0.zip
newlib-048ebea9819b67daefc1ab3cda2add6ebe6f27a0.tar.gz
newlib-048ebea9819b67daefc1ab3cda2add6ebe6f27a0.tar.bz2
newlib: Add non LDBL_EQ_DBL math support for aarch64, i386, and x86_64
Rename s_nearbyint.c, s_fdim.c and s_scalbln.c to remove conflicts Remove functions that are not needed from above files Modify include paths Add includes missing in cygwin build Add missing types Create Makefiles Create header files to resolve dependencies between directories Modify some instances of unsigned long to uint64_t for 32 bit platforms Add HAVE_FPMATH_H
-rw-r--r--newlib/libc/acinclude.m43
-rw-r--r--newlib/libc/include/math.h3
-rw-r--r--newlib/libc/machine/aarch64/machine/_fpmath.h20
-rw-r--r--newlib/libm/Makefile.inc8
-rw-r--r--newlib/libm/ld/Makefile.inc56
-rw-r--r--newlib/libm/ld/e_lgammal.c2
-rw-r--r--newlib/libm/ld/fdiml.c (renamed from newlib/libm/ld/s_fdim.c)7
-rw-r--r--newlib/libm/ld/fpmath.h2
-rw-r--r--newlib/libm/ld/invtrig.h33
-rw-r--r--newlib/libm/ld/k_expl.h33
-rw-r--r--newlib/libm/ld/math_private.h21
-rw-r--r--newlib/libm/ld/s_ilogbl.c7
-rw-r--r--newlib/libm/ld/s_logbl.c7
-rw-r--r--newlib/libm/ld/s_lround.c2
-rw-r--r--newlib/libm/ld/s_nearbyintl.c (renamed from newlib/libm/ld/s_nearbyint.c)7
-rw-r--r--newlib/libm/ld/s_rintl.c1
-rw-r--r--newlib/libm/ld/scalblnl.c (renamed from newlib/libm/ld/s_scalbln.c)7
-rw-r--r--newlib/libm/ld128/Makefile.inc14
-rw-r--r--newlib/libm/ld128/e_lgammal_r.c4
-rw-r--r--newlib/libm/ld128/e_powl.c2
-rw-r--r--newlib/libm/ld128/e_rem_pio2l.h2
-rw-r--r--newlib/libm/ld128/invtrig.h2
-rw-r--r--newlib/libm/ld128/k_cosl.c4
-rw-r--r--newlib/libm/ld128/k_sinl.c4
-rw-r--r--newlib/libm/ld128/s_erfl.c4
-rw-r--r--newlib/libm/ld128/s_exp2l.c2
-rw-r--r--newlib/libm/ld128/s_expl.c4
-rw-r--r--newlib/libm/ld128/s_logl.c4
-rw-r--r--newlib/libm/ld80/Makefile.inc15
-rw-r--r--newlib/libm/ld80/b_expl.c4
-rw-r--r--newlib/libm/ld80/b_tgammal.c7
-rw-r--r--newlib/libm/ld80/e_lgammal_r.c4
-rw-r--r--newlib/libm/ld80/e_powl.c4
-rw-r--r--newlib/libm/ld80/e_rem_pio2l.h2
-rw-r--r--newlib/libm/ld80/invtrig.h2
-rw-r--r--newlib/libm/ld80/k_cosl.c4
-rw-r--r--newlib/libm/ld80/k_sinl.c4
-rw-r--r--newlib/libm/ld80/s_cospil.c4
-rw-r--r--newlib/libm/ld80/s_erfl.c4
-rw-r--r--newlib/libm/ld80/s_exp2l.c4
-rw-r--r--newlib/libm/ld80/s_expl.c4
-rw-r--r--newlib/libm/ld80/s_logl.c4
-rw-r--r--newlib/libm/ld80/s_sinpil.c4
43 files changed, 275 insertions, 60 deletions
diff --git a/newlib/libc/acinclude.m4 b/newlib/libc/acinclude.m4
index 7cba7db..4266266 100644
--- a/newlib/libc/acinclude.m4
+++ b/newlib/libc/acinclude.m4
@@ -62,4 +62,7 @@ m4_foreach_w([MACHINE], [
z8k
], [AM_CONDITIONAL([HAVE_LIBC_MACHINE_]m4_toupper(MACHINE), test "${machine_dir}" = MACHINE)])
+AM_CONDITIONAL(HAVE_FPMATH_H, test -r "${srcdir}/libc/machine/${machine_dir}/machine/_fpmath.h")
+
+
AM_CONDITIONAL(MACH_ADD_SETJMP, test "x$mach_add_setjmp" = "xtrue")
diff --git a/newlib/libc/include/math.h b/newlib/libc/include/math.h
index 54e30ef..87f5133 100644
--- a/newlib/libc/include/math.h
+++ b/newlib/libc/include/math.h
@@ -445,7 +445,8 @@ extern float hypotf (float, float);
simply call the double functions. On Cygwin the long double functions
are implemented independently from newlib to be able to use optimized
assembler functions despite using the Microsoft x86_64 ABI. */
-#if defined (_LDBL_EQ_DBL) || defined (__CYGWIN__)
+#if defined (_LDBL_EQ_DBL) || defined (__CYGWIN__) || \
+ defined(__aarch64__) || defined(__i386__) || defined(__x86_64__)
/* Reentrant ANSI C functions. */
#ifndef __math_68881
extern long double atanl (long double);
diff --git a/newlib/libc/machine/aarch64/machine/_fpmath.h b/newlib/libc/machine/aarch64/machine/_fpmath.h
index 71d0a71..fa62ae8 100644
--- a/newlib/libc/machine/aarch64/machine/_fpmath.h
+++ b/newlib/libc/machine/aarch64/machine/_fpmath.h
@@ -27,19 +27,25 @@
* $FreeBSD$
*/
+/*
+ * Change unsigned int/long used by FreeBSD to fixed width types because
+ * ilp32 has a different size for unsigned long. --joel (20 Aug 2022)
+ */
+#include <stdint.h>
+
union IEEEl2bits {
long double e;
struct {
- unsigned long manl :64;
- unsigned long manh :48;
- unsigned int exp :15;
- unsigned int sign :1;
+ uint64_t manl :64;
+ uint64_t manh :48;
+ uint32_t exp :15;
+ uint32_t sign :1;
} bits;
/* TODO andrew: Check the packing here */
struct {
- unsigned long manl :64;
- unsigned long manh :48;
- unsigned int expsign :16;
+ uint64_t manl :64;
+ uint64_t manh :48;
+ uint32_t expsign :16;
} xbits;
};
diff --git a/newlib/libm/Makefile.inc b/newlib/libm/Makefile.inc
index 9d14695..075693a 100644
--- a/newlib/libm/Makefile.inc
+++ b/newlib/libm/Makefile.inc
@@ -44,12 +44,18 @@ else
include %D%/math/Makefile.inc
endif
include %D%/common/Makefile.inc
+
+if HAVE_FPMATH_H
+include %D%/ld/Makefile.inc
+endif # HAVE_FPMATH_H
+
include %D%/complex/Makefile.inc
include %D%/fenv/Makefile.inc
include %D%/test/Makefile.inc
if HAVE_LIBM_MACHINE_AARCH64
include %D%/machine/aarch64/Makefile.inc
+include %D%/ld128/Makefile.inc
endif
if HAVE_LIBM_MACHINE_AMDGCN
include %D%/machine/amdgcn/Makefile.inc
@@ -59,6 +65,7 @@ include %D%/machine/arm/Makefile.inc
endif
if HAVE_LIBM_MACHINE_I386
include %D%/machine/i386/Makefile.inc
+include %D%/ld80/Makefile.inc
endif
if HAVE_LIBM_MACHINE_MIPS
include %D%/machine/mips/Makefile.inc
@@ -83,6 +90,7 @@ include %D%/machine/riscv/Makefile.inc
endif
if HAVE_LIBM_MACHINE_X86_64
include %D%/machine/x86_64/Makefile.inc
+include %D%/ld80/Makefile.inc
endif
CLEANFILES += \
diff --git a/newlib/libm/ld/Makefile.inc b/newlib/libm/ld/Makefile.inc
new file mode 100644
index 0000000..fef3db4
--- /dev/null
+++ b/newlib/libm/ld/Makefile.inc
@@ -0,0 +1,56 @@
+%C%_lsrc = \
+ %D%/e_acoshl.c \
+ %D%/e_acosl.c \
+ %D%/e_asinl.c \
+ %D%/e_atan2l.c \
+ %D%/e_atanhl.c \
+ %D%/e_coshl.c \
+ %D%/e_fmodl.c \
+ %D%/e_lgammal.c \
+ %D%/e_remainderl.c \
+ %D%/e_sinhl.c \
+ %D%/s_asinhl.c \
+ %D%/s_atanl.c \
+ %D%/s_cbrtl.c \
+ %D%/s_ceill.c \
+ %D%/s_copysignl.c \
+ %D%/s_cosl.c \
+ %D%/s_fabsl.c \
+ %D%/fdiml.c \
+ %D%/s_floorl.c \
+ %D%/s_fmal.c \
+ %D%/s_fmaxl.c \
+ %D%/s_fminl.c \
+ %D%/s_frexpl.c \
+ %D%/s_ilogbl.c \
+ %D%/s_llrintl.c \
+ %D%/s_llroundl.c \
+ %D%/s_logbl.c \
+ %D%/s_lrint.c \
+ %D%/s_lrintl.c \
+ %D%/s_lround.c \
+ %D%/s_lroundl.c \
+ %D%/s_modfl.c \
+ %D%/s_nearbyintl.c \
+ %D%/s_nextafterl.c \
+ %D%/s_nexttoward.c \
+ %D%/s_nexttowardf.c \
+ %D%/s_remquol.c \
+ %D%/s_rintl.c \
+ %D%/s_roundl.c \
+ %D%/scalblnl.c \
+ %D%/s_scalbnl.c \
+ %D%/s_sinl.c \
+ %D%/s_tanhl.c \
+ %D%/s_tanl.c \
+ %D%/s_truncl.c
+
+libm_a_CFLAGS_%C% = -fbuiltin -fno-math-errno
+
+if HAVE_LONG_DOUBLE
+libm_a_SOURCES += $(%C%_lsrc)
+endif # HAVE_LONG_DOUBLE
+
+LIBM_CHEWOUT_FILES +=
+
+LIBM_CHAPTERS +=
diff --git a/newlib/libm/ld/e_lgammal.c b/newlib/libm/ld/e_lgammal.c
index ebc2fc7..0e6a0c3 100644
--- a/newlib/libm/ld/e_lgammal.c
+++ b/newlib/libm/ld/e_lgammal.c
@@ -16,6 +16,8 @@ __FBSDID("$FreeBSD$");
#include "math.h"
#include "math_private.h"
+long double lgammal_r(long double x, int *signp);
+
extern int signgam;
long double
diff --git a/newlib/libm/ld/s_fdim.c b/newlib/libm/ld/fdiml.c
index c40c3e9..dfdb4e6 100644
--- a/newlib/libm/ld/s_fdim.c
+++ b/newlib/libm/ld/fdiml.c
@@ -43,6 +43,13 @@ fn(type x, type y) \
return (x > y ? x - y : 0.0); \
}
+/*
+ * fdim and fdimf are defined elsewhere in
+ * newlib. Ignore the freebsd versions and only compile
+ * fdiml.
+ */
+#if 0
DECL(double, fdim)
DECL(float, fdimf)
+#endif
DECL(long double, fdiml)
diff --git a/newlib/libm/ld/fpmath.h b/newlib/libm/ld/fpmath.h
index ce935eb..323fbe5 100644
--- a/newlib/libm/ld/fpmath.h
+++ b/newlib/libm/ld/fpmath.h
@@ -33,7 +33,7 @@
#define _FPMATH_H_
#include <sys/endian.h>
-#include "_fpmath.h"
+#include "machine/_fpmath.h" /* changed to machine for newlib */
#ifndef _IEEE_WORD_ORDER
#define _IEEE_WORD_ORDER _BYTE_ORDER
diff --git a/newlib/libm/ld/invtrig.h b/newlib/libm/ld/invtrig.h
new file mode 100644
index 0000000..e8d97d3
--- /dev/null
+++ b/newlib/libm/ld/invtrig.h
@@ -0,0 +1,33 @@
+/*
+ * COPYRIGHT (c) 1989-1999.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if LDBL_MANT_DIG == 64
+#include "../ld80/invtrig.h"
+#elif LDBL_MANT_DIG == 113
+#include "../ld128/invtrig.h"
+#else
+#error "Unsupported long double format"
+#endif
diff --git a/newlib/libm/ld/k_expl.h b/newlib/libm/ld/k_expl.h
new file mode 100644
index 0000000..721a912
--- /dev/null
+++ b/newlib/libm/ld/k_expl.h
@@ -0,0 +1,33 @@
+/*
+ * COPYRIGHT (c) 1989-1999.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if LDBL_MANT_DIG == 64
+#include "../ld80/k_expl.h"
+#elif LDBL_MANT_DIG == 113
+#include "../ld128/k_expl.h"
+#else
+#error "Unsupported long double format"
+#endif
diff --git a/newlib/libm/ld/math_private.h b/newlib/libm/ld/math_private.h
index c6d06fb..c5b88f6 100644
--- a/newlib/libm/ld/math_private.h
+++ b/newlib/libm/ld/math_private.h
@@ -21,6 +21,23 @@
#include <machine/endian.h>
/*
+ * __double_t and __float_t are defined elsewhere in
+ * freebsd and used to define double_t and float_t.
+ * Newlib has already went through the process of
+ * defining double_t and float_t so we should be able
+ * to use them to define __double_t and __float_t for
+ * this file.
+ */
+typedef double_t __double_t;
+typedef float_t __float_t;
+
+/*
+ * Necessary to disable Protection Enabled specific
+ * Free-bsd source.
+ */
+#define NO_FPSETPREC
+
+/*
* The original fdlibm code used statements like:
* n0 = ((*(int*)&one)>>29)^1; * index of high word *
* ix0 = *(n0+(int*)&x); * high word of x *
@@ -644,7 +661,7 @@ rnintl(long double x)
* return type provided their arg is a floating point integer. They can
* sometimes be more efficient because no rounding is required.
*/
-#if defined(amd64) || defined(__i386__)
+#if defined(amd64) || (defined(__i386__) && (!defined _SOFT_FLOAT))
#define irint(x) \
(sizeof(x) == sizeof(float) && \
sizeof(__float_t) == sizeof(long double) ? irintf(x) : \
@@ -677,7 +694,7 @@ irintd(double x)
}
#endif
-#if defined(__amd64__) || defined(__i386__)
+#if defined(__amd64__) || (defined(__i386__) && (!defined _SOFT_FLOAT))
static __inline int
irintl(long double x)
{
diff --git a/newlib/libm/ld/s_ilogbl.c b/newlib/libm/ld/s_ilogbl.c
index 3211f44..14c6327 100644
--- a/newlib/libm/ld/s_ilogbl.c
+++ b/newlib/libm/ld/s_ilogbl.c
@@ -16,6 +16,7 @@ __FBSDID("$FreeBSD$");
#include <float.h>
#include <limits.h>
#include <math.h>
+#include <stdint.h>
#include "fpmath.h"
@@ -23,7 +24,7 @@ int
ilogbl(long double x)
{
union IEEEl2bits u;
- unsigned long m;
+ uint64_t m;
int b;
u.e = x;
@@ -32,11 +33,11 @@ ilogbl(long double x)
return (FP_ILOGB0);
/* denormalized */
if (u.bits.manh == 0) {
- m = 1lu << (LDBL_MANL_SIZE - 1);
+ m = 1llu << (LDBL_MANL_SIZE - 1);
for (b = LDBL_MANH_SIZE; !(u.bits.manl & m); m >>= 1)
b++;
} else {
- m = 1lu << (LDBL_MANH_SIZE - 1);
+ m = 1llu << (LDBL_MANH_SIZE - 1);
for (b = 0; !(u.bits.manh & m); m >>= 1)
b++;
}
diff --git a/newlib/libm/ld/s_logbl.c b/newlib/libm/ld/s_logbl.c
index ee1a91f..357a738 100644
--- a/newlib/libm/ld/s_logbl.c
+++ b/newlib/libm/ld/s_logbl.c
@@ -16,6 +16,7 @@ __FBSDID("$FreeBSD$");
#include <float.h>
#include <limits.h>
#include <math.h>
+#include <stdint.h>
#include "fpmath.h"
@@ -23,7 +24,7 @@ long double
logbl(long double x)
{
union IEEEl2bits u;
- unsigned long m;
+ uint64_t m;
int b;
u.e = x;
@@ -34,11 +35,11 @@ logbl(long double x)
}
/* denormalized */
if (u.bits.manh == 0) {
- m = 1lu << (LDBL_MANL_SIZE - 1);
+ m = 1llu << (LDBL_MANL_SIZE - 1);
for (b = LDBL_MANH_SIZE; !(u.bits.manl & m); m >>= 1)
b++;
} else {
- m = 1lu << (LDBL_MANH_SIZE - 1);
+ m = 1llu << (LDBL_MANH_SIZE - 1);
for (b = 0; !(u.bits.manh & m); m >>= 1)
b++;
}
diff --git a/newlib/libm/ld/s_lround.c b/newlib/libm/ld/s_lround.c
index 1dd8e69..f67f9fb 100644
--- a/newlib/libm/ld/s_lround.c
+++ b/newlib/libm/ld/s_lround.c
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-#include <sys/limits.h>
+#include <limits.h>
#include <fenv.h>
#include <math.h>
diff --git a/newlib/libm/ld/s_nearbyint.c b/newlib/libm/ld/s_nearbyintl.c
index 796dbaf..9befed4 100644
--- a/newlib/libm/ld/s_nearbyint.c
+++ b/newlib/libm/ld/s_nearbyintl.c
@@ -56,6 +56,13 @@ fn(type x) \
return (ret); \
}
+/*
+ * nearbyint and nearbyintf are defined elsewhere in
+ * newlib. Ignore the freebsd versions and only compile
+ * nearbyintl.
+ */
+#if 0
DECL(double, nearbyint, rint)
DECL(float, nearbyintf, rintf)
+#endif
DECL(long double, nearbyintl, rintl)
diff --git a/newlib/libm/ld/s_rintl.c b/newlib/libm/ld/s_rintl.c
index 1e9824d..9bbb7c3 100644
--- a/newlib/libm/ld/s_rintl.c
+++ b/newlib/libm/ld/s_rintl.c
@@ -31,6 +31,7 @@ __FBSDID("$FreeBSD$");
#include <float.h>
#include <math.h>
+#include <stdint.h>
#include "fpmath.h"
diff --git a/newlib/libm/ld/s_scalbln.c b/newlib/libm/ld/scalblnl.c
index c27420c..b0a0fc3 100644
--- a/newlib/libm/ld/s_scalbln.c
+++ b/newlib/libm/ld/scalblnl.c
@@ -34,6 +34,12 @@ __FBSDID("$FreeBSD$");
#define NMAX 65536
#define NMIN -65536
+/*
+ * scalbln and scalblnf are defined elsewhere in
+ * newlib. Ignore the freebsd versions and only compile
+ * scalblnl.
+ */
+#if 0
double
scalbln(double x, long n)
{
@@ -47,6 +53,7 @@ scalblnf(float x, long n)
return (scalbnf(x, (n > NMAX) ? NMAX : (n < NMIN) ? NMIN : (int)n));
}
+#endif
long double
scalblnl(long double x, long n)
diff --git a/newlib/libm/ld128/Makefile.inc b/newlib/libm/ld128/Makefile.inc
new file mode 100644
index 0000000..337284d
--- /dev/null
+++ b/newlib/libm/ld128/Makefile.inc
@@ -0,0 +1,14 @@
+%C%_lsrc = \
+ %D%/e_powl.c %D%/s_erfl.c %D%/s_exp2l.c %D%/s_expl.c \
+ %D%/s_logl.c %D%/b_tgammal.c %D%/invtrig.c \
+ %D%/e_lgammal_r.c %D%/k_cosl.c %D%/k_sinl.c
+
+libm_a_CFLAGS_%C% = -fbuiltin -fno-math-errno
+
+if HAVE_LONG_DOUBLE
+libm_a_SOURCES += $(%C%_lsrc)
+endif # HAVE_LONG_DOUBLE
+
+LIBM_CHEWOUT_FILES +=
+
+LIBM_CHAPTERS +=
diff --git a/newlib/libm/ld128/e_lgammal_r.c b/newlib/libm/ld128/e_lgammal_r.c
index f236a5d..fe315a4 100644
--- a/newlib/libm/ld128/e_lgammal_r.c
+++ b/newlib/libm/ld128/e_lgammal_r.c
@@ -19,9 +19,9 @@ __FBSDID("$FreeBSD$");
* Converted to long double by Steven G. Kargl.
*/
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
static const volatile double vzero = 0;
diff --git a/newlib/libm/ld128/e_powl.c b/newlib/libm/ld128/e_powl.c
index 12b92a1..ea68f87 100644
--- a/newlib/libm/ld128/e_powl.c
+++ b/newlib/libm/ld128/e_powl.c
@@ -65,7 +65,7 @@ __FBSDID("$FreeBSD$");
#include <float.h>
#include <math.h>
-#include "math_private.h"
+#include "../ld/math_private.h"
static const long double bp[] = {
1.0L,
diff --git a/newlib/libm/ld128/e_rem_pio2l.h b/newlib/libm/ld128/e_rem_pio2l.h
index 10f4edb..55810ab 100644
--- a/newlib/libm/ld128/e_rem_pio2l.h
+++ b/newlib/libm/ld128/e_rem_pio2l.h
@@ -25,7 +25,7 @@ __FBSDID("$FreeBSD$");
#include <float.h>
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
#include "../ld/fpmath.h"
#define BIAS (LDBL_MAX_EXP - 1)
diff --git a/newlib/libm/ld128/invtrig.h b/newlib/libm/ld128/invtrig.h
index 423b568..eaa801d 100644
--- a/newlib/libm/ld128/invtrig.h
+++ b/newlib/libm/ld128/invtrig.h
@@ -30,7 +30,7 @@
#include <float.h>
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#define BIAS (LDBL_MAX_EXP - 1)
#define MANH_SIZE (LDBL_MANH_SIZE + 1)
diff --git a/newlib/libm/ld128/k_cosl.c b/newlib/libm/ld128/k_cosl.c
index 6807873..ea5b013 100644
--- a/newlib/libm/ld128/k_cosl.c
+++ b/newlib/libm/ld128/k_cosl.c
@@ -17,8 +17,8 @@ __FBSDID("$FreeBSD$");
/*
* ld128 version of k_cos.c. See ../src/k_cos.c for most comments.
*/
-
-#include "math_private.h"
+#include <math.h>
+#include "../ld/math_private.h"
/*
* Domain [-0.7854, 0.7854], range ~[-1.17e-39, 1.19e-39]:
diff --git a/newlib/libm/ld128/k_sinl.c b/newlib/libm/ld128/k_sinl.c
index bd415c0..da9e57f 100644
--- a/newlib/libm/ld128/k_sinl.c
+++ b/newlib/libm/ld128/k_sinl.c
@@ -17,8 +17,8 @@ __FBSDID("$FreeBSD$");
/*
* ld128 version of k_sin.c. See ../src/k_sin.c for most comments.
*/
-
-#include "math_private.h"
+#include <math.h>
+#include "../ld/math_private.h"
static const double
half = 0.5;
diff --git a/newlib/libm/ld128/s_erfl.c b/newlib/libm/ld128/s_erfl.c
index 755294b..3a74659 100644
--- a/newlib/libm/ld128/s_erfl.c
+++ b/newlib/libm/ld128/s_erfl.c
@@ -20,9 +20,9 @@ __FBSDID("$FreeBSD$");
*/
#include <float.h>
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
/* XXX Prevent compilers from erroneously constant folding these: */
static const volatile long double tiny = 0x1p-10000L;
diff --git a/newlib/libm/ld128/s_exp2l.c b/newlib/libm/ld128/s_exp2l.c
index 2ab088f..5535e07 100644
--- a/newlib/libm/ld128/s_exp2l.c
+++ b/newlib/libm/ld128/s_exp2l.c
@@ -32,7 +32,7 @@ __FBSDID("$FreeBSD$");
#include <float.h>
#include <stdint.h>
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
#define TBLBITS 7
diff --git a/newlib/libm/ld128/s_expl.c b/newlib/libm/ld128/s_expl.c
index 5b786af..29fcda3 100644
--- a/newlib/libm/ld128/s_expl.c
+++ b/newlib/libm/ld128/s_expl.c
@@ -37,9 +37,9 @@ __FBSDID("$FreeBSD$");
#include <float.h>
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
#include "k_expl.h"
/* XXX Prevent compilers from erroneously constant folding these: */
diff --git a/newlib/libm/ld128/s_logl.c b/newlib/libm/ld128/s_logl.c
index 4774a27..3b00d47 100644
--- a/newlib/libm/ld128/s_logl.c
+++ b/newlib/libm/ld128/s_logl.c
@@ -81,12 +81,12 @@ __FBSDID("$FreeBSD$");
#include <fenv.h>
#endif
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
#ifndef NO_STRUCT_RETURN
#define STRUCT_RETURN
#endif
-#include "math_private.h"
+#include "../ld/math_private.h"
#if !defined(NO_UTAB) && !defined(NO_UTABL)
#define USE_UTAB
diff --git a/newlib/libm/ld80/Makefile.inc b/newlib/libm/ld80/Makefile.inc
new file mode 100644
index 0000000..97fbacd
--- /dev/null
+++ b/newlib/libm/ld80/Makefile.inc
@@ -0,0 +1,15 @@
+%C%_lsrc = \
+ %D%/b_tgammal.c %D%/e_powl.c %D%/s_erfl.c %D%/s_exp2l.c \
+ %D%/s_expl.c %D%/s_logl.c %D%/s_sinpil.c %D%/s_cospil.c \
+ %D%/invtrig.c %D%/e_lgammal_r.c %D%/k_cosl.c %D%/k_sinl.c
+
+
+libm_a_CFLAGS_%C% = -fbuiltin -fno-math-errno
+
+if HAVE_LONG_DOUBLE
+libm_a_SOURCES += $(%C%_lsrc)
+endif # HAVE_LONG_DOUBLE
+
+LIBM_CHEWOUT_FILES +=
+
+LIBM_CHAPTERS +=
diff --git a/newlib/libm/ld80/b_expl.c b/newlib/libm/ld80/b_expl.c
index c18a554..26c95fb 100644
--- a/newlib/libm/ld80/b_expl.c
+++ b/newlib/libm/ld80/b_expl.c
@@ -35,8 +35,8 @@
* bsdrc/b_exp.c converted to long double by Steven G. Kargl.
*/
-#include "fpmath.h"
-#include "math_private.h"
+#include "../ld/fpmath.h"
+#include "../ld/math_private.h"
static const union IEEEl2bits
p0u = LD80C(0xaaaaaaaaaaaaaaab, -3, 1.66666666666666666671e-01L),
diff --git a/newlib/libm/ld80/b_tgammal.c b/newlib/libm/ld80/b_tgammal.c
index 2b955d6..efc0e24 100644
--- a/newlib/libm/ld80/b_tgammal.c
+++ b/newlib/libm/ld80/b_tgammal.c
@@ -55,9 +55,12 @@
#include <ieeefp.h>
#endif
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
+
+long double sinpil(long double x);
+long double cospil(long double x);
/* Used in b_log.c and below. */
struct Double {
diff --git a/newlib/libm/ld80/e_lgammal_r.c b/newlib/libm/ld80/e_lgammal_r.c
index 7d3697b..840c7cc 100644
--- a/newlib/libm/ld80/e_lgammal_r.c
+++ b/newlib/libm/ld80/e_lgammal_r.c
@@ -23,9 +23,9 @@ __FBSDID("$FreeBSD$");
#include <ieeefp.h>
#endif
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
static const volatile double vzero = 0;
diff --git a/newlib/libm/ld80/e_powl.c b/newlib/libm/ld80/e_powl.c
index ea25354..6c11c73 100644
--- a/newlib/libm/ld80/e_powl.c
+++ b/newlib/libm/ld80/e_powl.c
@@ -19,7 +19,7 @@ __FBSDID("$FreeBSD$");
#include <math.h>
-#include "math_private.h"
+#include "../ld/math_private.h"
/*
* Polynomial evaluator:
@@ -122,7 +122,7 @@ __FBSDID("$FreeBSD$");
#include <float.h>
#include <math.h>
-#include "math_private.h"
+#include "../ld/math_private.h"
/* Table size */
#define NXT 32
diff --git a/newlib/libm/ld80/e_rem_pio2l.h b/newlib/libm/ld80/e_rem_pio2l.h
index 4d849de..496a077 100644
--- a/newlib/libm/ld80/e_rem_pio2l.h
+++ b/newlib/libm/ld80/e_rem_pio2l.h
@@ -25,7 +25,7 @@ __FBSDID("$FreeBSD$");
#include <float.h>
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
#include "../ld/fpmath.h"
#define BIAS (LDBL_MAX_EXP - 1)
diff --git a/newlib/libm/ld80/invtrig.h b/newlib/libm/ld80/invtrig.h
index be06a04..4a2469e 100644
--- a/newlib/libm/ld80/invtrig.h
+++ b/newlib/libm/ld80/invtrig.h
@@ -30,7 +30,7 @@
#include <float.h>
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#define BIAS (LDBL_MAX_EXP - 1)
#define MANH_SIZE LDBL_MANH_SIZE
diff --git a/newlib/libm/ld80/k_cosl.c b/newlib/libm/ld80/k_cosl.c
index 354bf1d..f7ba7cf 100644
--- a/newlib/libm/ld80/k_cosl.c
+++ b/newlib/libm/ld80/k_cosl.c
@@ -17,8 +17,8 @@ __FBSDID("$FreeBSD$");
/*
* ld80 version of k_cos.c. See ../src/k_cos.c for most comments.
*/
-
-#include "math_private.h"
+#include <math.h>
+#include "../ld/math_private.h"
/*
* Domain [-0.7854, 0.7854], range ~[-2.43e-23, 2.425e-23]:
diff --git a/newlib/libm/ld80/k_sinl.c b/newlib/libm/ld80/k_sinl.c
index 1715490..7d6e971 100644
--- a/newlib/libm/ld80/k_sinl.c
+++ b/newlib/libm/ld80/k_sinl.c
@@ -17,8 +17,8 @@ __FBSDID("$FreeBSD$");
/*
* ld80 version of k_sin.c. See ../src/k_sin.c for most comments.
*/
-
-#include "math_private.h"
+#include <math.h>
+#include "../ld/math_private.h"
static const double
half = 0.5;
diff --git a/newlib/libm/ld80/s_cospil.c b/newlib/libm/ld80/s_cospil.c
index 199479e..75ec27d 100644
--- a/newlib/libm/ld80/s_cospil.c
+++ b/newlib/libm/ld80/s_cospil.c
@@ -33,9 +33,9 @@
#endif
#include <stdint.h>
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
static const double
pi_hi = 3.1415926814079285e+00, /* 0x400921fb 0x58000000 */
diff --git a/newlib/libm/ld80/s_erfl.c b/newlib/libm/ld80/s_erfl.c
index 1d54838..da04cd8 100644
--- a/newlib/libm/ld80/s_erfl.c
+++ b/newlib/libm/ld80/s_erfl.c
@@ -23,9 +23,9 @@ __FBSDID("$FreeBSD$");
#include <ieeefp.h>
#endif
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
/* XXX Prevent compilers from erroneously constant folding: */
static const volatile long double tiny = 0x1p-10000L;
diff --git a/newlib/libm/ld80/s_exp2l.c b/newlib/libm/ld80/s_exp2l.c
index 421d6e2..552956b 100644
--- a/newlib/libm/ld80/s_exp2l.c
+++ b/newlib/libm/ld80/s_exp2l.c
@@ -36,9 +36,9 @@ __FBSDID("$FreeBSD$");
#include <ieeefp.h>
#endif
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
#define TBLBITS 7
#define TBLSIZE (1 << TBLBITS)
diff --git a/newlib/libm/ld80/s_expl.c b/newlib/libm/ld80/s_expl.c
index e46e73f..81469e0 100644
--- a/newlib/libm/ld80/s_expl.c
+++ b/newlib/libm/ld80/s_expl.c
@@ -47,9 +47,9 @@ __FBSDID("$FreeBSD$");
#include <ieeefp.h>
#endif
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
#include "k_expl.h"
/* XXX Prevent compilers from erroneously constant folding these: */
diff --git a/newlib/libm/ld80/s_logl.c b/newlib/libm/ld80/s_logl.c
index c74519c..01e541b 100644
--- a/newlib/libm/ld80/s_logl.c
+++ b/newlib/libm/ld80/s_logl.c
@@ -85,13 +85,13 @@ __FBSDID("$FreeBSD$");
#include <ieeefp.h>
#endif
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
#define i386_SSE_GOOD
#ifndef NO_STRUCT_RETURN
#define STRUCT_RETURN
#endif
-#include "math_private.h"
+#include "../ld/math_private.h"
#if !defined(NO_UTAB) && !defined(NO_UTABL)
#define USE_UTAB
diff --git a/newlib/libm/ld80/s_sinpil.c b/newlib/libm/ld80/s_sinpil.c
index e8a3824..3390d4d 100644
--- a/newlib/libm/ld80/s_sinpil.c
+++ b/newlib/libm/ld80/s_sinpil.c
@@ -33,9 +33,9 @@
#endif
#include <stdint.h>
-#include "fpmath.h"
+#include "../ld/fpmath.h"
#include "math.h"
-#include "math_private.h"
+#include "../ld/math_private.h"
static const union IEEEl2bits
pi_hi_u = LD80C(0xc90fdaa200000000, 1, 3.14159265346825122833e+00L),