Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/mingw/mingwex/math')
-rw-r--r--winsup/mingw/mingwex/math/acosf.c23
-rwxr-xr-xwinsup/mingw/mingwex/math/acosh.c26
-rwxr-xr-xwinsup/mingw/mingwex/math/acoshf.c25
-rwxr-xr-xwinsup/mingw/mingwex/math/acoshl.c27
-rw-r--r--winsup/mingw/mingwex/math/acosl.c25
-rw-r--r--winsup/mingw/mingwex/math/asinf.c20
-rwxr-xr-xwinsup/mingw/mingwex/math/asinh.c28
-rwxr-xr-xwinsup/mingw/mingwex/math/asinhf.c28
-rwxr-xr-xwinsup/mingw/mingwex/math/asinhl.c28
-rw-r--r--winsup/mingw/mingwex/math/asinl.c21
-rw-r--r--winsup/mingw/mingwex/math/atan2f.c15
-rw-r--r--winsup/mingw/mingwex/math/atan2l.c16
-rw-r--r--winsup/mingw/mingwex/math/atanf.c17
-rwxr-xr-xwinsup/mingw/mingwex/math/atanh.c31
-rwxr-xr-xwinsup/mingw/mingwex/math/atanhf.c30
-rwxr-xr-xwinsup/mingw/mingwex/math/atanhl.c29
-rw-r--r--winsup/mingw/mingwex/math/atanl.c19
-rw-r--r--winsup/mingw/mingwex/math/cbrt.c162
-rw-r--r--winsup/mingw/mingwex/math/cbrtf.c147
-rw-r--r--winsup/mingw/mingwex/math/cbrtl.c161
-rw-r--r--winsup/mingw/mingwex/math/ceilf.S31
-rw-r--r--winsup/mingw/mingwex/math/ceill.S33
-rw-r--r--winsup/mingw/mingwex/math/cephes_emath.c1318
-rw-r--r--winsup/mingw/mingwex/math/cephes_emath.h713
-rw-r--r--winsup/mingw/mingwex/math/cephes_mconf.h395
-rw-r--r--winsup/mingw/mingwex/math/copysign.S19
-rw-r--r--winsup/mingw/mingwex/math/copysignf.S19
-rw-r--r--winsup/mingw/mingwex/math/copysignl.S20
-rw-r--r--winsup/mingw/mingwex/math/cosf.S29
-rw-r--r--winsup/mingw/mingwex/math/coshf.c3
-rw-r--r--winsup/mingw/mingwex/math/coshl.c110
-rw-r--r--winsup/mingw/mingwex/math/cosl.S30
-rwxr-xr-xwinsup/mingw/mingwex/math/erfl.c299
-rw-r--r--winsup/mingw/mingwex/math/exp2.S39
-rw-r--r--winsup/mingw/mingwex/math/exp2f.S39
-rw-r--r--winsup/mingw/mingwex/math/exp2l.S39
-rw-r--r--winsup/mingw/mingwex/math/expf.c3
-rw-r--r--winsup/mingw/mingwex/math/expl.c71
-rwxr-xr-xwinsup/mingw/mingwex/math/expm1.c28
-rwxr-xr-xwinsup/mingw/mingwex/math/expm1f.c29
-rwxr-xr-xwinsup/mingw/mingwex/math/expm1l.c29
-rw-r--r--winsup/mingw/mingwex/math/fabs.c10
-rw-r--r--winsup/mingw/mingwex/math/fabsf.c9
-rw-r--r--winsup/mingw/mingwex/math/fabsl.c9
-rwxr-xr-xwinsup/mingw/mingwex/math/fastmath.h115
-rw-r--r--winsup/mingw/mingwex/math/fdim.c7
-rw-r--r--winsup/mingw/mingwex/math/fdimf.c7
-rw-r--r--winsup/mingw/mingwex/math/fdiml.c7
-rw-r--r--winsup/mingw/mingwex/math/floorf.S35
-rw-r--r--winsup/mingw/mingwex/math/floorl.S33
-rw-r--r--winsup/mingw/mingwex/math/fma.S12
-rw-r--r--winsup/mingw/mingwex/math/fmaf.S12
-rw-r--r--winsup/mingw/mingwex/math/fmal.c5
-rw-r--r--winsup/mingw/mingwex/math/fmax.c7
-rw-r--r--winsup/mingw/mingwex/math/fmaxf.c7
-rw-r--r--winsup/mingw/mingwex/math/fmaxl.c7
-rw-r--r--winsup/mingw/mingwex/math/fmin.c7
-rw-r--r--winsup/mingw/mingwex/math/fminf.c7
-rw-r--r--winsup/mingw/mingwex/math/fminl.c7
-rw-r--r--winsup/mingw/mingwex/math/fmodf.c23
-rw-r--r--winsup/mingw/mingwex/math/fmodl.c22
-rw-r--r--winsup/mingw/mingwex/math/fp_consts.c14
-rw-r--r--winsup/mingw/mingwex/math/fp_consts.h48
-rw-r--r--winsup/mingw/mingwex/math/fp_constsf.c12
-rw-r--r--winsup/mingw/mingwex/math/fp_constsl.c12
-rw-r--r--winsup/mingw/mingwex/math/fpclassify.c20
-rw-r--r--winsup/mingw/mingwex/math/fpclassifyf.c10
-rw-r--r--winsup/mingw/mingwex/math/fpclassifyl.c10
-rw-r--r--winsup/mingw/mingwex/math/frexpf.c3
-rw-r--r--winsup/mingw/mingwex/math/frexpl.S71
-rw-r--r--winsup/mingw/mingwex/math/fucom.c11
-rw-r--r--winsup/mingw/mingwex/math/hypotf.c4
-rw-r--r--winsup/mingw/mingwex/math/hypotl.c73
-rw-r--r--winsup/mingw/mingwex/math/ilogb.S37
-rw-r--r--winsup/mingw/mingwex/math/ilogbf.S35
-rw-r--r--winsup/mingw/mingwex/math/ilogbl.S36
-rw-r--r--winsup/mingw/mingwex/math/isnan.c14
-rw-r--r--winsup/mingw/mingwex/math/isnanf.c12
-rw-r--r--winsup/mingw/mingwex/math/isnanl.c13
-rw-r--r--winsup/mingw/mingwex/math/ldexpf.c3
-rw-r--r--winsup/mingw/mingwex/math/ldexpl.c19
-rw-r--r--winsup/mingw/mingwex/math/lgamma.c359
-rw-r--r--winsup/mingw/mingwex/math/lgammaf.c253
-rw-r--r--winsup/mingw/mingwex/math/lgammal.c416
-rw-r--r--winsup/mingw/mingwex/math/llrint.c10
-rw-r--r--winsup/mingw/mingwex/math/llrintf.c9
-rw-r--r--winsup/mingw/mingwex/math/llrintl.c10
-rw-r--r--winsup/mingw/mingwex/math/llround.c19
-rw-r--r--winsup/mingw/mingwex/math/llroundf.c19
-rw-r--r--winsup/mingw/mingwex/math/llroundl.c19
-rw-r--r--winsup/mingw/mingwex/math/log10f.S48
-rw-r--r--winsup/mingw/mingwex/math/log10l.S52
-rw-r--r--winsup/mingw/mingwex/math/log1p.S47
-rw-r--r--winsup/mingw/mingwex/math/log1pf.S47
-rw-r--r--winsup/mingw/mingwex/math/log1pl.S54
-rw-r--r--winsup/mingw/mingwex/math/log2.S51
-rw-r--r--winsup/mingw/mingwex/math/log2f.S51
-rw-r--r--winsup/mingw/mingwex/math/log2l.S48
-rw-r--r--winsup/mingw/mingwex/math/logb.c16
-rw-r--r--winsup/mingw/mingwex/math/logbf.c16
-rw-r--r--winsup/mingw/mingwex/math/logbl.c17
-rw-r--r--winsup/mingw/mingwex/math/logf.S39
-rw-r--r--winsup/mingw/mingwex/math/logl.S40
-rw-r--r--winsup/mingw/mingwex/math/lrint.c9
-rw-r--r--winsup/mingw/mingwex/math/lrintf.c9
-rw-r--r--winsup/mingw/mingwex/math/lrintl.c10
-rw-r--r--winsup/mingw/mingwex/math/lround.c19
-rw-r--r--winsup/mingw/mingwex/math/lroundf.c19
-rw-r--r--winsup/mingw/mingwex/math/lroundl.c19
-rw-r--r--winsup/mingw/mingwex/math/modff.c22
-rw-r--r--winsup/mingw/mingwex/math/modfl.c22
-rw-r--r--winsup/mingw/mingwex/math/nearbyint.S30
-rw-r--r--winsup/mingw/mingwex/math/nearbyintf.S29
-rw-r--r--winsup/mingw/mingwex/math/nearbyintl.S30
-rw-r--r--winsup/mingw/mingwex/math/nextafterf.c27
-rwxr-xr-xwinsup/mingw/mingwex/math/nextafterl.c65
-rwxr-xr-xwinsup/mingw/mingwex/math/nexttoward.c42
-rwxr-xr-xwinsup/mingw/mingwex/math/nexttowardf.c38
-rw-r--r--winsup/mingw/mingwex/math/pow.c781
-rw-r--r--winsup/mingw/mingwex/math/powf.c3
-rw-r--r--winsup/mingw/mingwex/math/powi.c200
-rw-r--r--winsup/mingw/mingwex/math/powif.c198
-rw-r--r--winsup/mingw/mingwex/math/powil.c179
-rw-r--r--winsup/mingw/mingwex/math/powl.c804
-rw-r--r--winsup/mingw/mingwex/math/remainder.S19
-rw-r--r--winsup/mingw/mingwex/math/remainderf.S19
-rw-r--r--winsup/mingw/mingwex/math/remainderl.S22
-rw-r--r--winsup/mingw/mingwex/math/remquo.S38
-rw-r--r--winsup/mingw/mingwex/math/remquof.S38
-rw-r--r--winsup/mingw/mingwex/math/remquol.S36
-rw-r--r--winsup/mingw/mingwex/math/rint.c6
-rw-r--r--winsup/mingw/mingwex/math/rintf.c7
-rw-r--r--winsup/mingw/mingwex/math/rintl.c7
-rw-r--r--winsup/mingw/mingwex/math/round.c8
-rw-r--r--winsup/mingw/mingwex/math/roundf.c8
-rw-r--r--winsup/mingw/mingwex/math/roundl.c8
-rw-r--r--winsup/mingw/mingwex/math/s_erf.c345
-rw-r--r--winsup/mingw/mingwex/math/scalbn.S19
-rw-r--r--winsup/mingw/mingwex/math/scalbnf.S19
-rw-r--r--winsup/mingw/mingwex/math/scalbnl.S20
-rw-r--r--winsup/mingw/mingwex/math/sf_erf.c264
-rw-r--r--winsup/mingw/mingwex/math/signbit.c13
-rw-r--r--winsup/mingw/mingwex/math/signbitf.c10
-rw-r--r--winsup/mingw/mingwex/math/signbitl.c11
-rw-r--r--winsup/mingw/mingwex/math/sinf.S32
-rw-r--r--winsup/mingw/mingwex/math/sinhf.c3
-rw-r--r--winsup/mingw/mingwex/math/sinhl.c172
-rw-r--r--winsup/mingw/mingwex/math/sinl.S32
-rw-r--r--winsup/mingw/mingwex/math/sqrtf.c20
-rw-r--r--winsup/mingw/mingwex/math/sqrtl.c20
-rw-r--r--winsup/mingw/mingwex/math/tanf.S31
-rw-r--r--winsup/mingw/mingwex/math/tanhf.c3
-rw-r--r--winsup/mingw/mingwex/math/tanhl.c151
-rw-r--r--winsup/mingw/mingwex/math/tanl.S33
-rw-r--r--winsup/mingw/mingwex/math/tgamma.c385
-rw-r--r--winsup/mingw/mingwex/math/tgammaf.c265
-rw-r--r--winsup/mingw/mingwex/math/tgammal.c501
-rw-r--r--winsup/mingw/mingwex/math/trunc.c16
-rw-r--r--winsup/mingw/mingwex/math/truncf.c17
-rw-r--r--winsup/mingw/mingwex/math/truncl.c16
160 files changed, 0 insertions, 11788 deletions
diff --git a/winsup/mingw/mingwex/math/acosf.c b/winsup/mingw/mingwex/math/acosf.c
deleted file mode 100644
index 364f6a90c..000000000
--- a/winsup/mingw/mingwex/math/acosf.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <math.h>
-
-float
-acosf (float x)
-{
- float res;
-
- /* acosl = atanl (sqrtl(1 - x^2) / x) */
- asm ( "fld %%st\n\t"
- "fmul %%st(0)\n\t" /* x^2 */
- "fld1\n\t"
- "fsubp\n\t" /* 1 - x^2 */
- "fsqrt\n\t" /* sqrtl (1 - x^2) */
- "fxch %%st(1)\n\t"
- "fpatan"
- : "=t" (res) : "0" (x) : "st(1)");
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/acosh.c b/winsup/mingw/mingwex/math/acosh.c
deleted file mode 100755
index 1497883cf..000000000
--- a/winsup/mingw/mingwex/math/acosh.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <math.h>
-#include <errno.h>
-#include "fastmath.h"
-
-/* acosh(x) = log (x + sqrt(x * x - 1)) */
-double acosh (double x)
-{
- if (isnan (x))
- return x;
-
- if (x < 1.0)
- {
- errno = EDOM;
- return nan("");
- }
-
- if (x > 0x1p32)
- /* Avoid overflow (and unnecessary calculation when
- sqrt (x * x - 1) == x). GCC optimizes by replacing
- the long double M_LN2 const with a fldln2 insn. */
- return __fast_log (x) + 6.9314718055994530941723E-1L;
-
- /* Since x >= 1, the arg to log will always be greater than
- the fyl2xp1 limit (approx 0.29) so just use logl. */
- return __fast_log (x + __fast_sqrt((x + 1.0) * (x - 1.0)));
-}
diff --git a/winsup/mingw/mingwex/math/acoshf.c b/winsup/mingw/mingwex/math/acoshf.c
deleted file mode 100755
index 08f190fcb..000000000
--- a/winsup/mingw/mingwex/math/acoshf.c
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <math.h>
-#include <errno.h>
-#include "fastmath.h"
-
-/* acosh(x) = log (x + sqrt(x * x - 1)) */
-float acoshf (float x)
-{
- if (isnan (x))
- return x;
- if (x < 1.0f)
- {
- errno = EDOM;
- return nan("");
- }
-
- if (x > 0x1p32f)
- /* Avoid overflow (and unnecessary calculation when
- sqrt (x * x - 1) == x). GCC optimizes by replacing
- the long double M_LN2 const with a fldln2 insn. */
- return __fast_log (x) + 6.9314718055994530941723E-1L;
-
- /* Since x >= 1, the arg to log will always be greater than
- the fyl2xp1 limit (approx 0.29) so just use logl. */
- return __fast_log (x + __fast_sqrt((x + 1.0) * (x - 1.0)));
-}
diff --git a/winsup/mingw/mingwex/math/acoshl.c b/winsup/mingw/mingwex/math/acoshl.c
deleted file mode 100755
index c461176bb..000000000
--- a/winsup/mingw/mingwex/math/acoshl.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <math.h>
-#include <errno.h>
-#include "fastmath.h"
-
-/* acosh(x) = log (x + sqrt(x * x - 1)) */
-long double acoshl (long double x)
-{
- if (isnan (x))
- return x;
-
- if (x < 1.0L)
- {
- errno = EDOM;
- return nanl("");
- }
- if (x > 0x1p32L)
- /* Avoid overflow (and unnecessary calculation when
- sqrt (x * x - 1) == x).
- The M_LN2 define doesn't have enough precison for
- long double so use this one. GCC optimizes by replacing
- the const with a fldln2 insn. */
- return __fast_logl (x) + 6.9314718055994530941723E-1L;
-
- /* Since x >= 1, the arg to log will always be greater than
- the fyl2xp1 limit (approx 0.29) so just use logl. */
- return __fast_logl (x + __fast_sqrtl((x + 1.0L) * (x - 1.0L)));
-}
diff --git a/winsup/mingw/mingwex/math/acosl.c b/winsup/mingw/mingwex/math/acosl.c
deleted file mode 100644
index f98d2cdc1..000000000
--- a/winsup/mingw/mingwex/math/acosl.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <math.h>
-
-long double
-acosl (long double x)
-{
- long double res;
-
- /* acosl = atanl (sqrtl(1 - x^2) / x) */
- asm ( "fld %%st\n\t"
- "fmul %%st(0)\n\t" /* x^2 */
- "fld1\n\t"
- "fsubp\n\t" /* 1 - x^2 */
- "fsqrt\n\t" /* sqrtl (1 - x^2) */
- "fxch %%st(1)\n\t"
- "fpatan"
- : "=t" (res) : "0" (x) : "st(1)");
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/asinf.c b/winsup/mingw/mingwex/math/asinf.c
deleted file mode 100644
index e79429ec8..000000000
--- a/winsup/mingw/mingwex/math/asinf.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-/* asin = atan (x / sqrt(1 - x^2)) */
-
-float asinf (float x)
-{
- float res;
-
- asm ( "fld %%st\n\t"
- "fmul %%st(0)\n\t" /* x^2 */
- "fld1\n\t"
- "fsubp\n\t" /* 1 - x^2 */
- "fsqrt\n\t" /* sqrt (1 - x^2) */
- "fpatan"
- : "=t" (res) : "0" (x) : "st(1)");
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/asinh.c b/winsup/mingw/mingwex/math/asinh.c
deleted file mode 100755
index 30404497d..000000000
--- a/winsup/mingw/mingwex/math/asinh.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <math.h>
-#include <errno.h>
-#include "fastmath.h"
-
- /* asinh(x) = copysign(log(fabs(x) + sqrt(x * x + 1.0)), x) */
-double asinh(double x)
-{
- double z;
- if (!isfinite (x))
- return x;
- z = fabs (x);
-
- /* Avoid setting FPU underflow exception flag in x * x. */
-#if 0
- if ( z < 0x1p-32)
- return x;
-#endif
-
- /* Use log1p to avoid cancellation with small x. Put
- x * x in denom, so overflow is harmless.
- asinh(x) = log1p (x + sqrt (x * x + 1.0) - 1.0)
- = log1p (x + x * x / (sqrt (x * x + 1.0) + 1.0)) */
-
- z = __fast_log1p (z + z * z / (__fast_sqrt (z * z + 1.0) + 1.0));
-
- return ( x > 0.0 ? z : -z);
-}
-
diff --git a/winsup/mingw/mingwex/math/asinhf.c b/winsup/mingw/mingwex/math/asinhf.c
deleted file mode 100755
index 080a9278d..000000000
--- a/winsup/mingw/mingwex/math/asinhf.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <math.h>
-#include <errno.h>
-#include "fastmath.h"
-
- /* asinh(x) = copysign(log(fabs(x) + sqrt(x * x + 1.0)), x) */
-float asinhf(float x)
-{
- float z;
- if (!isfinite (x))
- return x;
- z = fabsf (x);
-
- /* Avoid setting FPU underflow exception flag in x * x. */
-#if 0
- if ( z < 0x1p-32)
- return x;
-#endif
-
-
- /* Use log1p to avoid cancellation with small x. Put
- x * x in denom, so overflow is harmless.
- asinh(x) = log1p (x + sqrt (x * x + 1.0) - 1.0)
- = log1p (x + x * x / (sqrt (x * x + 1.0) + 1.0)) */
-
- z = __fast_log1p (z + z * z / (__fast_sqrt (z * z + 1.0) + 1.0));
-
- return ( x > 0.0 ? z : -z);
-}
diff --git a/winsup/mingw/mingwex/math/asinhl.c b/winsup/mingw/mingwex/math/asinhl.c
deleted file mode 100755
index 8f027e83d..000000000
--- a/winsup/mingw/mingwex/math/asinhl.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <math.h>
-#include <errno.h>
-#include "fastmath.h"
-
- /* asinh(x) = copysign(log(fabs(x) + sqrt(x * x + 1.0)), x) */
-long double asinhl(long double x)
-{
- long double z;
- if (!isfinite (x))
- return x;
-
- z = fabsl (x);
-
- /* Avoid setting FPU underflow exception flag in x * x. */
-#if 0
- if ( z < 0x1p-32)
- return x;
-#endif
-
- /* Use log1p to avoid cancellation with small x. Put
- x * x in denom, so overflow is harmless.
- asinh(x) = log1p (x + sqrt (x * x + 1.0) - 1.0)
- = log1p (x + x * x / (sqrt (x * x + 1.0) + 1.0)) */
-
- z = __fast_log1pl (z + z * z / (__fast_sqrtl (z * z + 1.0L) + 1.0L));
-
- return ( x > 0.0 ? z : -z);
-}
diff --git a/winsup/mingw/mingwex/math/asinl.c b/winsup/mingw/mingwex/math/asinl.c
deleted file mode 100644
index a2ac32b39..000000000
--- a/winsup/mingw/mingwex/math/asinl.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Adapted for long double type by Danny Smith <dannysmith@users.sourceforge.net>.
- */
-
-/* asin = atan (x / sqrt(1 - x^2)) */
-
-long double asinl (long double x)
-{
- long double res;
-
- asm ( "fld %%st\n\t"
- "fmul %%st(0)\n\t" /* x^2 */
- "fld1\n\t"
- "fsubp\n\t" /* 1 - x^2 */
- "fsqrt\n\t" /* sqrt (1 - x^2) */
- "fpatan"
- : "=t" (res) : "0" (x) : "st(1)");
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/atan2f.c b/winsup/mingw/mingwex/math/atan2f.c
deleted file mode 100644
index 52ec6f672..000000000
--- a/winsup/mingw/mingwex/math/atan2f.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- */
-
-#include <math.h>
-
-float
-atan2f (float y, float x)
-{
- float res;
- asm ("fpatan" : "=t" (res) : "u" (y), "0" (x) : "st(1)");
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/atan2l.c b/winsup/mingw/mingwex/math/atan2l.c
deleted file mode 100644
index efd62c1ec..000000000
--- a/winsup/mingw/mingwex/math/atan2l.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <math.h>
-
-long double
-atan2l (long double y, long double x)
-{
- long double res;
- asm ("fpatan" : "=t" (res) : "u" (y), "0" (x) : "st(1)");
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/atanf.c b/winsup/mingw/mingwex/math/atanf.c
deleted file mode 100644
index ae70d5daa..000000000
--- a/winsup/mingw/mingwex/math/atanf.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- */
-
-#include <math.h>
-
-float
-atanf (float x)
-{
- float res;
-
- asm ("fld1\n\t"
- "fpatan" : "=t" (res) : "0" (x));
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/atanh.c b/winsup/mingw/mingwex/math/atanh.c
deleted file mode 100755
index b5d9ce100..000000000
--- a/winsup/mingw/mingwex/math/atanh.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <math.h>
-#include <errno.h>
-#include "fastmath.h"
-
-/* atanh (x) = 0.5 * log ((1.0 + x)/(1.0 - x)) */
-
-double atanh(double x)
-{
- double z;
- if isnan (x)
- return x;
- z = fabs (x);
- if (z == 1.0)
- {
- errno = ERANGE;
- return (x > 0 ? INFINITY : -INFINITY);
- }
- if (z > 1.0)
- {
- errno = EDOM;
- return nan("");
- }
- /* Rearrange formula to avoid precision loss for small x.
-
- atanh(x) = 0.5 * log ((1.0 + x)/(1.0 - x))
- = 0.5 * log1p ((1.0 + x)/(1.0 - x) - 1.0)
- = 0.5 * log1p ((1.0 + x - 1.0 + x) /(1.0 - x))
- = 0.5 * log1p ((2.0 * x ) / (1.0 - x)) */
- z = 0.5 * __fast_log1p ((z + z) / (1.0 - z));
- return x >= 0 ? z : -z;
-}
diff --git a/winsup/mingw/mingwex/math/atanhf.c b/winsup/mingw/mingwex/math/atanhf.c
deleted file mode 100755
index b7c30823e..000000000
--- a/winsup/mingw/mingwex/math/atanhf.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <math.h>
-#include <errno.h>
-#include "fastmath.h"
-
-/* atanh (x) = 0.5 * log ((1.0 + x)/(1.0 - x)) */
-float atanhf (float x)
-{
- float z;
- if isnan (x)
- return x;
- z = fabsf (x);
- if (z == 1.0)
- {
- errno = ERANGE;
- return (x > 0 ? INFINITY : -INFINITY);
- }
- if ( z > 1.0)
- {
- errno = EDOM;
- return nanf("");
- }
- /* Rearrange formula to avoid precision loss for small x.
-
- atanh(x) = 0.5 * log ((1.0 + x)/(1.0 - x))
- = 0.5 * log1p ((1.0 + x)/(1.0 - x) - 1.0)
- = 0.5 * log1p ((1.0 + x - 1.0 + x) /(1.0 - x))
- = 0.5 * log1p ((2.0 * x ) / (1.0 - x)) */
- z = 0.5 * __fast_log1p ((z + z) / (1.0 - z));
- return x >= 0 ? z : -z;
-}
diff --git a/winsup/mingw/mingwex/math/atanhl.c b/winsup/mingw/mingwex/math/atanhl.c
deleted file mode 100755
index 2d5fec02a..000000000
--- a/winsup/mingw/mingwex/math/atanhl.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <math.h>
-#include <errno.h>
-#include "fastmath.h"
-
-/* atanh (x) = 0.5 * log ((1.0 + x)/(1.0 - x)) */
-long double atanhl (long double x)
-{
- long double z;
- if isnan (x)
- return x;
- z = fabsl (x);
- if (z == 1.0L)
- {
- errno = ERANGE;
- return (x > 0 ? INFINITY : -INFINITY);
- }
- if ( z > 1.0L)
- {
- errno = EDOM;
- return nanl("");
- }
- /* Rearrange formula to avoid precision loss for small x.
- atanh(x) = 0.5 * log ((1.0 + x)/(1.0 - x))
- = 0.5 * log1p ((1.0 + x)/(1.0 - x) - 1.0)
- = 0.5 * log1p ((1.0 + x - 1.0 + x) /(1.0 - x))
- = 0.5 * log1p ((2.0 * x ) / (1.0 - x)) */
- z = 0.5L * __fast_log1pl ((z + z) / (1.0L - z));
- return x >= 0 ? z : -z;
-}
diff --git a/winsup/mingw/mingwex/math/atanl.c b/winsup/mingw/mingwex/math/atanl.c
deleted file mode 100644
index 5de06d35b..000000000
--- a/winsup/mingw/mingwex/math/atanl.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <math.h>
-
-long double
-atanl (long double x)
-{
- long double res;
-
- asm ("fld1\n\t"
- "fpatan"
- : "=t" (res) : "0" (x));
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/cbrt.c b/winsup/mingw/mingwex/math/cbrt.c
deleted file mode 100644
index 93f5c819c..000000000
--- a/winsup/mingw/mingwex/math/cbrt.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* cbrt.c
- *
- * Cube root
- *
- *
- *
- * SYNOPSIS:
- *
- * double x, y, cbrt();
- *
- * y = cbrt( x );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns the cube root of the argument, which may be negative.
- *
- * Range reduction involves determining the power of 2 of
- * the argument. A polynomial of degree 2 applied to the
- * mantissa, and multiplication by the cube root of 1, 2, or 4
- * approximates the root to within about 0.1%. Then Newton's
- * iteration is used three times to converge to an accurate
- * result.
- *
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * DEC -10,10 200000 1.8e-17 6.2e-18
- * IEEE 0,1e308 30000 1.5e-16 5.0e-17
- *
- */
- /* cbrt.c */
-
-/*
-Cephes Math Library Release 2.2: January, 1991
-Copyright 1984, 1991 by Stephen L. Moshier
-Direct inquiries to 30 Frost Street, Cambridge, MA 02140
-*/
-
-/*
- Modified for mingwex.a
- 2002-07-01 Danny Smith <dannysmith@users.sourceforge.net>
- */
-#ifdef __MINGW32__
-#include <math.h>
-#include "cephes_mconf.h"
-#else
-#include "mconf.h"
-#endif
-
-
-static const double CBRT2 = 1.2599210498948731647672;
-static const double CBRT4 = 1.5874010519681994747517;
-static const double CBRT2I = 0.79370052598409973737585;
-static const double CBRT4I = 0.62996052494743658238361;
-
-#ifndef __MINGW32__
-#ifdef ANSIPROT
-extern double frexp ( double, int * );
-extern double ldexp ( double, int );
-extern int isnan ( double );
-extern int isfinite ( double );
-#else
-double frexp(), ldexp();
-int isnan(), isfinite();
-#endif
-#endif
-
-double cbrt(x)
-double x;
-{
-int e, rem, sign;
-double z;
-
-#ifdef __MINGW32__
-if (!isfinite (x) || x == 0 )
- return x;
-#else
-
-#ifdef NANS
-if( isnan(x) )
- return x;
-#endif
-#ifdef INFINITIES
-if( !isfinite(x) )
- return x;
-#endif
-if( x == 0 )
- return( x );
-
-#endif /* __MINGW32__ */
-
-if( x > 0 )
- sign = 1;
-else
- {
- sign = -1;
- x = -x;
- }
-
-z = x;
-/* extract power of 2, leaving
- * mantissa between 0.5 and 1
- */
-x = frexp( x, &e );
-
-/* Approximate cube root of number between .5 and 1,
- * peak relative error = 9.2e-6
- */
-x = (((-1.3466110473359520655053e-1 * x
- + 5.4664601366395524503440e-1) * x
- - 9.5438224771509446525043e-1) * x
- + 1.1399983354717293273738e0 ) * x
- + 4.0238979564544752126924e-1;
-
-/* exponent divided by 3 */
-if( e >= 0 )
- {
- rem = e;
- e /= 3;
- rem -= 3*e;
- if( rem == 1 )
- x *= CBRT2;
- else if( rem == 2 )
- x *= CBRT4;
- }
-
-
-/* argument less than 1 */
-
-else
- {
- e = -e;
- rem = e;
- e /= 3;
- rem -= 3*e;
- if( rem == 1 )
- x *= CBRT2I;
- else if( rem == 2 )
- x *= CBRT4I;
- e = -e;
- }
-
-/* multiply by power of 2 */
-x = ldexp( x, e );
-
-/* Newton iteration */
-x -= ( x - (z/(x*x)) )*0.33333333333333333333;
-#ifdef DEC
-x -= ( x - (z/(x*x)) )/3.0;
-#else
-x -= ( x - (z/(x*x)) )*0.33333333333333333333;
-#endif
-
-if( sign < 0 )
- x = -x;
-return(x);
-}
diff --git a/winsup/mingw/mingwex/math/cbrtf.c b/winsup/mingw/mingwex/math/cbrtf.c
deleted file mode 100644
index 537cf8d98..000000000
--- a/winsup/mingw/mingwex/math/cbrtf.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/* cbrtf.c
- *
- * Cube root
- *
- *
- *
- * SYNOPSIS:
- *
- * float x, y, cbrtf();
- *
- * y = cbrtf( x );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns the cube root of the argument, which may be negative.
- *
- * Range reduction involves determining the power of 2 of
- * the argument. A polynomial of degree 2 applied to the
- * mantissa, and multiplication by the cube root of 1, 2, or 4
- * approximates the root to within about 0.1%. Then Newton's
- * iteration is used to converge to an accurate result.
- *
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE 0,1e38 100000 7.6e-8 2.7e-8
- *
- */
- /* cbrt.c */
-
-/*
-Cephes Math Library Release 2.2: June, 1992
-Copyright 1984, 1987, 1988, 1992 by Stephen L. Moshier
-Direct inquiries to 30 Frost Street, Cambridge, MA 02140
-*/
-
-/*
- Modified for mingwex.a
- 2002-07-01 Danny Smith <dannysmith@users.sourceforge.net>
- */
-#ifdef __MINGW32__
-#include <math.h>
-#include "cephes_mconf.h"
-#else
-#include "mconf.h"
-#endif
-
-static const float CBRT2 = 1.25992104989487316477;
-static const float CBRT4 = 1.58740105196819947475;
-
-#ifndef __MINGW32__
-#ifdef ANSIC
-float frexpf(float, int *), ldexpf(float, int);
-
-float cbrtf( float xx )
-#else
-float frexpf(), ldexpf();
-
-float cbrtf(xx)
-double xx;
-#endif
-{
-int e, rem, sign;
-float x, z;
-
-x = xx;
-
-#else /* __MINGW32__ */
-float cbrtf (float x)
-{
-int e, rem, sign;
-float z;
-#endif /* __MINGW32__ */
-
-#ifdef __MINGW32__
-if (!isfinite (x) || x == 0.0F )
- return x;
-#else
-if( x == 0 )
- return( 0.0 );
-#endif
-if( x > 0 )
- sign = 1;
-else
- {
- sign = -1;
- x = -x;
- }
-
-z = x;
-/* extract power of 2, leaving
- * mantissa between 0.5 and 1
- */
-x = frexpf( x, &e );
-
-/* Approximate cube root of number between .5 and 1,
- * peak relative error = 9.2e-6
- */
-x = (((-0.13466110473359520655053 * x
- + 0.54664601366395524503440 ) * x
- - 0.95438224771509446525043 ) * x
- + 1.1399983354717293273738 ) * x
- + 0.40238979564544752126924;
-
-/* exponent divided by 3 */
-if( e >= 0 )
- {
- rem = e;
- e /= 3;
- rem -= 3*e;
- if( rem == 1 )
- x *= CBRT2;
- else if( rem == 2 )
- x *= CBRT4;
- }
-
-
-/* argument less than 1 */
-
-else
- {
- e = -e;
- rem = e;
- e /= 3;
- rem -= 3*e;
- if( rem == 1 )
- x /= CBRT2;
- else if( rem == 2 )
- x /= CBRT4;
- e = -e;
- }
-
-/* multiply by power of 2 */
-x = ldexpf( x, e );
-
-/* Newton iteration */
-x -= ( x - (z/(x*x)) ) * 0.333333333333;
-
-if( sign < 0 )
- x = -x;
-return(x);
-}
diff --git a/winsup/mingw/mingwex/math/cbrtl.c b/winsup/mingw/mingwex/math/cbrtl.c
deleted file mode 100644
index 36bd48f70..000000000
--- a/winsup/mingw/mingwex/math/cbrtl.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* cbrtl.c
- *
- * Cube root, long double precision
- *
- *
- *
- * SYNOPSIS:
- *
- * long double x, y, cbrtl();
- *
- * y = cbrtl( x );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns the cube root of the argument, which may be negative.
- *
- * Range reduction involves determining the power of 2 of
- * the argument. A polynomial of degree 2 applied to the
- * mantissa, and multiplication by the cube root of 1, 2, or 4
- * approximates the root to within about 0.1%. Then Newton's
- * iteration is used three times to converge to an accurate
- * result.
- *
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE .125,8 80000 7.0e-20 2.2e-20
- * IEEE exp(+-707) 100000 7.0e-20 2.4e-20
- *
- */
-
-
-/*
-Cephes Math Library Release 2.2: January, 1991
-Copyright 1984, 1991 by Stephen L. Moshier
-Direct inquiries to 30 Frost Street, Cambridge, MA 02140
-*/
-
-/*
- Modified for mingwex.a
- 2002-07-01 Danny Smith <dannysmith@users.sourceforge.net>
- */
-#ifdef __MINGW32__
-#include "cephes_mconf.h"
-#else
-#include "mconf.h"
-#endif
-
-static const long double CBRT2 = 1.2599210498948731647672L;
-static const long double CBRT4 = 1.5874010519681994747517L;
-static const long double CBRT2I = 0.79370052598409973737585L;
-static const long double CBRT4I = 0.62996052494743658238361L;
-
-#ifndef __MINGW32__
-
-#ifdef ANSIPROT
-extern long double frexpl ( long double, int * );
-extern long double ldexpl ( long double, int );
-extern int isnanl ( long double );
-#else
-long double frexpl(), ldexpl();
-extern int isnanl();
-#endif
-
-#ifdef INFINITIES
-extern long double INFINITYL;
-#endif
-
-#endif /* __MINGW32__ */
-
-long double cbrtl(x)
-long double x;
-{
-int e, rem, sign;
-long double z;
-
-#ifdef __MINGW32__
-if (!isfinite (x) || x == 0.0L)
- return(x);
-#else
-
-#ifdef NANS
-if(isnanl(x))
- return(x);
-#endif
-#ifdef INFINITIES
-if( x == INFINITYL)
- return(x);
-if( x == -INFINITYL)
- return(x);
-#endif
-if( x == 0 )
- return( x );
-
-#endif /* __MINGW32__ */
-
-if( x > 0 )
- sign = 1;
-else
- {
- sign = -1;
- x = -x;
- }
-
-z = x;
-/* extract power of 2, leaving
- * mantissa between 0.5 and 1
- */
-x = frexpl( x, &e );
-
-/* Approximate cube root of number between .5 and 1,
- * peak relative error = 1.2e-6
- */
-x = (((( 1.3584464340920900529734e-1L * x
- - 6.3986917220457538402318e-1L) * x
- + 1.2875551670318751538055e0L) * x
- - 1.4897083391357284957891e0L) * x
- + 1.3304961236013647092521e0L) * x
- + 3.7568280825958912391243e-1L;
-
-/* exponent divided by 3 */
-if( e >= 0 )
- {
- rem = e;
- e /= 3;
- rem -= 3*e;
- if( rem == 1 )
- x *= CBRT2;
- else if( rem == 2 )
- x *= CBRT4;
- }
-else
- { /* argument less than 1 */
- e = -e;
- rem = e;
- e /= 3;
- rem -= 3*e;
- if( rem == 1 )
- x *= CBRT2I;
- else if( rem == 2 )
- x *= CBRT4I;
- e = -e;
- }
-
-/* multiply by power of 2 */
-x = ldexpl( x, e );
-
-/* Newton iteration */
-
-x -= ( x - (z/(x*x)) )*0.3333333333333333333333L;
-x -= ( x - (z/(x*x)) )*0.3333333333333333333333L;
-
-if( sign < 0 )
- x = -x;
-return(x);
-}
diff --git a/winsup/mingw/mingwex/math/ceilf.S b/winsup/mingw/mingwex/math/ceilf.S
deleted file mode 100644
index ffcdfc687..000000000
--- a/winsup/mingw/mingwex/math/ceilf.S
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
- .file "ceilf.S"
- .text
- .align 4
-.globl _ceilf
- .def _ceilf; .scl 2; .type 32; .endef
-_ceilf:
- flds 4(%esp)
- subl $8,%esp
-
- fstcw 4(%esp) /* store fpu control word */
-
- /* We use here %edx although only the low 1 bits are defined.
- But none of the operations should care and they are faster
- than the 16 bit operations. */
- movl $0x0800,%edx /* round towards +oo */
- orl 4(%esp),%edx
- andl $0xfbff,%edx
- movl %edx,(%esp)
- fldcw (%esp) /* load modified control word */
-
- frndint /* round */
-
- fldcw 4(%esp) /* restore original control word */
-
- addl $8,%esp
- ret
diff --git a/winsup/mingw/mingwex/math/ceill.S b/winsup/mingw/mingwex/math/ceill.S
deleted file mode 100644
index 29cb27a62..000000000
--- a/winsup/mingw/mingwex/math/ceill.S
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- */
-
-
- .file "ceill.S"
- .text
- .align 4
-.globl _ceill
- .def _ceill; .scl 2; .type 32; .endef
-_ceill:
- fldt 4(%esp)
- subl $8,%esp
-
- fstcw 4(%esp) /* store fpu control word */
-
- /* We use here %edx although only the low 1 bits are defined.
- But none of the operations should care and they are faster
- than the 16 bit operations. */
- movl $0x0800,%edx /* round towards +oo */
- orl 4(%esp),%edx
- andl $0xfbff,%edx
- movl %edx,(%esp)
- fldcw (%esp) /* load modified control word */
-
- frndint /* round */
-
- fldcw 4(%esp) /* restore original control word */
-
- addl $8,%esp
- ret
diff --git a/winsup/mingw/mingwex/math/cephes_emath.c b/winsup/mingw/mingwex/math/cephes_emath.c
deleted file mode 100644
index ab798a2d2..000000000
--- a/winsup/mingw/mingwex/math/cephes_emath.c
+++ /dev/null
@@ -1,1318 +0,0 @@
-/* This file is extracted from S L Moshier's ioldoubl.c,
- * modified for use in MinGW
- *
- * Extended precision arithmetic functions for long double I/O.
- * This program has been placed in the public domain.
- */
-
-
-
-/*
- * Revision history:
- *
- * 5 Jan 84 PDP-11 assembly language version
- * 6 Dec 86 C language version
- * 30 Aug 88 100 digit version, improved rounding
- * 15 May 92 80-bit long double support
- *
- * Author: S. L. Moshier.
- *
- * 6 Oct 02 Modified for MinGW by inlining utility routines,
- * removing global variables and splitting out strtold
- * from _IO_ldtoa and _IO_ldtostr.
- *
- * Danny Smith <dannysmith@users.sourceforge.net>
- *
- */
-
-
-#include "cephes_emath.h"
-
-/*
- * The constants are for 64 bit precision.
- */
-
-
-/* Move in external format number,
- * converting it to internal format.
- */
-void __emovi(const short unsigned int * __restrict__ a,
- short unsigned int * __restrict__ b)
-{
-register const unsigned short *p;
-register unsigned short *q;
-int i;
-
-q = b;
-p = a + (NE-1); /* point to last word of external number */
-/* get the sign bit */
-if( *p & 0x8000 )
- *q++ = 0xffff;
-else
- *q++ = 0;
-/* get the exponent */
-*q = *p--;
-*q++ &= 0x7fff; /* delete the sign bit */
-#ifdef INFINITY
-if( (*(q-1) & 0x7fff) == 0x7fff )
- {
-#ifdef NANS
- if( __eisnan(a) )
- {
- *q++ = 0;
- for( i=3; i<NI; i++ )
- *q++ = *p--;
- return;
- }
-#endif
- for( i=2; i<NI; i++ )
- *q++ = 0;
- return;
- }
-#endif
-/* clear high guard word */
-*q++ = 0;
-/* move in the significand */
-for( i=0; i<NE-1; i++ )
- *q++ = *p--;
-/* clear low guard word */
-*q = 0;
-}
-
-
-/*
-; Add significands
-; x + y replaces y
-*/
-
-void __eaddm(const short unsigned int * __restrict__ x,
- short unsigned int * __restrict__ y)
-{
-register unsigned long a;
-int i;
-unsigned int carry;
-
-x += NI-1;
-y += NI-1;
-carry = 0;
-for( i=M; i<NI; i++ )
- {
- a = (unsigned long )(*x) + (unsigned long )(*y) + carry;
- if( a & 0x10000 )
- carry = 1;
- else
- carry = 0;
- *y = (unsigned short )a;
- --x;
- --y;
- }
-}
-
-/*
-; Subtract significands
-; y - x replaces y
-*/
-
-void __esubm(const short unsigned int * __restrict__ x,
- short unsigned int * __restrict__ y)
-{
-unsigned long a;
-int i;
-unsigned int carry;
-
-x += NI-1;
-y += NI-1;
-carry = 0;
-for( i=M; i<NI; i++ )
- {
- a = (unsigned long )(*y) - (unsigned long )(*x) - carry;
- if( a & 0x10000 )
- carry = 1;
- else
- carry = 0;
- *y = (unsigned short )a;
- --x;
- --y;
- }
-}
-
-
-/* Multiply significand of e-type number b
-by 16-bit quantity a, e-type result to c. */
-
-static void __m16m(short unsigned int a,
- short unsigned int * __restrict__ b,
- short unsigned int * __restrict__ c)
-{
-register unsigned short *pp;
-register unsigned long carry;
-unsigned short *ps;
-unsigned short p[NI];
-unsigned long aa, m;
-int i;
-
-aa = a;
-pp = &p[NI-2];
-*pp++ = 0;
-*pp = 0;
-ps = &b[NI-1];
-
-for( i=M+1; i<NI; i++ )
- {
- if( *ps == 0 )
- {
- --ps;
- --pp;
- *(pp-1) = 0;
- }
- else
- {
- m = (unsigned long) aa * *ps--;
- carry = (m & 0xffff) + *pp;
- *pp-- = (unsigned short )carry;
- carry = (carry >> 16) + (m >> 16) + *pp;
- *pp = (unsigned short )carry;
- *(pp-1) = carry >> 16;
- }
- }
-for( i=M; i<NI; i++ )
- c[i] = p[i];
-}
-
-
-/* Divide significands. Neither the numerator nor the denominator
-is permitted to have its high guard word nonzero. */
-
-
-int __edivm(short unsigned int * __restrict__ den,
- short unsigned int * __restrict__ num)
-{
-int i;
-register unsigned short *p;
-unsigned long tnum;
-unsigned short j, tdenm, tquot;
-unsigned short tprod[NI+1];
-unsigned short equot[NI];
-
-p = &equot[0];
-*p++ = num[0];
-*p++ = num[1];
-
-for( i=M; i<NI; i++ )
- {
- *p++ = 0;
- }
-__eshdn1( num );
-tdenm = den[M+1];
-for( i=M; i<NI; i++ )
- {
- /* Find trial quotient digit (the radix is 65536). */
- tnum = (((unsigned long) num[M]) << 16) + num[M+1];
-
- /* Do not execute the divide instruction if it will overflow. */
- if( (tdenm * 0xffffUL) < tnum )
- tquot = 0xffff;
- else
- tquot = tnum / tdenm;
-
- /* Prove that the divide worked. */
-/*
- tcheck = (unsigned long )tquot * tdenm;
- if( tnum - tcheck > tdenm )
- tquot = 0xffff;
-*/
- /* Multiply denominator by trial quotient digit. */
- __m16m( tquot, den, tprod );
- /* The quotient digit may have been overestimated. */
- if( __ecmpm( tprod, num ) > 0 )
- {
- tquot -= 1;
- __esubm( den, tprod );
- if( __ecmpm( tprod, num ) > 0 )
- {
- tquot -= 1;
- __esubm( den, tprod );
- }
- }
- __esubm( tprod, num );
- equot[i] = tquot;
- __eshup6(num);
- }
-/* test for nonzero remainder after roundoff bit */
-p = &num[M];
-j = 0;
-for( i=M; i<NI; i++ )
- {
- j |= *p++;
- }
-if( j )
- j = 1;
-
-for( i=0; i<NI; i++ )
- num[i] = equot[i];
-
-return( (int )j );
-}
-
-
-
-/* Multiply significands */
-int __emulm(const short unsigned int * __restrict__ a,
- short unsigned int * __restrict__ b)
-{
-const unsigned short *p;
-unsigned short *q;
-unsigned short pprod[NI];
-unsigned short equot[NI];
-unsigned short j;
-int i;
-
-equot[0] = b[0];
-equot[1] = b[1];
-for( i=M; i<NI; i++ )
- equot[i] = 0;
-
-j = 0;
-p = &a[NI-1];
-q = &equot[NI-1];
-for( i=M+1; i<NI; i++ )
- {
- if( *p == 0 )
- {
- --p;
- }
- else
- {
- __m16m( *p--, b, pprod );
- __eaddm(pprod, equot);
- }
- j |= *q;
- __eshdn6(equot);
- }
-
-for( i=0; i<NI; i++ )
- b[i] = equot[i];
-
-/* return flag for lost nonzero bits */
-return( (int)j );
-}
-
-
-
-/*
- * Normalize and round off.
- *
- * The internal format number to be rounded is "s".
- * Input "lost" indicates whether the number is exact.
- * This is the so-called sticky bit.
- *
- * Input "subflg" indicates whether the number was obtained
- * by a subtraction operation. In that case if lost is nonzero
- * then the number is slightly smaller than indicated.
- *
- * Input "exp" is the biased exponent, which may be negative.
- * the exponent field of "s" is ignored but is replaced by
- * "exp" as adjusted by normalization and rounding.
- *
- * Input "rcntrl" is the rounding control.
- *
- * Input "rnprc" is precison control (64 or NBITS).
- */
-
-void __emdnorm(short unsigned int *s, int lost, int subflg, long int exp, int rcntrl, int rndprc)
-{
-int i, j;
-unsigned short r;
-int rw = NI-1; /* low guard word */
-int re = NI-2;
-const unsigned short rmsk = 0xffff;
-const unsigned short rmbit = 0x8000;
-#if NE == 6
-unsigned short rbit[NI] = {0,0,0,0,0,0,0,1,0};
-#else
-unsigned short rbit[NI] = {0,0,0,0,0,0,0,0,0,0,0,1,0};
-#endif
-
-/* Normalize */
-j = __enormlz( s );
-
-/* a blank significand could mean either zero or infinity. */
-#ifndef INFINITY
-if( j > NBITS )
- {
- __ecleazs( s );
- return;
- }
-#endif
-exp -= j;
-#ifndef INFINITY
-if( exp >= 32767L )
- goto overf;
-#else
-if( (j > NBITS) && (exp < 32767L) )
- {
- __ecleazs( s );
- return;
- }
-#endif
-if( exp < 0L )
- {
- if( exp > (long )(-NBITS-1) )
- {
- j = (int )exp;
- i = __eshift( s, j );
- if( i )
- lost = 1;
- }
- else
- {
- __ecleazs( s );
- return;
- }
- }
-/* Round off, unless told not to by rcntrl. */
-if( rcntrl == 0 )
- goto mdfin;
-if (rndprc == 64)
- {
- rw = 7;
- re = 6;
- rbit[NI-2] = 0;
- rbit[6] = 1;
- }
-
-/* Shift down 1 temporarily if the data structure has an implied
- * most significant bit and the number is denormal.
- * For rndprc = 64 or NBITS, there is no implied bit.
- * But Intel long double denormals lose one bit of significance even so.
- */
-#if IBMPC
-if( (exp <= 0) && (rndprc != NBITS) )
-#else
-if( (exp <= 0) && (rndprc != 64) && (rndprc != NBITS) )
-#endif
- {
- lost |= s[NI-1] & 1;
- __eshdn1(s);
- }
-/* Clear out all bits below the rounding bit,
- * remembering in r if any were nonzero.
- */
-r = s[rw] & rmsk;
-if( rndprc < NBITS )
- {
- i = rw + 1;
- while( i < NI )
- {
- if( s[i] )
- r |= 1;
- s[i] = 0;
- ++i;
- }
- }
-s[rw] &= ~rmsk;
-if( (r & rmbit) != 0 )
- {
- if( r == rmbit )
- {
- if( lost == 0 )
- { /* round to even */
- if( (s[re] & 1) == 0 )
- goto mddone;
- }
- else
- {
- if( subflg != 0 )
- goto mddone;
- }
- }
- __eaddm( rbit, s );
- }
-mddone:
-#if IBMPC
-if( (exp <= 0) && (rndprc != NBITS) )
-#else
-if( (exp <= 0) && (rndprc != 64) && (rndprc != NBITS) )
-#endif
- {
- __eshup1(s);
- }
-if( s[2] != 0 )
- { /* overflow on roundoff */
- __eshdn1(s);
- exp += 1;
- }
-mdfin:
-s[NI-1] = 0;
-if( exp >= 32767L )
- {
-#ifndef INFINITY
-overf:
-#endif
-#ifdef INFINITY
- s[1] = 32767;
- for( i=2; i<NI-1; i++ )
- s[i] = 0;
-#else
- s[1] = 32766;
- s[2] = 0;
- for( i=M+1; i<NI-1; i++ )
- s[i] = 0xffff;
- s[NI-1] = 0;
- if( (rndprc < 64) || (rndprc == 113) )
- s[rw] &= ~rmsk;
-#endif
- return;
- }
-if( exp < 0 )
- s[1] = 0;
-else
- s[1] = (unsigned short )exp;
-}
-
-
-/*
-; Multiply.
-;
-; unsigned short a[NE], b[NE], c[NE];
-; emul( a, b, c ); c = b * a
-*/
-void __emul(const short unsigned int *a,
- const short unsigned int *b,
- short unsigned int *c)
-{
-unsigned short ai[NI], bi[NI];
-int i, j;
-long lt, lta, ltb;
-
-#ifdef NANS
-/* NaN times anything is the same NaN. */
-if( __eisnan(a) )
- {
- __emov(a,c);
- return;
- }
-if( __eisnan(b) )
- {
- __emov(b,c);
- return;
- }
-/* Zero times infinity is a NaN. */
-if( (__eisinf(a) && __eiiszero(b))
- || (__eisinf(b) && __eiiszero(a)) )
- {
- mtherr( "emul", DOMAIN );
- __enan_NBITS( c );
- return;
- }
-#endif
-/* Infinity times anything else is infinity. */
-#ifdef INFINITY
-if( __eisinf(a) || __eisinf(b) )
- {
- if( __eisneg(a) ^ __eisneg(b) )
- *(c+(NE-1)) = 0x8000;
- else
- *(c+(NE-1)) = 0;
- __einfin(c);
- return;
- }
-#endif
-__emovi( a, ai );
-__emovi( b, bi );
-lta = ai[E];
-ltb = bi[E];
-if( ai[E] == 0 )
- {
- for( i=1; i<NI-1; i++ )
- {
- if( ai[i] != 0 )
- {
- lta -= __enormlz( ai );
- goto mnzer1;
- }
- }
- __eclear(c);
- return;
- }
-mnzer1:
-
-if( bi[E] == 0 )
- {
- for( i=1; i<NI-1; i++ )
- {
- if( bi[i] != 0 )
- {
- ltb -= __enormlz( bi );
- goto mnzer2;
- }
- }
- __eclear(c);
- return;
- }
-mnzer2:
-
-/* Multiply significands */
-j = __emulm( ai, bi );
-/* calculate exponent */
-lt = lta + ltb - (EXONE - 1);
-__emdnorm( bi, j, 0, lt, 64, NBITS );
-/* calculate sign of product */
-if( ai[0] == bi[0] )
- bi[0] = 0;
-else
- bi[0] = 0xffff;
-__emovo( bi, c );
-}
-
-
-/* move out internal format to ieee long double */
-void __toe64(short unsigned int *a, short unsigned int *b)
-{
-register unsigned short *p, *q;
-unsigned short i;
-
-#ifdef NANS
-if( __eiisnan(a) )
- {
- __enan_64( b );
- return;
- }
-#endif
-#ifdef IBMPC
-/* Shift Intel denormal significand down 1. */
-if( a[E] == 0 )
- __eshdn1(a);
-#endif
-p = a;
-#ifdef MIEEE
-q = b;
-#else
-q = b + 4; /* point to output exponent */
-#if 1
-/* NOTE: if data type is 96 bits wide, clear the last word here. */
-*(q+1)= 0;
-#endif
-#endif
-
-/* combine sign and exponent */
-i = *p++;
-#ifdef MIEEE
-if( i )
- *q++ = *p++ | 0x8000;
-else
- *q++ = *p++;
-*q++ = 0;
-#else
-if( i )
- *q-- = *p++ | 0x8000;
-else
- *q-- = *p++;
-#endif
-/* skip over guard word */
-++p;
-/* move the significand */
-#ifdef MIEEE
-for( i=0; i<4; i++ )
- *q++ = *p++;
-#else
-#ifdef INFINITY
-if (__eiisinf (a))
- {
- /* Intel long double infinity. */
- *q-- = 0x8000;
- *q-- = 0;
- *q-- = 0;
- *q = 0;
- return;
- }
-#endif
-for( i=0; i<4; i++ )
- *q-- = *p++;
-#endif
-}
-
-
-/* Compare two e type numbers.
- *
- * unsigned short a[NE], b[NE];
- * ecmp( a, b );
- *
- * returns +1 if a > b
- * 0 if a == b
- * -1 if a < b
- * -2 if either a or b is a NaN.
- */
-int __ecmp(const short unsigned int * __restrict__ a,
- const short unsigned int * __restrict__ b)
-{
-unsigned short ai[NI], bi[NI];
-register unsigned short *p, *q;
-register int i;
-int msign;
-
-#ifdef NANS
-if (__eisnan (a) || __eisnan (b))
- return( -2 );
-#endif
-__emovi( a, ai );
-p = ai;
-__emovi( b, bi );
-q = bi;
-
-if( *p != *q )
- { /* the signs are different */
-/* -0 equals + 0 */
- for( i=1; i<NI-1; i++ )
- {
- if( ai[i] != 0 )
- goto nzro;
- if( bi[i] != 0 )
- goto nzro;
- }
- return(0);
-nzro:
- if( *p == 0 )
- return( 1 );
- else
- return( -1 );
- }
-/* both are the same sign */
-if( *p == 0 )
- msign = 1;
-else
- msign = -1;
-i = NI-1;
-do
- {
- if( *p++ != *q++ )
- {
- goto diff;
- }
- }
-while( --i > 0 );
-
-return(0); /* equality */
-
-
-
-diff:
-
-if( *(--p) > *(--q) )
- return( msign ); /* p is bigger */
-else
- return( -msign ); /* p is littler */
-}
-
-/*
-; Shift significand
-;
-; Shifts significand area up or down by the number of bits
-; given by the variable sc.
-*/
-int __eshift(short unsigned int *x, int sc)
-{
-unsigned short lost;
-unsigned short *p;
-
-if( sc == 0 )
- return( 0 );
-
-lost = 0;
-p = x + NI-1;
-
-if( sc < 0 )
- {
- sc = -sc;
- while( sc >= 16 )
- {
- lost |= *p; /* remember lost bits */
- __eshdn6(x);
- sc -= 16;
- }
-
- while( sc >= 8 )
- {
- lost |= *p & 0xff;
- __eshdn8(x);
- sc -= 8;
- }
-
- while( sc > 0 )
- {
- lost |= *p & 1;
- __eshdn1(x);
- sc -= 1;
- }
- }
-else
- {
- while( sc >= 16 )
- {
- __eshup6(x);
- sc -= 16;
- }
-
- while( sc >= 8 )
- {
- __eshup8(x);
- sc -= 8;
- }
-
- while( sc > 0 )
- {
- __eshup1(x);
- sc -= 1;
- }
- }
-if( lost )
- lost = 1;
-return( (int )lost );
-}
-
-
-
-/*
-; normalize
-;
-; Shift normalizes the significand area pointed to by argument
-; shift count (up = positive) is returned.
-*/
-int __enormlz(short unsigned int *x)
-{
-register unsigned short *p;
-int sc;
-
-sc = 0;
-p = &x[M];
-if( *p != 0 )
- goto normdn;
-++p;
-if( *p & 0x8000 )
- return( 0 ); /* already normalized */
-while( *p == 0 )
- {
- __eshup6(x);
- sc += 16;
-/* With guard word, there are NBITS+16 bits available.
- * return true if all are zero.
- */
- if( sc > NBITS )
- return( sc );
- }
-/* see if high byte is zero */
-while( (*p & 0xff00) == 0 )
- {
- __eshup8(x);
- sc += 8;
- }
-/* now shift 1 bit at a time */
-while( (*p & 0x8000) == 0)
- {
- __eshup1(x);
- sc += 1;
- if( sc > (NBITS+16) )
- {
- mtherr( "enormlz", UNDERFLOW );
- return( sc );
- }
- }
-return( sc );
-
-/* Normalize by shifting down out of the high guard word
- of the significand */
-normdn:
-
-if( *p & 0xff00 )
- {
- __eshdn8(x);
- sc -= 8;
- }
-while( *p != 0 )
- {
- __eshdn1(x);
- sc -= 1;
-
- if( sc < -NBITS )
- {
- mtherr( "enormlz", OVERFLOW );
- return( sc );
- }
- }
-return( sc );
-}
-
-
-/* Move internal format number out,
- * converting it to external format.
- */
-void __emovo(const short unsigned int * __restrict__ a,
- short unsigned int * __restrict__ b)
-{
-register const unsigned short *p;
-register unsigned short *q;
-unsigned short i;
-
-p = a;
-q = b + (NE-1); /* point to output exponent */
-/* combine sign and exponent */
-i = *p++;
-if( i )
- *q-- = *p++ | 0x8000;
-else
- *q-- = *p++;
-#ifdef INFINITY
-if( *(p-1) == 0x7fff )
- {
-#ifdef NANS
- if( __eiisnan(a) )
- {
- __enan_NBITS( b );
- return;
- }
-#endif
- __einfin(b);
- return;
- }
-#endif
-/* skip over guard word */
-++p;
-/* move the significand */
-for( i=0; i<NE-1; i++ )
- *q-- = *p++;
-}
-
-
-#if USE_LDTOA
-
-
-void __eiremain(short unsigned int *den, short unsigned int *num,
- short unsigned int *equot )
-{
-long ld, ln;
-unsigned short j;
-
-ld = den[E];
-ld -= __enormlz( den );
-ln = num[E];
-ln -= __enormlz( num );
-__ecleaz( equot );
-while( ln >= ld )
- {
- if( __ecmpm(den,num) <= 0 )
- {
- __esubm(den, num);
- j = 1;
- }
- else
- {
- j = 0;
- }
- __eshup1(equot);
- equot[NI-1] |= j;
- __eshup1(num);
- ln -= 1;
- }
-__emdnorm( num, 0, 0, ln, 0, NBITS );
-}
-
-
-void __eadd1(const short unsigned int * __restrict__ a,
- const short unsigned int * __restrict__ b,
- short unsigned int * __restrict__ c,
- int subflg)
-{
-unsigned short ai[NI], bi[NI], ci[NI];
-int i, lost, j, k;
-long lt, lta, ltb;
-
-#ifdef INFINITY
-if( __eisinf(a) )
- {
- __emov(a,c);
- if( subflg )
- __eneg(c);
- return;
- }
-if( __eisinf(b) )
- {
- __emov(b,c);
- return;
- }
-#endif
-__emovi( a, ai );
-__emovi( b, bi );
-if( sub )
- ai[0] = ~ai[0];
-
-/* compare exponents */
-lta = ai[E];
-ltb = bi[E];
-lt = lta - ltb;
-if( lt > 0L )
- { /* put the larger number in bi */
- __emovz( bi, ci );
- __emovz( ai, bi );
- __emovz( ci, ai );
- ltb = bi[E];
- lt = -lt;
- }
-lost = 0;
-if( lt != 0L )
- {
- if( lt < (long )(-NBITS-1) )
- goto done; /* answer same as larger addend */
- k = (int )lt;
- lost = __eshift( ai, k ); /* shift the smaller number down */
- }
-else
- {
-/* exponents were the same, so must compare significands */
- i = __ecmpm( ai, bi );
- if( i == 0 )
- { /* the numbers are identical in magnitude */
- /* if different signs, result is zero */
- if( ai[0] != bi[0] )
- {
- __eclear(c);
- return;
- }
- /* if same sign, result is double */
- /* double denomalized tiny number */
- if( (bi[E] == 0) && ((bi[3] & 0x8000) == 0) )
- {
- __eshup1( bi );
- goto done;
- }
- /* add 1 to exponent unless both are zero! */
- for( j=1; j<NI-1; j++ )
- {
- if( bi[j] != 0 )
- {
-/* This could overflow, but let emovo take care of that. */
- ltb += 1;
- break;
- }
- }
- bi[E] = (unsigned short )ltb;
- goto done;
- }
- if( i > 0 )
- { /* put the larger number in bi */
- __emovz( bi, ci );
- __emovz( ai, bi );
- __emovz( ci, ai );
- }
- }
-if( ai[0] == bi[0] )
- {
- __eaddm( ai, bi );
- subflg = 0;
- }
-else
- {
- __esubm( ai, bi );
- subflg = 1;
- }
-__emdnorm( bi, lost, subflg, ltb, 64, NBITS);
-
-done:
-__emovo( bi, c );
-}
-
-
-/* y = largest integer not greater than x
- * (truncated toward minus infinity)
- *
- * unsigned short x[NE], y[NE]
- *
- * efloor( x, y );
- */
-
-
-void __efloor(short unsigned int *x, short unsigned int *y)
-{
-register unsigned short *p;
-int e, expon, i;
-unsigned short f[NE];
-const unsigned short bmask[] = {
-0xffff,
-0xfffe,
-0xfffc,
-0xfff8,
-0xfff0,
-0xffe0,
-0xffc0,
-0xff80,
-0xff00,
-0xfe00,
-0xfc00,
-0xf800,
-0xf000,
-0xe000,
-0xc000,
-0x8000,
-0x0000,
-};
-
-__emov( x, f ); /* leave in external format */
-expon = (int )f[NE-1];
-e = (expon & 0x7fff) - (EXONE - 1);
-if( e <= 0 )
- {
- __eclear(y);
- goto isitneg;
- }
-/* number of bits to clear out */
-e = NBITS - e;
-__emov( f, y );
-if( e <= 0 )
- return;
-
-p = &y[0];
-while( e >= 16 )
- {
- *p++ = 0;
- e -= 16;
- }
-/* clear the remaining bits */
-*p &= bmask[e];
-/* truncate negatives toward minus infinity */
-isitneg:
-
-if( (unsigned short )expon & (unsigned short )0x8000 )
- {
- for( i=0; i<NE-1; i++ )
- {
- if( f[i] != y[i] )
- {
- __esub( __eone, y, y );
- break;
- }
- }
- }
-}
-
-/*
-; Subtract external format numbers.
-;
-; unsigned short a[NE], b[NE], c[NE];
-; esub( a, b, c ); c = b - a
-*/
-
-
-void __esub(const short unsigned int * a,
- const short unsigned int * b,
- short unsigned int * c)
-{
-
-#ifdef NANS
-if( __eisnan(a) )
- {
- __emov (a, c);
- return;
- }
-if( __eisnan(b) )
- {
- __emov(b,c);
- return;
- }
-/* Infinity minus infinity is a NaN.
- * Test for subtracting infinities of the same sign.
- */
-if( __eisinf(a) && __eisinf(b) && ((__eisneg (a) ^ __eisneg (b)) == 0))
- {
- mtherr( "esub", DOMAIN );
- __enan_NBITS( c );
- return;
- }
-#endif
-__eadd1( a, b, c, 1 );
-}
-
-
-
-/*
-; Divide.
-;
-; unsigned short a[NI], b[NI], c[NI];
-; ediv( a, b, c ); c = b / a
-*/
-
-void __ediv(const short unsigned int *a,
- const short unsigned int *b,
- short unsigned int *c)
-{
-unsigned short ai[NI], bi[NI];
-int i;
-long lt, lta, ltb;
-
-#ifdef NANS
-/* Return any NaN input. */
-if( __eisnan(a) )
- {
- __emov(a,c);
- return;
- }
-if( __eisnan(b) )
- {
- __emov(b,c);
- return;
- }
-/* Zero over zero, or infinity over infinity, is a NaN. */
-if( (__eiszero(a) && __eiszero(b))
- || (__eisinf (a) && __eisinf (b)) )
- {
- mtherr( "ediv", DOMAIN );
- __enan_NBITS( c );
- return;
- }
-#endif
-/* Infinity over anything else is infinity. */
-#ifdef INFINITY
-if( __eisinf(b) )
- {
- if( __eisneg(a) ^ __eisneg(b) )
- *(c+(NE-1)) = 0x8000;
- else
- *(c+(NE-1)) = 0;
- __einfin(c);
- return;
- }
-if( __eisinf(a) )
- {
- __eclear(c);
- return;
- }
-#endif
-__emovi( a, ai );
-__emovi( b, bi );
-lta = ai[E];
-ltb = bi[E];
-if( bi[E] == 0 )
- { /* See if numerator is zero. */
- for( i=1; i<NI-1; i++ )
- {
- if( bi[i] != 0 )
- {
- ltb -= __enormlz( bi );
- goto dnzro1;
- }
- }
- __eclear(c);
- return;
- }
-dnzro1:
-
-if( ai[E] == 0 )
- { /* possible divide by zero */
- for( i=1; i<NI-1; i++ )
- {
- if( ai[i] != 0 )
- {
- lta -= __enormlz( ai );
- goto dnzro2;
- }
- }
- if( ai[0] == bi[0] )
- *(c+(NE-1)) = 0;
- else
- *(c+(NE-1)) = 0x8000;
- __einfin(c);
- mtherr( "ediv", SING );
- return;
- }
-dnzro2:
-
-i = __edivm( ai, bi );
-/* calculate exponent */
-lt = ltb - lta + EXONE;
-__emdnorm( bi, i, 0, lt, 64, NBITS );
-/* set the sign */
-if( ai[0] == bi[0] )
- bi[0] = 0;
-else
- bi[0] = 0Xffff;
-__emovo( bi, c );
-}
-
-void __e64toe(short unsigned int *pe, short unsigned int *y)
-{
-unsigned short yy[NI];
-unsigned short *p, *q, *e;
-int i;
-
-e = pe;
-p = yy;
-for( i=0; i<NE-5; i++ )
- *p++ = 0;
-#ifdef IBMPC
-for( i=0; i<5; i++ )
- *p++ = *e++;
-#endif
-#ifdef DEC
-for( i=0; i<5; i++ )
- *p++ = *e++;
-#endif
-#ifdef MIEEE
-p = &yy[0] + (NE-1);
-*p-- = *e++;
-++e;
-for( i=0; i<4; i++ )
- *p-- = *e++;
-#endif
-
-#ifdef IBMPC
-/* For Intel long double, shift denormal significand up 1
- -- but only if the top significand bit is zero. */
-if((yy[NE-1] & 0x7fff) == 0 && (yy[NE-2] & 0x8000) == 0)
- {
- unsigned short temp[NI+1];
- __emovi(yy, temp);
- __eshup1(temp);
- __emovo(temp,y);
- return;
- }
-#endif
-#ifdef INFINITY
-/* Point to the exponent field. */
-p = &yy[NE-1];
-if( *p == 0x7fff )
- {
-#ifdef NANS
-#ifdef IBMPC
- for( i=0; i<4; i++ )
- {
- if((i != 3 && pe[i] != 0)
- /* Check for Intel long double infinity pattern. */
- || (i == 3 && pe[i] != 0x8000))
- {
- __enan_NBITS( y );
- return;
- }
- }
-#else
- for( i=1; i<=4; i++ )
- {
- if( pe[i] != 0 )
- {
- __enan_NBITS( y );
- return;
- }
- }
-#endif
-#endif /* NANS */
- __eclear( y );
- __einfin( y );
- if( *p & 0x8000 )
- __eneg(y);
- return;
- }
-#endif
-p = yy;
-q = y;
-for( i=0; i<NE; i++ )
- *q++ = *p++;
-}
-
-#endif /* USE_LDTOA */
diff --git a/winsup/mingw/mingwex/math/cephes_emath.h b/winsup/mingw/mingwex/math/cephes_emath.h
deleted file mode 100644
index 121937a8f..000000000
--- a/winsup/mingw/mingwex/math/cephes_emath.h
+++ /dev/null
@@ -1,713 +0,0 @@
-#ifndef _CEPHES_EMATH_H
-#define _CEPHES_EMATH_H
-
-/* This file is extracted from S L Moshier's ioldoubl.c,
- * modified for use in MinGW
- *
- * Extended precision arithmetic functions for long double I/O.
- * This program has been placed in the public domain.
- */
-
-
-
-/*
- * Revision history:
- *
- * 5 Jan 84 PDP-11 assembly language version
- * 6 Dec 86 C language version
- * 30 Aug 88 100 digit version, improved rounding
- * 15 May 92 80-bit long double support
- *
- * Author: S. L. Moshier.
- *
- * 6 Oct 02 Modified for MinGW by inlining utility routines,
- * removing global variables, and splitting out strtold
- * from _IO_ldtoa and _IO_ldtostr.
- *
- * Danny Smith <dannysmith@users.sourceforge.net>
- *
- */
-
-
-
-/* ieee.c
- *
- * Extended precision IEEE binary floating point arithmetic routines
- *
- * Numbers are stored in C language as arrays of 16-bit unsigned
- * short integers. The arguments of the routines are pointers to
- * the arrays.
- *
- *
- * External e type data structure, simulates Intel 8087 chip
- * temporary real format but possibly with a larger significand:
- *
- * NE-1 significand words (least significant word first,
- * most significant bit is normally set)
- * exponent (value = EXONE for 1.0,
- * top bit is the sign)
- *
- *
- * Internal data structure of a number (a "word" is 16 bits):
- *
- * ei[0] sign word (0 for positive, 0xffff for negative)
- * ei[1] biased __exponent (value = EXONE for the number 1.0)
- * ei[2] high guard word (always zero after normalization)
- * ei[3]
- * to ei[NI-2] significand (NI-4 significand words,
- * most significant word first,
- * most significant bit is set)
- * ei[NI-1] low guard word (0x8000 bit is rounding place)
- *
- *
- *
- * Routines for external format numbers
- *
- * __asctoe64( string, &d ) ASCII string to long double
- * __asctoeg( string, e, prec ) ASCII string to specified precision
- * __e64toe( &d, e ) IEEE long double precision to e type
- * __eadd( a, b, c ) c = b + a
- * __eclear(e) e = 0
- * __ecmp (a, b) Returns 1 if a > b, 0 if a == b,
- * -1 if a < b, -2 if either a or b is a NaN.
- * __ediv( a, b, c ) c = b / a
- * __efloor( a, b ) truncate to integer, toward -infinity
- * __efrexp( a, exp, s ) extract exponent and significand
- * __eifrac( e, &l, frac ) e to long integer and e type fraction
- * __euifrac( e, &l, frac ) e to unsigned long integer and e type fraction
- * __einfin( e ) set e to infinity, leaving its sign alone
- * __eldexp( a, n, b ) multiply by 2**n
- * __emov( a, b ) b = a
- * __emul( a, b, c ) c = b * a
- * __eneg(e) e = -e
- * __eround( a, b ) b = nearest integer value to a
- * __esub( a, b, c ) c = b - a
- * __e24toasc( &f, str, n ) single to ASCII string, n digits after decimal
- * __e53toasc( &d, str, n ) double to ASCII string, n digits after decimal
- * __e64toasc( &d, str, n ) long double to ASCII string
- * __etoasc( e, str, n ) e to ASCII string, n digits after decimal
- * __etoe24( e, &f ) convert e type to IEEE single precision
- * __etoe53( e, &d ) convert e type to IEEE double precision
- * __etoe64( e, &d ) convert e type to IEEE long double precision
- * __eisneg( e ) 1 if sign bit of e != 0, else 0
- * __eisinf( e ) 1 if e has maximum exponent (non-IEEE)
- * or is infinite (IEEE)
- * __eisnan( e ) 1 if e is a NaN
- * __esqrt( a, b ) b = square root of a
- *
- *
- * Routines for internal format numbers
- *
- * __eaddm( ai, bi ) add significands, bi = bi + ai
- * __ecleaz(ei) ei = 0
- * __ecleazs(ei) set ei = 0 but leave its sign alone
- * __ecmpm( ai, bi ) compare significands, return 1, 0, or -1
- * __edivm( ai, bi ) divide significands, bi = bi / ai
- * __emdnorm(ai,l,s,exp) normalize and round off
- * __emovi( a, ai ) convert external a to internal ai
- * __emovo( ai, a ) convert internal ai to external a
- * __emovz( ai, bi ) bi = ai, low guard word of bi = 0
- * __emulm( ai, bi ) multiply significands, bi = bi * ai
- * __enormlz(ei) left-justify the significand
- * __eshdn1( ai ) shift significand and guards down 1 bit
- * __eshdn8( ai ) shift down 8 bits
- * __eshdn6( ai ) shift down 16 bits
- * __eshift( ai, n ) shift ai n bits up (or down if n < 0)
- * __eshup1( ai ) shift significand and guards up 1 bit
- * __eshup8( ai ) shift up 8 bits
- * __eshup6( ai ) shift up 16 bits
- * __esubm( ai, bi ) subtract significands, bi = bi - ai
- *
- *
- * The result is always normalized and rounded to NI-4 word precision
- * after each arithmetic operation.
- *
- * Exception flags are NOT fully supported.
- *
- * Define INFINITY in mconf.h for support of infinity; otherwise a
- * saturation arithmetic is implemented.
- *
- * Define NANS for support of Not-a-Number items; otherwise the
- * arithmetic will never produce a NaN output, and might be confused
- * by a NaN input.
- * If NaN's are supported, the output of ecmp(a,b) is -2 if
- * either a or b is a NaN. This means asking if(ecmp(a,b) < 0)
- * may not be legitimate. Use if(ecmp(a,b) == -1) for less-than
- * if in doubt.
- * Signaling NaN's are NOT supported; they are treated the same
- * as quiet NaN's.
- *
- * Denormals are always supported here where appropriate (e.g., not
- * for conversion to DEC numbers).
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <math.h>
-#include <locale.h>
-#include <ctype.h>
-
-#define alloca __builtin_alloca
-
-/* Don't build non-ANSI _IO_ldtoa. It is not thread safe. */
-#ifndef USE_LDTOA
-#define USE_LDTOA 0
-#endif
-
-
- /* Number of 16 bit words in external x type format */
-#define NE 6
-
- /* Number of 16 bit words in internal format */
-#define NI (NE+3)
-
- /* Array offset to exponent */
-#define E 1
-
- /* Array offset to high guard word */
-#define M 2
-
- /* Number of bits of precision */
-#define NBITS ((NI-4)*16)
-
- /* Maximum number of decimal digits in ASCII conversion
- * = NBITS*log10(2)
- */
-#define NDEC (NBITS*8/27)
-
- /* The exponent of 1.0 */
-#define EXONE (0x3fff)
-
-
-#define mtherr(x,y)
-
-
-extern long double strtold (const char * __restrict__ s, char ** __restrict__ se);
-extern int __asctoe64(const char * __restrict__ ss,
- short unsigned int * __restrict__ y);
-extern void __emul(const short unsigned int * a,
- const short unsigned int * b,
- short unsigned int * c);
-extern int __ecmp(const short unsigned int * __restrict__ a,
- const short unsigned int * __restrict__ b);
-extern int __enormlz(short unsigned int *x);
-extern int __eshift(short unsigned int *x, int sc);
-extern void __eaddm(const short unsigned int * __restrict__ x,
- short unsigned int * __restrict__ y);
-extern void __esubm(const short unsigned int * __restrict__ x,
- short unsigned int * __restrict__ y);
-extern void __emdnorm(short unsigned int *s, int lost, int subflg,
- long int exp, int rcntrl, const int rndprc);
-extern void __toe64(short unsigned int * __restrict__ a,
- short unsigned int * __restrict__ b);
-extern int __edivm(short unsigned int * __restrict__ den,
- short unsigned int * __restrict__ num);
-extern int __emulm(const short unsigned int * __restrict__ a,
- short unsigned int * __restrict__ b);
-extern void __emovi(const short unsigned int * __restrict__ a,
- short unsigned int * __restrict__ b);
-extern void __emovo(const short unsigned int * __restrict__ a,
- short unsigned int * __restrict__ b);
-
-#if USE_LDTOA
-
-extern char * _IO_ldtoa(long double, int, int, int *, int *, char **);
-extern void _IO_ldtostr(long double *x, char *string, int ndigs,
- int flags, char fmt);
-
-extern void __eiremain(short unsigned int * __restrict__ den,
- short unsigned int *__restrict__ num,
- short unsigned int *__restrict__ equot);
-extern void __efloor(short unsigned int *x, short unsigned int *y);
-extern void __eadd1(const short unsigned int * __restrict__ a,
- const short unsigned int * __restrict__ b,
- short unsigned int * __restrict__ c,
- int subflg);
-extern void __esub(const short unsigned int *a, const short unsigned int *b,
- short unsigned int *c);
-extern void __ediv(const short unsigned int *a, const short unsigned int *b,
- short unsigned int *c);
-extern void __e64toe(short unsigned int *pe, short unsigned int *y);
-
-
-#endif
-
-static __inline__ int __eisneg(const short unsigned int *x);
-static __inline__ int __eisinf(const short unsigned int *x);
-static __inline__ int __eisnan(const short unsigned int *x);
-static __inline__ int __eiszero(const short unsigned int *a);
-static __inline__ void __emovz(register const short unsigned int * __restrict__ a,
- register short unsigned int * __restrict__ b);
-static __inline__ void __eclear(register short unsigned int *x);
-static __inline__ void __ecleaz(register short unsigned int *xi);
-static __inline__ void __ecleazs(register short unsigned int *xi);
-static __inline__ int __eiisinf(const short unsigned int *x);
-static __inline__ int __eiisnan(const short unsigned int *x);
-static __inline__ int __eiiszero(const short unsigned int *x);
-static __inline__ void __enan_64(short unsigned int *nan);
-static __inline__ void __enan_NBITS (short unsigned int *nan);
-static __inline__ void __enan_NI16 (short unsigned int *nan);
-static __inline__ void __einfin(register short unsigned int *x);
-static __inline__ void __eneg(short unsigned int *x);
-static __inline__ void __eshup1(register short unsigned int *x);
-static __inline__ void __eshup8(register short unsigned int *x);
-static __inline__ void __eshup6(register short unsigned int *x);
-static __inline__ void __eshdn1(register short unsigned int *x);
-static __inline__ void __eshdn8(register short unsigned int *x);
-static __inline__ void __eshdn6(register short unsigned int *x);
-
-
-
-/* Intel IEEE, low order words come first:
- */
-#define IBMPC 1
-
-/* Define 1 for ANSI C atan2() function
- * See atan.c and clog.c.
- */
-#define ANSIC 1
-
-/*define VOLATILE volatile*/
-#define VOLATILE
-
-/* For 12-byte long doubles on an i386, pad a 16-bit short 0
- * to the end of real constants initialized by integer arrays.
- *
- * #define XPD 0,
- *
- * Otherwise, the type is 10 bytes long and XPD should be
- * defined blank.
- *
- * #define XPD
- */
-#define XPD 0,
-/* #define XPD */
-#define NANS
-
-/* NaN's require infinity support. */
-#ifdef NANS
-#ifndef INFINITY
-#define INFINITY
-#endif
-#endif
-
-/* This handles 64-bit long ints. */
-#define LONGBITS (8 * sizeof(long))
-
-
-#define NTEN 12
-#define MAXP 4096
-
-/*
-; Clear out entire external format number.
-;
-; unsigned short x[];
-; eclear( x );
-*/
-
-static __inline__ void __eclear(register short unsigned int *x)
-{
- memset(x, 0, NE * sizeof(unsigned short));
-}
-
-
-/* Move external format number from a to b.
- *
- * emov( a, b );
- */
-
-static __inline__ void __emov(register const short unsigned int * __restrict__ a,
- register short unsigned int * __restrict__ b)
-{
- memcpy(b, a, NE * sizeof(unsigned short));
-}
-
-
-/*
-; Negate external format number
-;
-; unsigned short x[NE];
-; eneg( x );
-*/
-
-static __inline__ void __eneg(short unsigned int *x)
-{
-
-#ifdef NANS
-if( __eisnan(x) )
- return;
-#endif
-x[NE-1] ^= 0x8000; /* Toggle the sign bit */
-}
-
-
-/* Return 1 if external format number is negative,
- * else return zero.
- */
-static __inline__ int __eisneg(const short unsigned int *x)
-{
-
-#ifdef NANS
-if( __eisnan(x) )
- return( 0 );
-#endif
-if( x[NE-1] & 0x8000 )
- return( 1 );
-else
- return( 0 );
-}
-
-
-/* Return 1 if external format number has maximum possible exponent,
- * else return zero.
- */
-static __inline__ int __eisinf(const short unsigned int *x)
-{
-
-if( (x[NE-1] & 0x7fff) == 0x7fff )
- {
-#ifdef NANS
- if( __eisnan(x) )
- return( 0 );
-#endif
- return( 1 );
- }
-else
- return( 0 );
-}
-
-/* Check if e-type number is not a number.
- */
-static __inline__ int __eisnan(const short unsigned int *x)
-{
-#ifdef NANS
-int i;
-/* NaN has maximum __exponent */
-if( (x[NE-1] & 0x7fff) == 0x7fff )
-/* ... and non-zero significand field. */
- for( i=0; i<NE-1; i++ )
- {
- if( *x++ != 0 )
- return (1);
- }
-#endif
-return (0);
-}
-
-/*
-; Fill __entire number, including __exponent and significand, with
-; largest possible number. These programs implement a saturation
-; value that is an ordinary, legal number. A special value
-; "infinity" may also be implemented; this would require tests
-; for that value and implementation of special rules for arithmetic
-; operations involving inifinity.
-*/
-
-static __inline__ void __einfin(register short unsigned int *x)
-{
-register int i;
-
-#ifdef INFINITY
-for( i=0; i<NE-1; i++ )
- *x++ = 0;
-*x |= 32767;
-#else
-for( i=0; i<NE-1; i++ )
- *x++ = 0xffff;
-*x |= 32766;
-*(x-5) = 0;
-#endif
-}
-
-/* Clear out internal format number.
- */
-
-static __inline__ void __ecleaz(register short unsigned int *xi)
-{
- memset(xi, 0, NI * sizeof(unsigned short));
-}
-
-/* same, but don't touch the sign. */
-
-static __inline__ void __ecleazs(register short unsigned int *xi)
-{
- ++xi;
- memset(xi, 0, (NI-1) * sizeof(unsigned short));
-}
-
-
-
-/* Move internal format number from a to b.
- */
-static __inline__ void __emovz(register const short unsigned int * __restrict__ a,
- register short unsigned int * __restrict__ b)
-{
- memcpy(b, a, (NI-1) * sizeof(unsigned short));
- b[NI-1]=0;
-}
-
-/* Return nonzero if internal format number is a NaN.
- */
-
-static __inline__ int __eiisnan (const short unsigned int *x)
-{
-int i;
-
-if( (x[E] & 0x7fff) == 0x7fff )
- {
- for( i=M+1; i<NI; i++ )
- {
- if( x[i] != 0 )
- return(1);
- }
- }
-return(0);
-}
-
-/* Return nonzero if external format number is zero. */
-
-static __inline__ int
-__eiszero(const short unsigned int * a)
-{
-if (*((long double*) a) == 0)
- return (1);
-return (0);
-}
-
-/* Return nonzero if internal format number is zero. */
-
-static __inline__ int
-__eiiszero(const short unsigned int * ai)
-{
- int i;
- /* skip the sign word */
- for( i=1; i<NI-1; i++ )
- {
- if( ai[i] != 0 )
- return (0);
- }
- return (1);
-}
-
-
-/* Return nonzero if internal format number is infinite. */
-
-static __inline__ int
-__eiisinf (const unsigned short *x)
-{
-
-#ifdef NANS
- if (__eiisnan (x))
- return (0);
-#endif
- if ((x[E] & 0x7fff) == 0x7fff)
- return (1);
- return (0);
-}
-
-/*
-; Compare significands of numbers in internal format.
-; Guard words are included in the comparison.
-;
-; unsigned short a[NI], b[NI];
-; cmpm( a, b );
-;
-; for the significands:
-; returns +1 if a > b
-; 0 if a == b
-; -1 if a < b
-*/
-static __inline__ int __ecmpm(register const short unsigned int * __restrict__ a,
- register const short unsigned int * __restrict__ b)
-{
-int i;
-
-a += M; /* skip up to significand area */
-b += M;
-for( i=M; i<NI; i++ )
- {
- if( *a++ != *b++ )
- goto difrnt;
- }
-return(0);
-
-difrnt:
-if( *(--a) > *(--b) )
- return(1);
-else
- return(-1);
-}
-
-
-/*
-; Shift significand down by 1 bit
-*/
-
-static __inline__ void __eshdn1(register short unsigned int *x)
-{
-register unsigned short bits;
-int i;
-
-x += M; /* point to significand area */
-
-bits = 0;
-for( i=M; i<NI; i++ )
- {
- if( *x & 1 )
- bits |= 1;
- *x >>= 1;
- if( bits & 2 )
- *x |= 0x8000;
- bits <<= 1;
- ++x;
- }
-}
-
-/*
-; Shift significand up by 1 bit
-*/
-
-static __inline__ void __eshup1(register short unsigned int *x)
-{
-register unsigned short bits;
-int i;
-
-x += NI-1;
-bits = 0;
-
-for( i=M; i<NI; i++ )
- {
- if( *x & 0x8000 )
- bits |= 1;
- *x <<= 1;
- if( bits & 2 )
- *x |= 1;
- bits <<= 1;
- --x;
- }
-}
-
-
-
-/*
-; Shift significand down by 8 bits
-*/
-
-static __inline__ void __eshdn8(register short unsigned int *x)
-{
-register unsigned short newbyt, oldbyt;
-int i;
-
-x += M;
-oldbyt = 0;
-for( i=M; i<NI; i++ )
- {
- newbyt = *x << 8;
- *x >>= 8;
- *x |= oldbyt;
- oldbyt = newbyt;
- ++x;
- }
-}
-
-/*
-; Shift significand up by 8 bits
-*/
-
-static __inline__ void __eshup8(register short unsigned int *x)
-{
-int i;
-register unsigned short newbyt, oldbyt;
-
-x += NI-1;
-oldbyt = 0;
-
-for( i=M; i<NI; i++ )
- {
- newbyt = *x >> 8;
- *x <<= 8;
- *x |= oldbyt;
- oldbyt = newbyt;
- --x;
- }
-}
-
-/*
-; Shift significand up by 16 bits
-*/
-
-static __inline__ void __eshup6(register short unsigned int *x)
-{
-int i;
-register unsigned short *p;
-
-p = x + M;
-x += M + 1;
-
-for( i=M; i<NI-1; i++ )
- *p++ = *x++;
-
-*p = 0;
-}
-
-/*
-; Shift significand down by 16 bits
-*/
-
-static __inline__ void __eshdn6(register short unsigned int *x)
-{
-int i;
-register unsigned short *p;
-
-x += NI-1;
-p = x + 1;
-
-for( i=M; i<NI-1; i++ )
- *(--p) = *(--x);
-
-*(--p) = 0;
-}
-
-/*
-; Add significands
-; x + y replaces y
-*/
-
-static __inline__ void __enan_64(unsigned short* nan)
-{
-
- int i;
- for( i=0; i<3; i++ )
- *nan++ = 0;
- *nan++ = 0xc000;
- *nan++ = 0x7fff;
- *nan = 0;
- return;
-}
-
-static __inline__ void __enan_NBITS(unsigned short* nan)
-{
- int i;
- for( i=0; i<NE-2; i++ )
- *nan++ = 0;
- *nan++ = 0xc000;
- *nan = 0x7fff;
- return;
-}
-
-static __inline__ void __enan_NI16(unsigned short* nan)
-{
- int i;
- *nan++ = 0;
- *nan++ = 0x7fff;
- *nan++ = 0;
- *nan++ = 0xc000;
- for( i=4; i<NI; i++ )
- *nan++ = 0;
- return;
-}
-
-#endif /* _CEPHES_EMATH_H */
-
diff --git a/winsup/mingw/mingwex/math/cephes_mconf.h b/winsup/mingw/mingwex/math/cephes_mconf.h
deleted file mode 100644
index 9818c4546..000000000
--- a/winsup/mingw/mingwex/math/cephes_mconf.h
+++ /dev/null
@@ -1,395 +0,0 @@
-#include <math.h>
-#include <errno.h>
-
-
-#define IBMPC 1
-#define ANSIPROT 1
-#define MINUSZERO 1
-#define INFINITIES 1
-#define NANS 1
-#define DENORMAL 1
-#define VOLATILE
-#define mtherr(fname, code)
-#define XPD 0,
-
-#define _CEPHES_USE_ERRNO
-
-#ifdef _CEPHES_USE_ERRNO
-#define _SET_ERRNO(x) errno = (x)
-#else
-#define _SET_ERRNO(x)
-#endif
-
-/* constants used by cephes functions */
-
-/* double */
-#define MAXNUM 1.7976931348623158E308
-#define MAXLOG 7.09782712893383996843E2
-#define MINLOG -7.08396418532264106224E2
-#define LOGE2 6.93147180559945309417E-1
-#define LOG2E 1.44269504088896340736
-#define PI 3.14159265358979323846
-#define PIO2 1.57079632679489661923
-#define PIO4 7.85398163397448309616E-1
-
-#define NEGZERO (-0.0)
-#undef NAN
-#undef INFINITY
-#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2))
-#define INFINITY __builtin_huge_val()
-#define NAN __builtin_nan("")
-#else
-extern double __INF;
-#define INFINITY (__INF)
-extern double __QNAN;
-#define NAN (__QNAN)
-#endif
-
-/*long double*/
-#define MAXNUML 1.189731495357231765021263853E4932L
-#define MAXLOGL 1.1356523406294143949492E4L
-#define MINLOGL -1.13994985314888605586758E4L
-#define LOGE2L 6.9314718055994530941723E-1L
-#define LOG2EL 1.4426950408889634073599E0L
-#define PIL 3.1415926535897932384626L
-#define PIO2L 1.5707963267948966192313L
-#define PIO4L 7.8539816339744830961566E-1L
-
-#define isfinitel isfinite
-#define isinfl isinf
-#define isnanl isnan
-#define signbitl signbit
-
-#define NEGZEROL (-0.0L)
-
-#undef NANL
-#undef INFINITYL
-#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2))
-#define INFINITYL __builtin_huge_vall()
-#define NANL __builtin_nanl("")
-#else
-extern long double __INFL;
-#define INFINITYL (__INFL)
-extern long double __QNANL;
-#define NANL (__QNANL)
-#endif
-
-/* float */
-
-#define MAXNUMF 3.4028234663852885981170418348451692544e38F
-#define MAXLOGF 88.72283905206835F
-#define MINLOGF -103.278929903431851103F /* log(2^-149) */
-#define LOG2EF 1.44269504088896341F
-#define LOGE2F 0.693147180559945309F
-#define PIF 3.141592653589793238F
-#define PIO2F 1.5707963267948966192F
-#define PIO4F 0.7853981633974483096F
-
-#define isfinitef isfinite
-#define isinff isinf
-#define isnanf isnan
-#define signbitf signbit
-
-#define NEGZEROF (-0.0F)
-
-#undef NANF
-#undef INFINITYF
-#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2))
-#define INFINITYF __builtin_huge_valf()
-#define NANF __builtin_nanf("")
-#else
-extern float __INFF;
-#define INFINITYF (__INFF)
-extern float __QNANF;
-#define NANF (__QNANF)
-#endif
-
-
-/* double */
-
-/*
-Cephes Math Library Release 2.2: July, 1992
-Copyright 1984, 1987, 1988, 1992 by Stephen L. Moshier
-Direct inquiries to 30 Frost Street, Cambridge, MA 02140
-*/
-
-
-/* polevl.c
- * p1evl.c
- *
- * Evaluate polynomial
- *
- *
- *
- * SYNOPSIS:
- *
- * int N;
- * double x, y, coef[N+1], polevl[];
- *
- * y = polevl( x, coef, N );
- *
- *
- *
- * DESCRIPTION:
- *
- * Evaluates polynomial of degree N:
- *
- * 2 N
- * y = C + C x + C x +...+ C x
- * 0 1 2 N
- *
- * Coefficients are stored in reverse order:
- *
- * coef[0] = C , ..., coef[N] = C .
- * N 0
- *
- * The function p1evl() assumes that coef[N] = 1.0 and is
- * omitted from the array. Its calling arguments are
- * otherwise the same as polevl().
- *
- *
- * SPEED:
- *
- * In the interest of speed, there are no checks for out
- * of bounds arithmetic. This routine is used by most of
- * the functions in the library. Depending on available
- * equipment features, the user may wish to rewrite the
- * program in microcode or assembly language.
- *
- */
-
-/* Polynomial evaluator:
- * P[0] x^n + P[1] x^(n-1) + ... + P[n]
- */
-static __inline__ double polevl( x, p, n )
-double x;
-const void *p;
-int n;
-{
-register double y;
-register double *P = (double *)p;
-
-y = *P++;
-do
- {
- y = y * x + *P++;
- }
-while( --n );
-return(y);
-}
-
-
-
-/* Polynomial evaluator:
- * x^n + P[0] x^(n-1) + P[1] x^(n-2) + ... + P[n]
- */
-static __inline__ double p1evl( x, p, n )
-double x;
-const void *p;
-int n;
-{
-register double y;
-register double *P = (double *)p;
-
-n -= 1;
-y = x + *P++;
-do
- {
- y = y * x + *P++;
- }
-while( --n );
-return( y );
-}
-
-
-/* long double */
-/*
-Cephes Math Library Release 2.2: July, 1992
-Copyright 1984, 1987, 1988, 1992 by Stephen L. Moshier
-Direct inquiries to 30 Frost Street, Cambridge, MA 02140
-*/
-
-
-/* polevll.c
- * p1evll.c
- *
- * Evaluate polynomial
- *
- *
- *
- * SYNOPSIS:
- *
- * int N;
- * long double x, y, coef[N+1], polevl[];
- *
- * y = polevll( x, coef, N );
- *
- *
- *
- * DESCRIPTION:
- *
- * Evaluates polynomial of degree N:
- *
- * 2 N
- * y = C + C x + C x +...+ C x
- * 0 1 2 N
- *
- * Coefficients are stored in reverse order:
- *
- * coef[0] = C , ..., coef[N] = C .
- * N 0
- *
- * The function p1evll() assumes that coef[N] = 1.0 and is
- * omitted from the array. Its calling arguments are
- * otherwise the same as polevll().
- *
- *
- * SPEED:
- *
- * In the interest of speed, there are no checks for out
- * of bounds arithmetic. This routine is used by most of
- * the functions in the library. Depending on available
- * equipment features, the user may wish to rewrite the
- * program in microcode or assembly language.
- *
- */
-
-/* Polynomial evaluator:
- * P[0] x^n + P[1] x^(n-1) + ... + P[n]
- */
-static __inline__ long double polevll( x, p, n )
-long double x;
-const void *p;
-int n;
-{
-register long double y;
-register long double *P = (long double *)p;
-
-y = *P++;
-do
- {
- y = y * x + *P++;
- }
-while( --n );
-return(y);
-}
-
-
-
-/* Polynomial evaluator:
- * x^n + P[0] x^(n-1) + P[1] x^(n-2) + ... + P[n]
- */
-static __inline__ long double p1evll( x, p, n )
-long double x;
-const void *p;
-int n;
-{
-register long double y;
-register long double *P = (long double *)p;
-
-n -= 1;
-y = x + *P++;
-do
- {
- y = y * x + *P++;
- }
-while( --n );
-return( y );
-}
-
-/* Float version */
-
-/* polevlf.c
- * p1evlf.c
- *
- * Evaluate polynomial
- *
- *
- *
- * SYNOPSIS:
- *
- * int N;
- * float x, y, coef[N+1], polevlf[];
- *
- * y = polevlf( x, coef, N );
- *
- *
- *
- * DESCRIPTION:
- *
- * Evaluates polynomial of degree N:
- *
- * 2 N
- * y = C + C x + C x +...+ C x
- * 0 1 2 N
- *
- * Coefficients are stored in reverse order:
- *
- * coef[0] = C , ..., coef[N] = C .
- * N 0
- *
- * The function p1evl() assumes that coef[N] = 1.0 and is
- * omitted from the array. Its calling arguments are
- * otherwise the same as polevl().
- *
- *
- * SPEED:
- *
- * In the interest of speed, there are no checks for out
- * of bounds arithmetic. This routine is used by most of
- * the functions in the library. Depending on available
- * equipment features, the user may wish to rewrite the
- * program in microcode or assembly language.
- *
- */
-
-/*
-Cephes Math Library Release 2.1: December, 1988
-Copyright 1984, 1987, 1988 by Stephen L. Moshier
-Direct inquiries to 30 Frost Street, Cambridge, MA 02140
-*/
-
-static __inline__ float polevlf(float x, const float* coef, int N )
-{
-float ans;
-float *p;
-int i;
-
-p = (float*)coef;
-ans = *p++;
-
-/*
-for( i=0; i<N; i++ )
- ans = ans * x + *p++;
-*/
-
-i = N;
-do
- ans = ans * x + *p++;
-while( --i );
-
-return( ans );
-}
-
-/* p1evl() */
-/* N
- * Evaluate polynomial when coefficient of x is 1.0.
- * Otherwise same as polevl.
- */
-
-static __inline__ float p1evlf( float x, const float *coef, int N )
-{
-float ans;
-float *p;
-int i;
-
-p = (float*)coef;
-ans = x + *p++;
-i = N-1;
-
-do
- ans = ans * x + *p++;
-while( --i );
-
-return( ans );
-}
diff --git a/winsup/mingw/mingwex/math/copysign.S b/winsup/mingw/mingwex/math/copysign.S
deleted file mode 100644
index 60d6c72db..000000000
--- a/winsup/mingw/mingwex/math/copysign.S
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
- .file "copysign.S"
- .text
- .align 4
-.globl _copysign
- .def _copysign; .scl 2; .type 32; .endef
-_copysign:
- movl 16(%esp),%edx
- movl 8(%esp),%eax
- andl $0x80000000,%edx
- andl $0x7fffffff,%eax
- orl %edx,%eax
- movl %eax,8(%esp)
- fldl 4(%esp)
- ret
diff --git a/winsup/mingw/mingwex/math/copysignf.S b/winsup/mingw/mingwex/math/copysignf.S
deleted file mode 100644
index 8a60c463c..000000000
--- a/winsup/mingw/mingwex/math/copysignf.S
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
- .file "copysignf.S"
- .text
- .align 4
-.globl _copysignf
- .def _copysignf; .scl 2; .type 32; .endef
-_copysignf:
- movl 8(%esp),%edx
- movl 4(%esp),%eax
- andl $0x80000000,%edx
- andl $0x7fffffff,%eax
- orl %edx,%eax
- movl %eax,4(%esp)
- flds 4(%esp)
- ret
diff --git a/winsup/mingw/mingwex/math/copysignl.S b/winsup/mingw/mingwex/math/copysignl.S
deleted file mode 100644
index 4143b37f8..000000000
--- a/winsup/mingw/mingwex/math/copysignl.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
- .file "copysignl.S"
- .text
- .align 4
-.globl _copysignl
- .def _copysignl; .scl 2; .type 32; .endef
-_copysignl:
- movl 24(%esp),%edx
- movl 12(%esp),%eax
- andl $0x8000,%edx
- andl $0x7fff,%eax
- orl %edx,%eax
- movl %eax,12(%esp)
- fldt 4(%esp)
- ret
diff --git a/winsup/mingw/mingwex/math/cosf.S b/winsup/mingw/mingwex/math/cosf.S
deleted file mode 100644
index 862f6ce6c..000000000
--- a/winsup/mingw/mingwex/math/cosf.S
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Removed glibc header dependancy by Danny Smith
- * <dannysmith@users.sourceforge.net>
- */
- .file "cosf.S"
- .text
- .align 4
-.globl _cosl
- .def _cosf; .scl 2; .type 32; .endef
-_cosf:
- flds 4(%esp)
- fcos
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fcos
- ret
diff --git a/winsup/mingw/mingwex/math/coshf.c b/winsup/mingw/mingwex/math/coshf.c
deleted file mode 100644
index 4e44f0811..000000000
--- a/winsup/mingw/mingwex/math/coshf.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <math.h>
-float coshf (float x)
- {return (float) cosh (x);}
diff --git a/winsup/mingw/mingwex/math/coshl.c b/winsup/mingw/mingwex/math/coshl.c
deleted file mode 100644
index c698e50c0..000000000
--- a/winsup/mingw/mingwex/math/coshl.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* coshl.c
- *
- * Hyperbolic cosine, long double precision
- *
- *
- *
- * SYNOPSIS:
- *
- * long double x, y, coshl();
- *
- * y = coshl( x );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns hyperbolic cosine of argument in the range MINLOGL to
- * MAXLOGL.
- *
- * cosh(x) = ( exp(x) + exp(-x) )/2.
- *
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE +-10000 30000 1.1e-19 2.8e-20
- *
- *
- * ERROR MESSAGES:
- *
- * message condition value returned
- * cosh overflow |x| > MAXLOGL+LOGE2L INFINITYL
- *
- *
- */
-
-
-/*
-Cephes Math Library Release 2.7: May, 1998
-Copyright 1985, 1991, 1998 by Stephen L. Moshier
-*/
-
-/*
-Modified for mingw
-2002-07-22 Danny Smith <dannysmith@users.sourceforge.net>
-*/
-
-#ifdef __MINGW32__
-#include "cephes_mconf.h"
-#else
-#include "mconf.h"
-#endif
-
-#ifndef _SET_ERRNO
-#define _SET_ERRNO(x)
-#endif
-
-
-#ifndef __MINGW32__
-extern long double MAXLOGL, MAXNUML, LOGE2L;
-#ifdef ANSIPROT
-extern long double expl ( long double );
-extern int isnanl ( long double );
-#else
-long double expl(), isnanl();
-#endif
-#ifdef INFINITIES
-extern long double INFINITYL;
-#endif
-#ifdef NANS
-extern long double NANL;
-#endif
-#endif /* __MINGW32__ */
-
-long double coshl(x)
-long double x;
-{
-long double y;
-
-#ifdef NANS
-if( isnanl(x) )
- {
- _SET_ERRNO(EDOM);
- return(x);
- }
-#endif
-if( x < 0 )
- x = -x;
-if( x > (MAXLOGL + LOGE2L) )
- {
- mtherr( "coshl", OVERFLOW );
- _SET_ERRNO(ERANGE);
-#ifdef INFINITIES
- return( INFINITYL );
-#else
- return( MAXNUML );
-#endif
- }
-if( x >= (MAXLOGL - LOGE2L) )
- {
- y = expl(0.5L * x);
- y = (0.5L * y) * y;
- return(y);
- }
-y = expl(x);
-y = 0.5L * (y + 1.0L / y);
-return( y );
-}
diff --git a/winsup/mingw/mingwex/math/cosl.S b/winsup/mingw/mingwex/math/cosl.S
deleted file mode 100644
index 59d9858b3..000000000
--- a/winsup/mingw/mingwex/math/cosl.S
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- * Removed glibc header dependancy by Danny Smith
- * <dannysmith@users.sourceforge.net>
- */
- .file "cosl.S"
- .text
- .align 4
-.globl _cosl
- .def _cosl; .scl 2; .type 32; .endef
-_cosl:
- fldt 4(%esp)
- fcos
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fcos
- ret
diff --git a/winsup/mingw/mingwex/math/erfl.c b/winsup/mingw/mingwex/math/erfl.c
deleted file mode 100755
index ac50d98c2..000000000
--- a/winsup/mingw/mingwex/math/erfl.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/* erfl.c
- *
- * Error function
- *
- *
- *
- * SYNOPSIS:
- *
- * long double x, y, erfl();
- *
- * y = erfl( x );
- *
- *
- *
- * DESCRIPTION:
- *
- * The integral is
- *
- * x
- * -
- * 2 | | 2
- * erf(x) = -------- | exp( - t ) dt.
- * sqrt(pi) | |
- * -
- * 0
- *
- * The magnitude of x is limited to about 106.56 for IEEE
- * arithmetic; 1 or -1 is returned outside this range.
- *
- * For 0 <= |x| < 1, erf(x) = x * P6(x^2)/Q6(x^2);
- * Otherwise: erf(x) = 1 - erfc(x).
- *
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE 0,1 50000 2.0e-19 5.7e-20
- *
- */
-
-/* erfcl.c
- *
- * Complementary error function
- *
- *
- *
- * SYNOPSIS:
- *
- * long double x, y, erfcl();
- *
- * y = erfcl( x );
- *
- *
- *
- * DESCRIPTION:
- *
- *
- * 1 - erf(x) =
- *
- * inf.
- * -
- * 2 | | 2
- * erfc(x) = -------- | exp( - t ) dt
- * sqrt(pi) | |
- * -
- * x
- *
- *
- * For small x, erfc(x) = 1 - erf(x); otherwise rational
- * approximations are computed.
- *
- * A special function expx2l.c is used to suppress error amplification
- * in computing exp(-x^2).
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE 0,13 50000 8.4e-19 9.7e-20
- * IEEE 6,106.56 20000 2.9e-19 7.1e-20
- *
- *
- * ERROR MESSAGES:
- *
- * message condition value returned
- * erfcl underflow x^2 > MAXLOGL 0.0
- *
- *
- */
-
-
-/*
-Modified from file ndtrl.c
-Cephes Math Library Release 2.3: January, 1995
-Copyright 1984, 1995 by Stephen L. Moshier
-*/
-
-#include <math.h>
-#include "cephes_mconf.h"
-
-/* erfc(x) = exp(-x^2) P(1/x)/Q(1/x)
- 1/8 <= 1/x <= 1
- Peak relative error 5.8e-21 */
-
-static const unsigned short P[] = {
-0x4bf0,0x9ad8,0x7a03,0x86c7,0x401d, XPD
-0xdf23,0xd843,0x4032,0x8881,0x401e, XPD
-0xd025,0xcfd5,0x8494,0x88d3,0x401e, XPD
-0xb6d0,0xc92b,0x5417,0xacb1,0x401d, XPD
-0xada8,0x356a,0x4982,0x94a6,0x401c, XPD
-0x4e13,0xcaee,0x9e31,0xb258,0x401a, XPD
-0x5840,0x554d,0x37a3,0x9239,0x4018, XPD
-0x3b58,0x3da2,0xaf02,0x9780,0x4015, XPD
-0x0144,0x489e,0xbe68,0x9c31,0x4011, XPD
-0x333b,0xd9e6,0xd404,0x986f,0xbfee, XPD
-};
-static const unsigned short Q[] = {
-/* 0x0000,0x0000,0x0000,0x8000,0x3fff, XPD */
-0x0e43,0x302d,0x79ed,0x86c7,0x401d, XPD
-0xf817,0x9128,0xc0f8,0xd48b,0x401e, XPD
-0x8eae,0x8dad,0x6eb4,0x9aa2,0x401f, XPD
-0x00e7,0x7595,0xcd06,0x88bb,0x401f, XPD
-0x4991,0xcfda,0x52f1,0xa2a9,0x401e, XPD
-0xc39d,0xe415,0xc43d,0x87c0,0x401d, XPD
-0xa75d,0x436f,0x30dd,0xa027,0x401b, XPD
-0xc4cb,0x305a,0xbf78,0x8220,0x4019, XPD
-0x3708,0x33b1,0x07fa,0x8644,0x4016, XPD
-0x24fa,0x96f6,0x7153,0x8a6c,0x4012, XPD
-};
-
-/* erfc(x) = exp(-x^2) 1/x R(1/x^2) / S(1/x^2)
- 1/128 <= 1/x < 1/8
- Peak relative error 1.9e-21 */
-
-static const unsigned short R[] = {
-0x260a,0xab95,0x2fc7,0xe7c4,0x4000, XPD
-0x4761,0x613e,0xdf6d,0xe58e,0x4001, XPD
-0x0615,0x4b00,0x575f,0xdc7b,0x4000, XPD
-0x521d,0x8527,0x3435,0x8dc2,0x3ffe, XPD
-0x22cf,0xc711,0x6c5b,0xdcfb,0x3ff9, XPD
-};
-static const unsigned short S[] = {
-/* 0x0000,0x0000,0x0000,0x8000,0x3fff, XPD */
-0x5de6,0x17d7,0x54d6,0xaba9,0x4002, XPD
-0x55d5,0xd300,0xe71e,0xf564,0x4002, XPD
-0xb611,0x8f76,0xf020,0xd255,0x4001, XPD
-0x3684,0x3798,0xb793,0x80b0,0x3fff, XPD
-0xf5af,0x2fb2,0x1e57,0xc3d7,0x3ffa, XPD
-};
-
-/* erf(x) = x T(x^2)/U(x^2)
- 0 <= x <= 1
- Peak relative error 7.6e-23 */
-
-static const unsigned short T[] = {
-0xfd7a,0x3a1a,0x705b,0xe0c4,0x3ffb, XPD
-0x3128,0xc337,0x3716,0xace5,0x4001, XPD
-0x9517,0x4e93,0x540e,0x8f97,0x4007, XPD
-0x6118,0x6059,0x9093,0xa757,0x400a, XPD
-0xb954,0xa987,0xc60c,0xbc83,0x400e, XPD
-0x7a56,0xe45a,0xa4bd,0x975b,0x4010, XPD
-0xc446,0x6bab,0x0b2a,0x86d0,0x4013, XPD
-};
-
-static const unsigned short U[] = {
-/* 0x0000,0x0000,0x0000,0x8000,0x3fff, XPD */
-0x3453,0x1f8e,0xf688,0xb507,0x4004, XPD
-0x71ac,0xb12f,0x21ca,0xf2e2,0x4008, XPD
-0xffe8,0x9cac,0x3b84,0xc2ac,0x400c, XPD
-0x481d,0x445b,0xc807,0xc232,0x400f, XPD
-0x9ad5,0x1aef,0x45b1,0xe25e,0x4011, XPD
-0x71a7,0x1cad,0x012e,0xeef3,0x4012, XPD
-};
-
-/* expx2l.c
- *
- * Exponential of squared argument
- *
- *
- *
- * SYNOPSIS:
- *
- * long double x, y, expmx2l();
- * int sign;
- *
- * y = expx2l( x );
- *
- *
- *
- * DESCRIPTION:
- *
- * Computes y = exp(x*x) while suppressing error amplification
- * that would ordinarily arise from the inexactness of the
- * exponential argument x*x.
- *
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE -106.566, 106.566 10^5 1.6e-19 4.4e-20
- *
- */
-
-#define M 32768.0L
-#define MINV 3.0517578125e-5L
-
-static long double expx2l (long double x)
-{
- long double u, u1, m, f;
-
- x = fabsl (x);
- /* Represent x as an exact multiple of M plus a residual.
- M is a power of 2 chosen so that exp(m * m) does not overflow
- or underflow and so that |x - m| is small. */
- m = MINV * floorl(M * x + 0.5L);
- f = x - m;
-
- /* x^2 = m^2 + 2mf + f^2 */
- u = m * m;
- u1 = 2 * m * f + f * f;
-
- if ((u+u1) > MAXLOGL)
- return (INFINITYL);
-
- /* u is exact, u1 is small. */
- u = expl(u) * expl(u1);
- return(u);
-}
-
-long double erfcl(long double a)
-{
-long double p,q,x,y,z;
-
-if (isinf (a))
- return (signbit (a) ? 2.0 : 0.0);
-
-x = fabsl (a);
-
-if (x < 1.0L)
- return (1.0L - erfl(a));
-
-z = a * a;
-
-if( z > MAXLOGL )
- {
-under:
- mtherr( "erfcl", UNDERFLOW );
- errno = ERANGE;
- return (signbit (a) ? 2.0 : 0.0);
- }
-
-/* Compute z = expl(a * a). */
-z = expx2l (a);
-y = 1.0L/x;
-
-if (x < 8.0L)
- {
- p = polevll (y, P, 9);
- q = p1evll (y, Q, 10);
- }
-else
- {
- q = y * y;
- p = y * polevll (q, R, 4);
- q = p1evll (q, S, 5);
- }
-y = p/(q * z);
-
-if (a < 0.0L)
- y = 2.0L - y;
-
-if (y == 0.0L)
- goto under;
-
-return (y);
-}
-
-long double erfl(long double x)
-{
-long double y, z;
-
-if( x == 0.0L )
- return (x);
-
-if (isinf (x))
- return (signbit (x) ? -1.0L : 1.0L);
-
-if (fabsl(x) > 1.0L)
- return (1.0L - erfcl (x));
-
-z = x * x;
-y = x * polevll( z, T, 6 ) / p1evll( z, U, 6 );
-return( y );
-}
diff --git a/winsup/mingw/mingwex/math/exp2.S b/winsup/mingw/mingwex/math/exp2.S
deleted file mode 100644
index 320065726..000000000
--- a/winsup/mingw/mingwex/math/exp2.S
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>.
- * Public domain.
- */
-
- .file "exp2.S"
- .text
- .align 4
-.globl _exp2
- .def _exp2; .scl 2; .type 32; .endef
-_exp2:
- fldl 4(%esp)
-/* I added the following ugly construct because exp(+-Inf) resulted
- in NaN. The ugliness results from the bright minds at Intel.
- For the i686 the code can be written better.
- -- drepper@cygnus.com. */
- fxam /* Is NaN or +-Inf? */
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 1f /* Is +-Inf, jump. */
- fld %st
- frndint /* int(x) */
- fsubr %st,%st(1) /* fract(x) */
- fxch
- f2xm1 /* 2^(fract(x)) - 1 */
- fld1
- faddp /* 2^(fract(x)) */
- fscale /* e^x */
- fstp %st(1)
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
diff --git a/winsup/mingw/mingwex/math/exp2f.S b/winsup/mingw/mingwex/math/exp2f.S
deleted file mode 100644
index 0707a0cc6..000000000
--- a/winsup/mingw/mingwex/math/exp2f.S
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>.
- * Public domain.
- */
-
- .file "exp2f.S"
- .text
- .align 4
-.globl _exp2f
- .def _exp2f; .scl 2; .type 32; .endef
-_exp2f:
- flds 4(%esp)
-/* I added the following ugly construct because exp(+-Inf) resulted
- in NaN. The ugliness results from the bright minds at Intel.
- For the i686 the code can be written better.
- -- drepper@cygnus.com. */
- fxam /* Is NaN or +-Inf? */
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 1f /* Is +-Inf, jump. */
- fld %st
- frndint /* int(x) */
- fsubr %st,%st(1) /* fract(x) */
- fxch
- f2xm1 /* 2^(fract(x)) - 1 */
- fld1
- faddp /* 2^(fract(x)) */
- fscale /* e^x */
- fstp %st(1)
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
diff --git a/winsup/mingw/mingwex/math/exp2l.S b/winsup/mingw/mingwex/math/exp2l.S
deleted file mode 100644
index 2457c26f4..000000000
--- a/winsup/mingw/mingwex/math/exp2l.S
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>.
- * Public domain.
- */
-
- .file "exp2l.S"
- .text
- .align 4
-.globl _exp2l
- .def _exp2l; .scl 2; .type 32; .endef
-_exp2l:
- fldt 4(%esp)
-/* I added the following ugly construct because exp(+-Inf) resulted
- in NaN. The ugliness results from the bright minds at Intel.
- For the i686 the code can be written better.
- -- drepper@cygnus.com. */
- fxam /* Is NaN or +-Inf? */
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 1f /* Is +-Inf, jump. */
- fld %st
- frndint /* int(x) */
- fsubr %st,%st(1) /* fract(x) */
- fxch
- f2xm1 /* 2^(fract(x)) - 1 */
- fld1
- faddp /* 2^(fract(x)) */
- fscale /* e^x */
- fstp %st(1)
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
diff --git a/winsup/mingw/mingwex/math/expf.c b/winsup/mingw/mingwex/math/expf.c
deleted file mode 100644
index e56e0bc6e..000000000
--- a/winsup/mingw/mingwex/math/expf.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <math.h>
-float expf (float x)
- {return (float) exp (x);}
diff --git a/winsup/mingw/mingwex/math/expl.c b/winsup/mingw/mingwex/math/expl.c
deleted file mode 100644
index 9731a902b..000000000
--- a/winsup/mingw/mingwex/math/expl.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-/*
- * The 8087 method for the exponential function is to calculate
- * exp(x) = 2^(x log2(e))
- * after separating integer and fractional parts
- * x log2(e) = i + f, |f| <= .5
- * 2^i is immediate but f needs to be precise for long double accuracy.
- * Suppress range reduction error in computing f by the following.
- * Separate x into integer and fractional parts
- * x = xi + xf, |xf| <= .5
- * Separate log2(e) into the sum of an exact number c0 and small part c1.
- * c0 + c1 = log2(e) to extra precision
- * Then
- * f = (c0 xi - i) + c0 xf + c1 x
- * where c0 xi is exact and so also is (c0 xi - i).
- * -- moshier@na-net.ornl.gov
- */
-
-#include <math.h>
-#include "cephes_mconf.h" /* for max and min log thresholds */
-
-static long double c0 = 1.44268798828125L;
-static long double c1 = 7.05260771340735992468e-6L;
-
-static long double
-__expl (long double x)
-{
- long double res;
- asm ("fldl2e\n\t" /* 1 log2(e) */
- "fmul %%st(1),%%st\n\t" /* 1 x log2(e) */
- "frndint\n\t" /* 1 i */
- "fld %%st(1)\n\t" /* 2 x */
- "frndint\n\t" /* 2 xi */
- "fld %%st(1)\n\t" /* 3 i */
- "fldt %2\n\t" /* 4 c0 */
- "fld %%st(2)\n\t" /* 5 xi */
- "fmul %%st(1),%%st\n\t" /* 5 c0 xi */
- "fsubp %%st,%%st(2)\n\t" /* 4 f = c0 xi - i */
- "fld %%st(4)\n\t" /* 5 x */
- "fsub %%st(3),%%st\n\t" /* 5 xf = x - xi */
- "fmulp %%st,%%st(1)\n\t" /* 4 c0 xf */
- "faddp %%st,%%st(1)\n\t" /* 3 f = f + c0 xf */
- "fldt %3\n\t" /* 4 */
- "fmul %%st(4),%%st\n\t" /* 4 c1 * x */
- "faddp %%st,%%st(1)\n\t" /* 3 f = f + c1 * x */
- "f2xm1\n\t" /* 3 2^(fract(x * log2(e))) - 1 */
- "fld1\n\t" /* 4 1.0 */
- "faddp\n\t" /* 3 2^(fract(x * log2(e))) */
- "fstp %%st(1)\n\t" /* 2 */
- "fscale\n\t" /* 2 scale factor is st(1); e^x */
- "fstp %%st(1)\n\t" /* 1 */
- "fstp %%st(1)\n\t" /* 0 */
- : "=t" (res) : "0" (x), "m" (c0), "m" (c1) : "ax", "dx");
- return res;
-}
-
-long double expl (long double x)
-{
- if (x > MAXLOGL)
- return INFINITY;
- else if (x < MINLOGL)
- return 0.0L;
- else
- return __expl (x);
-}
diff --git a/winsup/mingw/mingwex/math/expm1.c b/winsup/mingw/mingwex/math/expm1.c
deleted file mode 100755
index 4b2f43939..000000000
--- a/winsup/mingw/mingwex/math/expm1.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Written 2005 by Gregory W. Chicares <chicares@cox.net>.
- * Adapted to double by Danny Smith <dannysmith@users.sourceforge.net>.
- * Public domain.
- *
- * F2XM1's input is constrained to (-1, +1), so the domain of
- * 'x * LOG2EL' is (-LOGE2L, +LOGE2L). Outside that domain,
- * delegating to exp() handles C99 7.12.6.3/2 range errors.
- *
- * Constants from moshier.net, file cephes/ldouble/constl.c,
- * are used instead of M_LN2 and M_LOG2E, which would not be
- * visible with 'gcc std=c99'. The use of these extended precision
- * constants also allows gcc to replace them with x87 opcodes.
- */
-
-#include <math.h> /* expl() */
-#include "cephes_mconf.h"
-double expm1 (double x)
-{
- if (fabs(x) < LOGE2L)
- {
- x *= LOG2EL;
- __asm__("f2xm1" : "=t" (x) : "0" (x));
- return x;
- }
- else
- return exp(x) - 1.0;
-}
diff --git a/winsup/mingw/mingwex/math/expm1f.c b/winsup/mingw/mingwex/math/expm1f.c
deleted file mode 100755
index e38665c48..000000000
--- a/winsup/mingw/mingwex/math/expm1f.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Written 2005 by Gregory W. Chicares <chicares@cox.net>.
- * Adapted to float by Danny Smith <dannysmith@users.sourceforge.net>.
- * Public domain.
- *
- * F2XM1's input is constrained to (-1, +1), so the domain of
- * 'x * LOG2EL' is (-LOGE2L, +LOGE2L). Outside that domain,
- * delegating to exp() handles C99 7.12.6.3/2 range errors.
- *
- * Constants from moshier.net, file cephes/ldouble/constl.c,
- * are used instead of M_LN2 and M_LOG2E, which would not be
- * visible with 'gcc std=c99'. The use of these extended precision
- * constants also allows gcc to replace them with x87 opcodes.
- */
-
-#include <math.h> /* expl() */
-#include "cephes_mconf.h"
-
-float expm1f (float x)
-{
- if (fabsf(x) < LOGE2L)
- {
- x *= LOG2EL;
- __asm__("f2xm1" : "=t" (x) : "0" (x));
- return x;
- }
- else
- return expf(x) - 1.0F;
-}
diff --git a/winsup/mingw/mingwex/math/expm1l.c b/winsup/mingw/mingwex/math/expm1l.c
deleted file mode 100755
index 69fe8e525..000000000
--- a/winsup/mingw/mingwex/math/expm1l.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Written 2005 by Gregory W. Chicares <chicares@cox.net> with
- * help from Danny Smith. dannysmith@users.sourceforge.net>.
- * Public domain.
- *
- * F2XM1's input is constrained to (-1, +1), so the domain of
- * 'x * LOG2EL' is (-LOGE2L, +LOGE2L). Outside that domain,
- * delegating to expl() handles C99 7.12.6.3/2 range errors.
- *
- * Constants from moshier.net, file cephes/ldouble/constl.c,
- * are used instead of M_LN2 and M_LOG2E, which would not be
- * visible with 'gcc std=c99'. The use of these extended precision
- * constants also allows gcc to replace them with x87 opcodes.
- */
-
-#include <math.h> /* expl() */
-#include "cephes_mconf.h"
-
-long double expm1l (long double x)
-{
- if (fabsl(x) < LOGE2L)
- {
- x *= LOG2EL;
- __asm__("f2xm1" : "=t" (x) : "0" (x));
- return x;
- }
- else
- return expl(x) - 1.0L;
-}
diff --git a/winsup/mingw/mingwex/math/fabs.c b/winsup/mingw/mingwex/math/fabs.c
deleted file mode 100644
index c2074e8cb..000000000
--- a/winsup/mingw/mingwex/math/fabs.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <math.h>
-
-double
-fabs (double x)
-{
- double res;
-
- asm ("fabs;" : "=t" (res) : "0" (x));
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/fabsf.c b/winsup/mingw/mingwex/math/fabsf.c
deleted file mode 100644
index 6580f955c..000000000
--- a/winsup/mingw/mingwex/math/fabsf.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <math.h>
-
-float
-fabsf (float x)
-{
- float res;
- asm ("fabs;" : "=t" (res) : "0" (x));
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/fabsl.c b/winsup/mingw/mingwex/math/fabsl.c
deleted file mode 100644
index eead724d4..000000000
--- a/winsup/mingw/mingwex/math/fabsl.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <math.h>
-
-long double
-fabsl (long double x)
-{
- long double res;
- asm ("fabs;" : "=t" (res) : "0" (x));
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/fastmath.h b/winsup/mingw/mingwex/math/fastmath.h
deleted file mode 100755
index 01b06b3eb..000000000
--- a/winsup/mingw/mingwex/math/fastmath.h
+++ /dev/null
@@ -1,115 +0,0 @@
-#ifndef _MINGWEX_FASTMATH_H_
-#define _MINGWEX_FASTMATH_H_
-
-/* Fast math inlines
- No range or domain checks. No setting of errno. No tweaks to
- protect precision near range limits. */
-
-/* For now this is an internal header with just the functions that
- are currently used in building libmingwex.a math components */
-
-/* FIXME: We really should get rid of the code duplication using euther
- C++ templates or tgmath-type macros. */
-
-static __inline__ double __fast_sqrt (double x)
-{
- double res;
- asm __volatile__ ("fsqrt" : "=t" (res) : "0" (x));
- return res;
-}
-
-static __inline__ long double __fast_sqrtl (long double x)
-{
- long double res;
- asm __volatile__ ("fsqrt" : "=t" (res) : "0" (x));
- return res;
-}
-
-static __inline__ float __fast_sqrtf (float x)
-{
- float res;
- asm __volatile__ ("fsqrt" : "=t" (res) : "0" (x));
- return res;
-}
-
-
-static __inline__ double __fast_log (double x)
-{
- double res;
- asm __volatile__
- ("fldln2\n\t"
- "fxch\n\t"
- "fyl2x"
- : "=t" (res) : "0" (x) : "st(1)");
- return res;
-}
-
-static __inline__ long double __fast_logl (long double x)
-{
- long double res;
- asm __volatile__
- ("fldln2\n\t"
- "fxch\n\t"
- "fyl2x"
- : "=t" (res) : "0" (x) : "st(1)");
- return res;
-}
-
-
-static __inline__ float __fast_logf (float x)
-{
- float res;
- asm __volatile__
- ("fldln2\n\t"
- "fxch\n\t"
- "fyl2x"
- : "=t" (res) : "0" (x) : "st(1)");
- return res;
-}
-
-static __inline__ double __fast_log1p (double x)
-{
- double res;
- /* fyl2xp1 accurate only for |x| <= 1.0 - 0.5 * sqrt (2.0) */
- if (fabs (x) >= 1.0 - 0.5 * 1.41421356237309504880)
- res = __fast_log (1.0 + x);
- else
- asm __volatile__
- ("fldln2\n\t"
- "fxch\n\t"
- "fyl2xp1"
- : "=t" (res) : "0" (x) : "st(1)");
- return res;
-}
-
-static __inline__ long double __fast_log1pl (long double x)
-{
- long double res;
- /* fyl2xp1 accurate only for |x| <= 1.0 - 0.5 * sqrt (2.0) */
- if (fabsl (x) >= 1.0L - 0.5L * 1.41421356237309504880L)
- res = __fast_logl (1.0L + x);
- else
- asm __volatile__
- ("fldln2\n\t"
- "fxch\n\t"
- "fyl2xp1"
- : "=t" (res) : "0" (x) : "st(1)");
- return res;
-}
-
-static __inline__ float __fast_log1pf (float x)
-{
- float res;
- /* fyl2xp1 accurate only for |x| <= 1.0 - 0.5 * sqrt (2.0) */
- if (fabsf (x) >= 1.0 - 0.5 * 1.41421356237309504880)
- res = __fast_logf (1.0 + x);
- else
- asm __volatile__
- ("fldln2\n\t"
- "fxch\n\t"
- "fyl2xp1"
- : "=t" (res) : "0" (x) : "st(1)");
- return res;
-}
-
-#endif
diff --git a/winsup/mingw/mingwex/math/fdim.c b/winsup/mingw/mingwex/math/fdim.c
deleted file mode 100644
index 330b09241..000000000
--- a/winsup/mingw/mingwex/math/fdim.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-
-double
-fdim (double x, double y)
-{
- return (isgreater(x, y) ? (x - y) : 0.0);
-}
diff --git a/winsup/mingw/mingwex/math/fdimf.c b/winsup/mingw/mingwex/math/fdimf.c
deleted file mode 100644
index 02bfc6e5e..000000000
--- a/winsup/mingw/mingwex/math/fdimf.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-
-float
-fdimf (float x, float y)
-{
- return (isgreater(x, y) ? (x - y) : 0.0F);
-}
diff --git a/winsup/mingw/mingwex/math/fdiml.c b/winsup/mingw/mingwex/math/fdiml.c
deleted file mode 100644
index 1c3d0aaaa..000000000
--- a/winsup/mingw/mingwex/math/fdiml.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-
-long double
-fdiml (long double x, long double y)
-{
- return (isgreater(x, y) ? (x - y) : 0.0L);
-}
diff --git a/winsup/mingw/mingwex/math/floorf.S b/winsup/mingw/mingwex/math/floorf.S
deleted file mode 100644
index 8ae8100a7..000000000
--- a/winsup/mingw/mingwex/math/floorf.S
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
- .file "floorf.S"
- .text
- .align 4
-.globl _floorf
- .def _floorf; .scl 2; .type 32; .endef
-_floorf:
- flds 4(%esp)
- subl $8,%esp
-
- fstcw 4(%esp) /* store fpu control word */
-
- /* We use here %edx although only the low 1 bits are defined.
- But none of the operations should care and they are faster
- than the 16 bit operations. */
- movl $0x400,%edx /* round towards -oo */
- orl 4(%esp),%edx
- andl $0xf7ff,%edx
- movl %edx,(%esp)
- fldcw (%esp) /* load modified control word */
-
- frndint /* round */
-
- fldcw 4(%esp) /* restore original control word */
-
- addl $8,%esp
- ret
diff --git a/winsup/mingw/mingwex/math/floorl.S b/winsup/mingw/mingwex/math/floorl.S
deleted file mode 100644
index 5ab9214b5..000000000
--- a/winsup/mingw/mingwex/math/floorl.S
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- *
- */
- .file "floorl.S"
- .text
- .align 4
-.globl _floorl
- .def _floorl; .scl 2; .type 32; .endef
-_floorl:
- fldt 4(%esp)
- subl $8,%esp
-
- fstcw 4(%esp) /* store fpu control word */
-
- /* We use here %edx although only the low 1 bits are defined.
- But none of the operations should care and they are faster
- than the 16 bit operations. */
- movl $0x400,%edx /* round towards -oo */
- orl 4(%esp),%edx
- andl $0xf7ff,%edx
- movl %edx,(%esp)
- fldcw (%esp) /* load modified control word */
-
- frndint /* round */
-
- fldcw 4(%esp) /* restore original control word */
-
- addl $8,%esp
- ret
diff --git a/winsup/mingw/mingwex/math/fma.S b/winsup/mingw/mingwex/math/fma.S
deleted file mode 100644
index d6226653c..000000000
--- a/winsup/mingw/mingwex/math/fma.S
+++ /dev/null
@@ -1,12 +0,0 @@
- .file "fma.S"
- .text
- .align 2
- .p2align 4,,15
-.globl _fma
- .def _fma; .scl 2; .type 32; .endef
-_fma:
- fldl 4(%esp)
- fmull 12(%esp)
- fldl 20(%esp)
- faddp
- ret
diff --git a/winsup/mingw/mingwex/math/fmaf.S b/winsup/mingw/mingwex/math/fmaf.S
deleted file mode 100644
index 0d64ac2f1..000000000
--- a/winsup/mingw/mingwex/math/fmaf.S
+++ /dev/null
@@ -1,12 +0,0 @@
- .file "fmaf.S"
- .text
- .align 2
- .p2align 4,,15
-.globl _fmaf
- .def _fmaf; .scl 2; .type 32; .endef
-_fmaf:
- flds 4(%esp)
- fmuls 8(%esp)
- flds 12(%esp)
- faddp
- ret
diff --git a/winsup/mingw/mingwex/math/fmal.c b/winsup/mingw/mingwex/math/fmal.c
deleted file mode 100644
index 1fbd41d28..000000000
--- a/winsup/mingw/mingwex/math/fmal.c
+++ /dev/null
@@ -1,5 +0,0 @@
-long double
-fmal ( long double _x, long double _y, long double _z)
-{
- return ((_x * _y) + _z);
-}
diff --git a/winsup/mingw/mingwex/math/fmax.c b/winsup/mingw/mingwex/math/fmax.c
deleted file mode 100644
index 35c1f45e5..000000000
--- a/winsup/mingw/mingwex/math/fmax.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-
-double
-fmax (double _x, double _y)
-{
- return ( isgreaterequal (_x, _y)|| __isnan (_y) ? _x : _y );
-}
diff --git a/winsup/mingw/mingwex/math/fmaxf.c b/winsup/mingw/mingwex/math/fmaxf.c
deleted file mode 100644
index 079a7e746..000000000
--- a/winsup/mingw/mingwex/math/fmaxf.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-
-float
-fmaxf (float _x, float _y)
-{
- return (( isgreaterequal(_x, _y) || __isnanf (_y)) ? _x : _y );
-}
diff --git a/winsup/mingw/mingwex/math/fmaxl.c b/winsup/mingw/mingwex/math/fmaxl.c
deleted file mode 100644
index 4e38da476..000000000
--- a/winsup/mingw/mingwex/math/fmaxl.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-
-long double
-fmaxl (long double _x, long double _y)
-{
- return (( isgreaterequal(_x, _y) || __isnanl (_y)) ? _x : _y );
-}
diff --git a/winsup/mingw/mingwex/math/fmin.c b/winsup/mingw/mingwex/math/fmin.c
deleted file mode 100644
index 96a6ed111..000000000
--- a/winsup/mingw/mingwex/math/fmin.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-
-double
-fmin (double _x, double _y)
-{
- return ((islessequal(_x, _y) || __isnan (_y)) ? _x : _y );
-}
diff --git a/winsup/mingw/mingwex/math/fminf.c b/winsup/mingw/mingwex/math/fminf.c
deleted file mode 100644
index f3d71480d..000000000
--- a/winsup/mingw/mingwex/math/fminf.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-
-float
-fminf (float _x, float _y)
-{
- return ((islessequal(_x, _y) || _isnan (_y)) ? _x : _y );
-}
diff --git a/winsup/mingw/mingwex/math/fminl.c b/winsup/mingw/mingwex/math/fminl.c
deleted file mode 100644
index d8a3fea2c..000000000
--- a/winsup/mingw/mingwex/math/fminl.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-
-long double
-fminl (long double _x, long double _y)
-{
- return ((islessequal(_x, _y) || __isnanl (_y)) ? _x : _y );
-}
diff --git a/winsup/mingw/mingwex/math/fmodf.c b/winsup/mingw/mingwex/math/fmodf.c
deleted file mode 100644
index 6405d725f..000000000
--- a/winsup/mingw/mingwex/math/fmodf.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for float type by Danny Smith
- * <dannysmith@users.sourceforge.net>.
- */
-
-#include <math.h>
-
-float
-fmodf (float x, float y)
-{
- float res;
-
- asm ("1:\tfprem\n\t"
- "fstsw %%ax\n\t"
- "sahf\n\t"
- "jp 1b\n\t"
- "fstp %%st(1)"
- : "=t" (res) : "0" (x), "u" (y) : "ax", "st(1)");
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/fmodl.c b/winsup/mingw/mingwex/math/fmodl.c
deleted file mode 100644
index f1c97f10b..000000000
--- a/winsup/mingw/mingwex/math/fmodl.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <math.h>
-
-long double
-fmodl (long double x, long double y)
-{
- long double res;
-
- asm ("1:\tfprem\n\t"
- "fstsw %%ax\n\t"
- "sahf\n\t"
- "jp 1b\n\t"
- "fstp %%st(1)"
- : "=t" (res) : "0" (x), "u" (y) : "ax", "st(1)");
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/fp_consts.c b/winsup/mingw/mingwex/math/fp_consts.c
deleted file mode 100644
index 285c9d7dc..000000000
--- a/winsup/mingw/mingwex/math/fp_consts.c
+++ /dev/null
@@ -1,14 +0,0 @@
-
-#include "fp_consts.h"
-const union _ieee_rep __QNAN = { __DOUBLE_QNAN_REP };
-const union _ieee_rep __SNAN = { __DOUBLE_SNAN_REP };
-const union _ieee_rep __INF = { __DOUBLE_INF_REP };
-const union _ieee_rep __DENORM = { __DOUBLE_DENORM_REP };
-
-/* ISO C99 */
-#undef nan
-/* FIXME */
-double nan (const char * tagp __attribute__((unused)) )
- { return __QNAN.double_val; }
-
-
diff --git a/winsup/mingw/mingwex/math/fp_consts.h b/winsup/mingw/mingwex/math/fp_consts.h
deleted file mode 100644
index 249339501..000000000
--- a/winsup/mingw/mingwex/math/fp_consts.h
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef _FP_CONSTS_H
-#define _FP_CONSTS_H
-
-/*
-According to IEEE 754 a QNaN has exponent bits of all 1 values and
-initial significand bit of 1. A SNaN has has an exponent of all 1
-values and initial significand bit of 0 (with one or more other
-significand bits of 1). An Inf has significand of 0 and
-exponent of all 1 values. A denormal value has all exponent bits of 0.
-
-The following does _not_ follow those rules, but uses values
-equal to those exported from MS C++ runtime lib, msvcprt.dll
-for float and double. MSVC however, does not have long doubles.
-*/
-
-
-#define __DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 }
-#define __DOUBLE_QNAN_REP { 0, 0, 0, 0xfff8 } /* { 0, 0, 0, 0x7ff8 } */
-#define __DOUBLE_SNAN_REP { 0, 0, 0, 0xfff0 } /* { 1, 0, 0, 0x7ff0 } */
-#define __DOUBLE_DENORM_REP {1, 0, 0, 0}
-
-#define D_NAN_MASK 0x7ff0000000000000LL /* this will mask NaN's and Inf's */
-
-#define __FLOAT_INF_REP { 0, 0x7f80 }
-#define __FLOAT_QNAN_REP { 0, 0xffc0 } /* { 0, 0x7fc0 } */
-#define __FLOAT_SNAN_REP { 0, 0xff80 } /* { 1, 0x7f80 } */
-#define __FLOAT_DENORM_REP {1,0}
-
-#define F_NAN_MASK 0x7f800000
-
-/*
- This assumes no implicit (hidden) bit in extended mode.
- Padded to 96 bits
- */
-#define __LONG_DOUBLE_INF_REP { 0, 0, 0, 0x8000, 0x7fff, 0 }
-#define __LONG_DOUBLE_QNAN_REP { 0, 0, 0, 0xc000, 0xffff, 0 }
-#define __LONG_DOUBLE_SNAN_REP { 0, 0, 0, 0x8000, 0xffff, 0 }
-#define __LONG_DOUBLE_DENORM_REP {1, 0, 0, 0, 0, 0}
-
-union _ieee_rep
-{
- unsigned short rep[6];
- float float_val;
- double double_val;
- long double ldouble_val;
-} ;
-
-#endif
diff --git a/winsup/mingw/mingwex/math/fp_constsf.c b/winsup/mingw/mingwex/math/fp_constsf.c
deleted file mode 100644
index 5a4afef2b..000000000
--- a/winsup/mingw/mingwex/math/fp_constsf.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "fp_consts.h"
-
-const union _ieee_rep __QNANF = { __FLOAT_QNAN_REP };
-const union _ieee_rep __SNANF = { __FLOAT_SNAN_REP };
-const union _ieee_rep __INFF = { __FLOAT_INF_REP };
-const union _ieee_rep __DENORMF = { __FLOAT_DENORM_REP };
-
-/* ISO C99 */
-#undef nanf
-/* FIXME */
-float nanf(const char * tagp __attribute__((unused)) )
- { return __QNANF.float_val;}
diff --git a/winsup/mingw/mingwex/math/fp_constsl.c b/winsup/mingw/mingwex/math/fp_constsl.c
deleted file mode 100644
index 44fdb7fd3..000000000
--- a/winsup/mingw/mingwex/math/fp_constsl.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "fp_consts.h"
-
-const union _ieee_rep __QNANL = { __LONG_DOUBLE_QNAN_REP };
-const union _ieee_rep __SNANL = { __LONG_DOUBLE_SNAN_REP };
-const union _ieee_rep __INFL = { __LONG_DOUBLE_INF_REP };
-const union _ieee_rep __DENORML = { __LONG_DOUBLE_DENORM_REP };
-
-
-#undef nanl
-/* FIXME */
-long double nanl (const char * tagp __attribute__((unused)) )
- { return __QNANL.ldouble_val; }
diff --git a/winsup/mingw/mingwex/math/fpclassify.c b/winsup/mingw/mingwex/math/fpclassify.c
deleted file mode 100644
index f8cd8cb44..000000000
--- a/winsup/mingw/mingwex/math/fpclassify.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <math.h>
-
-/* 'fxam' sets FPU flags C3,C2,C0 'fstsw' stores:
- FP_NAN 001 0x0100
- FP_NORMAL 010 0x0400
- FP_INFINITE 011 0x0500
- FP_ZERO 100 0x4000
- FP_SUBNORMAL 110 0x4400
-
-and sets C1 flag (signbit) if neg */
-
-int __fpclassify (double _x){
- unsigned short sw;
- __asm__ (
- "fxam; fstsw %%ax;"
- : "=a" (sw)
- : "t" (_x)
- );
- return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
-}
diff --git a/winsup/mingw/mingwex/math/fpclassifyf.c b/winsup/mingw/mingwex/math/fpclassifyf.c
deleted file mode 100644
index aca4e59f1..000000000
--- a/winsup/mingw/mingwex/math/fpclassifyf.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <math.h>
-int __fpclassifyf (float _x){
- unsigned short sw;
- __asm__ (
- "fxam; fstsw %%ax;"
- : "=a" (sw)
- : "t" (_x)
- );
- return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
-}
diff --git a/winsup/mingw/mingwex/math/fpclassifyl.c b/winsup/mingw/mingwex/math/fpclassifyl.c
deleted file mode 100644
index 9979d6278..000000000
--- a/winsup/mingw/mingwex/math/fpclassifyl.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <math.h>
-int __fpclassifyl (long double _x){
- unsigned short sw;
- __asm__ (
- "fxam; fstsw %%ax;"
- : "=a" (sw)
- : "t" (_x)
- );
- return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
-}
diff --git a/winsup/mingw/mingwex/math/frexpf.c b/winsup/mingw/mingwex/math/frexpf.c
deleted file mode 100644
index df262abc5..000000000
--- a/winsup/mingw/mingwex/math/frexpf.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <math.h>
-float frexpf (float x, int* expn)
- {return (float)frexp(x, expn);}
diff --git a/winsup/mingw/mingwex/math/frexpl.S b/winsup/mingw/mingwex/math/frexpl.S
deleted file mode 100644
index 2b691c87f..000000000
--- a/winsup/mingw/mingwex/math/frexpl.S
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- Cephes Math Library Release 2.7: May, 1998
- Copyright 1984, 1987, 1988, 1992, 1998 by Stephen L. Moshier
-
- Extracted from floorl.387 for use in libmingwex.a by
- Danny Smith <dannysmith@users.sourceforge.net>
- 2002-06-20
-*/
-
-/*
- * frexpl(long double x, int* expnt) extracts the exponent from x.
- * It returns an integer power of two to expnt and the significand
- * between 0.5 and 1 to y. Thus x = y * 2**expn.
- */
- .align 2
-.globl _frexpl
-_frexpl:
- pushl %ebp
- movl %esp,%ebp
- subl $24,%esp
- pushl %esi
- pushl %ebx
- fldt 8(%ebp)
- movl 20(%ebp),%ebx
- fld %st(0)
- fstpt -12(%ebp)
- leal -4(%ebp),%ecx
- movw -4(%ebp),%dx
- andl $32767,%edx
- jne L25
- fldz
- fucompp
- fnstsw %ax
- andb $68,%ah
- xorb $64,%ah
- jne L21
- movl $0,(%ebx)
- fldz
- jmp L24
- .align 2,0x90
- .align 2,0x90
-L21:
- fldt -12(%ebp)
- fadd %st(0),%st
- fstpt -12(%ebp)
- decl %edx
- movw (%ecx),%si
- andl $32767,%esi
- jne L22
- cmpl $-66,%edx
- jg L21
-L22:
- addl %esi,%edx
- jmp L19
- .align 2,0x90
-L25:
- fstp %st(0)
-L19:
- addl $-16382,%edx
- movl %edx,(%ebx)
- movw (%ecx),%ax
- andl $-32768,%eax
- orl $16382,%eax
- movw %ax,(%ecx)
- fldt -12(%ebp)
-L24:
- leal -32(%ebp),%esp
- popl %ebx
- popl %esi
- leave
- ret
diff --git a/winsup/mingw/mingwex/math/fucom.c b/winsup/mingw/mingwex/math/fucom.c
deleted file mode 100644
index 80c937262..000000000
--- a/winsup/mingw/mingwex/math/fucom.c
+++ /dev/null
@@ -1,11 +0,0 @@
-int
-__fp_unordered_compare (long double x, long double y){
- unsigned short retval;
- __asm__ (
- "fucom %%st(1);"
- "fnstsw;"
- : "=a" (retval)
- : "t" (x), "u" (y)
- );
- return retval;
-}
diff --git a/winsup/mingw/mingwex/math/hypotf.c b/winsup/mingw/mingwex/math/hypotf.c
deleted file mode 100644
index ee67a45dc..000000000
--- a/winsup/mingw/mingwex/math/hypotf.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <math.h>
-
-float hypotf (float x, float y)
- { return (float) _hypot (x, y);}
diff --git a/winsup/mingw/mingwex/math/hypotl.c b/winsup/mingw/mingwex/math/hypotl.c
deleted file mode 100644
index 2a25b82c3..000000000
--- a/winsup/mingw/mingwex/math/hypotl.c
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <math.h>
-#include <float.h>
-#include <errno.h>
-
-/*
-This implementation is based largely on Cephes library
-function cabsl (cmplxl.c), which bears the following notice:
-
-Cephes Math Library Release 2.1: January, 1989
-Copyright 1984, 1987, 1989 by Stephen L. Moshier
-Direct inquiries to 30 Frost Street, Cambridge, MA 02140
-*/
-
-/*
- Modified for use in libmingwex.a
- 02 Sept 2002 Danny Smith <dannysmith@users.sourceforege.net>
- Calls to ldexpl replaced by logbl and calls to frexpl replaced
- by scalbnl to avoid duplicated range checks.
-*/
-
-extern long double __INFL;
-#define PRECL 32
-
-long double
-hypotl (long double x, long double y)
-{
- int exx;
- int eyy;
- int scale;
- long double xx =fabsl(x);
- long double yy =fabsl(y);
- if (!isfinite(xx) || !isfinite(yy))
- return xx + yy; /* Return INF or NAN. */
-
- if (xx == 0.0L)
- return yy;
- if (yy == 0.0L)
- return xx;
-
- /* Get exponents */
- exx = logbl (xx);
- eyy = logbl (yy);
-
- /* Check if large differences in scale */
- scale = exx - eyy;
- if ( scale > PRECL)
- return xx;
- if ( scale < -PRECL)
- return yy;
-
- /* Exponent of approximate geometric mean (x 2) */
- scale = (exx + eyy) >> 1;
-
- /* Rescale: Geometric mean is now about 2 */
- x = scalbnl(xx, -scale);
- y = scalbnl(yy, -scale);
-
- xx = sqrtl(x * x + y * y);
-
- /* Check for overflow and underflow */
- exx = logbl(xx);
- exx += scale;
- if (exx > LDBL_MAX_EXP)
- {
- errno = ERANGE;
- return __INFL;
- }
- if (exx < LDBL_MIN_EXP)
- return 0.0L;
-
- /* Undo scaling */
- return (scalbnl (xx, scale));
-}
diff --git a/winsup/mingw/mingwex/math/ilogb.S b/winsup/mingw/mingwex/math/ilogb.S
deleted file mode 100644
index 2335b5146..000000000
--- a/winsup/mingw/mingwex/math/ilogb.S
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-
- .file "ilogb.S"
- .text
- .align 4
-.globl _ilogb
- .def _ilogb; .scl 2; .type 32; .endef
-_ilogb:
-
- fldl 4(%esp)
-/* I added the following ugly construct because ilogb(+-Inf) is
- required to return INT_MAX in ISO C99.
- -- jakub@redhat.com. */
- fxam /* Is NaN or +-Inf? */
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 1f /* Is +-Inf, jump. */
-
- fxtract
- pushl %eax
- fstp %st
-
- fistpl (%esp)
- fwait
- popl %eax
-
- ret
-
-1: fstp %st
- movl $0x7fffffff, %eax
- ret
diff --git a/winsup/mingw/mingwex/math/ilogbf.S b/winsup/mingw/mingwex/math/ilogbf.S
deleted file mode 100644
index fa3e78e84..000000000
--- a/winsup/mingw/mingwex/math/ilogbf.S
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
- .file "ilogbf.S"
- .text
- .align 4
-.globl _ilogbf
- .def _ilogbf; .scl 2; .type 32; .endef
-_ilogbf:
- flds 4(%esp)
-/* I added the following ugly construct because ilogb(+-Inf) is
- required to return INT_MAX in ISO C99.
- -- jakub@redhat.com. */
- fxam /* Is NaN or +-Inf? */
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 1f /* Is +-Inf, jump. */
-
- fxtract
- pushl %eax
- fstp %st
-
- fistpl (%esp)
- fwait
- popl %eax
-
- ret
-
-1: fstp %st
- movl $0x7fffffff, %eax
- ret
diff --git a/winsup/mingw/mingwex/math/ilogbl.S b/winsup/mingw/mingwex/math/ilogbl.S
deleted file mode 100644
index b9dc6ea72..000000000
--- a/winsup/mingw/mingwex/math/ilogbl.S
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
- .file "ilogbl.S"
- .text
- .align 4
-.globl _ilogbl
- .def _ilogbl; .scl 2; .type 32; .endef
-_ilogbl:
- fldt 4(%esp)
-/* I added the following ugly construct because ilogb(+-Inf) is
- required to return INT_MAX in ISO C99.
- -- jakub@redhat.com. */
- fxam /* Is NaN or +-Inf? */
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 1f /* Is +-Inf, jump. */
-
- fxtract
- pushl %eax
- fstp %st
-
- fistpl (%esp)
- fwait
- popl %eax
-
- ret
-
-1: fstp %st
- movl $0x7fffffff, %eax
- ret
diff --git a/winsup/mingw/mingwex/math/isnan.c b/winsup/mingw/mingwex/math/isnan.c
deleted file mode 100644
index b38bc290e..000000000
--- a/winsup/mingw/mingwex/math/isnan.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <math.h>
-
-int
-__isnan (double _x)
-{
- unsigned short _sw;
- __asm__ ("fxam;"
- "fstsw %%ax": "=a" (_sw) : "t" (_x));
- return (_sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
- == FP_NAN;
-}
-
-#undef isnan
-int __attribute__ ((alias ("__isnan"))) isnan (double);
diff --git a/winsup/mingw/mingwex/math/isnanf.c b/winsup/mingw/mingwex/math/isnanf.c
deleted file mode 100644
index 73fe0eb02..000000000
--- a/winsup/mingw/mingwex/math/isnanf.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <math.h>
-int
-__isnanf (float _x)
-{
- unsigned short _sw;
- __asm__ ("fxam;"
- "fstsw %%ax": "=a" (_sw) : "t" (_x) );
- return (_sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
- == FP_NAN;
-}
-
-int __attribute__ ((alias ("__isnanf"))) isnanf (float);
diff --git a/winsup/mingw/mingwex/math/isnanl.c b/winsup/mingw/mingwex/math/isnanl.c
deleted file mode 100644
index 86d0088b4..000000000
--- a/winsup/mingw/mingwex/math/isnanl.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <math.h>
-
-int
-__isnanl (long double _x)
-{
- unsigned short _sw;
- __asm__ ("fxam;"
- "fstsw %%ax": "=a" (_sw) : "t" (_x));
- return (_sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
- == FP_NAN;
-}
-
-int __attribute__ ((alias ("__isnanl"))) isnanl (long double);
diff --git a/winsup/mingw/mingwex/math/ldexpf.c b/winsup/mingw/mingwex/math/ldexpf.c
deleted file mode 100644
index 5d01a0184..000000000
--- a/winsup/mingw/mingwex/math/ldexpf.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <math.h>
-float ldexpf (float x, int expn)
- {return (float) ldexp (x, expn);}
diff --git a/winsup/mingw/mingwex/math/ldexpl.c b/winsup/mingw/mingwex/math/ldexpl.c
deleted file mode 100644
index 19a3d56e3..000000000
--- a/winsup/mingw/mingwex/math/ldexpl.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <math.h>
-#include <errno.h>
-
-long double ldexpl(long double x, int expn)
-{
- long double res;
- if (!isfinite (x) || x == 0.0L)
- return x;
-
- __asm__ ("fscale"
- : "=t" (res)
- : "0" (x), "u" ((long double) expn));
-
- if (!isfinite (res) || res == 0.0L)
- errno = ERANGE;
-
- return res;
-}
-
diff --git a/winsup/mingw/mingwex/math/lgamma.c b/winsup/mingw/mingwex/math/lgamma.c
deleted file mode 100644
index f85094957..000000000
--- a/winsup/mingw/mingwex/math/lgamma.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/* lgam()
- *
- * Natural logarithm of gamma function
- *
- *
- *
- * SYNOPSIS:
- *
- * double x, y, __lgamma_r();
- * int* sgngam;
- * y = __lgamma_r( x, sgngam );
- *
- * double x, y, lgamma();
- * y = lgamma( x);
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns the base e (2.718...) logarithm of the absolute
- * value of the gamma function of the argument. In the reentrant
- * version, the sign (+1 or -1) of the gamma function is returned
- * in the variable referenced by sgngam.
- *
- * For arguments greater than 13, the logarithm of the gamma
- * function is approximated by the logarithmic version of
- * Stirling's formula using a polynomial approximation of
- * degree 4. Arguments between -33 and +33 are reduced by
- * recurrence to the interval [2,3] of a rational approximation.
- * The cosecant reflection formula is employed for arguments
- * less than -33.
- *
- * Arguments greater than MAXLGM return MAXNUM and an error
- * message. MAXLGM = 2.035093e36 for DEC
- * arithmetic or 2.556348e305 for IEEE arithmetic.
- *
- *
- *
- * ACCURACY:
- *
- *
- * arithmetic domain # trials peak rms
- * DEC 0, 3 7000 5.2e-17 1.3e-17
- * DEC 2.718, 2.035e36 5000 3.9e-17 9.9e-18
- * IEEE 0, 3 28000 5.4e-16 1.1e-16
- * IEEE 2.718, 2.556e305 40000 3.5e-16 8.3e-17
- * The error criterion was relative when the function magnitude
- * was greater than one but absolute when it was less than one.
- *
- * The following test used the relative error criterion, though
- * at certain points the relative error could be much higher than
- * indicated.
- * IEEE -200, -4 10000 4.8e-16 1.3e-16
- *
- */
-
-/*
- * Cephes Math Library Release 2.8: June, 2000
- * Copyright 1984, 1987, 1989, 1992, 2000 by Stephen L. Moshier
- */
-
-/*
- * 26-11-2002 Modified for mingw.
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
-
-#ifndef __MINGW32__
-#include "mconf.h"
-#ifdef ANSIPROT
-extern double pow ( double, double );
-extern double log ( double );
-extern double exp ( double );
-extern double sin ( double );
-extern double polevl ( double, void *, int );
-extern double p1evl ( double, void *, int );
-extern double floor ( double );
-extern double fabs ( double );
-extern int isnan ( double );
-extern int isfinite ( double );
-#else
-double pow(), log(), exp(), sin(), polevl(), p1evl(), floor(), fabs();
-int isnan(), isfinite();
-#endif
-#ifdef INFINITIES
-extern double INFINITY;
-#endif
-#ifdef NANS
-extern double NAN;
-#endif
-#else /* __MINGW32__ */
-#include "cephes_mconf.h"
-#endif /* __MINGW32__ */
-
-
-/* A[]: Stirling's formula expansion of log gamma
- * B[], C[]: log gamma function between 2 and 3
- */
-#ifdef UNK
-static double A[] = {
- 8.11614167470508450300E-4,
--5.95061904284301438324E-4,
- 7.93650340457716943945E-4,
--2.77777777730099687205E-3,
- 8.33333333333331927722E-2
-};
-static double B[] = {
--1.37825152569120859100E3,
--3.88016315134637840924E4,
--3.31612992738871184744E5,
--1.16237097492762307383E6,
--1.72173700820839662146E6,
--8.53555664245765465627E5
-};
-static double C[] = {
-/* 1.00000000000000000000E0, */
--3.51815701436523470549E2,
--1.70642106651881159223E4,
--2.20528590553854454839E5,
--1.13933444367982507207E6,
--2.53252307177582951285E6,
--2.01889141433532773231E6
-};
-/* log( sqrt( 2*pi ) ) */
-static double LS2PI = 0.91893853320467274178;
-#define MAXLGM 2.556348e305
-static double LOGPI = 1.14472988584940017414;
-#endif
-
-#ifdef DEC
-static const unsigned short A[] = {
-0035524,0141201,0034633,0031405,
-0135433,0176755,0126007,0045030,
-0035520,0006371,0003342,0172730,
-0136066,0005540,0132605,0026407,
-0037252,0125252,0125252,0125132
-};
-static const unsigned short B[] = {
-0142654,0044014,0077633,0035410,
-0144027,0110641,0125335,0144760,
-0144641,0165637,0142204,0047447,
-0145215,0162027,0146246,0155211,
-0145322,0026110,0010317,0110130,
-0145120,0061472,0120300,0025363
-};
-static const unsigned short C[] = {
-/*0040200,0000000,0000000,0000000*/
-0142257,0164150,0163630,0112622,
-0143605,0050153,0156116,0135272,
-0144527,0056045,0145642,0062332,
-0145213,0012063,0106250,0001025,
-0145432,0111254,0044577,0115142,
-0145366,0071133,0050217,0005122
-};
-/* log( sqrt( 2*pi ) ) */
-static const unsigned short LS2P[] = {040153,037616,041445,0172645,};
-#define LS2PI *(double *)LS2P
-#define MAXLGM 2.035093e36
-static const unsigned short LPI[4] = {
-0040222,0103202,0043475,0006750,
-};
-#define LOGPI *(double *)LPI
-
-#endif
-
-#ifdef IBMPC
-static const unsigned short A[] = {
-0x6661,0x2733,0x9850,0x3f4a,
-0xe943,0xb580,0x7fbd,0xbf43,
-0x5ebb,0x20dc,0x019f,0x3f4a,
-0xa5a1,0x16b0,0xc16c,0xbf66,
-0x554b,0x5555,0x5555,0x3fb5
-};
-static const unsigned short B[] = {
-0x6761,0x8ff3,0x8901,0xc095,
-0xb93e,0x355b,0xf234,0xc0e2,
-0x89e5,0xf890,0x3d73,0xc114,
-0xdb51,0xf994,0xbc82,0xc131,
-0xf20b,0x0219,0x4589,0xc13a,
-0x055e,0x5418,0x0c67,0xc12a
-};
-static const unsigned short C[] = {
-/*0x0000,0x0000,0x0000,0x3ff0,*/
-0x12b2,0x1cf3,0xfd0d,0xc075,
-0xd757,0x7b89,0xaa0d,0xc0d0,
-0x4c9b,0xb974,0xeb84,0xc10a,
-0x0043,0x7195,0x6286,0xc131,
-0xf34c,0x892f,0x5255,0xc143,
-0xe14a,0x6a11,0xce4b,0xc13e
-};
-/* log( sqrt( 2*pi ) ) */
-static const unsigned short LS2P[] = {
-0xbeb5,0xc864,0x67f1,0x3fed
-};
-#define LS2PI *(double *)LS2P
-#define MAXLGM 2.556348e305
-static const unsigned short LPI[4] = {
-0xa1bd,0x48e7,0x50d0,0x3ff2,
-};
-#define LOGPI *(double *)LPI
-#endif
-
-#ifdef MIEEE
-static const unsigned short A[] = {
-0x3f4a,0x9850,0x2733,0x6661,
-0xbf43,0x7fbd,0xb580,0xe943,
-0x3f4a,0x019f,0x20dc,0x5ebb,
-0xbf66,0xc16c,0x16b0,0xa5a1,
-0x3fb5,0x5555,0x5555,0x554b
-};
-static const unsigned short B[] = {
-0xc095,0x8901,0x8ff3,0x6761,
-0xc0e2,0xf234,0x355b,0xb93e,
-0xc114,0x3d73,0xf890,0x89e5,
-0xc131,0xbc82,0xf994,0xdb51,
-0xc13a,0x4589,0x0219,0xf20b,
-0xc12a,0x0c67,0x5418,0x055e
-};
-static const unsigned short C[] = {
-0xc075,0xfd0d,0x1cf3,0x12b2,
-0xc0d0,0xaa0d,0x7b89,0xd757,
-0xc10a,0xeb84,0xb974,0x4c9b,
-0xc131,0x6286,0x7195,0x0043,
-0xc143,0x5255,0x892f,0xf34c,
-0xc13e,0xce4b,0x6a11,0xe14a
-};
-/* log( sqrt( 2*pi ) ) */
-static const unsigned short LS2P[] = {
-0x3fed,0x67f1,0xc864,0xbeb5
-};
-#define LS2PI *(double *)LS2P
-#define MAXLGM 2.556348e305
-static unsigned short LPI[4] = {
-0x3ff2,0x50d0,0x48e7,0xa1bd,
-};
-#define LOGPI *(double *)LPI
-#endif
-
-
-/* Logarithm of gamma function */
-/* Reentrant version */
-
-double __lgamma_r(double x, int* sgngam)
-{
-double p, q, u, w, z;
-int i;
-
-*sgngam = 1;
-#ifdef NANS
-if( isnan(x) )
- return(x);
-#endif
-
-#ifdef INFINITIES
-if( !isfinite(x) )
- return(INFINITY);
-#endif
-
-if( x < -34.0 )
- {
- q = -x;
- w = __lgamma_r(q, sgngam); /* note this modifies sgngam! */
- p = floor(q);
- if( p == q )
- {
-lgsing:
- _SET_ERRNO(EDOM);
- mtherr( "lgam", SING );
-#ifdef INFINITIES
- return (INFINITY);
-#else
- return (MAXNUM);
-#endif
- }
- i = p;
- if( (i & 1) == 0 )
- *sgngam = -1;
- else
- *sgngam = 1;
- z = q - p;
- if( z > 0.5 )
- {
- p += 1.0;
- z = p - q;
- }
- z = q * sin( PI * z );
- if( z == 0.0 )
- goto lgsing;
-/* z = log(PI) - log( z ) - w;*/
- z = LOGPI - log( z ) - w;
- return( z );
- }
-
-if( x < 13.0 )
- {
- z = 1.0;
- p = 0.0;
- u = x;
- while( u >= 3.0 )
- {
- p -= 1.0;
- u = x + p;
- z *= u;
- }
- while( u < 2.0 )
- {
- if( u == 0.0 )
- goto lgsing;
- z /= u;
- p += 1.0;
- u = x + p;
- }
- if( z < 0.0 )
- {
- *sgngam = -1;
- z = -z;
- }
- else
- *sgngam = 1;
- if( u == 2.0 )
- return( log(z) );
- p -= 2.0;
- x = x + p;
- p = x * polevl( x, B, 5 ) / p1evl( x, C, 6);
- return( log(z) + p );
- }
-
-if( x > MAXLGM )
- {
- _SET_ERRNO(ERANGE);
- mtherr( "lgamma", OVERFLOW );
-#ifdef INFINITIES
- return( *sgngam * INFINITY );
-#else
- return( *sgngam * MAXNUM );
-#endif
- }
-
-q = ( x - 0.5 ) * log(x) - x + LS2PI;
-if( x > 1.0e8 )
- return( q );
-
-p = 1.0/(x*x);
-if( x >= 1000.0 )
- q += (( 7.9365079365079365079365e-4 * p
- - 2.7777777777777777777778e-3) *p
- + 0.0833333333333333333333) / x;
-else
- q += polevl( p, A, 4 ) / x;
-return( q );
-}
-
-/* This is the C99 version */
-
-double lgamma(double x)
-{
- int local_sgngam=0;
- return (__lgamma_r(x, &local_sgngam));
-}
diff --git a/winsup/mingw/mingwex/math/lgammaf.c b/winsup/mingw/mingwex/math/lgammaf.c
deleted file mode 100644
index 20982f999..000000000
--- a/winsup/mingw/mingwex/math/lgammaf.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/* lgamf()
- *
- * Natural logarithm of gamma function
- *
- *
- *
- * SYNOPSIS:
- *
- * float x, y, __lgammaf_r();
- * int* sgngamf;
- * y = __lgammaf_r( x, sgngamf );
- *
- * float x, y, lgammaf();
- * y = lgammaf( x);
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns the base e (2.718...) logarithm of the absolute
- * value of the gamma function of the argument. In the reentrant
- * version the sign (+1 or -1) of the gamma function is returned in
- * variable referenced by sgngamf.
- *
- * For arguments greater than 6.5, the logarithm of the gamma
- * function is approximated by the logarithmic version of
- * Stirling's formula. Arguments between 0 and +6.5 are reduced by
- * by recurrence to the interval [.75,1.25] or [1.5,2.5] of a rational
- * approximation. The cosecant reflection formula is employed for
- * arguments less than zero.
- *
- * Arguments greater than MAXLGM = 2.035093e36 return MAXNUM and an
- * error message.
- *
- *
- *
- * ACCURACY:
- *
- *
- *
- * arithmetic domain # trials peak rms
- * IEEE -100,+100 500,000 7.4e-7 6.8e-8
- * The error criterion was relative when the function magnitude
- * was greater than one but absolute when it was less than one.
- * The routine has low relative error for positive arguments.
- *
- * The following test used the relative error criterion.
- * IEEE -2, +3 100000 4.0e-7 5.6e-8
- *
- */
-
-
-/*
- Cephes Math Library Release 2.7: July, 1998
- Copyright 1984, 1987, 1989, 1992, 1998 by Stephen L. Moshier
-*/
-
-/*
- 26-11-2002 Modified for mingw.
- Danny Smith <dannysmith@users.sourceforge.net>
-*/
-
-
-/* log gamma(x+2), -.5 < x < .5 */
-static const float B[] = {
- 6.055172732649237E-004,
--1.311620815545743E-003,
- 2.863437556468661E-003,
--7.366775108654962E-003,
- 2.058355474821512E-002,
--6.735323259371034E-002,
- 3.224669577325661E-001,
- 4.227843421859038E-001
-};
-
-/* log gamma(x+1), -.25 < x < .25 */
-static const float C[] = {
- 1.369488127325832E-001,
--1.590086327657347E-001,
- 1.692415923504637E-001,
--2.067882815621965E-001,
- 2.705806208275915E-001,
--4.006931650563372E-001,
- 8.224670749082976E-001,
--5.772156501719101E-001
-};
-
-/* log( sqrt( 2*pi ) ) */
-static const float LS2PI = 0.91893853320467274178;
-#define MAXLGM 2.035093e36
-static const float PIINV = 0.318309886183790671538;
-
-#ifndef __MINGW32__
-#include "mconf.h"
-float floorf(float);
-float polevlf( float, float *, int );
-float p1evlf( float, float *, int );
-#else
-#include "cephes_mconf.h"
-#endif
-
-/* Reentrant version */
-/* Logarithm of gamma function */
-
-float __lgammaf_r( float x, int* sgngamf )
-{
-float p, q, w, z;
-float nx, tx;
-int i, direction;
-
-*sgngamf = 1;
-#ifdef NANS
-if( isnan(x) )
- return(x);
-#endif
-
-#ifdef INFINITIES
-if( !isfinite(x) )
- return(x);
-#endif
-
-
-if( x < 0.0 )
- {
- q = -x;
- w = __lgammaf_r(q, sgngamf); /* note this modifies sgngam! */
- p = floorf(q);
- if( p == q )
- {
-lgsing:
- _SET_ERRNO(EDOM);
- mtherr( "lgamf", SING );
-#ifdef INFINITIES
- return (INFINITYF);
-#else
- return( *sgngamf * MAXNUMF );
-#endif
- }
- i = p;
- if( (i & 1) == 0 )
- *sgngamf = -1;
- else
- *sgngamf = 1;
- z = q - p;
- if( z > 0.5 )
- {
- p += 1.0;
- z = p - q;
- }
- z = q * sinf( PIF * z );
- if( z == 0.0 )
- goto lgsing;
- z = -logf( PIINV*z ) - w;
- return( z );
- }
-
-if( x < 6.5 )
- {
- direction = 0;
- z = 1.0;
- tx = x;
- nx = 0.0;
- if( x >= 1.5 )
- {
- while( tx > 2.5 )
- {
- nx -= 1.0;
- tx = x + nx;
- z *=tx;
- }
- x += nx - 2.0;
-iv1r5:
- p = x * polevlf( x, B, 7 );
- goto cont;
- }
- if( x >= 1.25 )
- {
- z *= x;
- x -= 1.0; /* x + 1 - 2 */
- direction = 1;
- goto iv1r5;
- }
- if( x >= 0.75 )
- {
- x -= 1.0;
- p = x * polevlf( x, C, 7 );
- q = 0.0;
- goto contz;
- }
- while( tx < 1.5 )
- {
- if( tx == 0.0 )
- goto lgsing;
- z *=tx;
- nx += 1.0;
- tx = x + nx;
- }
- direction = 1;
- x += nx - 2.0;
- p = x * polevlf( x, B, 7 );
-
-cont:
- if( z < 0.0 )
- {
- *sgngamf = -1;
- z = -z;
- }
- else
- {
- *sgngamf = 1;
- }
- q = logf(z);
- if( direction )
- q = -q;
-contz:
- return( p + q );
- }
-
-if( x > MAXLGM )
- {
- _SET_ERRNO(ERANGE);
- mtherr( "lgamf", OVERFLOW );
-#ifdef INFINITIES
- return( *sgngamf * INFINITYF );
-#else
- return( *sgngamf * MAXNUMF );
-#endif
-
- }
-
-/* Note, though an asymptotic formula could be used for x >= 3,
- * there is cancellation error in the following if x < 6.5. */
-q = LS2PI - x;
-q += ( x - 0.5 ) * logf(x);
-
-if( x <= 1.0e4 )
- {
- z = 1.0/x;
- p = z * z;
- q += (( 6.789774945028216E-004 * p
- - 2.769887652139868E-003 ) * p
- + 8.333316229807355E-002 ) * z;
- }
-return( q );
-}
-
-/* This is the C99 version */
-
-float lgammaf(float x)
-{
- int local_sgngamf=0;
- return (__lgammaf_r(x, &local_sgngamf));
-}
diff --git a/winsup/mingw/mingwex/math/lgammal.c b/winsup/mingw/mingwex/math/lgammal.c
deleted file mode 100644
index d2b306afd..000000000
--- a/winsup/mingw/mingwex/math/lgammal.c
+++ /dev/null
@@ -1,416 +0,0 @@
-/* lgaml()
- *
- * Natural logarithm of gamma function
- *
- *
- *
- * SYNOPSIS:
- *
- * long double x, y, __lgammal_r();
- * int* sgngaml;
- * y = __lgammal_r( x, sgngaml );
- *
- * long double x, y, lgammal();
- * y = lgammal( x);
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns the base e (2.718...) logarithm of the absolute
- * value of the gamma function of the argument. In the reentrant
- * version, the sign (+1 or -1) of the gamma function is returned
- * in the variable referenced by sgngaml.
- *
- * For arguments greater than 33, the logarithm of the gamma
- * function is approximated by the logarithmic version of
- * Stirling's formula using a polynomial approximation of
- * degree 4. Arguments between -33 and +33 are reduced by
- * recurrence to the interval [2,3] of a rational approximation.
- * The cosecant reflection formula is employed for arguments
- * less than -33.
- *
- * Arguments greater than MAXLGML (10^4928) return MAXNUML.
- *
- *
- *
- * ACCURACY:
- *
- *
- * arithmetic domain # trials peak rms
- * IEEE -40, 40 100000 2.2e-19 4.6e-20
- * IEEE 10^-2000,10^+2000 20000 1.6e-19 3.3e-20
- * The error criterion was relative when the function magnitude
- * was greater than one but absolute when it was less than one.
- *
- */
-
-/*
- * Copyright 1994 by Stephen L. Moshier
- */
-
-/*
- * 26-11-2002 Modified for mingw.
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
-#ifndef __MINGW32__
-#include "mconf.h"
-#ifdef ANSIPROT
-extern long double fabsl ( long double );
-extern long double lgaml ( long double );
-extern long double logl ( long double );
-extern long double expl ( long double );
-extern long double gammal ( long double );
-extern long double sinl ( long double );
-extern long double floorl ( long double );
-extern long double powl ( long double, long double );
-extern long double polevll ( long double, void *, int );
-extern long double p1evll ( long double, void *, int );
-extern int isnanl ( long double );
-extern int isfinitel ( long double );
-#else
-long double fabsl(), lgaml(), logl(), expl(), gammal(), sinl();
-long double floorl(), powl(), polevll(), p1evll(), isnanl(), isfinitel();
-#endif
-#ifdef INFINITIES
-extern long double INFINITYL;
-#endif
-#ifdef NANS
-extern long double NANL;
-#endif
-#else /* __MINGW32__ */
-#include "cephes_mconf.h"
-#endif /* __MINGW32__ */
-
-#if UNK
-static long double S[9] = {
--1.193945051381510095614E-3L,
- 7.220599478036909672331E-3L,
--9.622023360406271645744E-3L,
--4.219773360705915470089E-2L,
- 1.665386113720805206758E-1L,
--4.200263503403344054473E-2L,
--6.558780715202540684668E-1L,
- 5.772156649015328608253E-1L,
- 1.000000000000000000000E0L,
-};
-#endif
-#if IBMPC
-static const unsigned short S[] = {
-0xbaeb,0xd6d3,0x25e5,0x9c7e,0xbff5, XPD
-0xfe9a,0xceb4,0xc74e,0xec9a,0x3ff7, XPD
-0x9225,0xdfef,0xb0e9,0x9da5,0xbff8, XPD
-0x10b0,0xec17,0x87dc,0xacd7,0xbffa, XPD
-0x6b8d,0x7515,0x1905,0xaa89,0x3ffc, XPD
-0xf183,0x126b,0xf47d,0xac0a,0xbffa, XPD
-0x7bf6,0x57d1,0xa013,0xa7e7,0xbffe, XPD
-0xc7a9,0x7db0,0x67e3,0x93c4,0x3ffe, XPD
-0x0000,0x0000,0x0000,0x8000,0x3fff, XPD
-};
-#endif
-#if MIEEE
-static long S[27] = {
-0xbff50000,0x9c7e25e5,0xd6d3baeb,
-0x3ff70000,0xec9ac74e,0xceb4fe9a,
-0xbff80000,0x9da5b0e9,0xdfef9225,
-0xbffa0000,0xacd787dc,0xec1710b0,
-0x3ffc0000,0xaa891905,0x75156b8d,
-0xbffa0000,0xac0af47d,0x126bf183,
-0xbffe0000,0xa7e7a013,0x57d17bf6,
-0x3ffe0000,0x93c467e3,0x7db0c7a9,
-0x3fff0000,0x80000000,0x00000000,
-};
-#endif
-
-#if UNK
-static long double SN[9] = {
- 1.133374167243894382010E-3L,
- 7.220837261893170325704E-3L,
- 9.621911155035976733706E-3L,
--4.219773343731191721664E-2L,
--1.665386113944413519335E-1L,
--4.200263503402112910504E-2L,
- 6.558780715202536547116E-1L,
- 5.772156649015328608727E-1L,
--1.000000000000000000000E0L,
-};
-#endif
-#if IBMPC
-static const unsigned SN[] = {
-0x5dd1,0x02de,0xb9f7,0x948d,0x3ff5, XPD
-0x989b,0xdd68,0xc5f1,0xec9c,0x3ff7, XPD
-0x2ca1,0x18f0,0x386f,0x9da5,0x3ff8, XPD
-0x783f,0x41dd,0x87d1,0xacd7,0xbffa, XPD
-0x7a5b,0xd76d,0x1905,0xaa89,0xbffc, XPD
-0x7f64,0x1234,0xf47d,0xac0a,0xbffa, XPD
-0x5e26,0x57d1,0xa013,0xa7e7,0x3ffe, XPD
-0xc7aa,0x7db0,0x67e3,0x93c4,0x3ffe, XPD
-0x0000,0x0000,0x0000,0x8000,0xbfff, XPD
-};
-#endif
-#if MIEEE
-static long SN[27] = {
-0x3ff50000,0x948db9f7,0x02de5dd1,
-0x3ff70000,0xec9cc5f1,0xdd68989b,
-0x3ff80000,0x9da5386f,0x18f02ca1,
-0xbffa0000,0xacd787d1,0x41dd783f,
-0xbffc0000,0xaa891905,0xd76d7a5b,
-0xbffa0000,0xac0af47d,0x12347f64,
-0x3ffe0000,0xa7e7a013,0x57d15e26,
-0x3ffe0000,0x93c467e3,0x7db0c7aa,
-0xbfff0000,0x80000000,0x00000000,
-};
-#endif
-
-
-/* A[]: Stirling's formula expansion of log gamma
- * B[], C[]: log gamma function between 2 and 3
- */
-
-
-/* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x A(1/x^2)
- * x >= 8
- * Peak relative error 1.51e-21
- * Relative spread of error peaks 5.67e-21
- */
-#if UNK
-static long double A[7] = {
- 4.885026142432270781165E-3L,
--1.880801938119376907179E-3L,
- 8.412723297322498080632E-4L,
--5.952345851765688514613E-4L,
- 7.936507795855070755671E-4L,
--2.777777777750349603440E-3L,
- 8.333333333333331447505E-2L,
-};
-#endif
-#if IBMPC
-static const unsigned short A[] = {
-0xd984,0xcc08,0x91c2,0xa012,0x3ff7, XPD
-0x3d91,0x0304,0x3da1,0xf685,0xbff5, XPD
-0x3bdc,0xaad1,0xd492,0xdc88,0x3ff4, XPD
-0x8b20,0x9fce,0x844e,0x9c09,0xbff4, XPD
-0xf8f2,0x30e5,0x0092,0xd00d,0x3ff4, XPD
-0x4d88,0x03a8,0x60b6,0xb60b,0xbff6, XPD
-0x9fcc,0xaaaa,0xaaaa,0xaaaa,0x3ffb, XPD
-};
-#endif
-#if MIEEE
-static long A[21] = {
-0x3ff70000,0xa01291c2,0xcc08d984,
-0xbff50000,0xf6853da1,0x03043d91,
-0x3ff40000,0xdc88d492,0xaad13bdc,
-0xbff40000,0x9c09844e,0x9fce8b20,
-0x3ff40000,0xd00d0092,0x30e5f8f2,
-0xbff60000,0xb60b60b6,0x03a84d88,
-0x3ffb0000,0xaaaaaaaa,0xaaaa9fcc,
-};
-#endif
-
-/* log gamma(x+2) = x B(x)/C(x)
- * 0 <= x <= 1
- * Peak relative error 7.16e-22
- * Relative spread of error peaks 4.78e-20
- */
-#if UNK
-static long double B[7] = {
--2.163690827643812857640E3L,
--8.723871522843511459790E4L,
--1.104326814691464261197E6L,
--6.111225012005214299996E6L,
--1.625568062543700591014E7L,
--2.003937418103815175475E7L,
--8.875666783650703802159E6L,
-};
-static long double C[7] = {
-/* 1.000000000000000000000E0L,*/
--5.139481484435370143617E2L,
--3.403570840534304670537E4L,
--6.227441164066219501697E5L,
--4.814940379411882186630E6L,
--1.785433287045078156959E7L,
--3.138646407656182662088E7L,
--2.099336717757895876142E7L,
-};
-#endif
-#if IBMPC
-static const unsigned short B[] = {
-0x9557,0x4995,0x0da1,0x873b,0xc00a, XPD
-0xfe44,0x9af8,0x5b8c,0xaa63,0xc00f, XPD
-0x5aa8,0x7cf5,0x3684,0x86ce,0xc013, XPD
-0x259a,0x258c,0xf206,0xba7f,0xc015, XPD
-0xbe18,0x1ca3,0xc0a0,0xf80a,0xc016, XPD
-0x168f,0x2c42,0x6717,0x98e3,0xc017, XPD
-0x2051,0x9d55,0x92c8,0x876e,0xc016, XPD
-};
-static const unsigned short C[] = {
-/*0x0000,0x0000,0x0000,0x8000,0x3fff, XPD*/
-0xaa77,0xcf2f,0xae76,0x807c,0xc008, XPD
-0xb280,0x0d74,0xb55a,0x84f3,0xc00e, XPD
-0xa505,0xcd30,0x81dc,0x9809,0xc012, XPD
-0x3369,0x4246,0xb8c2,0x92f0,0xc015, XPD
-0x63cf,0x6aee,0xbe6f,0x8837,0xc017, XPD
-0x26bb,0xccc7,0xb009,0xef75,0xc017, XPD
-0x462b,0xbae8,0xab96,0xa02a,0xc017, XPD
-};
-#endif
-#if MIEEE
-static long B[21] = {
-0xc00a0000,0x873b0da1,0x49959557,
-0xc00f0000,0xaa635b8c,0x9af8fe44,
-0xc0130000,0x86ce3684,0x7cf55aa8,
-0xc0150000,0xba7ff206,0x258c259a,
-0xc0160000,0xf80ac0a0,0x1ca3be18,
-0xc0170000,0x98e36717,0x2c42168f,
-0xc0160000,0x876e92c8,0x9d552051,
-};
-static long C[21] = {
-/*0x3fff0000,0x80000000,0x00000000,*/
-0xc0080000,0x807cae76,0xcf2faa77,
-0xc00e0000,0x84f3b55a,0x0d74b280,
-0xc0120000,0x980981dc,0xcd30a505,
-0xc0150000,0x92f0b8c2,0x42463369,
-0xc0170000,0x8837be6f,0x6aee63cf,
-0xc0170000,0xef75b009,0xccc726bb,
-0xc0170000,0xa02aab96,0xbae8462b,
-};
-#endif
-
-/* log( sqrt( 2*pi ) ) */
-static const long double LS2PI = 0.91893853320467274178L;
-#define MAXLGM 1.04848146839019521116e+4928L
-
-
-/* Logarithm of gamma function */
-/* Reentrant version */
-
-long double __lgammal_r(long double x, int* sgngaml)
-{
-long double p, q, w, z, f, nx;
-int i;
-
-*sgngaml = 1;
-#ifdef NANS
-if( isnanl(x) )
- return(NANL);
-#endif
-#ifdef INFINITIES
-if( !isfinitel(x) )
- return(INFINITYL);
-#endif
-if( x < -34.0L )
- {
- q = -x;
- w = __lgammal_r(q, sgngaml); /* note this modifies sgngam! */
- p = floorl(q);
- if( p == q )
- {
-lgsing:
- _SET_ERRNO(EDOM);
- mtherr( "lgammal", SING );
-#ifdef INFINITIES
- return (INFINITYL);
-#else
- return (MAXNUML);
-#endif
- }
- i = p;
- if( (i & 1) == 0 )
- *sgngaml = -1;
- else
- *sgngaml = 1;
- z = q - p;
- if( z > 0.5L )
- {
- p += 1.0L;
- z = p - q;
- }
- z = q * sinl( PIL * z );
- if( z == 0.0L )
- goto lgsing;
-/* z = LOGPI - logl( z ) - w; */
- z = logl( PIL/z ) - w;
- return( z );
- }
-
-if( x < 13.0L )
- {
- z = 1.0L;
- nx = floorl( x + 0.5L );
- f = x - nx;
- while( x >= 3.0L )
- {
- nx -= 1.0L;
- x = nx + f;
- z *= x;
- }
- while( x < 2.0L )
- {
- if( fabsl(x) <= 0.03125 )
- goto lsmall;
- z /= nx + f;
- nx += 1.0L;
- x = nx + f;
- }
- if( z < 0.0L )
- {
- *sgngaml = -1;
- z = -z;
- }
- else
- *sgngaml = 1;
- if( x == 2.0L )
- return( logl(z) );
- x = (nx - 2.0L) + f;
- p = x * polevll( x, B, 6 ) / p1evll( x, C, 7);
- return( logl(z) + p );
- }
-
-if( x > MAXLGM )
- {
- _SET_ERRNO(ERANGE);
- mtherr( "lgammal", OVERFLOW );
-#ifdef INFINITIES
- return( *sgngaml * INFINITYL );
-#else
- return( *sgngaml * MAXNUML );
-#endif
- }
-
-q = ( x - 0.5L ) * logl(x) - x + LS2PI;
-if( x > 1.0e10L )
- return(q);
-p = 1.0L/(x*x);
-q += polevll( p, A, 6 ) / x;
-return( q );
-
-
-lsmall:
-if( x == 0.0L )
- goto lgsing;
-if( x < 0.0L )
- {
- x = -x;
- q = z / (x * polevll( x, SN, 8 ));
- }
-else
- q = z / (x * polevll( x, S, 8 ));
-if( q < 0.0L )
- {
- *sgngaml = -1;
- q = -q;
- }
-else
- *sgngaml = 1;
-q = logl( q );
-return(q);
-}
-
-/* This is the C99 version */
-
-long double lgammal(long double x)
-{
- int local_sgngaml=0;
- return (__lgammal_r(x, &local_sgngaml));
-}
diff --git a/winsup/mingw/mingwex/math/llrint.c b/winsup/mingw/mingwex/math/llrint.c
deleted file mode 100644
index b6d9f3273..000000000
--- a/winsup/mingw/mingwex/math/llrint.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <math.h>
-
-long long llrint (double x)
-{
- long long retval;
- __asm__ __volatile__ \
- ("fistpll %0" : "=m" (retval) : "t" (x) : "st"); \
- return retval;
-}
-
diff --git a/winsup/mingw/mingwex/math/llrintf.c b/winsup/mingw/mingwex/math/llrintf.c
deleted file mode 100644
index 7fa67dbdf..000000000
--- a/winsup/mingw/mingwex/math/llrintf.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <math.h>
-
-long long llrintf (float x)
-{
- long long retval;
- __asm__ __volatile__ \
- ("fistpll %0" : "=m" (retval) : "t" (x) : "st"); \
- return retval;
-}
diff --git a/winsup/mingw/mingwex/math/llrintl.c b/winsup/mingw/mingwex/math/llrintl.c
deleted file mode 100644
index 948d96265..000000000
--- a/winsup/mingw/mingwex/math/llrintl.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <math.h>
-
-long long llrintl (long double x)
-{
- long long retval;
- __asm__ __volatile__ \
- ("fistpll %0" : "=m" (retval) : "t" (x) : "st"); \
- return retval;
-}
-
diff --git a/winsup/mingw/mingwex/math/llround.c b/winsup/mingw/mingwex/math/llround.c
deleted file mode 100644
index 45b754c75..000000000
--- a/winsup/mingw/mingwex/math/llround.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <math.h>
-#include <limits.h>
-#include <errno.h>
-
-long long
-llround (double x)
-{
- /* Add +/- 0.5, then round towards zero. */
- double tmp = trunc (x + (x >= 0.0 ? 0.5 : -0.5));
- if (!isfinite (tmp)
- || tmp > (double)LONG_LONG_MAX
- || tmp < (double)LONG_LONG_MIN)
- {
- errno = ERANGE;
- /* Undefined behaviour, so we could return anything. */
- /* return tmp > 0.0 ? LONG_LONG_MAX : LONG_LONG_MIN; */
- }
- return (long long)tmp;
-}
diff --git a/winsup/mingw/mingwex/math/llroundf.c b/winsup/mingw/mingwex/math/llroundf.c
deleted file mode 100644
index 6a6e9b51e..000000000
--- a/winsup/mingw/mingwex/math/llroundf.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <math.h>
-#include <limits.h>
-#include <errno.h>
-
-long long
-llroundf (float x)
-{
- /* Add +/- 0.5, then round towards zero. */
- float tmp = truncf (x + (x >= 0.0F ? 0.5F : -0.5F));
- if (!isfinite (tmp)
- || tmp > (float)LONG_LONG_MAX
- || tmp < (float)LONG_LONG_MIN)
- {
- errno = ERANGE;
- /* Undefined behaviour, so we could return anything. */
- /* return tmp > 0.0F ? LONG_LONG_MAX : LONG_LONG_MIN; */
- }
- return (long long)tmp;
-}
diff --git a/winsup/mingw/mingwex/math/llroundl.c b/winsup/mingw/mingwex/math/llroundl.c
deleted file mode 100644
index 9d2217411..000000000
--- a/winsup/mingw/mingwex/math/llroundl.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <math.h>
-#include <limits.h>
-#include <errno.h>
-
-long long
-llroundl (long double x)
-{
- /* Add +/- 0.5, then round towards zero. */
- long double tmp = truncl (x + (x >= 0.0L ? 0.5L : -0.5L));
- if (!isfinite (tmp)
- || tmp > (long double)LONG_LONG_MAX
- || tmp < (long double)LONG_LONG_MIN)
- {
- errno = ERANGE;
- /* Undefined behaviour, so we could return anything. */
- /* return tmp > 0.0L ? LONG_LONG_MAX : LONG_LONG_MIN; */
- }
- return (long long)tmp;
-}
diff --git a/winsup/mingw/mingwex/math/log10f.S b/winsup/mingw/mingwex/math/log10f.S
deleted file mode 100644
index 90fc9af92..000000000
--- a/winsup/mingw/mingwex/math/log10f.S
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
- */
-
- .file "log10f.S"
- .text
- .align 4
-one: .double 1.0
- /* It is not important that this constant is precise. It is only
- a value which is known to be on the safe side for using the
- fyl2xp1 instruction. */
-limit: .double 0.29
-
- .text
- .align 4
-.globl _log10f
- .def _log10f; .scl 2; .type 32; .endef
-_log10f:
- fldlg2 // log10(2)
- flds 4(%esp) // x : log10(2)
- fxam
- fnstsw
- fld %st // x : x : log10(2)
- sahf
- jc 3f // in case x is NaN or ±Inf
-4: fsubl one // x-1 : x : log10(2)
- fld %st // x-1 : x-1 : x : log10(2)
- fabs // |x-1| : x-1 : x : log10(2)
- fcompl limit // x-1 : x : log10(2)
- fnstsw // x-1 : x : log10(2)
- andb $0x45, %ah
- jz 2f
- fstp %st(1) // x-1 : log10(2)
- fyl2xp1 // log10(x)
- ret
-
-2: fstp %st(0) // x : log10(2)
- fyl2x // log10(x)
- ret
-
-3: jp 4b // in case x is ±Inf
- fstp %st(1)
- fstp %st(1)
- ret
diff --git a/winsup/mingw/mingwex/math/log10l.S b/winsup/mingw/mingwex/math/log10l.S
deleted file mode 100644
index 8c046a09d..000000000
--- a/winsup/mingw/mingwex/math/log10l.S
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "log10l.S"
- .text
- .align 4
-one: .double 1.0
- /* It is not important that this constant is precise. It is only
- a value which is known to be on the safe side for using the
- fyl2xp1 instruction. */
-limit: .double 0.29
-
- .text
- .align 4
-.globl _log10l
- .def _log10l; .scl 2; .type 32; .endef
-_log10l:
- fldlg2 // log10(2)
- fldt 4(%esp) // x : log10(2)
- fxam
- fnstsw
- fld %st // x : x : log10(2)
- sahf
- jc 3f // in case x is NaN or ±Inf
-4: fsubl one // x-1 : x : log10(2)
- fld %st // x-1 : x-1 : x : log10(2)
- fabs // |x-1| : x-1 : x : log10(2)
- fcompl limit // x-1 : x : log10(2)
- fnstsw // x-1 : x : log10(2)
- andb $0x45, %ah
- jz 2f
- fstp %st(1) // x-1 : log10(2)
- fyl2xp1 // log10(x)
- ret
-
-2: fstp %st(0) // x : log10(2)
- fyl2x // log10(x)
- ret
-
-3: jp 4b // in case x is ±Inf
- fstp %st(1)
- fstp %st(1)
- ret
diff --git a/winsup/mingw/mingwex/math/log1p.S b/winsup/mingw/mingwex/math/log1p.S
deleted file mode 100644
index a38816cb3..000000000
--- a/winsup/mingw/mingwex/math/log1p.S
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "log1p.S"
- .text
- .align 4
- /* The fyl2xp1 can only be used for values in
- -1 + sqrt(2) / 2 <= x <= 1 - sqrt(2) / 2
- 0.29 is a safe value.
- */
-limit: .double 0.29
-one: .double 1.0
-/*
- * Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29,
- * otherwise fyl2x with the needed extra computation.
- */
-.globl _log1p;
- .def _log1p; .scl 2; .type 32; .endef
-_log1p:
- fldln2
- fldl 4(%esp)
- fxam
- fnstsw
- fld %st
- sahf
- jc 3f // in case x is NaN or ±Inf
-
-4: fabs
- fcompl limit
- fnstsw
- sahf
- jc 2f
- faddl one
- fyl2x
- ret
-
-2: fyl2xp1
- ret
-
-3: jp 4b // in case x is ±Inf
- fstp %st(1)
- fstp %st(1)
- ret
diff --git a/winsup/mingw/mingwex/math/log1pf.S b/winsup/mingw/mingwex/math/log1pf.S
deleted file mode 100644
index 1d9949f2a..000000000
--- a/winsup/mingw/mingwex/math/log1pf.S
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "log1pf.S"
- .text
- .align 4
- /* The fyl2xp1 can only be used for values in
- -1 + sqrt(2) / 2 <= x <= 1 - sqrt(2) / 2
- 0.29 is a safe value.
- */
-limit: .float 0.29
-one: .float 1.0
-/*
- * Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29,
- * otherwise fyl2x with the needed extra computation.
- */
-.globl _log1pf;
- .def _log1pf; .scl 2; .type 32; .endef
-_log1pf:
- fldln2
- flds 4(%esp)
- fxam
- fnstsw
- fld %st
- sahf
- jc 3f // in case x is NaN or ±Inf
-
-4: fabs
- fcomps limit
- fnstsw
- sahf
- jc 2f
- fadds one
- fyl2x
- ret
-
-2: fyl2xp1
- ret
-
-3: jp 4b // in case x is ±Inf
- fstp %st(1)
- fstp %st(1)
- ret
diff --git a/winsup/mingw/mingwex/math/log1pl.S b/winsup/mingw/mingwex/math/log1pl.S
deleted file mode 100644
index 5ce4fbaaa..000000000
--- a/winsup/mingw/mingwex/math/log1pl.S
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
-* Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "log1pl.S"
- .text
- .align 4
- /* The fyl2xp1 can only be used for values in
- -1 + sqrt(2) / 2 <= x <= 1 - sqrt(2) / 2
- 0.29 is a safe value.
- */
-limit: .tfloat 0.29
- /* Please note: we use a double value here. Since 1.0 has
- an exact representation this does not effect the accuracy
- but it helps to optimize the code. */
-one: .double 1.0
-
-/*
- * Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29,
- * otherwise fyl2x with the needed extra computation.
- */
-.globl _log1pl;
- .def _log1pl; .scl 2; .type 32; .endef
-_log1pl:
- fldln2
- fldt 4(%esp)
- fxam
- fnstsw
- fld %st
- sahf
- jc 3f // in case x is NaN or ±Inf
-4:
- fabs
- fldt limit
- fcompp
- fnstsw
- sahf
- jnc 2f
- faddl one
- fyl2x
- ret
-
-2: fyl2xp1
- ret
-
-3: jp 4b // in case x is ±Inf
- fstp %st(1)
- fstp %st(1)
- ret
diff --git a/winsup/mingw/mingwex/math/log2.S b/winsup/mingw/mingwex/math/log2.S
deleted file mode 100644
index 08f008310..000000000
--- a/winsup/mingw/mingwex/math/log2.S
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Adapted for use as log2 by Ulrich Drepper <drepper@cygnus.com>.
- * Public domain.
- *
- * Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "log2.S"
- .text
- .align 4
-one: .double 1.0
- /* It is not important that this constant is precise. It is only
- a value which is known to be on the safe side for using the
- fyl2xp1 instruction. */
-limit: .double 0.29
-
- .text
- .align 4
-.globl _log2
- .def _log2; .scl 2; .type 32; .endef
-_log2:
- fldl one
- fldl 4(%esp) // x : 1
- fxam
- fnstsw
- fld %st // x : x : 1
- sahf
- jc 3f // in case x is NaN or ±Inf
-4: fsub %st(2), %st // x-1 : x : 1
- fld %st // x-1 : x-1 : x : 1
- fabs // |x-1| : x-1 : x : 1
- fcompl limit // x-1 : x : 1
- fnstsw // x-1 : x : 1
- andb $0x45, %ah
- jz 2f
- fstp %st(1) // x-1 : 1
- fyl2xp1 // log(x)
- ret
-
-2: fstp %st(0) // x : 1
- fyl2x // log(x)
- ret
-
-3: jp 4b // in case x is ±Inf
- fstp %st(1)
- fstp %st(1)
- ret
diff --git a/winsup/mingw/mingwex/math/log2f.S b/winsup/mingw/mingwex/math/log2f.S
deleted file mode 100644
index 211abba3d..000000000
--- a/winsup/mingw/mingwex/math/log2f.S
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Adapted for use as log2 by Ulrich Drepper <drepper@cygnus.com>.
- * Public domain.
- *
- * Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "log2f.S"
- .text
- .align 4
-one: .double 1.0
- /* It is not important that this constant is precise. It is only
- a value which is known to be on the safe side for using the
- fyl2xp1 instruction. */
-limit: .double 0.29
-
- .text
- .align 4
-.globl _log2f
- .def _log2f; .scl 2; .type 32; .endef
-_log2f:
- fldl one
- flds 4(%esp) // x : 1
- fxam
- fnstsw
- fld %st // x : x : 1
- sahf
- jc 3f // in case x is NaN or ±Inf
-4: fsub %st(2), %st // x-1 : x : 1
- fld %st // x-1 : x-1 : x : 1
- fabs // |x-1| : x-1 : x : 1
- fcompl limit // x-1 : x : 1
- fnstsw // x-1 : x : 1
- andb $0x45, %ah
- jz 2f
- fstp %st(1) // x-1 : 1
- fyl2xp1 // log(x)
- ret
-
-2: fstp %st(0) // x : 1
- fyl2x // log(x)
- ret
-
-3: jp 4b // in case x is ±Inf
- fstp %st(1)
- fstp %st(1)
- ret
diff --git a/winsup/mingw/mingwex/math/log2l.S b/winsup/mingw/mingwex/math/log2l.S
deleted file mode 100644
index 52503fc52..000000000
--- a/winsup/mingw/mingwex/math/log2l.S
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Adapted for use as log2 by Ulrich Drepper <drepper@cygnus.com>.
- * Public domain.
- *
- * Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
- */
-
- .file "log2l.S"
- .text
- .align 4
-one: .double 1.0
- /* It is not important that this constant is precise. It is only
- a value which is known to be on the safe side for using the
- fyl2xp1 instruction. */
-limit: .double 0.29
-
- .text
- .align 4
-.globl _log2l
- .def _log2l; .scl 2; .type 32; .endef
-_log2l:
- fldl one
- fldt 4(%esp) // x : 1
- fxam
- fnstsw
- fld %st // x : x : 1
- sahf
- jc 3f // in case x is NaN or ±Inf
-4: fsub %st(2), %st // x-1 : x : 1
- fld %st // x-1 : x-1 : x : 1
- fabs // |x-1| : x-1 : x : 1
- fcompl limit // x-1 : x : 1
- fnstsw // x-1 : x : 1
- andb $0x45, %ah
- jz 2f
- fstp %st(1) // x-1 : 1
- fyl2xp1 // log(x)
- ret
-
-2: fstp %st(0) // x : 1
- fyl2x // log(x)
- ret
-
-3: jp 4b // in case x is ±Inf
- fstp %st(1)
- fstp %st(1)
- ret
diff --git a/winsup/mingw/mingwex/math/logb.c b/winsup/mingw/mingwex/math/logb.c
deleted file mode 100644
index cdff13647..000000000
--- a/winsup/mingw/mingwex/math/logb.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
-#include <math.h>
-
-double
-logb (double x)
-{
- double res;
- asm ("fxtract\n\t"
- "fstp %%st" : "=t" (res) : "0" (x));
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/logbf.c b/winsup/mingw/mingwex/math/logbf.c
deleted file mode 100644
index b5f57d2e1..000000000
--- a/winsup/mingw/mingwex/math/logbf.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
-#include <math.h>
-
-float
-logbf (float x)
-{
- float res;
- asm ("fxtract\n\t"
- "fstp %%st" : "=t" (res) : "0" (x));
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/logbl.c b/winsup/mingw/mingwex/math/logbl.c
deleted file mode 100644
index f1448eb99..000000000
--- a/winsup/mingw/mingwex/math/logbl.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
-#include <math.h>
-
-long double
-logbl (long double x)
-{
- long double res;
-
- asm ("fxtract\n\t"
- "fstp %%st" : "=t" (res) : "0" (x));
- return res;
-}
diff --git a/winsup/mingw/mingwex/math/logf.S b/winsup/mingw/mingwex/math/logf.S
deleted file mode 100644
index 32119ecde..000000000
--- a/winsup/mingw/mingwex/math/logf.S
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Adapted for float by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
- */
-
- .file "logf.S"
- .text
- .align 4
-one: .double 1.0
- /* It is not important that this constant is precise. It is only
- a value which is known to be on the safe side for using the
- fyl2xp1 instruction. */
-limit: .double 0.29
-
- .text
- .align 4
-.globl _logf
- .def _logf; .scl 2; .type 32; .endef
-_logf:
- fldln2 // log(2)
- flds 4(%esp) // x : log(2)
- fld %st // x : x : log(2)
- fsubl one // x-1 : x : log(2)
- fld %st // x-1 : x-1 : x : log(2)
- fabs // |x-1| : x-1 : x : log(2)
- fcompl limit // x-1 : x : log(2)
- fnstsw // x-1 : x : log(2)
- andb $0x45, %ah
- jz 2f
- fstp %st(1) // x-1 : log(2)
- fyl2xp1 // log(x)
- ret
-
-2: fstp %st(0) // x : log(2)
- fyl2x // log(x)
- ret
diff --git a/winsup/mingw/mingwex/math/logl.S b/winsup/mingw/mingwex/math/logl.S
deleted file mode 100644
index 8dc144915..000000000
--- a/winsup/mingw/mingwex/math/logl.S
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
- .file "logl.S"
- .text
- .align 4
-one: .double 1.0
- /* It is not important that this constant is precise. It is only
- a value which is known to be on the safe side for using the
- fyl2xp1 instruction. */
-limit: .double 0.29
-
- .text
- .align 4
-.globl _logl
- .def _logl; .scl 2; .type 32; .endef
-_logl:
- fldln2 // log(2)
- fldt 4(%esp) // x : log(2)
- fld %st // x : x : log(2)
- fsubl one // x-1 : x : log(2)
- fld %st // x-1 : x-1 : x : log(2)
- fabs // |x-1| : x-1 : x : log(2)
- fcompl limit // x-1 : x : log(2)
- fnstsw // x-1 : x : log(2)
- andb $0x45, %ah
- jz 2f
- fstp %st(1) // x-1 : log(2)
- fyl2xp1 // log(x)
- ret
-
-2: fstp %st(0) // x : log(2)
- fyl2x // log(x)
- ret
diff --git a/winsup/mingw/mingwex/math/lrint.c b/winsup/mingw/mingwex/math/lrint.c
deleted file mode 100644
index 7dfa233a8..000000000
--- a/winsup/mingw/mingwex/math/lrint.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <math.h>
-
-long lrint (double x)
-{
- long retval;
- __asm__ __volatile__ \
- ("fistpl %0" : "=m" (retval) : "t" (x) : "st"); \
- return retval;
-}
diff --git a/winsup/mingw/mingwex/math/lrintf.c b/winsup/mingw/mingwex/math/lrintf.c
deleted file mode 100644
index 24b7a7d07..000000000
--- a/winsup/mingw/mingwex/math/lrintf.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <math.h>
-
-long lrintf (float x)
-{
- long retval;
- __asm__ __volatile__ \
- ("fistpl %0" : "=m" (retval) : "t" (x) : "st"); \
- return retval;
-}
diff --git a/winsup/mingw/mingwex/math/lrintl.c b/winsup/mingw/mingwex/math/lrintl.c
deleted file mode 100644
index f55599332..000000000
--- a/winsup/mingw/mingwex/math/lrintl.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <math.h>
-
-long lrintl (long double x)
-{
- long retval;
- __asm__ __volatile__ \
- ("fistpl %0" : "=m" (retval) : "t" (x) : "st"); \
- return retval;
-}
-
diff --git a/winsup/mingw/mingwex/math/lround.c b/winsup/mingw/mingwex/math/lround.c
deleted file mode 100644
index 7ee50df90..000000000
--- a/winsup/mingw/mingwex/math/lround.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <math.h>
-#include <limits.h>
-#include <errno.h>
-
-long
-lround (double x)
-{
- /* Add +/- 0.5 then then round towards zero. */
- double tmp = trunc (x + (x >= 0.0 ? 0.5 : -0.5));
- if (!isfinite (tmp)
- || tmp > (double)LONG_MAX
- || tmp < (double)LONG_MIN)
- {
- errno = ERANGE;
- /* Undefined behaviour, so we could return anything. */
- /* return tmp > 0.0 ? LONG_MAX : LONG_MIN; */
- }
- return (long)tmp;
-}
diff --git a/winsup/mingw/mingwex/math/lroundf.c b/winsup/mingw/mingwex/math/lroundf.c
deleted file mode 100644
index 82df69842..000000000
--- a/winsup/mingw/mingwex/math/lroundf.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <math.h>
-#include <limits.h>
-#include <errno.h>
-
-long
-lroundf (float x)
-{
- /* Add +/- 0.5, then round towards zero. */
- float tmp = truncf (x + (x >= 0.0F ? 0.5F : -0.5F));
- if (!isfinite (tmp)
- || tmp > (float)LONG_MAX
- || tmp < (float)LONG_MIN)
- {
- errno = ERANGE;
- /* Undefined behaviour, so we could return anything. */
- /* return tmp > 0.0F ? LONG_MAX : LONG_MIN; */
- }
- return (long)tmp;
-}
diff --git a/winsup/mingw/mingwex/math/lroundl.c b/winsup/mingw/mingwex/math/lroundl.c
deleted file mode 100644
index 7a6348124..000000000
--- a/winsup/mingw/mingwex/math/lroundl.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <math.h>
-#include <limits.h>
-#include <errno.h>
-
-long
-lroundl (long double x)
-{
- /* Add +/- 0.5, then round towards zero. */
- long double tmp = truncl (x + (x >= 0.0L ? 0.5L : -0.5L));
- if (!isfinite (tmp)
- || tmp > (long double)LONG_MAX
- || tmp < (long double)LONG_MIN)
- {
- errno = ERANGE;
- /* Undefined behaviour, so we could return anything. */
- /* return tmp > 0.0L ? LONG_MAX : LONG_MIN; */
- }
- return (long)tmp;
-}
diff --git a/winsup/mingw/mingwex/math/modff.c b/winsup/mingw/mingwex/math/modff.c
deleted file mode 100644
index 072faace0..000000000
--- a/winsup/mingw/mingwex/math/modff.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <fenv.h>
-#include <math.h>
-#include <errno.h>
-#define FE_ROUNDING_MASK \
- (FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO)
-
-float
-modff (float value, float* iptr)
-{
- float int_part;
- unsigned short saved_cw;
- unsigned short tmp_cw;
- /* truncate */
- asm ("fnstcw %0;" : "=m" (saved_cw)); /* save control word */
- tmp_cw = (saved_cw & ~FE_ROUNDING_MASK) | FE_TOWARDZERO;
- asm ("fldcw %0;" : : "m" (tmp_cw));
- asm ("frndint;" : "=t" (int_part) : "0" (value)); /* round */
- asm ("fldcw %0;" : : "m" (saved_cw)); /* restore saved cw */
- if (iptr)
- *iptr = int_part;
- return (isinf (value) ? 0.0F : value - int_part);
-}
diff --git a/winsup/mingw/mingwex/math/modfl.c b/winsup/mingw/mingwex/math/modfl.c
deleted file mode 100644
index c7ea2cbce..000000000
--- a/winsup/mingw/mingwex/math/modfl.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <fenv.h>
-#include <math.h>
-#include <errno.h>
-#define FE_ROUNDING_MASK \
- (FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO)
-
-long double
-modfl (long double value, long double* iptr)
-{
- long double int_part;
- unsigned short saved_cw;
- unsigned short tmp_cw;
- /* truncate */
- asm ("fnstcw %0;" : "=m" (saved_cw)); /* save control word */
- tmp_cw = (saved_cw & ~FE_ROUNDING_MASK) | FE_TOWARDZERO;
- asm ("fldcw %0;" : : "m" (tmp_cw));
- asm ("frndint;" : "=t" (int_part) : "0" (value)); /* round */
- asm ("fldcw %0;" : : "m" (saved_cw)); /* restore saved cw */
- if (iptr)
- *iptr = int_part;
- return (isinf (value) ? 0.0L : value - int_part);
-}
diff --git a/winsup/mingw/mingwex/math/nearbyint.S b/winsup/mingw/mingwex/math/nearbyint.S
deleted file mode 100644
index 9730aeebf..000000000
--- a/winsup/mingw/mingwex/math/nearbyint.S
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for use as nearbyint by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "nearbyint.S"
- .text
- .align 4
-.globl _nearbyint
- .def _nearbyint; .scl 2; .type 32; .endef
-_nearbyint:
- fldl 4(%esp)
- pushl %eax
- pushl %ecx
- fnstcw (%esp)
- movl (%esp), %eax
- orl $0x20, %eax
- movl %eax, 4(%esp)
- fldcw 4(%esp)
- frndint
- fclex
- fldcw (%esp)
- popl %ecx
- popl %eax
- ret
diff --git a/winsup/mingw/mingwex/math/nearbyintf.S b/winsup/mingw/mingwex/math/nearbyintf.S
deleted file mode 100644
index 1c5734084..000000000
--- a/winsup/mingw/mingwex/math/nearbyintf.S
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Adapted for use as nearbyint by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "nearbyintf.S"
- .text
- .align 4
-.globl _nearbyintf
- .def _nearbyintf; .scl 2; .type 32; .endef
-_nearbyintf:
- flds 4(%esp)
- pushl %eax
- pushl %ecx
- fnstcw (%esp)
- movl (%esp), %eax
- orl $0x20, %eax
- movl %eax, 4(%esp)
- fldcw 4(%esp)
- frndint
- fclex
- fldcw (%esp)
- popl %ecx
- popl %eax
- ret
diff --git a/winsup/mingw/mingwex/math/nearbyintl.S b/winsup/mingw/mingwex/math/nearbyintl.S
deleted file mode 100644
index 7dbc2a8b7..000000000
--- a/winsup/mingw/mingwex/math/nearbyintl.S
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adaptedfor use as nearbyint by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "nearbyintl.S"
- .text
- .align 4
-.globl _nearbyintl
- .def _nearbyintl; .scl 2; .type 32; .endef
-_nearbyintl:
- fldt 4(%esp)
- pushl %eax
- pushl %ecx
- fnstcw (%esp)
- movl (%esp), %eax
- orl $0x20, %eax
- movl %eax, 4(%esp)
- fldcw 4(%esp)
- frndint
- fclex
- fldcw (%esp)
- popl %ecx
- popl %eax
- ret
diff --git a/winsup/mingw/mingwex/math/nextafterf.c b/winsup/mingw/mingwex/math/nextafterf.c
deleted file mode 100644
index 47309a027..000000000
--- a/winsup/mingw/mingwex/math/nextafterf.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <math.h>
-
-float
-nextafterf (float x, float y)
-{
- union
- {
- float f;
- unsigned int i;
- } u;
- if (isnan (y) || isnan (x))
- return x + y;
- if (x == y )
- /* nextafter (0.0, -O.0) should return -0.0. */
- return y;
- u.f = x;
- if (x == 0.0F)
- {
- u.i = 1;
- return y > 0.0F ? u.f : -u.f;
- }
- if (((x > 0.0F) ^ (y > x)) == 0)
- u.i++;
- else
- u.i--;
- return u.f;
-}
diff --git a/winsup/mingw/mingwex/math/nextafterl.c b/winsup/mingw/mingwex/math/nextafterl.c
deleted file mode 100755
index eaf6a3f03..000000000
--- a/winsup/mingw/mingwex/math/nextafterl.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- nextafterl.c
- Contributed by Danny Smith <dannysmith@users.sourceforge.net>
- No copyright claimed, absolutely no warranties.
-
- 2005-05-09
-*/
-
-#include <math.h>
-
-long double
-nextafterl (long double x, long double y)
-{
- union {
- long double ld;
- struct {
- unsigned long long mantissa;
- unsigned short expn;
- unsigned short pad;
- } __attribute__ ((packed)) parts;
- } u;
-
- /* The normal bit is explicit for long doubles, unlike
- float and double. */
- static const unsigned long long normal_bit = 0x8000000000000000ull;
-
- if (isnan (y) || isnan (x))
- return x + y;
-
- if (x == y )
- /* nextafter (0.0, -O.0) should return -0.0. */
- return y;
-
- u.ld = x;
- if (x == 0.0L)
- {
- u.parts.mantissa = 1ull;
- return y > 0.0L ? u.ld : -u.ld;
- }
-
- if (((x > 0.0L) ^ (y > x)) == 0)
- {
- u.parts.mantissa++;
- if ((u.parts.mantissa & ~normal_bit) == 0ull)
- u.parts.expn++;
- }
- else
- {
- if ((u.parts.mantissa & ~normal_bit) == 0ull)
- u.parts.expn--;
- u.parts.mantissa--;
- }
-
- /* If we have updated the expn of a normal number,
- or moved from denormal to normal, [re]set the normal bit. */
-
- if (u.parts.expn & 0x7fff)
- u.parts.mantissa |= normal_bit;
-
- return u.ld;
-}
-
-/* nexttowardl is the same function with a different name. */
-long double
-nexttowardl (long double, long double) __attribute__ ((alias("nextafterl")));
diff --git a/winsup/mingw/mingwex/math/nexttoward.c b/winsup/mingw/mingwex/math/nexttoward.c
deleted file mode 100755
index 6a4c820f2..000000000
--- a/winsup/mingw/mingwex/math/nexttoward.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- nexttoward.c
- Contributed by Danny Smith <dannysmith@users.sourceforge.net>
- No copyright claimed, absolutely no warranties.
-
- 2005-05-10
-*/
-
-#include <math.h>
-
-double
-nexttoward (double x, long double y)
-{
- union
- {
- double d;
- unsigned long long ll;
- } u;
-
- long double xx = x;
-
- if (isnan (y) || isnan (x))
- return x + y;
-
- if (xx == y)
- /* nextafter (0.0, -O.0) should return -0.0. */
- return y;
- u.d = x;
- if (x == 0.0)
- {
- u.ll = 1;
- return y > 0.0L ? u.d : -u.d;
- }
-
- /* Non-extended encodings are lexicographically ordered,
- with implicit "normal" bit. */
- if (((x > 0.0) ^ (y > xx)) == 0)
- u.ll++;
- else
- u.ll--;
- return u.d;
-}
diff --git a/winsup/mingw/mingwex/math/nexttowardf.c b/winsup/mingw/mingwex/math/nexttowardf.c
deleted file mode 100755
index 80ac1a357..000000000
--- a/winsup/mingw/mingwex/math/nexttowardf.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- nexttowardf.c
- Contributed by Danny Smith <dannysmith@users.sourceforge.net>
- No copyright claimed, absolutely no warranties.
-
- 2005-05-10
-*/
-
-#include <math.h>
-
-float
-nexttowardf (float x, long double y)
-{
- union
- {
- float f;
- unsigned int i;
- } u;
-
- long double xx = x;
-
- if (isnan (y) || isnan (x))
- return x + y;
- if (xx == y )
- /* nextafter (0.0, -O.0) should return -0.0. */
- return y;
- u.f = x;
- if (x == 0.0F)
- {
- u.i = 1;
- return y > 0.0L ? u.f : -u.f;
- }
- if (((x > 0.0F) ^ (y > xx)) == 0)
- u.i++;
- else
- u.i--;
- return u.f;
-}
diff --git a/winsup/mingw/mingwex/math/pow.c b/winsup/mingw/mingwex/math/pow.c
deleted file mode 100644
index 1fa548e5e..000000000
--- a/winsup/mingw/mingwex/math/pow.c
+++ /dev/null
@@ -1,781 +0,0 @@
-/* pow.c
- *
- * Power function
- *
- *
- *
- * SYNOPSIS:
- *
- * double x, y, z, pow();
- *
- * z = pow( x, y );
- *
- *
- *
- * DESCRIPTION:
- *
- * Computes x raised to the yth power. Analytically,
- *
- * x**y = exp( y log(x) ).
- *
- * Following Cody and Waite, this program uses a lookup table
- * of 2**-i/16 and pseudo extended precision arithmetic to
- * obtain an extra three bits of accuracy in both the logarithm
- * and the exponential.
- *
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE -26,26 30000 4.2e-16 7.7e-17
- * DEC -26,26 60000 4.8e-17 9.1e-18
- * 1/26 < x < 26, with log(x) uniformly distributed.
- * -26 < y < 26, y uniformly distributed.
- * IEEE 0,8700 30000 1.5e-14 2.1e-15
- * 0.99 < x < 1.01, 0 < y < 8700, uniformly distributed.
- *
- *
- * ERROR MESSAGES:
- *
- * message condition value returned
- * pow overflow x**y > MAXNUM INFINITY
- * pow underflow x**y < 1/MAXNUM 0.0
- * pow domain x<0 and y noninteger 0.0
- *
- */
-
-/*
-Cephes Math Library Release 2.8: June, 2000
-Copyright 1984, 1995, 2000 by Stephen L. Moshier
-*/
-
-/*
-Modified for mingw
-2002-09-27 Danny Smith <dannysmith@users.sourceforge.net>
-*/
-
-#ifdef __MINGW32__
-#include "cephes_mconf.h"
-#else
-#include "mconf.h"
-static char fname[] = {"pow"};
-#endif
-
-#ifndef _SET_ERRNO
-#define _SET_ERRNO(x)
-#endif
-
-#define SQRTH 0.70710678118654752440
-
-#ifdef UNK
-static double P[] = {
- 4.97778295871696322025E-1,
- 3.73336776063286838734E0,
- 7.69994162726912503298E0,
- 4.66651806774358464979E0
-};
-static double Q[] = {
-/* 1.00000000000000000000E0, */
- 9.33340916416696166113E0,
- 2.79999886606328401649E1,
- 3.35994905342304405431E1,
- 1.39995542032307539578E1
-};
-/* 2^(-i/16), IEEE precision */
-static double A[] = {
- 1.00000000000000000000E0,
- 9.57603280698573700036E-1,
- 9.17004043204671215328E-1,
- 8.78126080186649726755E-1,
- 8.40896415253714502036E-1,
- 8.05245165974627141736E-1,
- 7.71105412703970372057E-1,
- 7.38413072969749673113E-1,
- 7.07106781186547572737E-1,
- 6.77127773468446325644E-1,
- 6.48419777325504820276E-1,
- 6.20928906036742001007E-1,
- 5.94603557501360513449E-1,
- 5.69394317378345782288E-1,
- 5.45253866332628844837E-1,
- 5.22136891213706877402E-1,
- 5.00000000000000000000E-1
-};
-static double B[] = {
- 0.00000000000000000000E0,
- 1.64155361212281360176E-17,
- 4.09950501029074826006E-17,
- 3.97491740484881042808E-17,
--4.83364665672645672553E-17,
- 1.26912513974441574796E-17,
- 1.99100761573282305549E-17,
--1.52339103990623557348E-17,
- 0.00000000000000000000E0
-};
-static double R[] = {
- 1.49664108433729301083E-5,
- 1.54010762792771901396E-4,
- 1.33335476964097721140E-3,
- 9.61812908476554225149E-3,
- 5.55041086645832347466E-2,
- 2.40226506959099779976E-1,
- 6.93147180559945308821E-1
-};
-
-#define douba(k) A[k]
-#define doubb(k) B[k]
-#define MEXP 16383.0
-#ifdef DENORMAL
-#define MNEXP -17183.0
-#else
-#define MNEXP -16383.0
-#endif
-#endif
-
-#ifdef DEC
-static unsigned short P[] = {
-0037776,0156313,0175332,0163602,
-0040556,0167577,0052366,0174245,
-0040766,0062753,0175707,0055564,
-0040625,0052035,0131344,0155636,
-};
-static unsigned short Q[] = {
-/*0040200,0000000,0000000,0000000,*/
-0041025,0052644,0154404,0105155,
-0041337,0177772,0007016,0047646,
-0041406,0062740,0154273,0020020,
-0041137,0177054,0106127,0044555,
-};
-static unsigned short A[] = {
-0040200,0000000,0000000,0000000,
-0040165,0022575,0012444,0103314,
-0040152,0140306,0163735,0022071,
-0040140,0146336,0166052,0112341,
-0040127,0042374,0145326,0116553,
-0040116,0022214,0012437,0102201,
-0040105,0063452,0010525,0003333,
-0040075,0004243,0117530,0006067,
-0040065,0002363,0031771,0157145,
-0040055,0054076,0165102,0120513,
-0040045,0177326,0124661,0050471,
-0040036,0172462,0060221,0120422,
-0040030,0033760,0050615,0134251,
-0040021,0141723,0071653,0010703,
-0040013,0112701,0161752,0105727,
-0040005,0125303,0063714,0044173,
-0040000,0000000,0000000,0000000
-};
-static unsigned short B[] = {
-0000000,0000000,0000000,0000000,
-0021473,0040265,0153315,0140671,
-0121074,0062627,0042146,0176454,
-0121413,0003524,0136332,0066212,
-0121767,0046404,0166231,0012553,
-0121257,0015024,0002357,0043574,
-0021736,0106532,0043060,0056206,
-0121310,0020334,0165705,0035326,
-0000000,0000000,0000000,0000000
-};
-
-static unsigned short R[] = {
-0034173,0014076,0137624,0115771,
-0035041,0076763,0003744,0111311,
-0035656,0141766,0041127,0074351,
-0036435,0112533,0073611,0116664,
-0037143,0054106,0134040,0152223,
-0037565,0176757,0176026,0025551,
-0040061,0071027,0173721,0147572
-};
-
-/*
-static double R[] = {
-0.14928852680595608186e-4,
-0.15400290440989764601e-3,
-0.13333541313585784703e-2,
-0.96181290595172416964e-2,
-0.55504108664085595326e-1,
-0.24022650695909537056e0,
-0.69314718055994529629e0
-};
-*/
-#define douba(k) (*(double *)&A[(k)<<2])
-#define doubb(k) (*(double *)&B[(k)<<2])
-#define MEXP 2031.0
-#define MNEXP -2031.0
-#endif
-
-#ifdef IBMPC
-static const unsigned short P[] = {
-0x5cf0,0x7f5b,0xdb99,0x3fdf,
-0xdf15,0xea9e,0xddef,0x400d,
-0xeb6f,0x7f78,0xccbd,0x401e,
-0x9b74,0xb65c,0xaa83,0x4012,
-};
-static const unsigned short Q[] = {
-/*0x0000,0x0000,0x0000,0x3ff0,*/
-0x914e,0x9b20,0xaab4,0x4022,
-0xc9f5,0x41c1,0xffff,0x403b,
-0x6402,0x1b17,0xccbc,0x4040,
-0xe92e,0x918a,0xffc5,0x402b,
-};
-static const unsigned short A[] = {
-0x0000,0x0000,0x0000,0x3ff0,
-0x90da,0xa2a4,0xa4af,0x3fee,
-0xa487,0xdcfb,0x5818,0x3fed,
-0x529c,0xdd85,0x199b,0x3fec,
-0xd3ad,0x995a,0xe89f,0x3fea,
-0xf090,0x82a3,0xc491,0x3fe9,
-0xa0db,0x422a,0xace5,0x3fe8,
-0x0187,0x73eb,0xa114,0x3fe7,
-0x3bcd,0x667f,0xa09e,0x3fe6,
-0x5429,0xdd48,0xab07,0x3fe5,
-0x2a27,0xd536,0xbfda,0x3fe4,
-0x3422,0x4c12,0xdea6,0x3fe3,
-0xb715,0x0a31,0x06fe,0x3fe3,
-0x6238,0x6e75,0x387a,0x3fe2,
-0x517b,0x3c7d,0x72b8,0x3fe1,
-0x890f,0x6cf9,0xb558,0x3fe0,
-0x0000,0x0000,0x0000,0x3fe0
-};
-static const unsigned short B[] = {
-0x0000,0x0000,0x0000,0x0000,
-0x3707,0xd75b,0xed02,0x3c72,
-0xcc81,0x345d,0xa1cd,0x3c87,
-0x4b27,0x5686,0xe9f1,0x3c86,
-0x6456,0x13b2,0xdd34,0xbc8b,
-0x42e2,0xafec,0x4397,0x3c6d,
-0x82e4,0xd231,0xf46a,0x3c76,
-0x8a76,0xb9d7,0x9041,0xbc71,
-0x0000,0x0000,0x0000,0x0000
-};
-static const unsigned short R[] = {
-0x937f,0xd7f2,0x6307,0x3eef,
-0x9259,0x60fc,0x2fbe,0x3f24,
-0xef1d,0xc84a,0xd87e,0x3f55,
-0x33b7,0x6ef1,0xb2ab,0x3f83,
-0x1a92,0xd704,0x6b08,0x3fac,
-0xc56d,0xff82,0xbfbd,0x3fce,
-0x39ef,0xfefa,0x2e42,0x3fe6
-};
-
-#define douba(k) (*(double *)&A[(k)<<2])
-#define doubb(k) (*(double *)&B[(k)<<2])
-#define MEXP 16383.0
-#ifdef DENORMAL
-#define MNEXP -17183.0
-#else
-#define MNEXP -16383.0
-#endif
-#endif
-
-#ifdef MIEEE
-static unsigned short P[] = {
-0x3fdf,0xdb99,0x7f5b,0x5cf0,
-0x400d,0xddef,0xea9e,0xdf15,
-0x401e,0xccbd,0x7f78,0xeb6f,
-0x4012,0xaa83,0xb65c,0x9b74
-};
-static unsigned short Q[] = {
-0x4022,0xaab4,0x9b20,0x914e,
-0x403b,0xffff,0x41c1,0xc9f5,
-0x4040,0xccbc,0x1b17,0x6402,
-0x402b,0xffc5,0x918a,0xe92e
-};
-static unsigned short A[] = {
-0x3ff0,0x0000,0x0000,0x0000,
-0x3fee,0xa4af,0xa2a4,0x90da,
-0x3fed,0x5818,0xdcfb,0xa487,
-0x3fec,0x199b,0xdd85,0x529c,
-0x3fea,0xe89f,0x995a,0xd3ad,
-0x3fe9,0xc491,0x82a3,0xf090,
-0x3fe8,0xace5,0x422a,0xa0db,
-0x3fe7,0xa114,0x73eb,0x0187,
-0x3fe6,0xa09e,0x667f,0x3bcd,
-0x3fe5,0xab07,0xdd48,0x5429,
-0x3fe4,0xbfda,0xd536,0x2a27,
-0x3fe3,0xdea6,0x4c12,0x3422,
-0x3fe3,0x06fe,0x0a31,0xb715,
-0x3fe2,0x387a,0x6e75,0x6238,
-0x3fe1,0x72b8,0x3c7d,0x517b,
-0x3fe0,0xb558,0x6cf9,0x890f,
-0x3fe0,0x0000,0x0000,0x0000
-};
-static unsigned short B[] = {
-0x0000,0x0000,0x0000,0x0000,
-0x3c72,0xed02,0xd75b,0x3707,
-0x3c87,0xa1cd,0x345d,0xcc81,
-0x3c86,0xe9f1,0x5686,0x4b27,
-0xbc8b,0xdd34,0x13b2,0x6456,
-0x3c6d,0x4397,0xafec,0x42e2,
-0x3c76,0xf46a,0xd231,0x82e4,
-0xbc71,0x9041,0xb9d7,0x8a76,
-0x0000,0x0000,0x0000,0x0000
-};
-static unsigned short R[] = {
-0x3eef,0x6307,0xd7f2,0x937f,
-0x3f24,0x2fbe,0x60fc,0x9259,
-0x3f55,0xd87e,0xc84a,0xef1d,
-0x3f83,0xb2ab,0x6ef1,0x33b7,
-0x3fac,0x6b08,0xd704,0x1a92,
-0x3fce,0xbfbd,0xff82,0xc56d,
-0x3fe6,0x2e42,0xfefa,0x39ef
-};
-
-#define douba(k) (*(double *)&A[(k)<<2])
-#define doubb(k) (*(double *)&B[(k)<<2])
-#define MEXP 16383.0
-#ifdef DENORMAL
-#define MNEXP -17183.0
-#else
-#define MNEXP -16383.0
-#endif
-#endif
-
-/* log2(e) - 1 */
-#define LOG2EA 0.44269504088896340736
-
-#define F W
-#define Fa Wa
-#define Fb Wb
-#define G W
-#define Ga Wa
-#define Gb u
-#define H W
-#define Ha Wb
-#define Hb Wb
-
-#ifdef __MINGW32__
-static __inline__ double reduc( double );
-extern double __powi ( double, int );
-extern double pow ( double x, double y);
-
-#else /* __MINGW32__ */
-
-#ifdef ANSIPROT
-extern double floor ( double );
-extern double fabs ( double );
-extern double frexp ( double, int * );
-extern double ldexp ( double, int );
-extern double polevl ( double, void *, int );
-extern double p1evl ( double, void *, int );
-extern double __powi ( double, int );
-extern int signbit ( double );
-extern int isnan ( double );
-extern int isfinite ( double );
-static double reduc ( double );
-#else
-double floor(), fabs(), frexp(), ldexp();
-double polevl(), p1evl(), __powi();
-int signbit(), isnan(), isfinite();
-static double reduc();
-#endif
-extern double MAXNUM;
-#ifdef INFINITIES
-extern double INFINITY;
-#endif
-#ifdef NANS
-extern double NAN;
-#endif
-#ifdef MINUSZERO
-extern double NEGZERO;
-#endif
-
-#endif /* __MINGW32__ */
-
-double pow( x, y )
-double x, y;
-{
-double w, z, W, Wa, Wb, ya, yb, u;
-/* double F, Fa, Fb, G, Ga, Gb, H, Ha, Hb */
-double aw, ay, wy;
-int e, i, nflg, iyflg, yoddint;
-
-if( y == 0.0 )
- return( 1.0 );
-#ifdef NANS
-if( isnan(x) || isnan(y) )
- {
- _SET_ERRNO (EDOM);
- return( x + y );
- }
-#endif
-if( y == 1.0 )
- return( x );
-
-
-#ifdef INFINITIES
-if( !isfinite(y) && (x == 1.0 || x == -1.0) )
- {
- mtherr( "pow", DOMAIN );
-#ifdef NANS
- return( NAN );
-#else
- return( INFINITY );
-#endif
- }
-#endif
-
-if( x == 1.0 )
- return( 1.0 );
-
-if( y >= MAXNUM )
- {
- _SET_ERRNO (ERANGE);
-#ifdef INFINITIES
- if( x > 1.0 )
- return( INFINITY );
-#else
- if( x > 1.0 )
- return( MAXNUM );
-#endif
- if( x > 0.0 && x < 1.0 )
- return( 0.0);
- if( x < -1.0 )
- {
-#ifdef INFINITIES
- return( INFINITY );
-#else
- return( MAXNUM );
-#endif
- }
- if( x > -1.0 && x < 0.0 )
- return( 0.0 );
- }
-if( y <= -MAXNUM )
- {
- _SET_ERRNO (ERANGE);
- if( x > 1.0 )
- return( 0.0 );
-#ifdef INFINITIES
- if( x > 0.0 && x < 1.0 )
- return( INFINITY );
-#else
- if( x > 0.0 && x < 1.0 )
- return( MAXNUM );
-#endif
- if( x < -1.0 )
- return( 0.0 );
-#ifdef INFINITIES
- if( x > -1.0 && x < 0.0 )
- return( INFINITY );
-#else
- if( x > -1.0 && x < 0.0 )
- return( MAXNUM );
-#endif
- }
-if( x >= MAXNUM )
- {
-#if INFINITIES
- if( y > 0.0 )
- return( INFINITY );
-#else
- if( y > 0.0 )
- return( MAXNUM );
-#endif
- return(0.0);
- }
-/* Set iyflg to 1 if y is an integer. */
-iyflg = 0;
-w = floor(y);
-if( w == y )
- iyflg = 1;
-
-/* Test for odd integer y. */
-yoddint = 0;
-if( iyflg )
- {
- ya = fabs(y);
- ya = floor(0.5 * ya);
- yb = 0.5 * fabs(w);
- if( ya != yb )
- yoddint = 1;
- }
-
-if( x <= -MAXNUM )
- {
- if( y > 0.0 )
- {
-#ifdef INFINITIES
- if( yoddint )
- return( -INFINITY );
- return( INFINITY );
-#else
- if( yoddint )
- return( -MAXNUM );
- return( MAXNUM );
-#endif
- }
- if( y < 0.0 )
- {
-#ifdef MINUSZERO
- if( yoddint )
- return( NEGZERO );
-#endif
- return( 0.0 );
- }
- }
-
-nflg = 0; /* flag = 1 if x<0 raised to integer power */
-if( x <= 0.0 )
- {
- if( x == 0.0 )
- {
- if( y < 0.0 )
- {
-#ifdef MINUSZERO
- if( signbit(x) && yoddint )
- return( -INFINITY );
-#endif
-#ifdef INFINITIES
- return( INFINITY );
-#else
- return( MAXNUM );
-#endif
- }
- if( y > 0.0 )
- {
-#ifdef MINUSZERO
- if( signbit(x) && yoddint )
- return( NEGZERO );
-#endif
- return( 0.0 );
- }
- return( 1.0 );
- }
- else
- {
- if( iyflg == 0 )
- { /* noninteger power of negative number */
- mtherr( fname, DOMAIN );
- _SET_ERRNO (EDOM);
-#ifdef NANS
- return(NAN);
-#else
- return(0.0L);
-#endif
- }
- nflg = 1;
- }
- }
-
-/* Integer power of an integer. */
-
-if( iyflg )
- {
- i = w;
- w = floor(x);
- if( (w == x) && (fabs(y) < 32768.0) )
- {
- w = __powi( x, (int) y );
- return( w );
- }
- }
-
-if( nflg )
- x = fabs(x);
-
-/* For results close to 1, use a series expansion. */
-w = x - 1.0;
-aw = fabs(w);
-ay = fabs(y);
-wy = w * y;
-ya = fabs(wy);
-if((aw <= 1.0e-3 && ay <= 1.0)
- || (ya <= 1.0e-3 && ay >= 1.0))
- {
- z = (((((w*(y-5.)/720. + 1./120.)*w*(y-4.) + 1./24.)*w*(y-3.)
- + 1./6.)*w*(y-2.) + 0.5)*w*(y-1.) )*wy + wy + 1.;
- goto done;
- }
-/* These are probably too much trouble. */
-#if 0
-w = y * log(x);
-if (aw > 1.0e-3 && fabs(w) < 1.0e-3)
- {
- z = ((((((
- w/7. + 1.)*w/6. + 1.)*w/5. + 1.)*w/4. + 1.)*w/3. + 1.)*w/2. + 1.)*w + 1.;
- goto done;
- }
-
-if(ya <= 1.0e-3 && aw <= 1.0e-4)
- {
- z = (((((
- wy*1./720.
- + (-w*1./48. + 1./120.) )*wy
- + ((w*17./144. - 1./12.)*w + 1./24.) )*wy
- + (((-w*5./16. + 7./24.)*w - 1./4.)*w + 1./6.) )*wy
- + ((((w*137./360. - 5./12.)*w + 11./24.)*w - 1./2.)*w + 1./2.) )*wy
- + (((((-w*1./6. + 1./5.)*w - 1./4)*w + 1./3.)*w -1./2.)*w ) )*wy
- + wy + 1.0;
- goto done;
- }
-#endif
-
-/* separate significand from exponent */
-x = frexp( x, &e );
-
-#if 0
-/* For debugging, check for gross overflow. */
-if( (e * y) > (MEXP + 1024) )
- goto overflow;
-#endif
-
-/* Find significand of x in antilog table A[]. */
-i = 1;
-if( x <= douba(9) )
- i = 9;
-if( x <= douba(i+4) )
- i += 4;
-if( x <= douba(i+2) )
- i += 2;
-if( x >= douba(1) )
- i = -1;
-i += 1;
-
-
-/* Find (x - A[i])/A[i]
- * in order to compute log(x/A[i]):
- *
- * log(x) = log( a x/a ) = log(a) + log(x/a)
- *
- * log(x/a) = log(1+v), v = x/a - 1 = (x-a)/a
- */
-x -= douba(i);
-x -= doubb(i/2);
-x /= douba(i);
-
-
-/* rational approximation for log(1+v):
- *
- * log(1+v) = v - v**2/2 + v**3 P(v) / Q(v)
- */
-z = x*x;
-w = x * ( z * polevl( x, P, 3 ) / p1evl( x, Q, 4 ) );
-w = w - ldexp( z, -1 ); /* w - 0.5 * z */
-
-/* Convert to base 2 logarithm:
- * multiply by log2(e)
- */
-w = w + LOG2EA * w;
-/* Note x was not yet added in
- * to above rational approximation,
- * so do it now, while multiplying
- * by log2(e).
- */
-z = w + LOG2EA * x;
-z = z + x;
-
-/* Compute exponent term of the base 2 logarithm. */
-w = -i;
-w = ldexp( w, -4 ); /* divide by 16 */
-w += e;
-/* Now base 2 log of x is w + z. */
-
-/* Multiply base 2 log by y, in extended precision. */
-
-/* separate y into large part ya
- * and small part yb less than 1/16
- */
-ya = reduc(y);
-yb = y - ya;
-
-
-F = z * y + w * yb;
-Fa = reduc(F);
-Fb = F - Fa;
-
-G = Fa + w * ya;
-Ga = reduc(G);
-Gb = G - Ga;
-
-H = Fb + Gb;
-Ha = reduc(H);
-w = ldexp( Ga+Ha, 4 );
-
-/* Test the power of 2 for overflow */
-if( w > MEXP )
- {
-#ifndef INFINITIES
- mtherr( fname, OVERFLOW );
-#endif
-#ifdef INFINITIES
- if( nflg && yoddint )
- return( -INFINITY );
- return( INFINITY );
-#else
- if( nflg && yoddint )
- return( -MAXNUM );
- return( MAXNUM );
-#endif
- }
-
-if( w < (MNEXP - 1) )
- {
-#ifndef DENORMAL
- mtherr( fname, UNDERFLOW );
-#endif
-#ifdef MINUSZERO
- if( nflg && yoddint )
- return( NEGZERO );
-#endif
- return( 0.0 );
- }
-
-e = w;
-Hb = H - Ha;
-
-if( Hb > 0.0 )
- {
- e += 1;
- Hb -= 0.0625;
- }
-
-/* Now the product y * log2(x) = Hb + e/16.0.
- *
- * Compute base 2 exponential of Hb,
- * where -0.0625 <= Hb <= 0.
- */
-z = Hb * polevl( Hb, R, 6 ); /* z = 2**Hb - 1 */
-
-/* Express e/16 as an integer plus a negative number of 16ths.
- * Find lookup table entry for the fractional power of 2.
- */
-if( e < 0 )
- i = 0;
-else
- i = 1;
-i = e/16 + i;
-e = 16*i - e;
-w = douba( e );
-z = w + w * z; /* 2**-e * ( 1 + (2**Hb-1) ) */
-z = ldexp( z, i ); /* multiply by integer power of 2 */
-
-done:
-
-/* Negate if odd integer power of negative number */
-if( nflg && yoddint )
- {
-#ifdef MINUSZERO
- if( z == 0.0 )
- z = NEGZERO;
- else
-#endif
- z = -z;
- }
-return( z );
-}
-
-
-/* Find a multiple of 1/16 that is within 1/16 of x. */
-static __inline__ double reduc(x)
-double x;
-{
-double t;
-
-t = ldexp( x, 4 );
-t = floor( t );
-t = ldexp( t, -4 );
-return(t);
-}
diff --git a/winsup/mingw/mingwex/math/powf.c b/winsup/mingw/mingwex/math/powf.c
deleted file mode 100644
index 1af4d2d8f..000000000
--- a/winsup/mingw/mingwex/math/powf.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <math.h>
-float powf (float x, float y)
- {return (float) pow (x, y);}
diff --git a/winsup/mingw/mingwex/math/powi.c b/winsup/mingw/mingwex/math/powi.c
deleted file mode 100644
index 9dd0c3d82..000000000
--- a/winsup/mingw/mingwex/math/powi.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/* powi.c
- *
- * Real raised to integer power
- *
- *
- *
- * SYNOPSIS:
- *
- * double x, y, __powi();
- * int n;
- *
- * y = __powi( x, n );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns argument x raised to the nth power.
- * The routine efficiently decomposes n as a sum of powers of
- * two. The desired power is a product of two-to-the-kth
- * powers of x. Thus to compute the 32767 power of x requires
- * 28 multiplications instead of 32767 multiplications.
- *
- *
- *
- * ACCURACY:
- *
- *
- * Relative error:
- * arithmetic x domain n domain # trials peak rms
- * DEC .04,26 -26,26 100000 2.7e-16 4.3e-17
- * IEEE .04,26 -26,26 50000 2.0e-15 3.8e-16
- * IEEE 1,2 -1022,1023 50000 8.6e-14 1.6e-14
- *
- * Returns MAXNUM on overflow, zero on underflow.
- *
- */
-
-/* powi.c */
-
-/*
-Cephes Math Library Release 2.8: June, 2000
-Copyright 1984, 1995, 2000 by Stephen L. Moshier
-*/
-
-/*
-Modified for mingw
-2002-07-22 Danny Smith <dannysmith@users.sourceforge.net>
-*/
-
-#ifdef __MINGW32__
-#include "cephes_mconf.h"
-#else
-#include "mconf.h"
-#ifdef ANSIPROT
-extern double log ( double );
-extern double frexp ( double, int * );
-extern int signbit ( double );
-#else
-double log(), frexp();
-int signbit();
-#endif
-extern double NEGZERO, INFINITY, MAXNUM, MAXLOG, MINLOG, LOGE2;
-#endif /* __MINGW32__ */
-
-#ifndef _SET_ERRNO
-#define _SET_ERRNO(x)
-#endif
-
-double __powi( x, nn )
-double x;
-int nn;
-{
-int n, e, sign, asign, lx;
-double w, y, s;
-
-/* See pow.c for these tests. */
-if( x == 0.0 )
- {
- if( nn == 0 )
- return( 1.0 );
- else if( nn < 0 )
- return( INFINITY );
- else
- {
- if( nn & 1 )
- return( x );
- else
- return( 0.0 );
- }
- }
-
-if( nn == 0 )
- return( 1.0 );
-
-if( nn == -1 )
- return( 1.0/x );
-
-if( x < 0.0 )
- {
- asign = -1;
- x = -x;
- }
-else
- asign = 0;
-
-
-if( nn < 0 )
- {
- sign = -1;
- n = -nn;
- }
-else
- {
- sign = 1;
- n = nn;
- }
-
-/* Even power will be positive. */
-if( (n & 1) == 0 )
- asign = 0;
-
-/* Overflow detection */
-
-/* Calculate approximate logarithm of answer */
-s = frexp( x, &lx );
-e = (lx - 1)*n;
-if( (e == 0) || (e > 64) || (e < -64) )
- {
- s = (s - 7.0710678118654752e-1) / (s + 7.0710678118654752e-1);
- s = (2.9142135623730950 * s - 0.5 + lx) * nn * LOGE2;
- }
-else
- {
- s = LOGE2 * e;
- }
-
-if( s > MAXLOG )
- {
- mtherr( "powi", OVERFLOW );
- _SET_ERRNO(ERANGE);
- y = INFINITY;
- goto done;
- }
-
-#if DENORMAL
-if( s < MINLOG )
- {
- y = 0.0;
- goto done;
- }
-
-/* Handle tiny denormal answer, but with less accuracy
- * since roundoff error in 1.0/x will be amplified.
- * The precise demarcation should be the gradual underflow threshold.
- */
-if( (s < (-MAXLOG+2.0)) && (sign < 0) )
- {
- x = 1.0/x;
- sign = -sign;
- }
-#else
-/* do not produce denormal answer */
-if( s < -MAXLOG )
- return(0.0);
-#endif
-
-
-/* First bit of the power */
-if( n & 1 )
- y = x;
-
-else
- y = 1.0;
-
-w = x;
-n >>= 1;
-while( n )
- {
- w = w * w; /* arg to the 2-to-the-kth power */
- if( n & 1 ) /* if that bit is set, then include in product */
- y *= w;
- n >>= 1;
- }
-
-if( sign < 0 )
- y = 1.0/y;
-
-done:
-
-if( asign )
- {
- /* odd power of negative number */
- if( y == 0.0 )
- y = NEGZERO;
- else
- y = -y;
- }
-return(y);
-}
diff --git a/winsup/mingw/mingwex/math/powif.c b/winsup/mingw/mingwex/math/powif.c
deleted file mode 100644
index 160fb5476..000000000
--- a/winsup/mingw/mingwex/math/powif.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/* powi.c
- *
- * Real raised to integer power
- *
- *
- *
- * SYNOPSIS:
- *
- * float x, y, __powif();
- * int n;
- *
- * y = powi( x, n );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns argument x raised to the nth power.
- * The routine efficiently decomposes n as a sum of powers of
- * two. The desired power is a product of two-to-the-kth
- * powers of x. Thus to compute the 32767 power of x requires
- * 28 multiplications instead of 32767 multiplications.
- *
- *
- *
- * ACCURACY:
- *
- *
- * Relative error:
- * arithmetic x domain n domain # trials peak rms
- * DEC .04,26 -26,26 100000 2.7e-16 4.3e-17
- * IEEE .04,26 -26,26 50000 2.0e-15 3.8e-16
- * IEEE 1,2 -1022,1023 50000 8.6e-14 1.6e-14
- *
- * Returns MAXNUM on overflow, zero on underflow.
- *
- */
-
-/* powi.c */
-
-/*
-Cephes Math Library Release 2.8: June, 2000
-Copyright 1984, 1995, 2000 by Stephen L. Moshier
-*/
-
-/*
-Modified for float from powi.c and adapted to mingw
-2002-10-01 Danny Smith <dannysmith@users.sourceforge.net>
-*/
-
-#ifdef __MINGW32__
-#include "cephes_mconf.h"
-#else
-#include "mconf.h"
-#ifdef ANSIPROT
-extern float logf ( float );
-extern float frexpf ( float, int * );
-extern int signbitf ( float );
-#else
-float logf(), frexpf();
-int signbitf();
-#endif
-extern float NEGZEROF, INFINITYF, MAXNUMF, MAXLOGF, MINLOGF, LOGE2F;
-#endif /* __MINGW32__ */
-
-#ifndef _SET_ERRNO
-#define _SET_ERRNO(x)
-#endif
-
-float __powif( float x, int nn )
-{
-int n, e, sign, asign, lx;
-float w, y, s;
-
-/* See pow.c for these tests. */
-if( x == 0.0F )
- {
- if( nn == 0 )
- return( 1.0F );
- else if( nn < 0 )
- return( INFINITYF );
- else
- {
- if( nn & 1 )
- return( x );
- else
- return( 0.0 );
- }
- }
-
-if( nn == 0 )
- return( 1.0 );
-
-if( nn == -1 )
- return( 1.0/x );
-
-if( x < 0.0 )
- {
- asign = -1;
- x = -x;
- }
-else
- asign = 0;
-
-
-if( nn < 0 )
- {
- sign = -1;
- n = -nn;
- }
-else
- {
- sign = 1;
- n = nn;
- }
-
-/* Even power will be positive. */
-if( (n & 1) == 0 )
- asign = 0;
-
-/* Overflow detection */
-
-/* Calculate approximate logarithm of answer */
-s = frexpf( x, &lx );
-e = (lx - 1)*n;
-if( (e == 0) || (e > 64) || (e < -64) )
- {
- s = (s - 7.0710678118654752e-1) / (s + 7.0710678118654752e-1);
- s = (2.9142135623730950 * s - 0.5 + lx) * nn * LOGE2F;
- }
-else
- {
- s = LOGE2F * e;
- }
-
-if( s > MAXLOGF )
- {
- mtherr( "__powif", OVERFLOW );
- _SET_ERRNO(ERANGE);
- y = INFINITYF;
- goto done;
- }
-
-#if DENORMAL
-if( s < MINLOGF )
- {
- y = 0.0;
- goto done;
- }
-
-/* Handle tiny denormal answer, but with less accuracy
- * since roundoff error in 1.0/x will be amplified.
- * The precise demarcation should be the gradual underflow threshold.
- */
-if( (s < (-MAXLOGF+2.0)) && (sign < 0) )
- {
- x = 1.0/x;
- sign = -sign;
- }
-#else
-/* do not produce denormal answer */
-if( s < -MAXLOGF )
- return(0.0);
-#endif
-
-
-/* First bit of the power */
-if( n & 1 )
- y = x;
-
-else
- y = 1.0;
-
-w = x;
-n >>= 1;
-while( n )
- {
- w = w * w; /* arg to the 2-to-the-kth power */
- if( n & 1 ) /* if that bit is set, then include in product */
- y *= w;
- n >>= 1;
- }
-
-if( sign < 0 )
- y = 1.0/y;
-
-done:
-
-if( asign )
- {
- /* odd power of negative number */
- if( y == 0.0 )
- y = NEGZEROF;
- else
- y = -y;
- }
-return(y);
-}
diff --git a/winsup/mingw/mingwex/math/powil.c b/winsup/mingw/mingwex/math/powil.c
deleted file mode 100644
index ec7a2866b..000000000
--- a/winsup/mingw/mingwex/math/powil.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/* __powil.c
- *
- * Real raised to integer power, long double precision
- *
- *
- *
- * SYNOPSIS:
- *
- * long double x, y, __powil();
- * int n;
- *
- * y = __powil( x, n );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns argument x raised to the nth power.
- * The routine efficiently decomposes n as a sum of powers of
- * two. The desired power is a product of two-to-the-kth
- * powers of x. Thus to compute the 32767 power of x requires
- * 28 multiplications instead of 32767 multiplications.
- *
- *
- *
- * ACCURACY:
- *
- *
- * Relative error:
- * arithmetic x domain n domain # trials peak rms
- * IEEE .001,1000 -1022,1023 50000 4.3e-17 7.8e-18
- * IEEE 1,2 -1022,1023 20000 3.9e-17 7.6e-18
- * IEEE .99,1.01 0,8700 10000 3.6e-16 7.2e-17
- *
- * Returns INFINITY on overflow, zero on underflow.
- *
- */
-
-/* __powil.c */
-
-/*
-Cephes Math Library Release 2.2: December, 1990
-Copyright 1984, 1990 by Stephen L. Moshier
-Direct inquiries to 30 Frost Street, Cambridge, MA 02140
-*/
-
-/*
-Modified for mingw
-2002-07-22 Danny Smith <dannysmith@users.sourceforge.net>
-*/
-
-#ifdef __MINGW32__
-#include "cephes_mconf.h"
-#else
-#include "mconf.h"
-extern long double MAXNUML, MAXLOGL, MINLOGL;
-extern long double LOGE2L;
-#ifdef ANSIPROT
-extern long double frexpl ( long double, int * );
-#else
-long double frexpl();
-#endif
-#endif /* __MINGW32__ */
-
-#ifndef _SET_ERRNO
-#define _SET_ERRNO(x)
-#endif
-
-long double __powil( x, nn )
-long double x;
-int nn;
-{
-long double w, y;
-long double s;
-int n, e, sign, asign, lx;
-
-if( x == 0.0L )
- {
- if( nn == 0 )
- return( 1.0L );
- else if( nn < 0 )
- return( INFINITYL );
- else
- return( 0.0L );
- }
-
-if( nn == 0 )
- return( 1.0L );
-
-
-if( x < 0.0L )
- {
- asign = -1;
- x = -x;
- }
-else
- asign = 0;
-
-
-if( nn < 0 )
- {
- sign = -1;
- n = -nn;
- }
-else
- {
- sign = 1;
- n = nn;
- }
-
-/* Overflow detection */
-
-/* Calculate approximate logarithm of answer */
-s = x;
-s = frexpl( s, &lx );
-e = (lx - 1)*n;
-if( (e == 0) || (e > 64) || (e < -64) )
- {
- s = (s - 7.0710678118654752e-1L) / (s + 7.0710678118654752e-1L);
- s = (2.9142135623730950L * s - 0.5L + lx) * nn * LOGE2L;
- }
-else
- {
- s = LOGE2L * e;
- }
-
-if( s > MAXLOGL )
- {
- mtherr( "__powil", OVERFLOW );
- _SET_ERRNO(ERANGE);
- y = INFINITYL;
- goto done;
- }
-
-if( s < MINLOGL )
- {
- mtherr( "__powil", UNDERFLOW );
- _SET_ERRNO(ERANGE);
- return(0.0L);
- }
-/* Handle tiny denormal answer, but with less accuracy
- * since roundoff error in 1.0/x will be amplified.
- * The precise demarcation should be the gradual underflow threshold.
- */
-if( s < (-MAXLOGL+2.0L) )
- {
- x = 1.0L/x;
- sign = -sign;
- }
-
-/* First bit of the power */
-if( n & 1 )
- y = x;
-
-else
- {
- y = 1.0L;
- asign = 0;
- }
-
-w = x;
-n >>= 1;
-while( n )
- {
- w = w * w; /* arg to the 2-to-the-kth power */
- if( n & 1 ) /* if that bit is set, then include in product */
- y *= w;
- n >>= 1;
- }
-
-
-done:
-
-if( asign )
- y = -y; /* odd power of negative number */
-if( sign < 0 )
- y = 1.0L/y;
-return(y);
-}
diff --git a/winsup/mingw/mingwex/math/powl.c b/winsup/mingw/mingwex/math/powl.c
deleted file mode 100644
index f85e55653..000000000
--- a/winsup/mingw/mingwex/math/powl.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/* powl.c
- *
- * Power function, long double precision
- *
- *
- *
- * SYNOPSIS:
- *
- * long double x, y, z, powl();
- *
- * z = powl( x, y );
- *
- *
- *
- * DESCRIPTION:
- *
- * Computes x raised to the yth power. Analytically,
- *
- * x**y = exp( y log(x) ).
- *
- * Following Cody and Waite, this program uses a lookup table
- * of 2**-i/32 and pseudo extended precision arithmetic to
- * obtain several extra bits of accuracy in both the logarithm
- * and the exponential.
- *
- *
- *
- * ACCURACY:
- *
- * The relative error of pow(x,y) can be estimated
- * by y dl ln(2), where dl is the absolute error of
- * the internally computed base 2 logarithm. At the ends
- * of the approximation interval the logarithm equal 1/32
- * and its relative error is about 1 lsb = 1.1e-19. Hence
- * the predicted relative error in the result is 2.3e-21 y .
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- *
- * IEEE +-1000 40000 2.8e-18 3.7e-19
- * .001 < x < 1000, with log(x) uniformly distributed.
- * -1000 < y < 1000, y uniformly distributed.
- *
- * IEEE 0,8700 60000 6.5e-18 1.0e-18
- * 0.99 < x < 1.01, 0 < y < 8700, uniformly distributed.
- *
- *
- * ERROR MESSAGES:
- *
- * message condition value returned
- * pow overflow x**y > MAXNUM INFINITY
- * pow underflow x**y < 1/MAXNUM 0.0
- * pow domain x<0 and y noninteger 0.0
- *
- */
-
-/*
-Cephes Math Library Release 2.7: May, 1998
-Copyright 1984, 1991, 1998 by Stephen L. Moshier
-*/
-
-/*
-Modified for mingw
-2002-07-22 Danny Smith <dannysmith@users.sourceforge.net>
-*/
-
-#ifdef __MINGW32__
-#include "cephes_mconf.h"
-#else
-#include "mconf.h"
-
-static char fname[] = {"powl"};
-#endif
-
-#ifndef _SET_ERRNO
-#define _SET_ERRNO(x)
-#endif
-
-
-/* Table size */
-#define NXT 32
-/* log2(Table size) */
-#define LNXT 5
-
-#ifdef UNK
-/* log(1+x) = x - .5x^2 + x^3 * P(z)/Q(z)
- * on the domain 2^(-1/32) - 1 <= x <= 2^(1/32) - 1
- */
-static long double P[] = {
- 8.3319510773868690346226E-4L,
- 4.9000050881978028599627E-1L,
- 1.7500123722550302671919E0L,
- 1.4000100839971580279335E0L,
-};
-static long double Q[] = {
-/* 1.0000000000000000000000E0L,*/
- 5.2500282295834889175431E0L,
- 8.4000598057587009834666E0L,
- 4.2000302519914740834728E0L,
-};
-/* A[i] = 2^(-i/32), rounded to IEEE long double precision.
- * If i is even, A[i] + B[i/2] gives additional accuracy.
- */
-static long double A[33] = {
- 1.0000000000000000000000E0L,
- 9.7857206208770013448287E-1L,
- 9.5760328069857364691013E-1L,
- 9.3708381705514995065011E-1L,
- 9.1700404320467123175367E-1L,
- 8.9735453750155359320742E-1L,
- 8.7812608018664974155474E-1L,
- 8.5930964906123895780165E-1L,
- 8.4089641525371454301892E-1L,
- 8.2287773907698242225554E-1L,
- 8.0524516597462715409607E-1L,
- 7.8799042255394324325455E-1L,
- 7.7110541270397041179298E-1L,
- 7.5458221379671136985669E-1L,
- 7.3841307296974965571198E-1L,
- 7.2259040348852331001267E-1L,
- 7.0710678118654752438189E-1L,
- 6.9195494098191597746178E-1L,
- 6.7712777346844636413344E-1L,
- 6.6261832157987064729696E-1L,
- 6.4841977732550483296079E-1L,
- 6.3452547859586661129850E-1L,
- 6.2092890603674202431705E-1L,
- 6.0762367999023443907803E-1L,
- 5.9460355750136053334378E-1L,
- 5.8186242938878875689693E-1L,
- 5.6939431737834582684856E-1L,
- 5.5719337129794626814472E-1L,
- 5.4525386633262882960438E-1L,
- 5.3357020033841180906486E-1L,
- 5.2213689121370692017331E-1L,
- 5.1094857432705833910408E-1L,
- 5.0000000000000000000000E-1L,
-};
-static long double B[17] = {
- 0.0000000000000000000000E0L,
- 2.6176170809902549338711E-20L,
--1.0126791927256478897086E-20L,
- 1.3438228172316276937655E-21L,
- 1.2207982955417546912101E-20L,
--6.3084814358060867200133E-21L,
- 1.3164426894366316434230E-20L,
--1.8527916071632873716786E-20L,
- 1.8950325588932570796551E-20L,
- 1.5564775779538780478155E-20L,
- 6.0859793637556860974380E-21L,
--2.0208749253662532228949E-20L,
- 1.4966292219224761844552E-20L,
- 3.3540909728056476875639E-21L,
--8.6987564101742849540743E-22L,
--1.2327176863327626135542E-20L,
- 0.0000000000000000000000E0L,
-};
-
-/* 2^x = 1 + x P(x),
- * on the interval -1/32 <= x <= 0
- */
-static long double R[] = {
- 1.5089970579127659901157E-5L,
- 1.5402715328927013076125E-4L,
- 1.3333556028915671091390E-3L,
- 9.6181291046036762031786E-3L,
- 5.5504108664798463044015E-2L,
- 2.4022650695910062854352E-1L,
- 6.9314718055994530931447E-1L,
-};
-
-#define douba(k) A[k]
-#define doubb(k) B[k]
-#define MEXP (NXT*16384.0L)
-/* The following if denormal numbers are supported, else -MEXP: */
-#ifdef DENORMAL
-#define MNEXP (-NXT*(16384.0L+64.0L))
-#else
-#define MNEXP (-NXT*16384.0L)
-#endif
-/* log2(e) - 1 */
-#define LOG2EA 0.44269504088896340735992L
-#endif
-
-
-#ifdef IBMPC
-static const unsigned short P[] = {
-0xb804,0xa8b7,0xc6f4,0xda6a,0x3ff4, XPD
-0x7de9,0xcf02,0x58c0,0xfae1,0x3ffd, XPD
-0x405a,0x3722,0x67c9,0xe000,0x3fff, XPD
-0xcd99,0x6b43,0x87ca,0xb333,0x3fff, XPD
-};
-static const unsigned short Q[] = {
-/* 0x0000,0x0000,0x0000,0x8000,0x3fff, */
-0x6307,0xa469,0x3b33,0xa800,0x4001, XPD
-0xfec2,0x62d7,0xa51c,0x8666,0x4002, XPD
-0xda32,0xd072,0xa5d7,0x8666,0x4001, XPD
-};
-static const unsigned short A[] = {
-0x0000,0x0000,0x0000,0x8000,0x3fff, XPD
-0x033a,0x722a,0xb2db,0xfa83,0x3ffe, XPD
-0xcc2c,0x2486,0x7d15,0xf525,0x3ffe, XPD
-0xf5cb,0xdcda,0xb99b,0xefe4,0x3ffe, XPD
-0x392f,0xdd24,0xc6e7,0xeac0,0x3ffe, XPD
-0x48a8,0x7c83,0x06e7,0xe5b9,0x3ffe, XPD
-0xe111,0x2a94,0xdeec,0xe0cc,0x3ffe, XPD
-0x3755,0xdaf2,0xb797,0xdbfb,0x3ffe, XPD
-0x6af4,0xd69d,0xfcca,0xd744,0x3ffe, XPD
-0xe45a,0xf12a,0x1d91,0xd2a8,0x3ffe, XPD
-0x80e4,0x1f84,0x8c15,0xce24,0x3ffe, XPD
-0x27a3,0x6e2f,0xbd86,0xc9b9,0x3ffe, XPD
-0xdadd,0x5506,0x2a11,0xc567,0x3ffe, XPD
-0x9456,0x6670,0x4cca,0xc12c,0x3ffe, XPD
-0x36bf,0x580c,0xa39f,0xbd08,0x3ffe, XPD
-0x9ee9,0x62fb,0xaf47,0xb8fb,0x3ffe, XPD
-0x6484,0xf9de,0xf333,0xb504,0x3ffe, XPD
-0x2590,0xd2ac,0xf581,0xb123,0x3ffe, XPD
-0x4ac6,0x42a1,0x3eea,0xad58,0x3ffe, XPD
-0x0ef8,0xea7c,0x5ab4,0xa9a1,0x3ffe, XPD
-0x38ea,0xb151,0xd6a9,0xa5fe,0x3ffe, XPD
-0x6819,0x0c49,0x4303,0xa270,0x3ffe, XPD
-0x11ae,0x91a1,0x3260,0x9ef5,0x3ffe, XPD
-0x5539,0xd54e,0x39b9,0x9b8d,0x3ffe, XPD
-0xa96f,0x8db8,0xf051,0x9837,0x3ffe, XPD
-0x0961,0xfef7,0xefa8,0x94f4,0x3ffe, XPD
-0xc336,0xab11,0xd373,0x91c3,0x3ffe, XPD
-0x53c0,0x45cd,0x398b,0x8ea4,0x3ffe, XPD
-0xd6e7,0xea8b,0xc1e3,0x8b95,0x3ffe, XPD
-0x8527,0x92da,0x0e80,0x8898,0x3ffe, XPD
-0x7b15,0xcc48,0xc367,0x85aa,0x3ffe, XPD
-0xa1d7,0xac2b,0x8698,0x82cd,0x3ffe, XPD
-0x0000,0x0000,0x0000,0x8000,0x3ffe, XPD
-};
-static const unsigned short B[] = {
-0x0000,0x0000,0x0000,0x0000,0x0000, XPD
-0x1f87,0xdb30,0x18f5,0xf73a,0x3fbd, XPD
-0xac15,0x3e46,0x2932,0xbf4a,0xbfbc, XPD
-0x7944,0xba66,0xa091,0xcb12,0x3fb9, XPD
-0xff78,0x40b4,0x2ee6,0xe69a,0x3fbc, XPD
-0xc895,0x5069,0xe383,0xee53,0xbfbb, XPD
-0x7cde,0x9376,0x4325,0xf8ab,0x3fbc, XPD
-0xa10c,0x25e0,0xc093,0xaefd,0xbfbd, XPD
-0x7d3e,0xea95,0x1366,0xb2fb,0x3fbd, XPD
-0x5d89,0xeb34,0x5191,0x9301,0x3fbd, XPD
-0x80d9,0xb883,0xfb10,0xe5eb,0x3fbb, XPD
-0x045d,0x288c,0xc1ec,0xbedd,0xbfbd, XPD
-0xeded,0x5c85,0x4630,0x8d5a,0x3fbd, XPD
-0x9d82,0xe5ac,0x8e0a,0xfd6d,0x3fba, XPD
-0x6dfd,0xeb58,0xaf14,0x8373,0xbfb9, XPD
-0xf938,0x7aac,0x91cf,0xe8da,0xbfbc, XPD
-0x0000,0x0000,0x0000,0x0000,0x0000, XPD
-};
-static const unsigned short R[] = {
-0xa69b,0x530e,0xee1d,0xfd2a,0x3fee, XPD
-0xc746,0x8e7e,0x5960,0xa182,0x3ff2, XPD
-0x63b6,0xadda,0xfd6a,0xaec3,0x3ff5, XPD
-0xc104,0xfd99,0x5b7c,0x9d95,0x3ff8, XPD
-0xe05e,0x249d,0x46b8,0xe358,0x3ffa, XPD
-0x5d1d,0x162c,0xeffc,0xf5fd,0x3ffc, XPD
-0x79aa,0xd1cf,0x17f7,0xb172,0x3ffe, XPD
-};
-
-/* 10 byte sizes versus 12 byte */
-#define douba(k) (*(long double *)(&A[(sizeof( long double )/2)*(k)]))
-#define doubb(k) (*(long double *)(&B[(sizeof( long double )/2)*(k)]))
-#define MEXP (NXT*16384.0L)
-#ifdef DENORMAL
-#define MNEXP (-NXT*(16384.0L+64.0L))
-#else
-#define MNEXP (-NXT*16384.0L)
-#endif
-static const
-union
-{
- unsigned short L[6];
- long double ld;
-} log2ea = {{0xc2ef,0x705f,0xeca5,0xe2a8,0x3ffd, XPD}};
-
-#define LOG2EA (log2ea.ld)
-/*
-#define LOG2EA 0.44269504088896340735992L
-*/
-#endif
-
-#ifdef MIEEE
-static long P[] = {
-0x3ff40000,0xda6ac6f4,0xa8b7b804,
-0x3ffd0000,0xfae158c0,0xcf027de9,
-0x3fff0000,0xe00067c9,0x3722405a,
-0x3fff0000,0xb33387ca,0x6b43cd99,
-};
-static long Q[] = {
-/* 0x3fff0000,0x80000000,0x00000000, */
-0x40010000,0xa8003b33,0xa4696307,
-0x40020000,0x8666a51c,0x62d7fec2,
-0x40010000,0x8666a5d7,0xd072da32,
-};
-static long A[] = {
-0x3fff0000,0x80000000,0x00000000,
-0x3ffe0000,0xfa83b2db,0x722a033a,
-0x3ffe0000,0xf5257d15,0x2486cc2c,
-0x3ffe0000,0xefe4b99b,0xdcdaf5cb,
-0x3ffe0000,0xeac0c6e7,0xdd24392f,
-0x3ffe0000,0xe5b906e7,0x7c8348a8,
-0x3ffe0000,0xe0ccdeec,0x2a94e111,
-0x3ffe0000,0xdbfbb797,0xdaf23755,
-0x3ffe0000,0xd744fcca,0xd69d6af4,
-0x3ffe0000,0xd2a81d91,0xf12ae45a,
-0x3ffe0000,0xce248c15,0x1f8480e4,
-0x3ffe0000,0xc9b9bd86,0x6e2f27a3,
-0x3ffe0000,0xc5672a11,0x5506dadd,
-0x3ffe0000,0xc12c4cca,0x66709456,
-0x3ffe0000,0xbd08a39f,0x580c36bf,
-0x3ffe0000,0xb8fbaf47,0x62fb9ee9,
-0x3ffe0000,0xb504f333,0xf9de6484,
-0x3ffe0000,0xb123f581,0xd2ac2590,
-0x3ffe0000,0xad583eea,0x42a14ac6,
-0x3ffe0000,0xa9a15ab4,0xea7c0ef8,
-0x3ffe0000,0xa5fed6a9,0xb15138ea,
-0x3ffe0000,0xa2704303,0x0c496819,
-0x3ffe0000,0x9ef53260,0x91a111ae,
-0x3ffe0000,0x9b8d39b9,0xd54e5539,
-0x3ffe0000,0x9837f051,0x8db8a96f,
-0x3ffe0000,0x94f4efa8,0xfef70961,
-0x3ffe0000,0x91c3d373,0xab11c336,
-0x3ffe0000,0x8ea4398b,0x45cd53c0,
-0x3ffe0000,0x8b95c1e3,0xea8bd6e7,
-0x3ffe0000,0x88980e80,0x92da8527,
-0x3ffe0000,0x85aac367,0xcc487b15,
-0x3ffe0000,0x82cd8698,0xac2ba1d7,
-0x3ffe0000,0x80000000,0x00000000,
-};
-static long B[51] = {
-0x00000000,0x00000000,0x00000000,
-0x3fbd0000,0xf73a18f5,0xdb301f87,
-0xbfbc0000,0xbf4a2932,0x3e46ac15,
-0x3fb90000,0xcb12a091,0xba667944,
-0x3fbc0000,0xe69a2ee6,0x40b4ff78,
-0xbfbb0000,0xee53e383,0x5069c895,
-0x3fbc0000,0xf8ab4325,0x93767cde,
-0xbfbd0000,0xaefdc093,0x25e0a10c,
-0x3fbd0000,0xb2fb1366,0xea957d3e,
-0x3fbd0000,0x93015191,0xeb345d89,
-0x3fbb0000,0xe5ebfb10,0xb88380d9,
-0xbfbd0000,0xbeddc1ec,0x288c045d,
-0x3fbd0000,0x8d5a4630,0x5c85eded,
-0x3fba0000,0xfd6d8e0a,0xe5ac9d82,
-0xbfb90000,0x8373af14,0xeb586dfd,
-0xbfbc0000,0xe8da91cf,0x7aacf938,
-0x00000000,0x00000000,0x00000000,
-};
-static long R[] = {
-0x3fee0000,0xfd2aee1d,0x530ea69b,
-0x3ff20000,0xa1825960,0x8e7ec746,
-0x3ff50000,0xaec3fd6a,0xadda63b6,
-0x3ff80000,0x9d955b7c,0xfd99c104,
-0x3ffa0000,0xe35846b8,0x249de05e,
-0x3ffc0000,0xf5fdeffc,0x162c5d1d,
-0x3ffe0000,0xb17217f7,0xd1cf79aa,
-};
-
-#define douba(k) (*(long double *)&A[3*(k)])
-#define doubb(k) (*(long double *)&B[3*(k)])
-#define MEXP (NXT*16384.0L)
-#ifdef DENORMAL
-#define MNEXP (-NXT*(16384.0L+64.0L))
-#else
-#define MNEXP (-NXT*16382.0L)
-#endif
-static long L[3] = {0x3ffd0000,0xe2a8eca5,0x705fc2ef};
-#define LOG2EA (*(long double *)(&L[0]))
-#endif
-
-
-#define F W
-#define Fa Wa
-#define Fb Wb
-#define G W
-#define Ga Wa
-#define Gb u
-#define H W
-#define Ha Wb
-#define Hb Wb
-
-#ifndef __MINGW32__
-extern long double MAXNUML;
-#endif
-
-static VOLATILE long double z;
-static long double w, W, Wa, Wb, ya, yb, u;
-
-#ifdef __MINGW32__
-static __inline__ long double reducl( long double );
-extern long double __powil ( long double, int );
-extern long double powl ( long double x, long double y);
-#else
-#ifdef ANSIPROT
-extern long double floorl ( long double );
-extern long double fabsl ( long double );
-extern long double frexpl ( long double, int * );
-extern long double ldexpl ( long double, int );
-extern long double polevll ( long double, void *, int );
-extern long double p1evll ( long double, void *, int );
-extern long double __powil ( long double, int );
-extern int isnanl ( long double );
-extern int isfinitel ( long double );
-static long double reducl( long double );
-extern int signbitl ( long double );
-#else
-long double floorl(), fabsl(), frexpl(), ldexpl();
-long double polevll(), p1evll(), __powil();
-static long double reducl();
-int isnanl(), isfinitel(), signbitl();
-#endif /* __MINGW32__ */
-
-#ifdef INFINITIES
-extern long double INFINITYL;
-#else
-#define INFINITYL MAXNUML
-#endif
-
-#ifdef NANS
-extern long double NANL;
-#endif
-#ifdef MINUSZERO
-extern long double NEGZEROL;
-#endif
-
-#endif /* __MINGW32__ */
-
-#ifdef __MINGW32__
-
-/* No error checking. We handle Infs and zeros ourselves. */
-static __inline__ long double
-__fast_ldexpl (long double x, int expn)
-{
- long double res;
- __asm__ ("fscale"
- : "=t" (res)
- : "0" (x), "u" ((long double) expn));
- return res;
-}
-
-#define ldexpl __fast_ldexpl
-
-#endif
-
-
-long double powl( x, y )
-long double x, y;
-{
-/* double F, Fa, Fb, G, Ga, Gb, H, Ha, Hb */
-int i, nflg, iyflg, yoddint;
-long e;
-
-if( y == 0.0L )
- return( 1.0L );
-
-#ifdef NANS
-if( isnanl(x) )
- {
- _SET_ERRNO (EDOM);
- return( x );
- }
-if( isnanl(y) )
- {
- _SET_ERRNO (EDOM);
- return( y );
- }
-#endif
-
-if( y == 1.0L )
- return( x );
-
-if( isinfl(y) && (x == -1.0L || x == 1.0L) )
- return( y );
-
-if( x == 1.0L )
- return( 1.0L );
-
-if( y >= MAXNUML )
- {
- _SET_ERRNO (ERANGE);
-#ifdef INFINITIES
- if( x > 1.0L )
- return( INFINITYL );
-#else
- if( x > 1.0L )
- return( MAXNUML );
-#endif
- if( x > 0.0L && x < 1.0L )
- return( 0.0L );
-#ifdef INFINITIES
- if( x < -1.0L )
- return( INFINITYL );
-#else
- if( x < -1.0L )
- return( MAXNUML );
-#endif
- if( x > -1.0L && x < 0.0L )
- return( 0.0L );
- }
-if( y <= -MAXNUML )
- {
- _SET_ERRNO (ERANGE);
- if( x > 1.0L )
- return( 0.0L );
-#ifdef INFINITIES
- if( x > 0.0L && x < 1.0L )
- return( INFINITYL );
-#else
- if( x > 0.0L && x < 1.0L )
- return( MAXNUML );
-#endif
- if( x < -1.0L )
- return( 0.0L );
-#ifdef INFINITIES
- if( x > -1.0L && x < 0.0L )
- return( INFINITYL );
-#else
- if( x > -1.0L && x < 0.0L )
- return( MAXNUML );
-#endif
- }
-if( x >= MAXNUML )
- {
-#if INFINITIES
- if( y > 0.0L )
- return( INFINITYL );
-#else
- if( y > 0.0L )
- return( MAXNUML );
-#endif
- return( 0.0L );
- }
-
-w = floorl(y);
-/* Set iyflg to 1 if y is an integer. */
-iyflg = 0;
-if( w == y )
- iyflg = 1;
-
-/* Test for odd integer y. */
-yoddint = 0;
-if( iyflg )
- {
- ya = fabsl(y);
- ya = floorl(0.5L * ya);
- yb = 0.5L * fabsl(w);
- if( ya != yb )
- yoddint = 1;
- }
-
-if( x <= -MAXNUML )
- {
- if( y > 0.0L )
- {
-#ifdef INFINITIES
- if( yoddint )
- return( -INFINITYL );
- return( INFINITYL );
-#else
- if( yoddint )
- return( -MAXNUML );
- return( MAXNUML );
-#endif
- }
- if( y < 0.0L )
- {
-#ifdef MINUSZERO
- if( yoddint )
- return( NEGZEROL );
-#endif
- return( 0.0 );
- }
- }
-
-
-nflg = 0; /* flag = 1 if x<0 raised to integer power */
-if( x <= 0.0L )
- {
- if( x == 0.0L )
- {
- if( y < 0.0 )
- {
-#ifdef MINUSZERO
- if( signbitl(x) && yoddint )
- return( -INFINITYL );
-#endif
-#ifdef INFINITIES
- return( INFINITYL );
-#else
- return( MAXNUML );
-#endif
- }
- if( y > 0.0 )
- {
-#ifdef MINUSZERO
- if( signbitl(x) && yoddint )
- return( NEGZEROL );
-#endif
- return( 0.0 );
- }
- if( y == 0.0L )
- return( 1.0L ); /* 0**0 */
- else
- return( 0.0L ); /* 0**y */
- }
- else
- {
- if( iyflg == 0 )
- { /* noninteger power of negative number */
- mtherr( fname, DOMAIN );
- _SET_ERRNO (EDOM);
-#ifdef NANS
- return(NANL);
-#else
- return(0.0L);
-#endif
- }
- nflg = 1;
- }
- }
-
-/* Integer power of an integer. */
-
-if( iyflg )
- {
- i = w;
- w = floorl(x);
- if( (w == x) && (fabsl(y) < 32768.0) )
- {
- w = __powil( x, (int) y );
- return( w );
- }
- }
-
-
-if( nflg )
- x = fabsl(x);
-
-/* separate significand from exponent */
-x = frexpl( x, &i );
-e = i;
-
-/* find significand in antilog table A[] */
-i = 1;
-if( x <= douba(17) )
- i = 17;
-if( x <= douba(i+8) )
- i += 8;
-if( x <= douba(i+4) )
- i += 4;
-if( x <= douba(i+2) )
- i += 2;
-if( x >= douba(1) )
- i = -1;
-i += 1;
-
-
-/* Find (x - A[i])/A[i]
- * in order to compute log(x/A[i]):
- *
- * log(x) = log( a x/a ) = log(a) + log(x/a)
- *
- * log(x/a) = log(1+v), v = x/a - 1 = (x-a)/a
- */
-x -= douba(i);
-x -= doubb(i/2);
-x /= douba(i);
-
-
-/* rational approximation for log(1+v):
- *
- * log(1+v) = v - v**2/2 + v**3 P(v) / Q(v)
- */
-z = x*x;
-w = x * ( z * polevll( x, P, 3 ) / p1evll( x, Q, 3 ) );
-w = w - ldexpl( z, -1 ); /* w - 0.5 * z */
-
-/* Convert to base 2 logarithm:
- * multiply by log2(e) = 1 + LOG2EA
- */
-z = LOG2EA * w;
-z += w;
-z += LOG2EA * x;
-z += x;
-
-/* Compute exponent term of the base 2 logarithm. */
-w = -i;
-w = ldexpl( w, -LNXT ); /* divide by NXT */
-w += e;
-/* Now base 2 log of x is w + z. */
-
-/* Multiply base 2 log by y, in extended precision. */
-
-/* separate y into large part ya
- * and small part yb less than 1/NXT
- */
-ya = reducl(y);
-yb = y - ya;
-
-/* (w+z)(ya+yb)
- * = w*ya + w*yb + z*y
- */
-F = z * y + w * yb;
-Fa = reducl(F);
-Fb = F - Fa;
-
-G = Fa + w * ya;
-Ga = reducl(G);
-Gb = G - Ga;
-
-H = Fb + Gb;
-Ha = reducl(H);
-w = ldexpl( Ga + Ha, LNXT );
-
-/* Test the power of 2 for overflow */
-if( w > MEXP )
- {
- _SET_ERRNO (ERANGE);
- mtherr( fname, OVERFLOW );
- return( MAXNUML );
- }
-
-if( w < MNEXP )
- {
- _SET_ERRNO (ERANGE);
- mtherr( fname, UNDERFLOW );
- return( 0.0L );
- }
-
-e = w;
-Hb = H - Ha;
-
-if( Hb > 0.0L )
- {
- e += 1;
- Hb -= (1.0L/NXT); /*0.0625L;*/
- }
-
-/* Now the product y * log2(x) = Hb + e/NXT.
- *
- * Compute base 2 exponential of Hb,
- * where -0.0625 <= Hb <= 0.
- */
-z = Hb * polevll( Hb, R, 6 ); /* z = 2**Hb - 1 */
-
-/* Express e/NXT as an integer plus a negative number of (1/NXT)ths.
- * Find lookup table entry for the fractional power of 2.
- */
-if( e < 0 )
- i = 0;
-else
- i = 1;
-i = e/NXT + i;
-e = NXT*i - e;
-w = douba( e );
-z = w * z; /* 2**-e * ( 1 + (2**Hb-1) ) */
-z = z + w;
-z = ldexpl( z, i ); /* multiply by integer power of 2 */
-
-if( nflg )
- {
-/* For negative x,
- * find out if the integer exponent
- * is odd or even.
- */
- w = ldexpl( y, -1 );
- w = floorl(w);
- w = ldexpl( w, 1 );
- if( w != y )
- z = -z; /* odd exponent */
- }
-
-return( z );
-}
-
-static __inline__ long double
-__convert_inf_to_maxnum(long double x)
-{
- if (isinf(x))
- return (x > 0.0L ? MAXNUML : -MAXNUML);
- else
- return x;
-}
-
-
-/* Find a multiple of 1/NXT that is within 1/NXT of x. */
-static __inline__ long double reducl(x)
-long double x;
-{
-long double t;
-
-/* If the call to ldexpl overflows, set it to MAXNUML.
- This avoids Inf - Inf = Nan result when calculating the 'small'
- part of a reduction. Instead, the small part becomes Inf,
- causing under/overflow when adding it to the 'large' part.
- There must be a cleaner way of doing this. */
-t = __convert_inf_to_maxnum (ldexpl( x, LNXT ));
-t = floorl( t );
-t = ldexpl( t, -LNXT );
-return(t);
-}
diff --git a/winsup/mingw/mingwex/math/remainder.S b/winsup/mingw/mingwex/math/remainder.S
deleted file mode 100644
index 01930d3ba..000000000
--- a/winsup/mingw/mingwex/math/remainder.S
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
- .file "remainder.S"
- .text
- .align 4
-.globl _remainder
- .def _remainder; .scl 2; .type 32; .endef
-_remainder:
- fldl 12(%esp)
- fldl 4(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- ret
diff --git a/winsup/mingw/mingwex/math/remainderf.S b/winsup/mingw/mingwex/math/remainderf.S
deleted file mode 100644
index 81e78415a..000000000
--- a/winsup/mingw/mingwex/math/remainderf.S
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
- .file "remainderf.S"
- .text
- .align 4
-.globl _remainder
- .def _remainderf; .scl 2; .type 32; .endef
-_remainderf:
- flds 8(%esp)
- flds 4(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- ret
diff --git a/winsup/mingw/mingwex/math/remainderl.S b/winsup/mingw/mingwex/math/remainderl.S
deleted file mode 100644
index b5ce3736d..000000000
--- a/winsup/mingw/mingwex/math/remainderl.S
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "remainderl.S"
- .text
- .align 4
-.globl _remainderl
- .def _remainderl; .scl 2; .type 32; .endef
-_remainderl:
- fldt 16(%esp)
- fldt 4(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- ret
diff --git a/winsup/mingw/mingwex/math/remquo.S b/winsup/mingw/mingwex/math/remquo.S
deleted file mode 100644
index 987c37ca5..000000000
--- a/winsup/mingw/mingwex/math/remquo.S
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Written by Ulrich Drepper <drepper@cygnus.com>.
- * Based on e_remainder by J.T. Conklin <jtc@netbsd.org>.
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.ne
- * Public domain.
- */
-
- .file "remquo.S"
- .text
- .align 4;
-.globl _remquo;
-_remquo:
- fldl 4 +8(%esp)
- fldl 4(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- movl %eax, %ecx
- shrl $8, %eax
- shrl $12, %ecx
- andl $4, %ecx
- andl $3, %eax
- orl %eax, %ecx
- movl $0xef2960, %eax
- shrl %cl, %eax
- andl $3, %eax
- movl 4 +8 +8(%esp), %ecx
- movl 4 +4(%esp), %edx
- xorl 4 +8 +4(%esp), %edx
- testl $0x80000000, %edx
- jz 1f
- negl %eax
-1: movl %eax, (%ecx)
-
- ret
diff --git a/winsup/mingw/mingwex/math/remquof.S b/winsup/mingw/mingwex/math/remquof.S
deleted file mode 100644
index af540ef5b..000000000
--- a/winsup/mingw/mingwex/math/remquof.S
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Written by Ulrich Drepper <drepper@cygnus.com>.
- * Based on e_remainder by J.T. Conklin <jtc@netbsd.org>.
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.ne
- * Public domain.
- */
-
- .file "remquo.S"
- .text
- .align 4;
-.globl _remquof;
-_remquof:
- flds 4 +4(%esp)
- flds 4(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- movl %eax, %ecx
- shrl $8, %eax
- shrl $12, %ecx
- andl $4, %ecx
- andl $3, %eax
- orl %eax, %ecx
- movl $0xef2960, %eax
- shrl %cl, %eax
- andl $3, %eax
- movl 4 +4 +4(%esp), %ecx
- movl 4(%esp), %edx
- xorl 4 +4(%esp), %edx
- testl $0x80000000, %edx
- jz 1f
- negl %eax
-1: movl %eax, (%ecx)
-
- ret
diff --git a/winsup/mingw/mingwex/math/remquol.S b/winsup/mingw/mingwex/math/remquol.S
deleted file mode 100644
index e6f1b5420..000000000
--- a/winsup/mingw/mingwex/math/remquol.S
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Written by Ulrich Drepper <drepper@cygnus.com>.
- * Based on e_remainder by J.T. Conklin <jtc@netbsd.org>.
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- * Public domain.
- */
- .text
- .align 4;
-.globl _remquol;
- _remquol:
- fldt 4 +12(%esp)
- fldt 4(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- movl %eax, %ecx
- shrl $8, %eax
- shrl $12, %ecx
- andl $4, %ecx
- andl $3, %eax
- orl %eax, %ecx
- movl $0xef2960, %eax
- shrl %cl, %eax
- andl $3, %eax
- movl 4 +12 +12(%esp), %ecx
- movl 4 +8(%esp), %edx
- xorl 4 +12 +8(%esp), %edx
- testl $0x8000, %edx
- jz 1f
- negl %eax
-1: movl %eax, (%ecx)
-
- ret
diff --git a/winsup/mingw/mingwex/math/rint.c b/winsup/mingw/mingwex/math/rint.c
deleted file mode 100644
index 3198f4b26..000000000
--- a/winsup/mingw/mingwex/math/rint.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <math.h>
-double rint (double x){
- double retval;
- __asm__ ("frndint;" : "=t" (retval) : "0" (x));
- return retval;
-}
diff --git a/winsup/mingw/mingwex/math/rintf.c b/winsup/mingw/mingwex/math/rintf.c
deleted file mode 100644
index 0b05e8f89..000000000
--- a/winsup/mingw/mingwex/math/rintf.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-
-float rintf (float x){
- float retval;
- __asm__ ("frndint;": "=t" (retval) : "0" (x));
- return retval;
-}
diff --git a/winsup/mingw/mingwex/math/rintl.c b/winsup/mingw/mingwex/math/rintl.c
deleted file mode 100644
index ffc9d1107..000000000
--- a/winsup/mingw/mingwex/math/rintl.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-
-long double rintl (long double x){
- long double retval;
- __asm__ ("frndint;": "=t" (retval) : "0" (x));
- return retval;
-}
diff --git a/winsup/mingw/mingwex/math/round.c b/winsup/mingw/mingwex/math/round.c
deleted file mode 100644
index d2d4cab5e..000000000
--- a/winsup/mingw/mingwex/math/round.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <math.h>
-
-double
-round (double x)
-{
- /* Add +/- 0.5 then then round towards zero. */
- return trunc ( x + (x >= 0.0 ? 0.5 : -0.5));
-}
diff --git a/winsup/mingw/mingwex/math/roundf.c b/winsup/mingw/mingwex/math/roundf.c
deleted file mode 100644
index b50d950a7..000000000
--- a/winsup/mingw/mingwex/math/roundf.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <math.h>
-
-float
-roundf (float x)
-{
- /* Add +/- 0.5 then then round towards zero. */
- return truncf ( x + (x >= 0.0F ? 0.5F : -0.5F));
-}
diff --git a/winsup/mingw/mingwex/math/roundl.c b/winsup/mingw/mingwex/math/roundl.c
deleted file mode 100644
index 9c5f0aca1..000000000
--- a/winsup/mingw/mingwex/math/roundl.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <math.h>
-
-long double
-roundl (long double x)
-{
- /* Add +/- 0.5 then then round towards zero. */
- return truncl ( x + (x >= 0.0L ? 0.5L : -0.5L));
-}
diff --git a/winsup/mingw/mingwex/math/s_erf.c b/winsup/mingw/mingwex/math/s_erf.c
deleted file mode 100644
index 3cba24dd2..000000000
--- a/winsup/mingw/mingwex/math/s_erf.c
+++ /dev/null
@@ -1,345 +0,0 @@
-
-/* @(#)s_erf.c 1.3 95/01/18 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunSoft, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/* double erf(double x)
- * double erfc(double x)
- * x
- * 2 |\
- * erf(x) = --------- | exp(-t*t)dt
- * sqrt(pi) \|
- * 0
- *
- * erfc(x) = 1-erf(x)
- * Note that
- * erf(-x) = -erf(x)
- * erfc(-x) = 2 - erfc(x)
- *
- * Method:
- * 1. For |x| in [0, 0.84375]
- * erf(x) = x + x*R(x^2)
- * erfc(x) = 1 - erf(x) if x in [-.84375,0.25]
- * = 0.5 + ((0.5-x)-x*R) if x in [0.25,0.84375]
- * where R = P/Q where P is an odd poly of degree 8 and
- * Q is an odd poly of degree 10.
- * -57.90
- * | R - (erf(x)-x)/x | <= 2
- *
- *
- * Remark. The formula is derived by noting
- * erf(x) = (2/sqrt(pi))*(x - x^3/3 + x^5/10 - x^7/42 + ....)
- * and that
- * 2/sqrt(pi) = 1.128379167095512573896158903121545171688
- * is close to one. The interval is chosen because the fix
- * point of erf(x) is near 0.6174 (i.e., erf(x)=x when x is
- * near 0.6174), and by some experiment, 0.84375 is chosen to
- * guarantee the error is less than one ulp for erf.
- *
- * 2. For |x| in [0.84375,1.25], let s = |x| - 1, and
- * c = 0.84506291151 rounded to single (24 bits)
- * erf(x) = sign(x) * (c + P1(s)/Q1(s))
- * erfc(x) = (1-c) - P1(s)/Q1(s) if x > 0
- * 1+(c+P1(s)/Q1(s)) if x < 0
- * |P1/Q1 - (erf(|x|)-c)| <= 2**-59.06
- * Remark: here we use the taylor series expansion at x=1.
- * erf(1+s) = erf(1) + s*Poly(s)
- * = 0.845.. + P1(s)/Q1(s)
- * That is, we use rational approximation to approximate
- * erf(1+s) - (c = (single)0.84506291151)
- * Note that |P1/Q1|< 0.078 for x in [0.84375,1.25]
- * where
- * P1(s) = degree 6 poly in s
- * Q1(s) = degree 6 poly in s
- *
- * 3. For x in [1.25,1/0.35(~2.857143)],
- * erfc(x) = (1/x)*exp(-x*x-0.5625+R1/S1)
- * erf(x) = 1 - erfc(x)
- * where
- * R1(z) = degree 7 poly in z, (z=1/x^2)
- * S1(z) = degree 8 poly in z
- *
- * 4. For x in [1/0.35,28]
- * erfc(x) = (1/x)*exp(-x*x-0.5625+R2/S2) if x > 0
- * = 2.0 - (1/x)*exp(-x*x-0.5625+R2/S2) if -6<x<0
- * = 2.0 - tiny (if x <= -6)
- * erf(x) = sign(x)*(1.0 - erfc(x)) if x < 6, else
- * erf(x) = sign(x)*(1.0 - tiny)
- * where
- * R2(z) = degree 6 poly in z, (z=1/x^2)
- * S2(z) = degree 7 poly in z
- *
- * Note1:
- * To compute exp(-x*x-0.5625+R/S), let s be a single
- * precision number and s := x; then
- * -x*x = -s*s + (s-x)*(s+x)
- * exp(-x*x-0.5626+R/S) =
- * exp(-s*s-0.5625)*exp((s-x)*(s+x)+R/S);
- * Note2:
- * Here 4 and 5 make use of the asymptotic series
- * exp(-x*x)
- * erfc(x) ~ ---------- * ( 1 + Poly(1/x^2) )
- * x*sqrt(pi)
- * We use rational approximation to approximate
- * g(s)=f(1/x^2) = log(erfc(x)*x) - x*x + 0.5625
- * Here is the error bound for R1/S1 and R2/S2
- * |R1/S1 - f(x)| < 2**(-62.57)
- * |R2/S2 - f(x)| < 2**(-61.52)
- *
- * 5. For inf > x >= 28
- * erf(x) = sign(x) *(1 - tiny) (raise inexact)
- * erfc(x) = tiny*tiny (raise underflow) if x > 0
- * = 2 - tiny if x<0
- *
- * 7. Special case:
- * erf(0) = 0, erf(inf) = 1, erf(-inf) = -1,
- * erfc(0) = 1, erfc(inf) = 0, erfc(-inf) = 2,
- * erfc/erf(NaN) is NaN
- */
-
-
-/* #include "fdlibm.h" */
-
-#include <math.h>
-#include <stdint.h>
-#include <errno.h>
-
-#define __ieee754_exp exp
-
-typedef union
-{
- double value;
- struct
- {
- uint32_t lsw;
- uint32_t msw;
- } parts;
-} ieee_double_shape_type;
-
-
-static inline int __get_hi_word(const double x)
-{
- ieee_double_shape_type u;
- u.value = x;
- return u.parts.msw;
-}
-
-static inline void __trunc_lo_word(double *x)
-{
- ieee_double_shape_type u;
- u.value = *x;
- u.parts.lsw = 0;
- *x = u.value;
-}
-
-
-#ifdef __STDC__
-static const double
-#else
-static double
-#endif
-tiny = 1e-300,
-half= 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
-one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
-two = 2.00000000000000000000e+00, /* 0x40000000, 0x00000000 */
- /* c = (float)0.84506291151 */
-erx = 8.45062911510467529297e-01, /* 0x3FEB0AC1, 0x60000000 */
-/*
- * Coefficients for approximation to erf on [0,0.84375]
- */
-efx = 1.28379167095512586316e-01, /* 0x3FC06EBA, 0x8214DB69 */
-efx8= 1.02703333676410069053e+00, /* 0x3FF06EBA, 0x8214DB69 */
-pp0 = 1.28379167095512558561e-01, /* 0x3FC06EBA, 0x8214DB68 */
-pp1 = -3.25042107247001499370e-01, /* 0xBFD4CD7D, 0x691CB913 */
-pp2 = -2.84817495755985104766e-02, /* 0xBF9D2A51, 0xDBD7194F */
-pp3 = -5.77027029648944159157e-03, /* 0xBF77A291, 0x236668E4 */
-pp4 = -2.37630166566501626084e-05, /* 0xBEF8EAD6, 0x120016AC */
-qq1 = 3.97917223959155352819e-01, /* 0x3FD97779, 0xCDDADC09 */
-qq2 = 6.50222499887672944485e-02, /* 0x3FB0A54C, 0x5536CEBA */
-qq3 = 5.08130628187576562776e-03, /* 0x3F74D022, 0xC4D36B0F */
-qq4 = 1.32494738004321644526e-04, /* 0x3F215DC9, 0x221C1A10 */
-qq5 = -3.96022827877536812320e-06, /* 0xBED09C43, 0x42A26120 */
-/*
- * Coefficients for approximation to erf in [0.84375,1.25]
- */
-pa0 = -2.36211856075265944077e-03, /* 0xBF6359B8, 0xBEF77538 */
-pa1 = 4.14856118683748331666e-01, /* 0x3FDA8D00, 0xAD92B34D */
-pa2 = -3.72207876035701323847e-01, /* 0xBFD7D240, 0xFBB8C3F1 */
-pa3 = 3.18346619901161753674e-01, /* 0x3FD45FCA, 0x805120E4 */
-pa4 = -1.10894694282396677476e-01, /* 0xBFBC6398, 0x3D3E28EC */
-pa5 = 3.54783043256182359371e-02, /* 0x3FA22A36, 0x599795EB */
-pa6 = -2.16637559486879084300e-03, /* 0xBF61BF38, 0x0A96073F */
-qa1 = 1.06420880400844228286e-01, /* 0x3FBB3E66, 0x18EEE323 */
-qa2 = 5.40397917702171048937e-01, /* 0x3FE14AF0, 0x92EB6F33 */
-qa3 = 7.18286544141962662868e-02, /* 0x3FB2635C, 0xD99FE9A7 */
-qa4 = 1.26171219808761642112e-01, /* 0x3FC02660, 0xE763351F */
-qa5 = 1.36370839120290507362e-02, /* 0x3F8BEDC2, 0x6B51DD1C */
-qa6 = 1.19844998467991074170e-02, /* 0x3F888B54, 0x5735151D */
-/*
- * Coefficients for approximation to erfc in [1.25,1/0.35]
- */
-ra0 = -9.86494403484714822705e-03, /* 0xBF843412, 0x600D6435 */
-ra1 = -6.93858572707181764372e-01, /* 0xBFE63416, 0xE4BA7360 */
-ra2 = -1.05586262253232909814e+01, /* 0xC0251E04, 0x41B0E726 */
-ra3 = -6.23753324503260060396e+01, /* 0xC04F300A, 0xE4CBA38D */
-ra4 = -1.62396669462573470355e+02, /* 0xC0644CB1, 0x84282266 */
-ra5 = -1.84605092906711035994e+02, /* 0xC067135C, 0xEBCCABB2 */
-ra6 = -8.12874355063065934246e+01, /* 0xC0545265, 0x57E4D2F2 */
-ra7 = -9.81432934416914548592e+00, /* 0xC023A0EF, 0xC69AC25C */
-sa1 = 1.96512716674392571292e+01, /* 0x4033A6B9, 0xBD707687 */
-sa2 = 1.37657754143519042600e+02, /* 0x4061350C, 0x526AE721 */
-sa3 = 4.34565877475229228821e+02, /* 0x407B290D, 0xD58A1A71 */
-sa4 = 6.45387271733267880336e+02, /* 0x40842B19, 0x21EC2868 */
-sa5 = 4.29008140027567833386e+02, /* 0x407AD021, 0x57700314 */
-sa6 = 1.08635005541779435134e+02, /* 0x405B28A3, 0xEE48AE2C */
-sa7 = 6.57024977031928170135e+00, /* 0x401A47EF, 0x8E484A93 */
-sa8 = -6.04244152148580987438e-02, /* 0xBFAEEFF2, 0xEE749A62 */
-/*
- * Coefficients for approximation to erfc in [1/.35,28]
- */
-rb0 = -9.86494292470009928597e-03, /* 0xBF843412, 0x39E86F4A */
-rb1 = -7.99283237680523006574e-01, /* 0xBFE993BA, 0x70C285DE */
-rb2 = -1.77579549177547519889e+01, /* 0xC031C209, 0x555F995A */
-rb3 = -1.60636384855821916062e+02, /* 0xC064145D, 0x43C5ED98 */
-rb4 = -6.37566443368389627722e+02, /* 0xC083EC88, 0x1375F228 */
-rb5 = -1.02509513161107724954e+03, /* 0xC0900461, 0x6A2E5992 */
-rb6 = -4.83519191608651397019e+02, /* 0xC07E384E, 0x9BDC383F */
-sb1 = 3.03380607434824582924e+01, /* 0x403E568B, 0x261D5190 */
-sb2 = 3.25792512996573918826e+02, /* 0x40745CAE, 0x221B9F0A */
-sb3 = 1.53672958608443695994e+03, /* 0x409802EB, 0x189D5118 */
-sb4 = 3.19985821950859553908e+03, /* 0x40A8FFB7, 0x688C246A */
-sb5 = 2.55305040643316442583e+03, /* 0x40A3F219, 0xCEDF3BE6 */
-sb6 = 4.74528541206955367215e+02, /* 0x407DA874, 0xE79FE763 */
-sb7 = -2.24409524465858183362e+01; /* 0xC03670E2, 0x42712D62 */
-
-#ifdef __STDC__
- double erf(double x)
-#else
- double erf(x)
- double x;
-#endif
-{
- int hx,ix,i;
- double R,S,P,Q,s,y,z,r;
- hx = __get_hi_word(x);
- ix = hx&0x7fffffff;
- if(ix>=0x7ff00000) { /* erf(nan)=nan */
- i = ((unsigned)hx>>31)<<1;
- return (double)(1-i)+one/x; /* erf(+-inf)=+-1 */
- }
-
- if(ix < 0x3feb0000) { /* |x|<0.84375 */
- if(ix < 0x3e300000) { /* |x|<2**-28 */
- if (ix < 0x00800000)
- return 0.125*(8.0*x+efx8*x); /*avoid underflow */
- return x + efx*x;
- }
- z = x*x;
- r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4)));
- s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5))));
- y = r/s;
- return x + x*y;
- }
- if(ix < 0x3ff40000) { /* 0.84375 <= |x| < 1.25 */
- s = fabs(x)-one;
- P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6)))));
- Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6)))));
- if(hx>=0) return erx + P/Q; else return -erx - P/Q;
- }
- if (ix >= 0x40180000) { /* inf>|x|>=6 */
- if(hx>=0) return one-tiny; else return tiny-one;
- }
- x = fabs(x);
- s = one/(x*x);
- if(ix< 0x4006DB6E) { /* |x| < 1/0.35 */
- R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(
- ra5+s*(ra6+s*ra7))))));
- S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(
- sa5+s*(sa6+s*(sa7+s*sa8)))))));
- } else { /* |x| >= 1/0.35 */
- R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(
- rb5+s*rb6)))));
- S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(
- sb5+s*(sb6+s*sb7))))));
- }
- z = x;
- __trunc_lo_word(&z);
- r = __ieee754_exp(-z*z-0.5625)*__ieee754_exp((z-x)*(z+x)+R/S);
- if(hx>=0) return one-r/x; else return r/x-one;
-}
-
-#ifdef __STDC__
- double erfc(double x)
-#else
- double erfc(x)
- double x;
-#endif
-{
- int hx,ix;
- double R,S,P,Q,s,y,z,r;
- hx = __get_hi_word(x);
- ix = hx&0x7fffffff;
- if(ix>=0x7ff00000) { /* erfc(nan)=nan */
- /* erfc(+-inf)=0,2 */
- return (double)(((unsigned)hx>>31)<<1)+one/x;
- }
-
- if(ix < 0x3feb0000) { /* |x|<0.84375 */
- if(ix < 0x3c700000) /* |x|<2**-56 */
- return one-x;
- z = x*x;
- r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4)));
- s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5))));
- y = r/s;
- if(hx < 0x3fd00000) { /* x<1/4 */
- return one-(x+x*y);
- } else {
- r = x*y;
- r += (x-half);
- return half - r ;
- }
- }
- if(ix < 0x3ff40000) { /* 0.84375 <= |x| < 1.25 */
- s = fabs(x)-one;
- P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6)))));
- Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6)))));
- if(hx>=0) {
- z = one-erx; return z - P/Q;
- } else {
- z = erx+P/Q; return one+z;
- }
- }
- if (ix < 0x403c0000) { /* |x|<28 */
- x = fabs(x);
- s = one/(x*x);
- if(ix< 0x4006DB6D) { /* |x| < 1/.35 ~ 2.857143*/
- R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(
- ra5+s*(ra6+s*ra7))))));
- S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(
- sa5+s*(sa6+s*(sa7+s*sa8)))))));
- } else { /* |x| >= 1/.35 ~ 2.857143 */
- if(hx<0&&ix>=0x40180000) return two-tiny;/* x < -6 */
- R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(
- rb5+s*rb6)))));
- S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(
- sb5+s*(sb6+s*sb7))))));
- }
- z = x;
- __trunc_lo_word(&z);
- r = __ieee754_exp(-z*z-0.5625)*
- __ieee754_exp((z-x)*(z+x)+R/S);
- if(hx>0) return r/x; else return two-r/x;
- } else {
- /* set range error */
- errno = ERANGE;
- if(hx>0) return tiny*tiny; else return two-tiny;
- }
-}
diff --git a/winsup/mingw/mingwex/math/scalbn.S b/winsup/mingw/mingwex/math/scalbn.S
deleted file mode 100644
index 76e2d396e..000000000
--- a/winsup/mingw/mingwex/math/scalbn.S
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
- .file "scalbn.S"
- .text
- .align 4
-.globl _scalbn
- .def _scalbn; .scl 2; .type 32; .endef
-_scalbn:
- fildl 12(%esp)
- fldl 4(%esp)
- fscale
- fstp %st(1)
- ret
-
-.globl _scalbln
- .set _scalbln,_scalbn
diff --git a/winsup/mingw/mingwex/math/scalbnf.S b/winsup/mingw/mingwex/math/scalbnf.S
deleted file mode 100644
index 1fe42a3de..000000000
--- a/winsup/mingw/mingwex/math/scalbnf.S
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
- .file "scalbnf.S"
- .text
- .align 4
-.globl _scalbnf
- .def _scalbnf; .scl 2; .type 32; .endef
-_scalbnf:
- fildl 8(%esp)
- flds 4(%esp)
- fscale
- fstp %st(1)
- ret
-
-.globl _scalblnf
- .set _scalblnf,_scalbnf
diff --git a/winsup/mingw/mingwex/math/scalbnl.S b/winsup/mingw/mingwex/math/scalbnl.S
deleted file mode 100644
index 77eaff7be..000000000
--- a/winsup/mingw/mingwex/math/scalbnl.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
- .file "scalbnl.S"
- .text
- .align 4
-.globl _scalbnl
- .def _scalbnl; .scl 2; .type 32; .endef
-_scalbnl:
- fildl 16(%esp)
- fldt 4(%esp)
- fscale
- fstp %st(1)
- ret
-
-.globl _scalblnl
- .set _scalblnl,_scalbnl
diff --git a/winsup/mingw/mingwex/math/sf_erf.c b/winsup/mingw/mingwex/math/sf_erf.c
deleted file mode 100644
index 1fca80e94..000000000
--- a/winsup/mingw/mingwex/math/sf_erf.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/* sf_erf.c -- float version of s_erf.c.
- * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
- */
-
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-/*
-#include "fdlibm.h"
-*/
-#include <math.h>
-#include <stdint.h>
-#include <errno.h>
-
-#define __ieee754_expf expf
-
-
-
-typedef union
-{
- float value;
- uint32_t word;
-} ieee_float_shape_type;
-
-/* Get a 32 bit int from a float. */
-
-static inline int
-__get_float_word(float d)
-{
- ieee_float_shape_type u;
- u.value = d;
- return u.word;
-}
-
-/* Set a float from a 32 bit int. */
-
-#define SET_FLOAT_WORD(d,i) \
-do { \
- ieee_float_shape_type sf_u; \
- sf_u.word = (i); \
- (d) = sf_u.value; \
-} while (0)
-
-static inline void __trunc_float_word(float * x)
-{
- ieee_float_shape_type u;
- u.value = * x;
- u.word &= 0xfffff000;
-}
-
-#ifdef __v810__
-#define const
-#endif
-
-#ifdef __STDC__
-static const float
-#else
-static float
-#endif
-tiny = 1e-30,
-half= 5.0000000000e-01, /* 0x3F000000 */
-one = 1.0000000000e+00, /* 0x3F800000 */
-two = 2.0000000000e+00, /* 0x40000000 */
- /* c = (subfloat)0.84506291151 */
-erx = 8.4506291151e-01, /* 0x3f58560b */
-/*
- * Coefficients for approximation to erf on [0,0.84375]
- */
-efx = 1.2837916613e-01, /* 0x3e0375d4 */
-efx8= 1.0270333290e+00, /* 0x3f8375d4 */
-pp0 = 1.2837916613e-01, /* 0x3e0375d4 */
-pp1 = -3.2504209876e-01, /* 0xbea66beb */
-pp2 = -2.8481749818e-02, /* 0xbce9528f */
-pp3 = -5.7702702470e-03, /* 0xbbbd1489 */
-pp4 = -2.3763017452e-05, /* 0xb7c756b1 */
-qq1 = 3.9791721106e-01, /* 0x3ecbbbce */
-qq2 = 6.5022252500e-02, /* 0x3d852a63 */
-qq3 = 5.0813062117e-03, /* 0x3ba68116 */
-qq4 = 1.3249473704e-04, /* 0x390aee49 */
-qq5 = -3.9602282413e-06, /* 0xb684e21a */
-/*
- * Coefficients for approximation to erf in [0.84375,1.25]
- */
-pa0 = -2.3621185683e-03, /* 0xbb1acdc6 */
-pa1 = 4.1485610604e-01, /* 0x3ed46805 */
-pa2 = -3.7220788002e-01, /* 0xbebe9208 */
-pa3 = 3.1834661961e-01, /* 0x3ea2fe54 */
-pa4 = -1.1089469492e-01, /* 0xbde31cc2 */
-pa5 = 3.5478305072e-02, /* 0x3d1151b3 */
-pa6 = -2.1663755178e-03, /* 0xbb0df9c0 */
-qa1 = 1.0642088205e-01, /* 0x3dd9f331 */
-qa2 = 5.4039794207e-01, /* 0x3f0a5785 */
-qa3 = 7.1828655899e-02, /* 0x3d931ae7 */
-qa4 = 1.2617121637e-01, /* 0x3e013307 */
-qa5 = 1.3637083583e-02, /* 0x3c5f6e13 */
-qa6 = 1.1984500103e-02, /* 0x3c445aa3 */
-/*
- * Coefficients for approximation to erfc in [1.25,1/0.35]
- */
-ra0 = -9.8649440333e-03, /* 0xbc21a093 */
-ra1 = -6.9385856390e-01, /* 0xbf31a0b7 */
-ra2 = -1.0558626175e+01, /* 0xc128f022 */
-ra3 = -6.2375331879e+01, /* 0xc2798057 */
-ra4 = -1.6239666748e+02, /* 0xc322658c */
-ra5 = -1.8460508728e+02, /* 0xc3389ae7 */
-ra6 = -8.1287437439e+01, /* 0xc2a2932b */
-ra7 = -9.8143291473e+00, /* 0xc11d077e */
-sa1 = 1.9651271820e+01, /* 0x419d35ce */
-sa2 = 1.3765776062e+02, /* 0x4309a863 */
-sa3 = 4.3456588745e+02, /* 0x43d9486f */
-sa4 = 6.4538726807e+02, /* 0x442158c9 */
-sa5 = 4.2900814819e+02, /* 0x43d6810b */
-sa6 = 1.0863500214e+02, /* 0x42d9451f */
-sa7 = 6.5702495575e+00, /* 0x40d23f7c */
-sa8 = -6.0424413532e-02, /* 0xbd777f97 */
-/*
- * Coefficients for approximation to erfc in [1/.35,28]
- */
-rb0 = -9.8649431020e-03, /* 0xbc21a092 */
-rb1 = -7.9928326607e-01, /* 0xbf4c9dd4 */
-rb2 = -1.7757955551e+01, /* 0xc18e104b */
-rb3 = -1.6063638306e+02, /* 0xc320a2ea */
-rb4 = -6.3756646729e+02, /* 0xc41f6441 */
-rb5 = -1.0250950928e+03, /* 0xc480230b */
-rb6 = -4.8351919556e+02, /* 0xc3f1c275 */
-sb1 = 3.0338060379e+01, /* 0x41f2b459 */
-sb2 = 3.2579251099e+02, /* 0x43a2e571 */
-sb3 = 1.5367296143e+03, /* 0x44c01759 */
-sb4 = 3.1998581543e+03, /* 0x4547fdbb */
-sb5 = 2.5530502930e+03, /* 0x451f90ce */
-sb6 = 4.7452853394e+02, /* 0x43ed43a7 */
-sb7 = -2.2440952301e+01; /* 0xc1b38712 */
-
-#ifdef __STDC__
- float erff(float x)
-#else
- float erff(x)
- float x;
-#endif
-{
- int32_t hx,ix,i;
- float R,S,P,Q,s,y,z,r;
- hx = __get_float_word(x);
- ix = hx&0x7fffffff;
- if(!(ix<0x7f800000L)) { /* erf(nan)=nan */
- i = ((uint32_t)hx>>31)<<1;
- return (float)(1-i)+one/x; /* erf(+-inf)=+-1 */
- }
-
- if(ix < 0x3f580000) { /* |x|<0.84375 */
- if(ix < 0x31800000) { /* |x|<2**-28 */
- if (ix < 0x04000000)
- /*avoid underflow */
- return (float)0.125*((float)8.0*x+efx8*x);
- return x + efx*x;
- }
- z = x*x;
- r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4)));
- s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5))));
- y = r/s;
- return x + x*y;
- }
- if(ix < 0x3fa00000) { /* 0.84375 <= |x| < 1.25 */
- s = fabsf(x)-one;
- P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6)))));
- Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6)))));
- if(hx>=0) return erx + P/Q; else return -erx - P/Q;
- }
- if (ix >= 0x40c00000) { /* inf>|x|>=6 */
- if(hx>=0) return one-tiny; else return tiny-one;
- }
- x = fabsf(x);
- s = one/(x*x);
- if(ix< 0x4036DB6E) { /* |x| < 1/0.35 */
- R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(
- ra5+s*(ra6+s*ra7))))));
- S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(
- sa5+s*(sa6+s*(sa7+s*sa8)))))));
- } else { /* |x| >= 1/0.35 */
- R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(
- rb5+s*rb6)))));
- S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(
- sb5+s*(sb6+s*sb7))))));
- }
- __trunc_float_word (&z);
- r = __ieee754_expf(-z*z-(float)0.5625)*__ieee754_expf((z-x)*(z+x)+R/S);
- if(hx>=0) return one-r/x; else return r/x-one;
-}
-
-#ifdef __STDC__
- float erfcf(float x)
-#else
- float erfcf(x)
- float x;
-#endif
-{
- int32_t hx,ix;
- float R,S,P,Q,s,y,z,r;
- hx = __get_float_word(x);
- ix = hx&0x7fffffff;
- if(!(ix<0x7f800000L)) { /* erfc(nan)=nan */
- /* erfc(+-inf)=0,2 */
- return (float)(((uint32_t)hx>>31)<<1)+one/x;
- }
-
- if(ix < 0x3f580000) { /* |x|<0.84375 */
- if(ix < 0x23800000) /* |x|<2**-56 */
- return one-x;
- z = x*x;
- r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4)));
- s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5))));
- y = r/s;
- if(hx < 0x3e800000) { /* x<1/4 */
- return one-(x+x*y);
- } else {
- r = x*y;
- r += (x-half);
- return half - r ;
- }
- }
- if(ix < 0x3fa00000) { /* 0.84375 <= |x| < 1.25 */
- s = fabsf(x)-one;
- P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6)))));
- Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6)))));
- if(hx>=0) {
- z = one-erx; return z - P/Q;
- } else {
- z = erx+P/Q; return one+z;
- }
- }
-
- if (ix < 0x41e00000) { /* |x|<28 */
- x = fabsf(x);
- s = one/(x*x);
- if(ix< 0x4036DB6D) { /* |x| < 1/.35 ~ 2.857143*/
- R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(
- ra5+s*(ra6+s*ra7))))));
- S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(
- sa5+s*(sa6+s*(sa7+s*sa8)))))));
- } else { /* |x| >= 1/.35 ~ 2.857143 */
- if(hx<0&&ix>=0x40c00000) return two-tiny;/* x < -6 */
- R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(
- rb5+s*rb6)))));
- S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(
- sb5+s*(sb6+s*sb7))))));
- }
- __trunc_float_word (&z);
- r = __ieee754_expf(-z*z-(float)0.5625)*
- __ieee754_expf((z-x)*(z+x)+R/S);
- if(hx>0) return r/x; else return two-r/x;
- } else {
- /* set range error */
- errno = ERANGE;
- if(hx>0) return tiny*tiny; else return two-tiny;
- }
-}
diff --git a/winsup/mingw/mingwex/math/signbit.c b/winsup/mingw/mingwex/math/signbit.c
deleted file mode 100644
index 997ddf86b..000000000
--- a/winsup/mingw/mingwex/math/signbit.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#define __FP_SIGNBIT 0x0200
-
-int __signbit (double x) {
- unsigned short sw;
- __asm__ ("fxam; fstsw %%ax;"
- : "=a" (sw)
- : "t" (x) );
- return (sw & __FP_SIGNBIT) != 0;
-}
-
-#undef signbit
-int __attribute__ ((alias ("__signbit"))) signbit (double);
-
diff --git a/winsup/mingw/mingwex/math/signbitf.c b/winsup/mingw/mingwex/math/signbitf.c
deleted file mode 100644
index 1c96b9f80..000000000
--- a/winsup/mingw/mingwex/math/signbitf.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#define __FP_SIGNBIT 0x0200
-
-int __signbitf (float x) {
- unsigned short sw;
- __asm__ ("fxam; fstsw %%ax;"
- : "=a" (sw)
- : "t" (x) );
- return (sw & __FP_SIGNBIT) != 0;
-}
-int __attribute__ ((alias ("__signbitf"))) signbitf (float);
diff --git a/winsup/mingw/mingwex/math/signbitl.c b/winsup/mingw/mingwex/math/signbitl.c
deleted file mode 100644
index 8b7bca5b3..000000000
--- a/winsup/mingw/mingwex/math/signbitl.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#define __FP_SIGNBIT 0x0200
-
-int __signbitl (long double x) {
- unsigned short sw;
- __asm__ ("fxam; fstsw %%ax;"
- : "=a" (sw)
- : "t" (x) );
- return (sw & __FP_SIGNBIT) != 0;
-}
-
-int __attribute__ ((alias ("__signbitl"))) signbitl (long double);
diff --git a/winsup/mingw/mingwex/math/sinf.S b/winsup/mingw/mingwex/math/sinf.S
deleted file mode 100644
index 23e986d11..000000000
--- a/winsup/mingw/mingwex/math/sinf.S
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "sinf.S"
- .text
- .align 4
-.globl _sinf
- .def _sinf; .scl 2; .type 32; .endef
-_sinf:
- flds 4(%esp)
- fsin
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsin
- ret
diff --git a/winsup/mingw/mingwex/math/sinhf.c b/winsup/mingw/mingwex/math/sinhf.c
deleted file mode 100644
index 3d6bcff41..000000000
--- a/winsup/mingw/mingwex/math/sinhf.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <math.h>
-float sinhf (float x)
- {return (float) sinh (x);}
diff --git a/winsup/mingw/mingwex/math/sinhl.c b/winsup/mingw/mingwex/math/sinhl.c
deleted file mode 100644
index ca6a370b9..000000000
--- a/winsup/mingw/mingwex/math/sinhl.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/* sinhl.c
- *
- * Hyperbolic sine, long double precision
- *
- *
- *
- * SYNOPSIS:
- *
- * long double x, y, sinhl();
- *
- * y = sinhl( x );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns hyperbolic sine of argument in the range MINLOGL to
- * MAXLOGL.
- *
- * The range is partitioned into two segments. If |x| <= 1, a
- * rational function of the form x + x**3 P(x)/Q(x) is employed.
- * Otherwise the calculation is sinh(x) = ( exp(x) - exp(-x) )/2.
- *
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE -2,2 10000 1.5e-19 3.9e-20
- * IEEE +-10000 30000 1.1e-19 2.8e-20
- *
- */
-
-/*
-Cephes Math Library Release 2.7: January, 1998
-Copyright 1984, 1991, 1998 by Stephen L. Moshier
-*/
-
-/*
-Modified for mingw
-2002-07-22 Danny Smith <dannysmith@users.sourceforge.net>
-*/
-
-#ifdef __MINGW32__
-#include "cephes_mconf.h"
-#else
-#include "mconf.h"
-#endif
-
-#ifndef _SET_ERRNO
-#define _SET_ERRNO(x)
-#endif
-
-#ifdef UNK
-static long double P[] = {
- 1.7550769032975377032681E-6L,
- 4.1680702175874268714539E-4L,
- 3.0993532520425419002409E-2L,
- 9.9999999999999999998002E-1L,
-};
-static long double Q[] = {
- 1.7453965448620151484660E-8L,
--5.9116673682651952419571E-6L,
- 1.0599252315677389339530E-3L,
--1.1403880487744749056675E-1L,
- 6.0000000000000000000200E0L,
-};
-#endif
-
-#ifdef IBMPC
-static const unsigned short P[] = {
-0xec6a,0xd942,0xfbb3,0xeb8f,0x3feb, XPD
-0x365e,0xb30a,0xe437,0xda86,0x3ff3, XPD
-0x8890,0x01f6,0x2612,0xfde6,0x3ff9, XPD
-0x0000,0x0000,0x0000,0x8000,0x3fff, XPD
-};
-static const unsigned short Q[] = {
-0x4edd,0x4c21,0xad09,0x95ed,0x3fe5, XPD
-0x4376,0x9b70,0xd605,0xc65c,0xbfed, XPD
-0xc8ad,0x5d21,0x3069,0x8aed,0x3ff5, XPD
-0x9c32,0x6374,0x2d4b,0xe98d,0xbffb, XPD
-0x0000,0x0000,0x0000,0xc000,0x4001, XPD
-};
-#endif
-
-#ifdef MIEEE
-static long P[] = {
-0x3feb0000,0xeb8ffbb3,0xd942ec6a,
-0x3ff30000,0xda86e437,0xb30a365e,
-0x3ff90000,0xfde62612,0x01f68890,
-0x3fff0000,0x80000000,0x00000000,
-};
-static long Q[] = {
-0x3fe50000,0x95edad09,0x4c214edd,
-0xbfed0000,0xc65cd605,0x9b704376,
-0x3ff50000,0x8aed3069,0x5d21c8ad,
-0xbffb0000,0xe98d2d4b,0x63749c32,
-0x40010000,0xc0000000,0x00000000,
-};
-#endif
-
-#ifndef __MINGW32__
-extern long double MAXNUML, MAXLOGL, MINLOGL, LOGE2L;
-#ifdef ANSIPROT
-extern long double fabsl ( long double );
-extern long double expl ( long double );
-extern long double polevll ( long double, void *, int );
-extern long double p1evll ( long double, void *, int );
-#else
-long double fabsl(), expl(), polevll(), p1evll();
-#endif
-#ifdef INFINITIES
-extern long double INFINITYL;
-#endif
-#ifdef NANS
-extern long double NANL;
-#endif
-#endif /* __MINGW32__ */
-
-long double sinhl(x)
-long double x;
-{
-long double a;
-
-#ifdef MINUSZERO
-if( x == 0.0 )
- return(x);
-#endif
-#ifdef NANS
-if (isnanl(x))
- {
- _SET_ERRNO(EDOM);
- }
-#endif
-a = fabsl(x);
-if( (x > (MAXLOGL + LOGE2L)) || (x > -(MINLOGL-LOGE2L) ) )
- {
- mtherr( "sinhl", DOMAIN );
- _SET_ERRNO(ERANGE);
-#ifdef INFINITIES
- if( x > 0.0L )
- return( INFINITYL );
- else
- return( -INFINITYL );
-#else
- if( x > 0.0L )
- return( MAXNUML );
- else
- return( -MAXNUML );
-#endif
- }
-if( a > 1.0L )
- {
- if( a >= (MAXLOGL - LOGE2L) )
- {
- a = expl(0.5L*a);
- a = (0.5L * a) * a;
- if( x < 0.0L )
- a = -a;
- return(a);
- }
- a = expl(a);
- a = 0.5L*a - (0.5L/a);
- if( x < 0.0L )
- a = -a;
- return(a);
- }
-
-a *= a;
-return( x + x * a * (polevll(a,P,3)/polevll(a,Q,4)) );
-}
diff --git a/winsup/mingw/mingwex/math/sinl.S b/winsup/mingw/mingwex/math/sinl.S
deleted file mode 100644
index 16b2d9e50..000000000
--- a/winsup/mingw/mingwex/math/sinl.S
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
- .file "sinl.S"
- .text
- .align 4
-.globl _sinl
- .def _sinl; .scl 2; .type 32; .endef
-_sinl:
- fldt 4(%esp)
- fsin
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- ret
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsin
- ret
diff --git a/winsup/mingw/mingwex/math/sqrtf.c b/winsup/mingw/mingwex/math/sqrtf.c
deleted file mode 100644
index b1029cad8..000000000
--- a/winsup/mingw/mingwex/math/sqrtf.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <math.h>
-#include <errno.h>
-
-extern float __QNANF;
-
-float
-sqrtf (float x)
-{
- if (x < 0.0F )
- {
- errno = EDOM;
- return __QNANF;
- }
- else
- {
- float res;
- asm ("fsqrt" : "=t" (res) : "0" (x));
- return res;
- }
-}
diff --git a/winsup/mingw/mingwex/math/sqrtl.c b/winsup/mingw/mingwex/math/sqrtl.c
deleted file mode 100644
index dba68d878..000000000
--- a/winsup/mingw/mingwex/math/sqrtl.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <math.h>
-#include <errno.h>
-
-extern long double __QNANL;
-
-long double
-sqrtl (long double x)
-{
- if (x < 0.0L )
- {
- errno = EDOM;
- return __QNANL;
- }
- else
- {
- long double res;
- asm ("fsqrt" : "=t" (res) : "0" (x));
- return res;
- }
-}
diff --git a/winsup/mingw/mingwex/math/tanf.S b/winsup/mingw/mingwex/math/tanf.S
deleted file mode 100644
index 540fc6836..000000000
--- a/winsup/mingw/mingwex/math/tanf.S
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
- .file "tanf.S"
- .text
- .align 4
-.globl _tanf
- .def _tanf; .scl 2; .type 32; .endef
-_tanf:
- flds 4(%esp)
- fptan
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstp %st(0)
- ret
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fptan
- fstp %st(0)
- ret
diff --git a/winsup/mingw/mingwex/math/tanhf.c b/winsup/mingw/mingwex/math/tanhf.c
deleted file mode 100644
index b7c56f05c..000000000
--- a/winsup/mingw/mingwex/math/tanhf.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <math.h>
-float tanhf (float x)
- {return (float) tanh (x);}
diff --git a/winsup/mingw/mingwex/math/tanhl.c b/winsup/mingw/mingwex/math/tanhl.c
deleted file mode 100644
index d5d86d0ae..000000000
--- a/winsup/mingw/mingwex/math/tanhl.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/* tanhl.c
- *
- * Hyperbolic tangent, long double precision
- *
- *
- *
- * SYNOPSIS:
- *
- * long double x, y, tanhl();
- *
- * y = tanhl( x );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns hyperbolic tangent of argument in the range MINLOGL to
- * MAXLOGL.
- *
- * A rational function is used for |x| < 0.625. The form
- * x + x**3 P(x)/Q(x) of Cody _& Waite is employed.
- * Otherwise,
- * tanh(x) = sinh(x)/cosh(x) = 1 - 2/(exp(2x) + 1).
- *
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE -2,2 30000 1.3e-19 2.4e-20
- *
- */
-
-/*
-Cephes Math Library Release 2.7: May, 1998
-Copyright 1984, 1987, 1989, 1998 by Stephen L. Moshier
-*/
-
-/*
-Modified for mingw
-2002-07-22 Danny Smith <dannysmith@users.sourceforge.net>
-*/
-
-#ifdef __MINGW32__
-#include "cephes_mconf.h"
-#else
-#include "mconf.h"
-#endif
-
-#ifndef _SET_ERRNO
-#define _SET_ERRNO(x)
-#endif
-
-#ifdef UNK
-static long double P[] = {
--6.8473739392677100872869E-5L,
--9.5658283111794641589011E-1L,
--8.4053568599672284488465E1L,
--1.3080425704712825945553E3L,
-};
-static long double Q[] = {
-/* 1.0000000000000000000000E0L,*/
- 9.6259501838840336946872E1L,
- 1.8218117903645559060232E3L,
- 3.9241277114138477845780E3L,
-};
-#endif
-
-#ifdef IBMPC
-static unsigned short P[] = {
-0xd2a4,0x1b0c,0x8f15,0x8f99,0xbff1, XPD
-0x5959,0x9111,0x9cc7,0xf4e2,0xbffe, XPD
-0xb576,0xef5e,0x6d57,0xa81b,0xc005, XPD
-0xe3be,0xbfbd,0x5cbc,0xa381,0xc009, XPD
-};
-static unsigned short Q[] = {
-/*0x0000,0x0000,0x0000,0x8000,0x3fff,*/
-0x687f,0xce24,0xdd6c,0xc084,0x4005, XPD
-0x3793,0xc95f,0xfa2f,0xe3b9,0x4009, XPD
-0xd5a2,0x1f9c,0x0b1b,0xf542,0x400a, XPD
-};
-#endif
-
-#ifdef MIEEE
-static long P[] = {
-0xbff10000,0x8f998f15,0x1b0cd2a4,
-0xbffe0000,0xf4e29cc7,0x91115959,
-0xc0050000,0xa81b6d57,0xef5eb576,
-0xc0090000,0xa3815cbc,0xbfbde3be,
-};
-static long Q[] = {
-/*0x3fff0000,0x80000000,0x00000000,*/
-0x40050000,0xc084dd6c,0xce24687f,
-0x40090000,0xe3b9fa2f,0xc95f3793,
-0x400a0000,0xf5420b1b,0x1f9cd5a2,
-};
-#endif
-
-#ifndef __MINGW32__
-extern long double MAXLOGL;
-#ifdef ANSIPROT
-extern long double fabsl ( long double );
-extern long double expl ( long double );
-extern long double polevll ( long double, void *, int );
-extern long double p1evll ( long double, void *, int );
-#else
-long double fabsl(), expl(), polevll(), p1evll();
-#endif
-#endif /* __MINGW32__ */
-
-long double tanhl(x)
-long double x;
-{
-long double s, z;
-
-#ifdef MINUSZERO
-if( x == 0.0L )
- return(x);
-#endif
-if (isnanl(x))
- {
- _SET_ERRNO (EDOM);
- return x;
- }
-
-z = fabsl(x);
-if( z > 0.5L * MAXLOGL )
- {
- _SET_ERRNO (ERANGE);
- if( x > 0 )
- return( 1.0L );
- else
- return( -1.0L );
- }
-if( z >= 0.625L )
- {
- s = expl(2.0*z);
- z = 1.0L - 2.0/(s + 1.0L);
- if( x < 0 )
- z = -z;
- }
-else
- {
- s = x * x;
- z = polevll( s, P, 3 )/p1evll(s, Q, 3);
- z = x * s * z;
- z = x + z;
- }
-return( z );
-}
diff --git a/winsup/mingw/mingwex/math/tanl.S b/winsup/mingw/mingwex/math/tanl.S
deleted file mode 100644
index fd30019a8..000000000
--- a/winsup/mingw/mingwex/math/tanl.S
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Removed header file dependency for use in libmingwex.a by
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
- .file "tanl.S"
- .text
- .align 4
-.globl _tanl
- .def _tanl; .scl 2; .type 32; .endef
-_tanl:
- fldt 4(%esp)
- fptan
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstp %st(0)
- ret
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fptan
- fstp %st(0)
- ret
diff --git a/winsup/mingw/mingwex/math/tgamma.c b/winsup/mingw/mingwex/math/tgamma.c
deleted file mode 100644
index d04a5f4a5..000000000
--- a/winsup/mingw/mingwex/math/tgamma.c
+++ /dev/null
@@ -1,385 +0,0 @@
-/* gamma.c
- *
- * Gamma function
- *
- *
- *
- * SYNOPSIS:
- *
- * double x, y, __tgamma_r();
- * int* sgngam;
- * y = __tgamma_r( x, sgngam );
- *
- * double x, y, tgamma();
- * y = tgamma( x)
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns gamma function of the argument. The result is
- * correctly signed. In the reentrant version the sign (+1 or -1)
- * is returned in the variable referenced by sgngam.
- *
- * Arguments |x| <= 34 are reduced by recurrence and the function
- * approximated by a rational function of degree 6/7 in the
- * interval (2,3). Large arguments are handled by Stirling's
- * formula. Large negative arguments are made positive using
- * a reflection formula.
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * DEC -34, 34 10000 1.3e-16 2.5e-17
- * IEEE -170,-33 20000 2.3e-15 3.3e-16
- * IEEE -33, 33 20000 9.4e-16 2.2e-16
- * IEEE 33, 171.6 20000 2.3e-15 3.2e-16
- *
- * Error for arguments outside the test range will be larger
- * owing to error amplification by the exponential function.
- *
- */
-
-/*
-Cephes Math Library Release 2.8: June, 2000
-Copyright 1984, 1987, 1989, 1992, 2000 by Stephen L. Moshier
-*/
-
-
-/*
- * 26-11-2002 Modified for mingw.
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
-
-#ifndef __MINGW32__
-#include "mconf.h"
-#else
-#include "cephes_mconf.h"
-#endif
-
-#ifdef UNK
-static const double P[] = {
- 1.60119522476751861407E-4,
- 1.19135147006586384913E-3,
- 1.04213797561761569935E-2,
- 4.76367800457137231464E-2,
- 2.07448227648435975150E-1,
- 4.94214826801497100753E-1,
- 9.99999999999999996796E-1
-};
-static const double Q[] = {
--2.31581873324120129819E-5,
- 5.39605580493303397842E-4,
--4.45641913851797240494E-3,
- 1.18139785222060435552E-2,
- 3.58236398605498653373E-2,
--2.34591795718243348568E-1,
- 7.14304917030273074085E-2,
- 1.00000000000000000320E0
-};
-#define MAXGAM 171.624376956302725
-static const double LOGPI = 1.14472988584940017414;
-#endif
-
-#ifdef DEC
-static const unsigned short P[] = {
-0035047,0162701,0146301,0005234,
-0035634,0023437,0032065,0176530,
-0036452,0137157,0047330,0122574,
-0037103,0017310,0143041,0017232,
-0037524,0066516,0162563,0164605,
-0037775,0004671,0146237,0014222,
-0040200,0000000,0000000,0000000
-};
-static const unsigned short Q[] = {
-0134302,0041724,0020006,0116565,
-0035415,0072121,0044251,0025634,
-0136222,0003447,0035205,0121114,
-0036501,0107552,0154335,0104271,
-0037022,0135717,0014776,0171471,
-0137560,0034324,0165024,0037021,
-0037222,0045046,0047151,0161213,
-0040200,0000000,0000000,0000000
-};
-#define MAXGAM 34.84425627277176174
-#endif
-
-#ifdef IBMPC
-static const unsigned short P[] = {
-0x2153,0x3998,0xfcb8,0x3f24,
-0xbfab,0xe686,0x84e3,0x3f53,
-0x14b0,0xe9db,0x57cd,0x3f85,
-0x23d3,0x18c4,0x63d9,0x3fa8,
-0x7d31,0xdcae,0x8da9,0x3fca,
-0xe312,0x3993,0xa137,0x3fdf,
-0x0000,0x0000,0x0000,0x3ff0
-};
-static const unsigned short Q[] = {
-0xd3af,0x8400,0x487a,0xbef8,
-0x2573,0x2915,0xae8a,0x3f41,
-0xb44a,0xe750,0x40e4,0xbf72,
-0xb117,0x5b1b,0x31ed,0x3f88,
-0xde67,0xe33f,0x5779,0x3fa2,
-0x87c2,0x9d42,0x071a,0xbfce,
-0x3c51,0xc9cd,0x4944,0x3fb2,
-0x0000,0x0000,0x0000,0x3ff0
-};
-#define MAXGAM 171.624376956302725
-#endif
-
-#ifdef MIEEE
-static const unsigned short P[] = {
-0x3f24,0xfcb8,0x3998,0x2153,
-0x3f53,0x84e3,0xe686,0xbfab,
-0x3f85,0x57cd,0xe9db,0x14b0,
-0x3fa8,0x63d9,0x18c4,0x23d3,
-0x3fca,0x8da9,0xdcae,0x7d31,
-0x3fdf,0xa137,0x3993,0xe312,
-0x3ff0,0x0000,0x0000,0x0000
-};
-static const unsigned short Q[] = {
-0xbef8,0x487a,0x8400,0xd3af,
-0x3f41,0xae8a,0x2915,0x2573,
-0xbf72,0x40e4,0xe750,0xb44a,
-0x3f88,0x31ed,0x5b1b,0xb117,
-0x3fa2,0x5779,0xe33f,0xde67,
-0xbfce,0x071a,0x9d42,0x87c2,
-0x3fb2,0x4944,0xc9cd,0x3c51,
-0x3ff0,0x0000,0x0000,0x0000
-};
-#define MAXGAM 171.624376956302725
-#endif
-
-/* Stirling's formula for the gamma function */
-#if UNK
-static const double STIR[5] = {
- 7.87311395793093628397E-4,
--2.29549961613378126380E-4,
--2.68132617805781232825E-3,
- 3.47222221605458667310E-3,
- 8.33333333333482257126E-2,
-};
-#define MAXSTIR 143.01608
-static const double SQTPI = 2.50662827463100050242E0;
-#endif
-#if DEC
-static const unsigned short STIR[20] = {
-0035516,0061622,0144553,0112224,
-0135160,0131531,0037460,0165740,
-0136057,0134460,0037242,0077270,
-0036143,0107070,0156306,0027751,
-0037252,0125252,0125252,0146064,
-};
-#define MAXSTIR 26.77
-static const unsigned short SQT[4] = {
-0040440,0066230,0177661,0034055,
-};
-#define SQTPI *(double *)SQT
-#endif
-#if IBMPC
-static const unsigned short STIR[20] = {
-0x7293,0x592d,0xcc72,0x3f49,
-0x1d7c,0x27e6,0x166b,0xbf2e,
-0x4fd7,0x07d4,0xf726,0xbf65,
-0xc5fd,0x1b98,0x71c7,0x3f6c,
-0x5986,0x5555,0x5555,0x3fb5,
-};
-#define MAXSTIR 143.01608
-static const unsigned short SQT[4] = {
-0x2706,0x1ff6,0x0d93,0x4004,
-};
-#define SQTPI *(double *)SQT
-#endif
-#if MIEEE
-static const unsigned short STIR[20] = {
-0x3f49,0xcc72,0x592d,0x7293,
-0xbf2e,0x166b,0x27e6,0x1d7c,
-0xbf65,0xf726,0x07d4,0x4fd7,
-0x3f6c,0x71c7,0x1b98,0xc5fd,
-0x3fb5,0x5555,0x5555,0x5986,
-};
-#define MAXSTIR 143.01608
-static const unsigned short SQT[4] = {
-0x4004,0x0d93,0x1ff6,0x2706,
-};
-#define SQTPI *(double *)SQT
-#endif
-
-#ifndef __MINGW32__
-int sgngam = 0;
-extern int sgngam;
-extern double MAXLOG, MAXNUM, PI;
-#ifdef ANSIPROT
-extern double pow ( double, double );
-extern double log ( double );
-extern double exp ( double );
-extern double sin ( double );
-extern double polevl ( double, void *, int );
-extern double p1evl ( double, void *, int );
-extern double floor ( double );
-extern double fabs ( double );
-extern int isnan ( double );
-extern int isfinite ( double );
-static double stirf ( double );
-double lgam ( double );
-#else
-double pow(), log(), exp(), sin(), polevl(), p1evl(), floor(), fabs();
-int isnan(), isfinite();
-static double stirf();
-double lgam();
-#endif
-#ifdef INFINITIES
-extern double INFINITY;
-#endif
-#ifdef NANS
-extern double NAN;
-#endif
-#else /* __MINGW32__ */
-static double stirf ( double );
-#endif
-
-/* Gamma function computed by Stirling's formula.
- * The polynomial STIR is valid for 33 <= x <= 172.
- */
-static double stirf(x)
-double x;
-{
-double y, w, v;
-
-w = 1.0/x;
-w = 1.0 + w * polevl( w, STIR, 4 );
-y = exp(x);
-if( x > MAXSTIR )
- { /* Avoid overflow in pow() */
- v = pow( x, 0.5 * x - 0.25 );
- y = v * (v / y);
- }
-else
- {
- y = pow( x, x - 0.5 ) / y;
- }
-y = SQTPI * y * w;
-return( y );
-}
-
-
-
-double __tgamma_r(double x, int* sgngam)
-{
-double p, q, z;
-int i;
-
-*sgngam = 1;
-#ifdef NANS
-if( isnan(x) )
- return(x);
-#endif
-#ifdef INFINITIES
-#ifdef NANS
-if( x == INFINITY )
- return(x);
-if( x == -INFINITY )
- return(NAN);
-#else
-if( !isfinite(x) )
- return(x);
-#endif
-#endif
-q = fabs(x);
-
-if( q > 33.0 )
- {
- if( x < 0.0 )
- {
- p = floor(q);
- if( p == q )
- {
-gsing:
- _SET_ERRNO(EDOM);
- mtherr( "tgamma", SING );
-#ifdef INFINITIES
- return (INFINITY);
-#else
- return (MAXNUM);
-#endif
- }
- i = p;
- if( (i & 1) == 0 )
- *sgngam = -1;
- z = q - p;
- if( z > 0.5 )
- {
- p += 1.0;
- z = q - p;
- }
- z = q * sin( PI * z );
- if( z == 0.0 )
- {
- _SET_ERRNO(ERANGE);
- mtherr( "tgamma", OVERFLOW );
-#ifdef INFINITIES
- return( *sgngam * INFINITY);
-#else
- return( *sgngam * MAXNUM);
-#endif
- }
- z = fabs(z);
- z = PI/(z * stirf(q) );
- }
- else
- {
- z = stirf(x);
- }
- return( *sgngam * z );
- }
-
-z = 1.0;
-while( x >= 3.0 )
- {
- x -= 1.0;
- z *= x;
- }
-
-while( x < 0.0 )
- {
- if( x > -1.E-9 )
- goto Small;
- z /= x;
- x += 1.0;
- }
-
-while( x < 2.0 )
- {
- if( x < 1.e-9 )
- goto Small;
- z /= x;
- x += 1.0;
- }
-
-if( x == 2.0 )
- return(z);
-
-x -= 2.0;
-p = polevl( x, P, 6 );
-q = polevl( x, Q, 7 );
-return( z * p / q );
-
-Small:
-if( x == 0.0 )
- {
- goto gsing;
- }
-else
- return( z/((1.0 + 0.5772156649015329 * x) * x) );
-}
-
-/* This is the C99 version */
-
-double tgamma(double x)
-{
- int local_sgngam=0;
- return (__tgamma_r(x, &local_sgngam));
-}
diff --git a/winsup/mingw/mingwex/math/tgammaf.c b/winsup/mingw/mingwex/math/tgammaf.c
deleted file mode 100644
index 07d294971..000000000
--- a/winsup/mingw/mingwex/math/tgammaf.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/* gammaf.c
- *
- * Gamma function
- *
- *
- *
- * SYNOPSIS:
- *
- * float x, y, __tgammaf_r();
- * int* sgngamf;
- * y = __tgammaf_r( x, sgngamf );
- *
- * float x, y, tgammaf();
- * y = tgammaf( x);
- *
- *
- * DESCRIPTION:
- *
- * Returns gamma function of the argument. The result is
- * correctly signed. In the reentrant version the sign (+1 or -1)
- * is returned in the variable referenced by sgngamf.
- *
- * Arguments between 0 and 10 are reduced by recurrence and the
- * function is approximated by a polynomial function covering
- * the interval (2,3). Large arguments are handled by Stirling's
- * formula. Negative arguments are made positive using
- * a reflection formula.
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE 0,-33 100,000 5.7e-7 1.0e-7
- * IEEE -33,0 100,000 6.1e-7 1.2e-7
- *
- *
- */
-
-/*
-Cephes Math Library Release 2.7: July, 1998
-Copyright 1984, 1987, 1989, 1992, 1998 by Stephen L. Moshier
-*/
-
-
-/*
- * 26-11-2002 Modified for mingw.
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
-
-#ifndef __MINGW32__
-#include "mconf.h"
-#else
-#include "cephes_mconf.h"
-#endif
-
-/* define MAXGAM 34.84425627277176174 */
-
-/* Stirling's formula for the gamma function
- * gamma(x) = sqrt(2 pi) x^(x-.5) exp(-x) ( 1 + 1/x P(1/x) )
- * .028 < 1/x < .1
- * relative error < 1.9e-11
- */
-static const float STIR[] = {
--2.705194986674176E-003,
- 3.473255786154910E-003,
- 8.333331788340907E-002,
-};
-static const float MAXSTIR = 26.77;
-static const float SQTPIF = 2.50662827463100050242; /* sqrt( 2 pi ) */
-
-#ifndef __MINGW32__
-
-extern float MAXLOGF, MAXNUMF, PIF;
-
-#ifdef ANSIC
-float expf(float);
-float logf(float);
-float powf( float, float );
-float sinf(float);
-float gammaf(float);
-float floorf(float);
-static float stirf(float);
-float polevlf( float, float *, int );
-float p1evlf( float, float *, int );
-#else
-float expf(), logf(), powf(), sinf(), floorf();
-float polevlf(), p1evlf();
-static float stirf();
-#endif
-
-#else /* __MINGW32__ */
-static float stirf(float);
-#endif
-
-/* Gamma function computed by Stirling's formula,
- * sqrt(2 pi) x^(x-.5) exp(-x) (1 + 1/x P(1/x))
- * The polynomial STIR is valid for 33 <= x <= 172.
- */
-static float stirf( float x )
-{
-float y, w, v;
-
-w = 1.0/x;
-w = 1.0 + w * polevlf( w, STIR, 2 );
-y = expf( -x );
-if( x > MAXSTIR )
- { /* Avoid overflow in pow() */
- v = powf( x, 0.5 * x - 0.25 );
- y *= v;
- y *= v;
- }
-else
- {
- y = powf( x, x - 0.5 ) * y;
- }
-y = SQTPIF * y * w;
-return( y );
-}
-
-
-/* gamma(x+2), 0 < x < 1 */
-static const float P[] = {
- 1.536830450601906E-003,
- 5.397581592950993E-003,
- 4.130370201859976E-003,
- 7.232307985516519E-002,
- 8.203960091619193E-002,
- 4.117857447645796E-001,
- 4.227867745131584E-001,
- 9.999999822945073E-001,
-};
-
-float __tgammaf_r( float x, int* sgngamf)
-{
-float p, q, z, nz;
-int i, direction, negative;
-
-#ifdef NANS
-if( isnan(x) )
- return(x);
-#endif
-#ifdef INFINITIES
-#ifdef NANS
-if( x == INFINITYF )
- return(x);
-if( x == -INFINITYF )
- return(NANF);
-#else
-if( !isfinite(x) )
- return(x);
-#endif
-#endif
-
-*sgngamf = 1;
-negative = 0;
-nz = 0.0;
-if( x < 0.0 )
- {
- negative = 1;
- q = -x;
- p = floorf(q);
- if( p == q )
- {
-gsing:
- _SET_ERRNO(EDOM);
- mtherr( "tgammaf", SING );
-#ifdef INFINITIES
- return (INFINITYF);
-#else
- return (MAXNUMF);
-#endif
- }
- i = p;
- if( (i & 1) == 0 )
- *sgngamf = -1;
- nz = q - p;
- if( nz > 0.5 )
- {
- p += 1.0;
- nz = q - p;
- }
- nz = q * sinf( PIF * nz );
- if( nz == 0.0 )
- {
- _SET_ERRNO(ERANGE);
- mtherr( "tgamma", OVERFLOW );
-#ifdef INFINITIES
- return( *sgngamf * INFINITYF);
-#else
- return( *sgngamf * MAXNUMF);
-#endif
- }
- if( nz < 0 )
- nz = -nz;
- x = q;
- }
-if( x >= 10.0 )
- {
- z = stirf(x);
- }
-if( x < 2.0 )
- direction = 1;
-else
- direction = 0;
-z = 1.0;
-while( x >= 3.0 )
- {
- x -= 1.0;
- z *= x;
- }
-/*
-while( x < 0.0 )
- {
- if( x > -1.E-4 )
- goto Small;
- z *=x;
- x += 1.0;
- }
-*/
-while( x < 2.0 )
- {
- if( x < 1.e-4 )
- goto Small;
- z *=x;
- x += 1.0;
- }
-
-if( direction )
- z = 1.0/z;
-
-if( x == 2.0 )
- return(z);
-
-x -= 2.0;
-p = z * polevlf( x, P, 7 );
-
-gdone:
-
-if( negative )
- {
- p = *sgngamf * PIF/(nz * p );
- }
-return(p);
-
-Small:
-if( x == 0.0 )
- {
- goto gsing;
- }
-else
- {
- p = z / ((1.0 + 0.5772156649015329 * x) * x);
- goto gdone;
- }
-}
-
-/* This is the C99 version */
-
-float tgammaf(float x)
-{
- int local_sgngamf=0;
- return (__tgammaf_r(x, &local_sgngamf));
-}
diff --git a/winsup/mingw/mingwex/math/tgammal.c b/winsup/mingw/mingwex/math/tgammal.c
deleted file mode 100644
index 6db4e3af7..000000000
--- a/winsup/mingw/mingwex/math/tgammal.c
+++ /dev/null
@@ -1,501 +0,0 @@
-/* gammal.c
- *
- * Gamma function
- *
- *
- *
- * SYNOPSIS:
- *
- * long double x, y, __tgammal_r();
- * int* sgngaml;
- * y = __tgammal_r( x, sgngaml );
- *
- * long double x, y, tgammal();
- * y = tgammal( x); *
- *
- *
- * DESCRIPTION:
- *
- * Returns gamma function of the argument. The result is
- * correctly signed. In the reentrant version the sign (+1 or -1)
- * is returned in the variable referenced by sgngamf.
- *
- * Arguments |x| <= 13 are reduced by recurrence and the function
- * approximated by a rational function of degree 7/8 in the
- * interval (2,3). Large arguments are handled by Stirling's
- * formula. Large negative arguments are made positive using
- * a reflection formula.
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE -40,+40 10000 3.6e-19 7.9e-20
- * IEEE -1755,+1755 10000 4.8e-18 6.5e-19
- *
- * Accuracy for large arguments is dominated by error in powl().
- *
- */
-
-/*
-Copyright 1994 by Stephen L. Moshier
-*/
-
-
-/*
- * 26-11-2002 Modified for mingw.
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
-
-#ifndef __MINGW32__
-#include "mconf.h"
-#else
-#include "cephes_mconf.h"
-#endif
-
-/*
-gamma(x+2) = gamma(x+2) P(x)/Q(x)
-0 <= x <= 1
-Relative error
-n=7, d=8
-Peak error = 1.83e-20
-Relative error spread = 8.4e-23
-*/
-
-#if UNK
-static const long double P[8] = {
- 4.212760487471622013093E-5L,
- 4.542931960608009155600E-4L,
- 4.092666828394035500949E-3L,
- 2.385363243461108252554E-2L,
- 1.113062816019361559013E-1L,
- 3.629515436640239168939E-1L,
- 8.378004301573126728826E-1L,
- 1.000000000000000000009E0L,
-};
-static const long double Q[9] = {
--1.397148517476170440917E-5L,
- 2.346584059160635244282E-4L,
--1.237799246653152231188E-3L,
--7.955933682494738320586E-4L,
- 2.773706565840072979165E-2L,
--4.633887671244534213831E-2L,
--2.243510905670329164562E-1L,
- 4.150160950588455434583E-1L,
- 9.999999999999999999908E-1L,
-};
-#endif
-#if IBMPC
-static const unsigned short P[] = {
-0x434a,0x3f22,0x2bda,0xb0b2,0x3ff0, XPD
-0xf5aa,0xe82f,0x335b,0xee2e,0x3ff3, XPD
-0xbe6c,0x3757,0xc717,0x861b,0x3ff7, XPD
-0x7f43,0x5196,0xb166,0xc368,0x3ff9, XPD
-0x9549,0x8eb5,0x8c3a,0xe3f4,0x3ffb, XPD
-0x8d75,0x23af,0xc8e4,0xb9d4,0x3ffd, XPD
-0x29cf,0x19b3,0x16c8,0xd67a,0x3ffe, XPD
-0x0000,0x0000,0x0000,0x8000,0x3fff, XPD
-};
-static const unsigned short Q[] = {
-0x5473,0x2de8,0x1268,0xea67,0xbfee, XPD
-0x334b,0xc2f0,0xa2dd,0xf60e,0x3ff2, XPD
-0xbeed,0x1853,0xa691,0xa23d,0xbff5, XPD
-0x296e,0x7cb1,0x5dfd,0xd08f,0xbff4, XPD
-0x0417,0x7989,0xd7bc,0xe338,0x3ff9, XPD
-0x3295,0x3698,0xd580,0xbdcd,0xbffa, XPD
-0x75ef,0x3ab7,0x4ad3,0xe5bc,0xbffc, XPD
-0xe458,0x2ec7,0xfd57,0xd47c,0x3ffd, XPD
-0x0000,0x0000,0x0000,0x8000,0x3fff, XPD
-};
-#endif
-#if MIEEE
-static const long P[24] = {
-0x3ff00000,0xb0b22bda,0x3f22434a,
-0x3ff30000,0xee2e335b,0xe82ff5aa,
-0x3ff70000,0x861bc717,0x3757be6c,
-0x3ff90000,0xc368b166,0x51967f43,
-0x3ffb0000,0xe3f48c3a,0x8eb59549,
-0x3ffd0000,0xb9d4c8e4,0x23af8d75,
-0x3ffe0000,0xd67a16c8,0x19b329cf,
-0x3fff0000,0x80000000,0x00000000,
-};
-static const long Q[27] = {
-0xbfee0000,0xea671268,0x2de85473,
-0x3ff20000,0xf60ea2dd,0xc2f0334b,
-0xbff50000,0xa23da691,0x1853beed,
-0xbff40000,0xd08f5dfd,0x7cb1296e,
-0x3ff90000,0xe338d7bc,0x79890417,
-0xbffa0000,0xbdcdd580,0x36983295,
-0xbffc0000,0xe5bc4ad3,0x3ab775ef,
-0x3ffd0000,0xd47cfd57,0x2ec7e458,
-0x3fff0000,0x80000000,0x00000000,
-};
-#endif
-/*
-static const long double P[] = {
--3.01525602666895735709e0L,
--3.25157411956062339893e1L,
--2.92929976820724030353e2L,
--1.70730828800510297666e3L,
--7.96667499622741999770e3L,
--2.59780216007146401957e4L,
--5.99650230220855581642e4L,
--7.15743521530849602425e4L
-};
-static const long double Q[] = {
- 1.00000000000000000000e0L,
--1.67955233807178858919e1L,
- 8.85946791747759881659e1L,
- 5.69440799097468430177e1L,
--1.98526250512761318471e3L,
- 3.31667508019495079814e3L,
- 1.60577839621734713377e4L,
--2.97045081369399940529e4L,
--7.15743521530849602412e4L
-};
-*/
-#define MAXGAML 1755.455L
-/*static const long double LOGPI = 1.14472988584940017414L;*/
-
-/* Stirling's formula for the gamma function
-gamma(x) = sqrt(2 pi) x^(x-.5) exp(-x) (1 + 1/x P(1/x))
-z(x) = x
-13 <= x <= 1024
-Relative error
-n=8, d=0
-Peak error = 9.44e-21
-Relative error spread = 8.8e-4
-*/
-#if UNK
-static const long double STIR[9] = {
- 7.147391378143610789273E-4L,
--2.363848809501759061727E-5L,
--5.950237554056330156018E-4L,
- 6.989332260623193171870E-5L,
- 7.840334842744753003862E-4L,
--2.294719747873185405699E-4L,
--2.681327161876304418288E-3L,
- 3.472222222230075327854E-3L,
- 8.333333333333331800504E-2L,
-};
-#endif
-#if IBMPC
-static const unsigned short STIR[] = {
-0x6ede,0x69f7,0x54e3,0xbb5d,0x3ff4, XPD
-0xc395,0x0295,0x4443,0xc64b,0xbfef, XPD
-0xba6f,0x7c59,0x5e47,0x9bfb,0xbff4, XPD
-0x5704,0x1a39,0xb11d,0x9293,0x3ff1, XPD
-0x30b7,0x1a21,0x98b2,0xcd87,0x3ff4, XPD
-0xbef3,0x7023,0x6a08,0xf09e,0xbff2, XPD
-0x3a1c,0x5ac8,0x3478,0xafb9,0xbff6, XPD
-0xc3c9,0x906e,0x38e3,0xe38e,0x3ff6, XPD
-0xa1d5,0xaaaa,0xaaaa,0xaaaa,0x3ffb, XPD
-};
-#endif
-#if MIEEE
-static const long STIR[27] = {
-0x3ff40000,0xbb5d54e3,0x69f76ede,
-0xbfef0000,0xc64b4443,0x0295c395,
-0xbff40000,0x9bfb5e47,0x7c59ba6f,
-0x3ff10000,0x9293b11d,0x1a395704,
-0x3ff40000,0xcd8798b2,0x1a2130b7,
-0xbff20000,0xf09e6a08,0x7023bef3,
-0xbff60000,0xafb93478,0x5ac83a1c,
-0x3ff60000,0xe38e38e3,0x906ec3c9,
-0x3ffb0000,0xaaaaaaaa,0xaaaaa1d5,
-};
-#endif
-#define MAXSTIR 1024.0L
-static const long double SQTPI = 2.50662827463100050242E0L;
-
-/* 1/gamma(x) = z P(z)
- * z(x) = 1/x
- * 0 < x < 0.03125
- * Peak relative error 4.2e-23
- */
-#if UNK
-static const long double S[9] = {
--1.193945051381510095614E-3L,
- 7.220599478036909672331E-3L,
--9.622023360406271645744E-3L,
--4.219773360705915470089E-2L,
- 1.665386113720805206758E-1L,
--4.200263503403344054473E-2L,
--6.558780715202540684668E-1L,
- 5.772156649015328608253E-1L,
- 1.000000000000000000000E0L,
-};
-#endif
-#if IBMPC
-static const unsigned short S[] = {
-0xbaeb,0xd6d3,0x25e5,0x9c7e,0xbff5, XPD
-0xfe9a,0xceb4,0xc74e,0xec9a,0x3ff7, XPD
-0x9225,0xdfef,0xb0e9,0x9da5,0xbff8, XPD
-0x10b0,0xec17,0x87dc,0xacd7,0xbffa, XPD
-0x6b8d,0x7515,0x1905,0xaa89,0x3ffc, XPD
-0xf183,0x126b,0xf47d,0xac0a,0xbffa, XPD
-0x7bf6,0x57d1,0xa013,0xa7e7,0xbffe, XPD
-0xc7a9,0x7db0,0x67e3,0x93c4,0x3ffe, XPD
-0x0000,0x0000,0x0000,0x8000,0x3fff, XPD
-};
-#endif
-#if MIEEE
-static const long S[27] = {
-0xbff50000,0x9c7e25e5,0xd6d3baeb,
-0x3ff70000,0xec9ac74e,0xceb4fe9a,
-0xbff80000,0x9da5b0e9,0xdfef9225,
-0xbffa0000,0xacd787dc,0xec1710b0,
-0x3ffc0000,0xaa891905,0x75156b8d,
-0xbffa0000,0xac0af47d,0x126bf183,
-0xbffe0000,0xa7e7a013,0x57d17bf6,
-0x3ffe0000,0x93c467e3,0x7db0c7a9,
-0x3fff0000,0x80000000,0x00000000,
-};
-#endif
-/* 1/gamma(-x) = z P(z)
- * z(x) = 1/x
- * 0 < x < 0.03125
- * Peak relative error 5.16e-23
- * Relative error spread = 2.5e-24
- */
-#if UNK
-static const long double SN[9] = {
- 1.133374167243894382010E-3L,
- 7.220837261893170325704E-3L,
- 9.621911155035976733706E-3L,
--4.219773343731191721664E-2L,
--1.665386113944413519335E-1L,
--4.200263503402112910504E-2L,
- 6.558780715202536547116E-1L,
- 5.772156649015328608727E-1L,
--1.000000000000000000000E0L,
-};
-#endif
-#if IBMPC
-static const unsigned short SN[] = {
-0x5dd1,0x02de,0xb9f7,0x948d,0x3ff5, XPD
-0x989b,0xdd68,0xc5f1,0xec9c,0x3ff7, XPD
-0x2ca1,0x18f0,0x386f,0x9da5,0x3ff8, XPD
-0x783f,0x41dd,0x87d1,0xacd7,0xbffa, XPD
-0x7a5b,0xd76d,0x1905,0xaa89,0xbffc, XPD
-0x7f64,0x1234,0xf47d,0xac0a,0xbffa, XPD
-0x5e26,0x57d1,0xa013,0xa7e7,0x3ffe, XPD
-0xc7aa,0x7db0,0x67e3,0x93c4,0x3ffe, XPD
-0x0000,0x0000,0x0000,0x8000,0xbfff, XPD
-};
-#endif
-#if MIEEE
-static const long SN[27] = {
-0x3ff50000,0x948db9f7,0x02de5dd1,
-0x3ff70000,0xec9cc5f1,0xdd68989b,
-0x3ff80000,0x9da5386f,0x18f02ca1,
-0xbffa0000,0xacd787d1,0x41dd783f,
-0xbffc0000,0xaa891905,0xd76d7a5b,
-0xbffa0000,0xac0af47d,0x12347f64,
-0x3ffe0000,0xa7e7a013,0x57d15e26,
-0x3ffe0000,0x93c467e3,0x7db0c7aa,
-0xbfff0000,0x80000000,0x00000000,
-};
-#endif
-
-#ifndef __MINGW32__
-extern long double MAXLOGL, MAXNUML, PIL;
-/* #define PIL 3.14159265358979323846L */
-/* #define MAXNUML 1.189731495357231765021263853E4932L */
-
-#ifdef ANSIPROT
-extern long double fabsl ( long double );
-extern long double lgaml ( long double );
-extern long double logl ( long double );
-extern long double expl ( long double );
-extern long double gammal ( long double );
-extern long double sinl ( long double );
-extern long double floorl ( long double );
-extern long double powl ( long double, long double );
-extern long double polevll ( long double, void *, int );
-extern long double p1evll ( long double, void *, int );
-extern int isnanl ( long double );
-extern int isfinitel ( long double );
-static long double stirf ( long double );
-#else
-long double fabsl(), lgaml(), logl(), expl(), gammal(), sinl();
-long double floorl(), powl(), polevll(), p1evll(), isnanl(), isfinitel();
-static long double stirf();
-#endif
-#ifdef INFINITIES
-extern long double INFINITYL;
-#endif
-#ifdef NANS
-extern long double NANL;
-#endif
-
-#else /* __MINGW32__ */
-static long double stirf ( long double );
-#endif
-
-
-/* Gamma function computed by Stirling's formula. */
-
-static long double stirf(x)
-long double x;
-{
-long double y, w, v;
-
-w = 1.0L/x;
-/* For large x, use rational coefficients from the analytical expansion. */
-if( x > 1024.0L )
- w = (((((6.97281375836585777429E-5L * w
- + 7.84039221720066627474E-4L) * w
- - 2.29472093621399176955E-4L) * w
- - 2.68132716049382716049E-3L) * w
- + 3.47222222222222222222E-3L) * w
- + 8.33333333333333333333E-2L) * w
- + 1.0L;
-else
- w = 1.0L + w * polevll( w, STIR, 8 );
-y = expl(x);
-if( x > MAXSTIR )
- { /* Avoid overflow in pow() */
- v = powl( x, 0.5L * x - 0.25L );
- y = v * (v / y);
- }
-else
- {
- y = powl( x, x - 0.5L ) / y;
- }
-y = SQTPI * y * w;
-return( y );
-}
-
-
-long double __tgammal_r(long double x, int* sgngaml)
-{
-long double p, q, z;
-int i;
-
-*sgngaml = 1;
-#ifdef NANS
-if( isnanl(x) )
- return(NANL);
-#endif
-#ifdef INFINITIES
-#ifdef NANS
-if( x == INFINITYL )
- return(x);
-if( x == -INFINITYL )
- return(NANL);
-#else
-if( !isfinite(x) )
- return(x);
-#endif
-#endif
-q = fabsl(x);
-
-if( q > 13.0L )
- {
- if( q > MAXGAML )
- goto goverf;
- if( x < 0.0L )
- {
- p = floorl(q);
- if( p == q )
- {
-gsing:
- _SET_ERRNO(EDOM);
- mtherr( "tgammal", SING );
-#ifdef INFINITIES
- return (INFINITYL);
-#else
- return( *sgngaml * MAXNUML);
-#endif
- }
- i = p;
- if( (i & 1) == 0 )
- *sgngaml = -1;
- z = q - p;
- if( z > 0.5L )
- {
- p += 1.0L;
- z = q - p;
- }
- z = q * sinl( PIL * z );
- z = fabsl(z) * stirf(q);
- if( z <= PIL/MAXNUML )
- {
-goverf:
- _SET_ERRNO(ERANGE);
- mtherr( "tgammal", OVERFLOW );
-#ifdef INFINITIES
- return( *sgngaml * INFINITYL);
-#else
- return( *sgngaml * MAXNUML);
-#endif
- }
- z = PIL/z;
- }
- else
- {
- z = stirf(x);
- }
- return( *sgngaml * z );
- }
-
-z = 1.0L;
-while( x >= 3.0L )
- {
- x -= 1.0L;
- z *= x;
- }
-
-while( x < -0.03125L )
- {
- z /= x;
- x += 1.0L;
- }
-
-if( x <= 0.03125L )
- goto Small;
-
-while( x < 2.0L )
- {
- z /= x;
- x += 1.0L;
- }
-
-if( x == 2.0L )
- return(z);
-
-x -= 2.0L;
-p = polevll( x, P, 7 );
-q = polevll( x, Q, 8 );
-return( z * p / q );
-
-Small:
-if( x == 0.0L )
- {
- goto gsing;
- }
-else
- {
- if( x < 0.0L )
- {
- x = -x;
- q = z / (x * polevll( x, SN, 8 ));
- }
- else
- q = z / (x * polevll( x, S, 8 ));
- }
-return q;
-}
-
-
-/* This is the C99 version. */
-
-long double tgammal(long double x)
-{
- int local_sgngaml=0;
- return (__tgammal_r(x, &local_sgngaml));
-}
-
diff --git a/winsup/mingw/mingwex/math/trunc.c b/winsup/mingw/mingwex/math/trunc.c
deleted file mode 100644
index 5c7dc68cb..000000000
--- a/winsup/mingw/mingwex/math/trunc.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <fenv.h>
-#include <math.h>
-
-double
-trunc (double _x){
- double retval;
- unsigned short saved_cw;
- unsigned short tmp_cw;
- __asm__ ("fnstcw %0;" : "=m" (saved_cw)); /* save FPU control word */
- tmp_cw = (saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO))
- | FE_TOWARDZERO;
- __asm__ ("fldcw %0;" : : "m" (tmp_cw));
- __asm__ ("frndint;" : "=t" (retval) : "0" (_x)); /* round towards zero */
- __asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */
- return retval;
-}
diff --git a/winsup/mingw/mingwex/math/truncf.c b/winsup/mingw/mingwex/math/truncf.c
deleted file mode 100644
index 8869e377f..000000000
--- a/winsup/mingw/mingwex/math/truncf.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <fenv.h>
-#include <math.h>
-
-float
-truncf (float _x)
-{
- float retval;
- unsigned short saved_cw;
- unsigned short tmp_cw;
- __asm__ ("fnstcw %0;" : "=m" (saved_cw)); /* save FPU control word */
- tmp_cw = (saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO))
- | FE_TOWARDZERO;
- __asm__ ("fldcw %0;" : : "m" (tmp_cw));
- __asm__ ("frndint;" : "=t" (retval) : "0" (_x)); /* round towards zero */
- __asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */
- return retval;
-}
diff --git a/winsup/mingw/mingwex/math/truncl.c b/winsup/mingw/mingwex/math/truncl.c
deleted file mode 100644
index e34b21ba9..000000000
--- a/winsup/mingw/mingwex/math/truncl.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <fenv.h>
-#include <math.h>
-
-long double
-truncl (long double _x){
- long double retval;
- unsigned short saved_cw;
- unsigned short tmp_cw;
- __asm__ ("fnstcw %0;" : "=m" (saved_cw)); /* save FPU control word */
- tmp_cw = (saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO))
- | FE_TOWARDZERO;
- __asm__ ("fldcw %0;" : : "m" (tmp_cw));
- __asm__ ("frndint;" : "=t" (retval) : "0" (_x)); /* round towards zero */
- __asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */
- return retval;
-}