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 + 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 -#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 #include +/* + * __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 #include #include +#include #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 #include #include +#include #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 -#include +#include #include #include 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 #include +#include #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 #include -#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 #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 -#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 +#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 +#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 -#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 #include -#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 -#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 #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 #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 #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 -#include "math_private.h" +#include "../ld/math_private.h" /* * Polynomial evaluator: @@ -122,7 +122,7 @@ __FBSDID("$FreeBSD$"); #include #include -#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 #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 -#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 +#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 +#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 -#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 #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 #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 #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 #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 -#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),