public inbox for newlib-cvs@sourceware.org
help / color / mirror / Atom feed
* [newlib-cygwin] newlib: Add non LDBL_EQ_DBL math support for aarch64, i386, and x86_64
@ 2023-05-16 23:35 Joel Sherrill
  0 siblings, 0 replies; only message in thread
From: Joel Sherrill @ 2023-05-16 23:35 UTC (permalink / raw)
  To: newlib-cvs

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=048ebea9819b67daefc1ab3cda2add6ebe6f27a0

commit 048ebea9819b67daefc1ab3cda2add6ebe6f27a0
Author: Jennifer Averett <jennifer.averett@oarcorp.com>
Date:   Fri May 5 13:39:17 2023 -0500

    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

Diff:
---
 newlib/libc/acinclude.m4                         |  3 ++
 newlib/libc/include/math.h                       |  3 +-
 newlib/libc/machine/aarch64/machine/_fpmath.h    | 20 ++++++---
 newlib/libm/Makefile.inc                         |  8 ++++
 newlib/libm/ld/Makefile.inc                      | 56 ++++++++++++++++++++++++
 newlib/libm/ld/e_lgammal.c                       |  2 +
 newlib/libm/ld/{s_fdim.c => fdiml.c}             |  7 +++
 newlib/libm/ld/fpmath.h                          |  2 +-
 newlib/libm/ld/invtrig.h                         | 33 ++++++++++++++
 newlib/libm/ld/k_expl.h                          | 33 ++++++++++++++
 newlib/libm/ld/math_private.h                    | 21 ++++++++-
 newlib/libm/ld/s_ilogbl.c                        |  7 +--
 newlib/libm/ld/s_logbl.c                         |  7 +--
 newlib/libm/ld/s_lround.c                        |  2 +-
 newlib/libm/ld/{s_nearbyint.c => s_nearbyintl.c} |  7 +++
 newlib/libm/ld/s_rintl.c                         |  1 +
 newlib/libm/ld/{s_scalbln.c => scalblnl.c}       |  7 +++
 newlib/libm/ld128/Makefile.inc                   | 14 ++++++
 newlib/libm/ld128/e_lgammal_r.c                  |  4 +-
 newlib/libm/ld128/e_powl.c                       |  2 +-
 newlib/libm/ld128/e_rem_pio2l.h                  |  2 +-
 newlib/libm/ld128/invtrig.h                      |  2 +-
 newlib/libm/ld128/k_cosl.c                       |  4 +-
 newlib/libm/ld128/k_sinl.c                       |  4 +-
 newlib/libm/ld128/s_erfl.c                       |  4 +-
 newlib/libm/ld128/s_exp2l.c                      |  2 +-
 newlib/libm/ld128/s_expl.c                       |  4 +-
 newlib/libm/ld128/s_logl.c                       |  4 +-
 newlib/libm/ld80/Makefile.inc                    | 15 +++++++
 newlib/libm/ld80/b_expl.c                        |  4 +-
 newlib/libm/ld80/b_tgammal.c                     |  7 ++-
 newlib/libm/ld80/e_lgammal_r.c                   |  4 +-
 newlib/libm/ld80/e_powl.c                        |  4 +-
 newlib/libm/ld80/e_rem_pio2l.h                   |  2 +-
 newlib/libm/ld80/invtrig.h                       |  2 +-
 newlib/libm/ld80/k_cosl.c                        |  4 +-
 newlib/libm/ld80/k_sinl.c                        |  4 +-
 newlib/libm/ld80/s_cospil.c                      |  4 +-
 newlib/libm/ld80/s_erfl.c                        |  4 +-
 newlib/libm/ld80/s_exp2l.c                       |  4 +-
 newlib/libm/ld80/s_expl.c                        |  4 +-
 newlib/libm/ld80/s_logl.c                        |  4 +-
 newlib/libm/ld80/s_sinpil.c                      |  4 +-
 43 files changed, 275 insertions(+), 60 deletions(-)

diff --git a/newlib/libc/acinclude.m4 b/newlib/libc/acinclude.m4
index 7cba7db39..42662669f 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 54e30ef82..87f51335f 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 71d0a7152..fa62ae81c 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 9d1469555..075693a73 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 000000000..fef3db4a6
--- /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 ebc2fc78c..0e6a0c39b 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
similarity index 93%
rename from newlib/libm/ld/s_fdim.c
rename to newlib/libm/ld/fdiml.c
index c40c3e9d3..dfdb4e63d 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 ce935eb40..323fbe5fc 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 000000000..e8d97d3b6
--- /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 000000000..721a91280
--- /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 c6d06fb14..c5b88f65e 100644
--- a/newlib/libm/ld/math_private.h
+++ b/newlib/libm/ld/math_private.h
@@ -20,6 +20,23 @@
 #include <sys/types.h>
 #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 *
@@ -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 3211f4409..14c632796 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 ee1a91fd8..357a73882 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 1dd8e697f..f67f9fbeb 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
similarity index 94%
rename from newlib/libm/ld/s_nearbyint.c
rename to newlib/libm/ld/s_nearbyintl.c
index 796dbaf98..9befed4df 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 1e9824d83..9bbb7c31e 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
similarity index 93%
rename from newlib/libm/ld/s_scalbln.c
rename to newlib/libm/ld/scalblnl.c
index c27420c92..b0a0fc323 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 000000000..337284d69
--- /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 f236a5da0..fe315a4c5 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 12b92a1a9..ea68f87ba 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 10f4edb0f..55810ab39 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 423b56847..eaa801d43 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 680787307..ea5b013c5 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 bd415c053..da9e57f58 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 755294b5d..3a7465951 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 2ab088f43..5535e075c 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 5b786af49..29fcda350 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 4774a271e..3b00d47ad 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 000000000..97fbacdda
--- /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 c18a55451..26c95fb7b 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 2b955d658..efc0e2434 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 7d3697bb9..840c7ccbe 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 ea25354c2..6c11c73d0 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 4d849de41..496a07744 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 be06a044b..4a2469ed6 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 354bf1d0e..f7ba7cf3d 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 171549057..7d6e9717d 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 199479e9e..75ec27d0c 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 1d54838f5..da04cd8ea 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 421d6e2e0..552956b8b 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 e46e73f0c..81469e00f 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 c74519caf..01e541b49 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 e8a3824d9..3390d4d05 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),

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-05-16 23:35 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-16 23:35 [newlib-cygwin] newlib: Add non LDBL_EQ_DBL math support for aarch64, i386, and x86_64 Joel Sherrill

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).