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')
-rw-r--r--winsup/mingw/mingwex/Makefile.in349
-rw-r--r--winsup/mingw/mingwex/_Exit.c3
-rw-r--r--winsup/mingw/mingwex/atoll.c3
-rwxr-xr-xwinsup/mingw/mingwex/basename.c167
-rwxr-xr-xwinsup/mingw/mingwex/btowc.c19
-rw-r--r--winsup/mingw/mingwex/complex/cabs.c7
-rwxr-xr-xwinsup/mingw/mingwex/complex/cabsf.c7
-rwxr-xr-xwinsup/mingw/mingwex/complex/cabsl.c7
-rw-r--r--winsup/mingw/mingwex/complex/cacos.c82
-rwxr-xr-xwinsup/mingw/mingwex/complex/cacosf.c64
-rw-r--r--winsup/mingw/mingwex/complex/cacosh.c37
-rwxr-xr-xwinsup/mingw/mingwex/complex/cacoshf.c37
-rwxr-xr-xwinsup/mingw/mingwex/complex/cacoshl.c39
-rwxr-xr-xwinsup/mingw/mingwex/complex/cacosl.c66
-rwxr-xr-xwinsup/mingw/mingwex/complex/carg.c9
-rwxr-xr-xwinsup/mingw/mingwex/complex/cargf.c9
-rwxr-xr-xwinsup/mingw/mingwex/complex/cargl.c8
-rw-r--r--winsup/mingw/mingwex/complex/casin.c48
-rwxr-xr-xwinsup/mingw/mingwex/complex/casinf.c48
-rw-r--r--winsup/mingw/mingwex/complex/casinh.c23
-rwxr-xr-xwinsup/mingw/mingwex/complex/casinhf.c23
-rwxr-xr-xwinsup/mingw/mingwex/complex/casinhl.c23
-rwxr-xr-xwinsup/mingw/mingwex/complex/casinl.c48
-rw-r--r--winsup/mingw/mingwex/complex/catan.c49
-rwxr-xr-xwinsup/mingw/mingwex/complex/catanf.c49
-rw-r--r--winsup/mingw/mingwex/complex/catanh.c23
-rwxr-xr-xwinsup/mingw/mingwex/complex/catanhf.c23
-rwxr-xr-xwinsup/mingw/mingwex/complex/catanhl.c23
-rwxr-xr-xwinsup/mingw/mingwex/complex/catanl.c53
-rw-r--r--winsup/mingw/mingwex/complex/ccos.c20
-rwxr-xr-xwinsup/mingw/mingwex/complex/ccosf.c20
-rw-r--r--winsup/mingw/mingwex/complex/ccosh.c19
-rwxr-xr-xwinsup/mingw/mingwex/complex/ccoshf.c19
-rwxr-xr-xwinsup/mingw/mingwex/complex/ccoshl.c19
-rwxr-xr-xwinsup/mingw/mingwex/complex/ccosl.c20
-rw-r--r--winsup/mingw/mingwex/complex/cexp.c19
-rwxr-xr-xwinsup/mingw/mingwex/complex/cexpf.c19
-rwxr-xr-xwinsup/mingw/mingwex/complex/cexpl.c19
-rw-r--r--winsup/mingw/mingwex/complex/cimag.c6
-rwxr-xr-xwinsup/mingw/mingwex/complex/cimagf.c6
-rwxr-xr-xwinsup/mingw/mingwex/complex/cimagl.c5
-rw-r--r--winsup/mingw/mingwex/complex/clog.c19
-rwxr-xr-xwinsup/mingw/mingwex/complex/clogf.c19
-rwxr-xr-xwinsup/mingw/mingwex/complex/clogl.c19
-rw-r--r--winsup/mingw/mingwex/complex/cpow.c48
-rwxr-xr-xwinsup/mingw/mingwex/complex/cpowf.c43
-rwxr-xr-xwinsup/mingw/mingwex/complex/cpowl.c43
-rw-r--r--winsup/mingw/mingwex/complex/cproj.c22
-rwxr-xr-xwinsup/mingw/mingwex/complex/cprojf.c22
-rwxr-xr-xwinsup/mingw/mingwex/complex/cprojl.c22
-rw-r--r--winsup/mingw/mingwex/complex/creal.c6
-rwxr-xr-xwinsup/mingw/mingwex/complex/crealf.c6
-rwxr-xr-xwinsup/mingw/mingwex/complex/creall.c5
-rw-r--r--winsup/mingw/mingwex/complex/csin.c21
-rwxr-xr-xwinsup/mingw/mingwex/complex/csinf.c21
-rw-r--r--winsup/mingw/mingwex/complex/csinh.c21
-rwxr-xr-xwinsup/mingw/mingwex/complex/csinhf.c21
-rwxr-xr-xwinsup/mingw/mingwex/complex/csinhl.c20
-rwxr-xr-xwinsup/mingw/mingwex/complex/csinl.c21
-rw-r--r--winsup/mingw/mingwex/complex/csqrt.c56
-rwxr-xr-xwinsup/mingw/mingwex/complex/csqrtf.c49
-rwxr-xr-xwinsup/mingw/mingwex/complex/csqrtl.c55
-rw-r--r--winsup/mingw/mingwex/complex/ctan.c41
-rwxr-xr-xwinsup/mingw/mingwex/complex/ctanf.c41
-rw-r--r--winsup/mingw/mingwex/complex/ctanh.c44
-rwxr-xr-xwinsup/mingw/mingwex/complex/ctanhf.c44
-rwxr-xr-xwinsup/mingw/mingwex/complex/ctanhl.c44
-rwxr-xr-xwinsup/mingw/mingwex/complex/ctanl.c41
-rw-r--r--winsup/mingw/mingwex/dirent.c455
-rwxr-xr-xwinsup/mingw/mingwex/dirname.c235
-rw-r--r--winsup/mingw/mingwex/feclearexcept.c24
-rw-r--r--winsup/mingw/mingwex/fegetenv.c20
-rw-r--r--winsup/mingw/mingwex/fegetexceptflag.c15
-rw-r--r--winsup/mingw/mingwex/fegetround.c19
-rw-r--r--winsup/mingw/mingwex/feholdexcept.c30
-rw-r--r--winsup/mingw/mingwex/feraiseexcept.c19
-rw-r--r--winsup/mingw/mingwex/fesetenv.c57
-rw-r--r--winsup/mingw/mingwex/fesetexceptflag.c33
-rw-r--r--winsup/mingw/mingwex/fesetround.c31
-rw-r--r--winsup/mingw/mingwex/fetestexcept.c27
-rw-r--r--winsup/mingw/mingwex/feupdateenv.c26
-rwxr-xr-xwinsup/mingw/mingwex/ftruncate.c5
-rw-r--r--winsup/mingw/mingwex/fwide.c9
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/README357
-rw-r--r--winsup/mingw/mingwex/gdtoa/README.mingw19
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/arithchk.c183
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/dmisc.c196
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/dtoa.c736
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/g__fmt.c142
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/g_dfmt.c88
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/g_ffmt.c88
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/g_xfmt.c143
-rw-r--r--winsup/mingw/mingwex/gdtoa/gd_arith.h6
-rw-r--r--winsup/mingw/mingwex/gdtoa/gd_qnan.h12
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/gdtoa.c714
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/gdtoa.h118
-rw-r--r--winsup/mingw/mingwex/gdtoa/gdtoa_fltrnds.h18
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/gdtoaimp.h628
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/gethex.c340
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/gmisc.c76
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/hd_init.c49
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/hexnan.c139
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/misc.c857
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/qnan.c114
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/smisc.c149
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/strtodg.c979
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/strtodnrp.c82
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/strtof.c77
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/strtopx.c124
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/sum.c91
-rwxr-xr-xwinsup/mingw/mingwex/gdtoa/ulp.c61
-rw-r--r--winsup/mingw/mingwex/getopt.c784
-rwxr-xr-xwinsup/mingw/mingwex/gettimeofday.c49
-rw-r--r--winsup/mingw/mingwex/imaxabs.c17
-rw-r--r--winsup/mingw/mingwex/imaxdiv.c25
-rwxr-xr-xwinsup/mingw/mingwex/isblank.c5
-rwxr-xr-xwinsup/mingw/mingwex/iswblank.c5
-rw-r--r--winsup/mingw/mingwex/lltoa.c3
-rw-r--r--winsup/mingw/mingwex/lltow.c3
-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_mconf.h402
-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.c296
-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.c368
-rw-r--r--winsup/mingw/mingwex/math/lgammaf.c253
-rw-r--r--winsup/mingw/mingwex/math/lgammal.c415
-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/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_generic.c64
-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.c803
-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_generic.c51
-rw-r--r--winsup/mingw/mingwex/math/round_internal.h155
-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.c267
-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.c150
-rw-r--r--winsup/mingw/mingwex/math/tanl.S33
-rw-r--r--winsup/mingw/mingwex/math/tgamma.c388
-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
-rwxr-xr-xwinsup/mingw/mingwex/mb_wc_common.h13
-rwxr-xr-xwinsup/mingw/mingwex/mbrtowc.c154
-rw-r--r--winsup/mingw/mingwex/mbsinit.c21
-rwxr-xr-xwinsup/mingw/mingwex/mingw-aligned-malloc.c120
-rw-r--r--winsup/mingw/mingwex/mingw-fseek.c106
-rw-r--r--winsup/mingw/mingwex/sitest.c1527
-rwxr-xr-xwinsup/mingw/mingwex/stdio/fopen64.c7
-rw-r--r--winsup/mingw/mingwex/stdio/fprintf.c68
-rwxr-xr-xwinsup/mingw/mingwex/stdio/fseeko64.c30
-rwxr-xr-xwinsup/mingw/mingwex/stdio/ftello64.c11
-rwxr-xr-xwinsup/mingw/mingwex/stdio/lseek64.c8
-rw-r--r--winsup/mingw/mingwex/stdio/pformat.c2488
-rw-r--r--winsup/mingw/mingwex/stdio/pformat.h90
-rw-r--r--winsup/mingw/mingwex/stdio/printf.c68
-rw-r--r--winsup/mingw/mingwex/stdio/snprintf.c44
-rw-r--r--winsup/mingw/mingwex/stdio/snwprintf.c13
-rw-r--r--winsup/mingw/mingwex/stdio/sprintf.c68
-rw-r--r--winsup/mingw/mingwex/stdio/vfprintf.c64
-rw-r--r--winsup/mingw/mingwex/stdio/vfscanf.c40
-rw-r--r--winsup/mingw/mingwex/stdio/vfwscanf.c42
-rw-r--r--winsup/mingw/mingwex/stdio/vprintf.c64
-rw-r--r--winsup/mingw/mingwex/stdio/vscanf.c9
-rw-r--r--winsup/mingw/mingwex/stdio/vsnprintf.c55
-rw-r--r--winsup/mingw/mingwex/stdio/vsnwprintf.c5
-rw-r--r--winsup/mingw/mingwex/stdio/vsprintf.c66
-rw-r--r--winsup/mingw/mingwex/stdio/vsscanf.c41
-rw-r--r--winsup/mingw/mingwex/stdio/vswscanf.c43
-rw-r--r--winsup/mingw/mingwex/stdio/vwscanf.c10
-rw-r--r--winsup/mingw/mingwex/strtoimax.c112
-rw-r--r--winsup/mingw/mingwex/strtoumax.c110
-rwxr-xr-xwinsup/mingw/mingwex/tdelete.c65
-rw-r--r--winsup/mingw/mingwex/testwmem.c104
-rwxr-xr-xwinsup/mingw/mingwex/tfind.c41
-rwxr-xr-xwinsup/mingw/mingwex/tsearch.c51
-rwxr-xr-xwinsup/mingw/mingwex/tst-aligned-malloc.c90
-rwxr-xr-xwinsup/mingw/mingwex/twalk.c48
-rw-r--r--winsup/mingw/mingwex/ulltoa.c3
-rw-r--r--winsup/mingw/mingwex/ulltow.c3
-rwxr-xr-xwinsup/mingw/mingwex/usleep.c40
-rwxr-xr-xwinsup/mingw/mingwex/wcrtomb.c94
-rw-r--r--winsup/mingw/mingwex/wcstof.c64
-rw-r--r--winsup/mingw/mingwex/wcstoimax.c119
-rw-r--r--winsup/mingw/mingwex/wcstold.c65
-rw-r--r--winsup/mingw/mingwex/wcstoumax.c113
-rwxr-xr-xwinsup/mingw/mingwex/wctob.c21
-rwxr-xr-xwinsup/mingw/mingwex/wctrans.c60
-rwxr-xr-xwinsup/mingw/mingwex/wctype.c60
-rw-r--r--winsup/mingw/mingwex/wdirent.c5
-rw-r--r--winsup/mingw/mingwex/wmemchr.c28
-rw-r--r--winsup/mingw/mingwex/wmemcmp.c32
-rw-r--r--winsup/mingw/mingwex/wmemcpy.c32
-rw-r--r--winsup/mingw/mingwex/wmemmove.c43
-rw-r--r--winsup/mingw/mingwex/wmemset.c30
-rw-r--r--winsup/mingw/mingwex/wtoll.c3
325 files changed, 0 insertions, 27449 deletions
diff --git a/winsup/mingw/mingwex/Makefile.in b/winsup/mingw/mingwex/Makefile.in
deleted file mode 100644
index a495d5269..000000000
--- a/winsup/mingw/mingwex/Makefile.in
+++ /dev/null
@@ -1,349 +0,0 @@
-#
-# mingw/mingwex/Makefile.in: This file is part of Mingw runtime.
-#
-# This makefile requires GNU make.
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = $(srcdir):$(srcdir)/math:$(srcdir)/stdio:$(srcdir)/complex $(srcdir)/gdtoa
-
-# FIXME: I see no reason to define `objdir';
-# it appears to be unused, and could be removed.
-objdir = .
-
-target_alias = @target_alias@
-prefix = @prefix@
-
-datarootdir = @datarootdir@
-program_transform_name = @program_transform_name@
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-libdir = @libdir@
-
-# FIXME: Use of `target_alias' is extremely suspect here;
-# (see relevant note in top level Makefile).
-tooldir = $(exec_prefix)/$(target_alias)
-datadir = @datadir@
-infodir = @infodir@
-includedir = @includedir@
-
-SHELL = /bin/sh
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-mkinstalldirs = $(SHELL) $(srcdir)/../mkinstalldirs
-
-DISTFILES = \
- Makefile.in configure configure.in aclocal.m4 \
- _Exit.c atoll.c dirent.c feclearexcept.c fegetenv.c \
- fegetexceptflag.c fegetround.c feholdexcept.c feraiseexcept.c \
- fesetenv.c fesetexceptflag.c fesetround.c fetestexcept.c \
- feupdateenv.c ftruncate.c fwide.c getopt.c imaxabs.c imaxdiv.c \
- lltoa.c lltow.c mbsinit.c mingw-aligned-malloc.c \
- mingw-fseek.c sitest.c strtoimax.c strtoumax.c \
- testwmem.c tst-aligned-malloc.c ulltoa.c ulltow.c wcstof.c \
- wcstoimax.c wcstold.c wcstoumax.c wctrans.c wctype.c \
- wdirent.c wmemchr.c wmemcmp.c wmemcpy.c wmemmove.c wmemset.c wtoll.c \
- wcrtomb.c wctob.c mbrtowc.c btowc.c mb_wc_common.h \
- gettimeofday.c isblank.c iswblank.c \
- basename.c dirname.c usleep.c \
- tsearch.c twalk.c tdelete.c tfind.c
-
-MATH_DISTFILES = \
- acosf.c acosl.c asinf.c asinl.c atan2f.c atan2l.c \
- atanf.c atanl.c cbrt.c cbrtf.c cbrtl.c ceilf.S ceill.S \
- cephes_mconf.h \
- copysign.S copysignf.S copysignl.S cosf.S coshf.c coshl.c cosl.S \
- erfl.c exp2.S exp2f.S exp2l.S expf.c expl.c expm1.c expm1l.c expm1f.c \
- fabs.c fabsf.c fabsl.c \
- fdim.c fdimf.c fdiml.c floorf.S floorl.S fma.S fmaf.S fmal.c \
- fmax.c fmaxf.c fmaxl.c fmin.c fminf.c fminl.c fmodf.c \
- fmodl.c fp_consts.c fp_consts.h fp_constsf.c fp_constsl.c \
- fpclassify.c fpclassifyf.c fpclassifyl.c \
- frexpf.c frexpl.S fucom.c hypotf.c hypotl.c ilogb.S ilogbf.S \
- ilogbl.S isnan.c isnanf.c isnanl.c ldexpf.c ldexpl.c \
- lgamma.c lgammaf.c lgammal.c llrint.c llrintf.c llrintl.c \
- log10f.S log10l.S log1p.S log1pf.S log1pl.S log2.S log2f.S \
- log2l.S logb.c logbf.c logbl.c logf.S logl.S lrint.c lrintf.c \
- lrintl.c lround_generic.c modff.c modfl.c \
- nearbyint.S nearbyintf.S nearbyintl.S \
- nextafterf.c nextafterl.c nexttowardf.c nexttoward.c \
- powf.c powi.c powif.c powil.c powl.c \
- remainder.S remainderf.S remainderl.S remquo.S \
- remquof.S remquol.S rint.c rintf.c rintl.c round_internal.h \
- round_generic.c scalbn.S scalbnf.S scalbnl.S s_erf.c sf_erf.c \
- signbit.c signbitf.c signbitl.c sinf.S sinhf.c sinhl.c sinl.S \
- sqrtf.c sqrtl.c tanf.S tanhf.c tanhl.c tanl.S tgamma.c \
- tgammaf.c tgammal.c trunc.c truncf.c truncl.c \
- acosh.c acoshf.c acoshl.c asinh.c asinhf.c asinhl.c \
- atanh.c atanhf.c atanhl.c fastmath.h
-
-STDIO_DISTFILES = \
- fopen64.c fseeko64.c ftello64.c lseek64.c \
- vfscanf.c vfwscanf.c vscanf.c vsscanf.c vswscanf.c vwscanf.c \
- pformat.c pformat.h printf.c fprintf.c sprintf.c snprintf.c \
- vprintf.c vfprintf.c vsprintf.c vsnprintf.c \
- snwprintf.c vsnwprintf.c
-
-COMPLEX_DISTFILES = \
- cabs.c cabsf.c cabsl.c cacos.c cacosf.c cacosl.c cacosh.c \
- cacoshf.c cacoshl.c carg.c cargf.c cargl.c casin.c casinf.c \
- casinl.c casinh.c casinhf.c casinhl.c catan.c catanf.c catanl.c \
- catanh.c catanhf.c catanhl.c ccos.c ccosf.c ccosl.c ccosh.c \
- ccoshf.c ccoshl.c cexp.c cexpf.c cexpl.c cimag.c cimagf.c \
- cimagl.c clog.c clogf.c clogl.c cpow.c cpowf.c cpowl.c cproj.c \
- cprojf.c cprojl.c creal.c crealf.c creall.c csin.c csinf.c \
- csinl.c csinh.c csinhf.c csinhl.c csqrt.c csqrtf.c csqrtl.c \
- ctan.c ctanf.c ctanl.c ctanh.c ctanhf.c ctanhl.c
-
-GDTOA_DISTFILES = \
- arithchk.c dmisc.c dtoa.c g__fmt.c g_dfmt.c g_ffmt.c g_xfmt.c \
- gd_arith.h gd_qnan.h gdtoa.c gdtoa.h gdtoaimp.h gethex.c gmisc.c \
- hd_init.c hexnan.c misc.c qnan.c README smisc.c strtodg.c strtodnrp.c \
- strtof.c strtopx.c sum.c ulp.c
-
-CC = @CC@
-# FIXME: Which is it, CC or CC_FOR_TARGET?
-CC_FOR_TARGET = $(CC)
-AS_FOR_TARGET = $(AS)
-CFLAGS = @CFLAGS@
-CXXFLAGS = @CXXFLAGS@
-OPTFLAGS = -fomit-frame-pointer
-WARNFLAGS = -Wall
-
-
-# compiling with Cygwin?
-NO_CYGWIN := @NO_CYGWIN@
-ifdef NO_CYGWIN
-#
-# FIXME: What is the purpose of this hideous kludge?
-#
-# `CC' should have been appropriately set by the configure script;
-# to mess with it, in this fashion, should neither be necessary,
-# nor accepted.
-#
-override CC := ${NO_CYGWIN} $(firstword $(filter-out ${NO_CYGWIN},${CC}))
-endif
-
-W32API_INCLUDE = @W32API_INCLUDE@
-INCLUDES = -I${srcdir} -I${top_srcdir} -I${top_srcdir}/include \
- -nostdinc \
- -iwithprefixbefore include
-ALL_CFLAGS = $(CFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(INCLUDES) $(W32API_INCLUDE)
-ALL_CXXFLAGS = $(CXXFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(INCLUDES) -nostdinc++ $(W32API_INCLUDE)
-
-AS = @AS@
-AR = @AR@
-LD = @LD@
-AR_FLAGS = rcv
-RANLIB = @RANLIB@
-DLLTOOL = @DLLTOOL@
-DLLTOOLFLAGS =
-DLLTOOL_FOR_TARGET = $(DLLTOOL)
-DLLTOOL_FLAGS = --as $(AS_FOR_TARGET)
-
-LIBMINGWEX_A = libmingwex.a
-
-Q8_OBJS = \
- fwide.o imaxabs.o imaxdiv.o mbsinit.o \
- strtoimax.o strtoumax.o wcstoimax.o wcstoumax.o \
- wmemchr.o wmemcmp.o wmemcpy.o wmemmove.o wmemset.o \
- wctrans.o wctype.o wcrtomb.o wctob.o mbrtowc.o btowc.o \
- wcstof.o wcstold.o
-CTYPE_OBJS = \
- isblank.o iswblank.o
-STDLIB_STUB_OBJS = \
- lltoa.o ulltoa.o \
- lltow.o ulltow.o \
- atoll.o wtoll.o \
- _Exit.o
-STDIO_OBJS = \
- fopen64.o fseeko64.o ftello64.o lseek64.o \
- vfscanf.o vfwscanf.o vscanf.o vsscanf.o vswscanf.o vwscanf.o \
- pformat.o snprintf.o vsnprintf.o snwprintf.o vsnwprintf.o \
- printf.o fprintf.o sprintf.o vprintf.o vfprintf.o vsprintf.o
-MATH_OBJS = \
- acosf.o acosl.o asinf.o asinl.o atan2f.o atan2l.o \
- atanf.o atanl.o cbrt.o cbrtf.o cbrtl.o ceilf.o ceill.o \
- copysign.o copysignf.o copysignl.o cosf.o coshf.o coshl.o cosl.o \
- erfl.o exp2.o exp2f.o exp2l.o expf.o expl.o expm1.o expm1l.o expm1f.o \
- fabs.o fabsf.o fabsl.o \
- fdim.o fdimf.o fdiml.o floorf.o floorl.o fma.o fmaf.o fmal.o \
- fmax.o fmaxf.o fmaxl.o fmin.o fminf.o fminl.o fmodf.o \
- fmodl.o fp_consts.o fp_constsf.o fp_constsl.o \
- fpclassify.o fpclassifyf.o fpclassifyl.o \
- frexpf.o frexpl.o fucom.o hypotf.o hypotl.o ilogb.o ilogbf.o \
- ilogbl.o isnan.o isnanf.o isnanl.o ldexpf.o ldexpl.o \
- lgamma.o lgammaf.o lgammal.o llrint.o llrintf.o llrintl.o \
- log10f.o log10l.o log1p.o log1pf.o log1pl.o log2.o log2f.o \
- log2l.o logb.o logbf.o logbl.o logf.o logl.o \
- lrint.o lrintf.o lrintl.o modff.o modfl.o \
- nearbyint.o nearbyintf.o nearbyintl.o \
- nextafterf.o nextafterl.o nexttowardf.o nexttoward.o \
- powf.o powi.o powif.o powil.o powl.o \
- remainder.o remainderf.o remainderl.o remquo.o \
- remquof.o remquol.o rint.o rintf.o rintl.o \
- scalbn.o scalbnf.o scalbnl.o s_erf.o sf_erf.o \
- signbit.o signbitf.o signbitl.o sinf.o sinhf.o sinhl.o sinl.o \
- sqrtf.o sqrtl.o tanf.o tanhf.o tanhl.o tanl.o tgamma.o \
- tgammaf.o tgammal.o trunc.o truncf.o truncl.o \
- acosh.o acoshf.o acoshl.o asinh.o asinhf.o asinhl.o \
- atanh.o atanhf.o atanhl.o
-MATH_ROUND_OBJS = round.o roundf.o roundl.o
-MATH_LROUND_OBJS = lround.o lroundf.o lroundl.o
-MATH_LLROUND_OBJS = llround.o llroundf.o llroundl.o
-FENV_OBJS = fesetround.o fegetround.o \
- fegetenv.o fesetenv.o feupdateenv.o \
- feclearexcept.o feholdexcept.o fegetexceptflag.o \
- feraiseexcept.o fetestexcept.o fesetexceptflag.o
-POSIX_OBJS = \
- dirent.o wdirent.o getopt.o ftruncate.o gettimeofday.o usleep.o \
- basename.o dirname.o tsearch.o twalk.o tdelete.o tfind.o
-REPLACE_OBJS = \
- mingw-aligned-malloc.o mingw-fseek.o
-COMPLEX_OBJS = \
- cabs.o cabsf.o cabsl.o cacos.o cacosf.o cacosl.o cacosh.o \
- cacoshf.o cacoshl.o carg.o cargf.o cargl.o casin.o casinf.o \
- casinl.o casinh.o casinhf.o casinhl.o catan.o catanf.o catanl.o \
- catanh.o catanhf.o catanhl.o ccos.o ccosf.o ccosl.o ccosh.o \
- ccoshf.o ccoshl.o cexp.o cexpf.o cexpl.o cimag.o cimagf.o \
- cimagl.o clog.o clogf.o clogl.o cpow.o cpowf.o cpowl.o cproj.o \
- cprojf.o cprojl.o creal.o crealf.o creall.o csin.o csinf.o \
- csinl.o csinh.o csinhf.o csinhl.o csqrt.o csqrtf.o csqrtl.o \
- ctan.o ctanf.o ctanl.o ctanh.o ctanhf.o ctanhl.o
-GDTOA_OBJS = \
- dmisc.o dtoa.o g__fmt.o g_dfmt.o g_ffmt.o g_xfmt.o gdtoa.o \
- gethex.o gmisc.o hd_init.o hexnan.o misc.o smisc.o \
- strtodg.o strtodnrp.o strtof.o strtopx.o sum.o ulp.o
-
-LIB_OBJS = $(Q8_OBJS) $(CTYPE_OBJS) $(STDLIB_STUB_OBJS) \
- $(STDIO_OBJS) $(MATH_OBJS) $(MATH_ROUND_OBJS) \
- $(MATH_LROUND_OBJS) $(MATH_LLROUND_OBJS) $(FENV_OBJS) \
- $(POSIX_OBJS) $(REPLACE_OBJS) $(COMPLEX_OBJS) \
- $(GDTOA_OBJS)
-
-LIBS = $(LIBMINGWEX_A)
-DLLS =
-
-all: $(LIBMINGWEX_A)
-
-$(LIBMINGWEX_A): $(LIB_OBJS)
- rm -f $(LIBMINGWEX_A)
- $(AR) $(ARFLAGS) $@ $(LIB_OBJS)
- $(RANLIB) $@
-
-$(MATH_ROUND_OBJS): round_generic.c
- $(CC) $(ALL_CFLAGS) -I$(srcdir)/math -c -o $@ \
- -D FUNCTION=$* $(srcdir)/math/round_generic.c
-
-$(MATH_LROUND_OBJS) $(MATH_LLROUND_OBJS): lround_generic.c
- $(CC) $(ALL_CFLAGS) -I$(srcdir)/math -c -o $@ \
- -D FUNCTION=$* $(srcdir)/math/lround_generic.c
-
-top_builddir = @top_builddir@
-
-Makefile: Makefile.in ${top_builddir}/config.status ${top_srcdir}/configure
- cd ${top_builddir}; $(SHELL) config.status
-
-${top_builddir}/config.status: ${top_srcdir}/configure
- cd ${top_builddir}; $(SHELL) config.status --recheck
-
-info:
-
-info-html:
-
-install-info: info
-
-need-DESTDIR-compatibility = prefix libdir
-.PHONY: $(need-DESTDIR-compatibility) fail-DESTDIR-compatibility
-
-$(need-DESTDIR-compatibility):
- @test -z "$(DESTDIR)" || case "$($@)" in ?:*) \
- $(MAKE) --no-print-directory reject="$@" fail-DESTDIR-compatibility ;; \
- esac
-
-fail-DESTDIR-compatibility:
- $(error DESTDIR is not supported when $(reject) contains Win32 path `$($(reject))'; \
- try `make install $(reject)=$(shell echo '$($(reject))' | sed s,:,:$(DESTDIR),) ...' instead)
-
-install: all $(need-DESTDIR-compatibility)
- $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
- for i in $(LIBS); do \
- $(INSTALL_DATA) $$i $(DESTDIR)$(inst_libdir)/$$i ; \
- done
-
-clean:
- -rm -f $(LIB_OBJS) $(LIBMINGWEX_A)
-
-distclean:
- -rm -f *.o *.a *~ core a.out
- -rm -f config.cache config.status config.log
- -rm -f Makefile
-.c.o:
- $(CC) -c $(ALL_CFLAGS) $< -o $@
-.S.o:
- $(CC) -c $< -o $@
-.s.o:
- $(CC) -c $< -o $@
-
-# pformat.o needs an explicit build rule; we always build it
-# assuming __MSVCRT_VERSION__ >= 0x0800, relying on ofmt_stub.s
-# (in the parent directory) to maintain forward compatibility
-# for earlier versions of MSVCRT.DLL
-#
-PFORMAT_CFLAGS = $(ALL_CFLAGS) -I $(srcdir)/gdtoa -D__MSVCRT_VERSION__=0x0800
-pformat.o: pformat.c pformat.h
- $(CC) -c $(PFORMAT_CFLAGS) $(srcdir)/stdio/$*.c -o $@
-
-#
-# Dependencies
-#
-wdirent.o: $(srcdir)/dirent.c $(srcdir)/wdirent.c
-
-acosh.o acoshf.o acoshl.o \
-asinh.o asinhf.o asinhl.o \
-atanh.o atanhf.o atanhl.o: fastmath.h
-mbrtowc.o wcrtomb.o wcstof.o wcstold.o: mb_wc_common.h
-
-$(GDTOA_OBJS): gd_arith.h gdtoa.h gdtoaimp.h gd_qnan.h
-
-$(MATH_ROUND_OBJS) $(MATH_LROUND_OBJS) $(MATH_LLROUND_OBJS): round_internal.h
-
-printf.o: printf.c pformat.h
-fprintf.o: fprintf.c pformat.h
-sprintf.o: sprintf.c pformat.h
-snprintf.o: snprintf.c pformat.h
-vprintf.o: vprintf.c pformat.h
-vfprintf.o: vfprintf.c pformat.h
-vsprintf.o: vsprintf.c pformat.h
-vsnprintf.o: vsnprintf.c pformat.h
-
-dist:
- mkdir $(distdir)/mingwex
- chmod 755 $(distdir)/mingwex
- @for i in $(DISTFILES); do\
- cp -p $(srcdir)/$$i $(distdir)/mingwex/$$i ; \
- done
- mkdir $(distdir)/mingwex/math
- chmod 755 $(distdir)/mingwex/math
- @for i in $(MATH_DISTFILES); do\
- cp -p $(srcdir)/math/$$i $(distdir)/mingwex/math/$$i ; \
- done
- mkdir $(distdir)/mingwex/stdio
- chmod 755 $(distdir)/mingwex/stdio
- @for i in $(STDIO_DISTFILES); do\
- cp -p $(srcdir)/stdio/$$i $(distdir)/mingwex/stdio/$$i ; \
- done
- mkdir $(distdir)/mingwex/complex
- chmod 755 $(distdir)/mingwex/complex
- @for i in $(COMPLEX_DISTFILES); do\
- cp -p $(srcdir)/complex/$$i $(distdir)/mingwex/complex/$$i ; \
- done
- mkdir $(distdir)/mingwex/gdtoa
- chmod 755 $(distdir)/mingwex/gdtoa
- @for i in $(GDTOA_DISTFILES); do\
- cp -p $(srcdir)/gdtoa/$$i $(distdir)/mingwex/gdtoa/$$i ; \
- done
-
-# $RCSfile$: end of file
diff --git a/winsup/mingw/mingwex/_Exit.c b/winsup/mingw/mingwex/_Exit.c
deleted file mode 100644
index 38f7e182e..000000000
--- a/winsup/mingw/mingwex/_Exit.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <stdlib.h>
-void _Exit(int status)
- { _exit(status); }
diff --git a/winsup/mingw/mingwex/atoll.c b/winsup/mingw/mingwex/atoll.c
deleted file mode 100644
index 97920b4ee..000000000
--- a/winsup/mingw/mingwex/atoll.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <stdlib.h>
-long long atoll (const char * _c)
- { return _atoi64 (_c); }
diff --git a/winsup/mingw/mingwex/basename.c b/winsup/mingw/mingwex/basename.c
deleted file mode 100755
index c531cab58..000000000
--- a/winsup/mingw/mingwex/basename.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* basename.c
- *
- * $Id$
- *
- * Provides an implementation of the "basename" function, conforming
- * to SUSv3, with extensions to accommodate Win32 drive designators,
- * and suitable for use on native Microsoft(R) Win32 platforms.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libgen.h>
-#include <locale.h>
-
-#ifndef __cdecl /* If compiling on any non-Win32 platform ... */
-#define __cdecl /* this may not be defined. */
-#endif
-
-__cdecl char *basename( char *path )
-{
- size_t len;
- static char *retfail = NULL;
-
- /* to handle path names for files in multibyte character locales,
- * we need to set up LC_CTYPE to match the host file system locale
- */
-
- char *locale = setlocale( LC_CTYPE, NULL );
- if( locale != NULL ) locale = strdup( locale );
- setlocale( LC_CTYPE, "" );
-
- if( path && *path )
- {
- /* allocate sufficient local storage space,
- * in which to create a wide character reference copy of path
- */
-
- wchar_t refcopy[1 + (len = mbstowcs( NULL, path, 0 ))];
-
- /* create the wide character reference copy of path,
- * and step over the drive designator, if present ...
- */
-
- wchar_t *refpath = refcopy;
- if( ((len = mbstowcs( refpath, path, len )) > 1) && (refpath[1] == L':') )
- {
- /* FIXME: maybe should confirm *refpath is a valid drive designator */
-
- refpath += 2;
- }
-
- /* ensure that our wide character reference path is NUL terminated */
-
- refcopy[ len ] = L'\0';
-
- /* check again, just to ensure we still have a non-empty path name ... */
-
- if( *refpath )
- {
- /* and, when we do, process it in the wide character domain ...
- * scanning from left to right, to the char after the final dir separator
- */
-
- wchar_t *refname;
- for( refname = refpath ; *refpath ; ++refpath )
- {
- if( (*refpath == L'/') || (*refpath == L'\\') )
- {
- /* we found a dir separator ...
- * step over it, and any others which immediately follow it
- */
-
- while( (*refpath == L'/') || (*refpath == L'\\') )
- ++refpath;
-
- /* if we didn't reach the end of the path string ... */
-
- if( *refpath )
-
- /* then we have a new candidate for the base name */
-
- refname = refpath;
-
- /* otherwise ...
- * strip off any trailing dir separators which we found
- */
-
- else while( (refpath > refname)
- && ((*--refpath == L'/') || (*refpath == L'\\')) )
- *refpath = L'\0';
- }
- }
-
- /* in the wide character domain ...
- * refname now points at the resolved base name ...
- */
-
- if( *refname )
- {
- /* if it's not empty,
- * then we transform the full normalised path back into
- * the multibyte character domain, and skip over the dirname,
- * to return the resolved basename.
- */
-
- if( (len = wcstombs( path, refcopy, len )) != (size_t)(-1) )
- path[ len ] = '\0';
- *refname = L'\0';
- if( (len = wcstombs( NULL, refcopy, 0 )) != (size_t)(-1) )
- path += len;
- }
-
- else
- {
- /* the basename is empty, so return the default value of "/",
- * transforming from wide char to multibyte char domain, and
- * returning it in our own buffer.
- */
-
- retfail = realloc( retfail, len = 1 + wcstombs( NULL, L"/", 0 ));
- wcstombs( path = retfail, L"/", len );
- }
-
- /* restore the caller's locale, clean up, and return the result */
-
- setlocale( LC_CTYPE, locale );
- free( locale );
- return( path );
- }
-
- /* or we had an empty residual path name, after the drive designator,
- * in which case we simply fall through ...
- */
- }
-
- /* and, if we get to here ...
- * the path name is either NULL, or it decomposes to an empty string;
- * in either case, we return the default value of "." in our own buffer,
- * reloading it with the correct value, transformed from the wide char
- * to the multibyte char domain, just in case the caller trashed it
- * after a previous call.
- */
-
- retfail = realloc( retfail, len = 1 + wcstombs( NULL, L".", 0 ));
- wcstombs( retfail, L".", len );
-
- /* restore the caller's locale, clean up, and return the result */
-
- setlocale( LC_CTYPE, locale );
- free( locale );
- return( retfail );
-}
-
-/* $RCSfile$$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/btowc.c b/winsup/mingw/mingwex/btowc.c
deleted file mode 100755
index 26b887026..000000000
--- a/winsup/mingw/mingwex/btowc.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "mb_wc_common.h"
-#include <wchar.h>
-#include <stdio.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-wint_t btowc (int c)
-{
- if (c == EOF)
- return (WEOF);
- else
- {
- unsigned char ch = c;
- wchar_t wc = WEOF;
- MultiByteToWideChar (get_codepage(), MB_ERR_INVALID_CHARS,
- (char*)&ch, 1, &wc, 1);
- return wc;
- }
-}
diff --git a/winsup/mingw/mingwex/complex/cabs.c b/winsup/mingw/mingwex/complex/cabs.c
deleted file mode 100644
index ff547dd6e..000000000
--- a/winsup/mingw/mingwex/complex/cabs.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-#include <complex.h>
-
-double cabs (double complex Z)
-{
- return _hypot ( __real__ Z, __imag__ Z);
-}
diff --git a/winsup/mingw/mingwex/complex/cabsf.c b/winsup/mingw/mingwex/complex/cabsf.c
deleted file mode 100755
index 452e88f1c..000000000
--- a/winsup/mingw/mingwex/complex/cabsf.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-#include <complex.h>
-
-float cabsf (float complex Z)
-{
- return (float) _hypot ( __real__ Z, __imag__ Z);
-}
diff --git a/winsup/mingw/mingwex/complex/cabsl.c b/winsup/mingw/mingwex/complex/cabsl.c
deleted file mode 100755
index 33124653b..000000000
--- a/winsup/mingw/mingwex/complex/cabsl.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <math.h>
-#include <complex.h>
-
-long double cabsl (long double complex Z)
-{
- return hypotl ( __real__ Z, __imag__ Z);
-}
diff --git a/winsup/mingw/mingwex/complex/cacos.c b/winsup/mingw/mingwex/complex/cacos.c
deleted file mode 100644
index 265cba0d7..000000000
--- a/winsup/mingw/mingwex/complex/cacos.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- cacos.c
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-
-#if 0
-/* cacos (Z) = -I * clog(Z + I * csqrt(1 - Z * Z)) */
-
-double complex cacos (double complex Z)
-{
- double complex Res;
- double x, y;
-
- x = __real__ Z;
- y = __imag__ Z;
-
- if (y == 0.0)
- {
- __real__ Res = acos (x);
- __imag__ Res = 0.0;
- }
-
- else
- {
- double complex ZZ;
- /* Z * Z = ((x - y) * (x + y)) + (2.0 * x * y) * I */
- /* caculate 1 - Z * Z */
- __real__ ZZ = 1.0 - (x - y) * (x + y);
- __imag__ ZZ = -2.0 * x * y;
-
-
- Res = csqrt(ZZ);
-
- /* calculate ZZ + I * sqrt (ZZ) */
-
- __real__ ZZ = x - __imag__ Res;
- __imag__ ZZ = y + __real__ Res;
-
- ZZ = clog(ZZ);
-
- /* mult by -I */
-
- __real__ Res = __imag__ ZZ;
- __imag__ Res = - __real__ ZZ;
- }
- return Res;
-}
-
-#else
-
-/* cacos ( Z ) = pi/2 - casin ( Z ) */
-
-double complex cacos (double complex Z)
-{
- double complex Res = casin (Z);
- __real__ Res = M_PI_2 - __real__ Res;
- __imag__ Res = - __imag__ Res;
- return Res;
-}
-#endif
-
-#if 0
-#include <stdio.h>
-int main()
-{
- double z;
- double complex bar = 0.7 + 1.2 * I;
- double complex foo = cacos (bar);
-
- printf ("%.16e\t%.16e\n", __real__ foo, __imag__ foo);
-
- foo = cacos (bar);
- printf ("%.16e\t%.16e\n", __real__ foo, __imag__ foo);
-
- return 1;
-}
-#endif
-
diff --git a/winsup/mingw/mingwex/complex/cacosf.c b/winsup/mingw/mingwex/complex/cacosf.c
deleted file mode 100755
index f2fbbd9b3..000000000
--- a/winsup/mingw/mingwex/complex/cacosf.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- cacosf.c
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-#include <math.h>
-#include <complex.h>
-
-#if 0
-/* cacos (Z) = -I * clog(Z + I * csqrt(1 - Z * Z)) */
-
-float complex cacos (float complex Z)
-{
- float complex Res;
- float x, y;
-
- x = __real__ Z;
- y = __imag__ Z;
-
- if (y == 0.0f)
- {
- __real__ Res = acosf (x);
- __imag__ Res = 0.0f;
- }
-
- else
- {
- float complex ZZ;
- /* Z * Z = ((x - y) * (x + y)) + (2.0 * x * y) * I */
- /* caculate 1 - Z * Z */
- __real__ ZZ = 1.0f - (x - y) * (x + y);
- __imag__ ZZ = -2.0f * x * y;
-
-
- Res = csqrtf(ZZ);
-
- /* calculate ZZ + I * sqrt (ZZ) */
-
- __real__ ZZ = x - __imag__ Res;
- __imag__ ZZ = y + __real__ Res;
-
- ZZ = clog(ZZ);
-
- /* mult by -I */
-
- __real__ Res = __imag__ ZZ;
- __imag__ Res = - __real__ ZZ;
- }
- return Res;
-}
-
-#else
-
-/* cacos ( Z ) = pi/2 - casin ( Z ) */
-
-float complex cacosf (float complex Z)
-{
- float complex Res = casinf (Z);
- __real__ Res = M_PI_2 - __real__ Res;
- __imag__ Res = - __imag__ Res;
- return Res;
-}
-#endif
diff --git a/winsup/mingw/mingwex/complex/cacosh.c b/winsup/mingw/mingwex/complex/cacosh.c
deleted file mode 100644
index 34469cb56..000000000
--- a/winsup/mingw/mingwex/complex/cacosh.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- cacosh.c
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-
-#if 0
-/* cacosh (z) = I * cacos (z) */
-double complex cacosh (double complex Z)
-{
- double complex Tmp;
- double complex Res;
-
- Tmp = cacos (Z);
- __real__ Res = -__imag__ Tmp;
- __imag__ Res = __real__ Tmp;
- return Res;
-}
-
-#else
-
-/* cacosh (z) = I * cacos (z) = I * (pi/2 - casin (z)) */
-
-double complex cacosh (double complex Z)
-{
- double complex Tmp;
- double complex Res;
-
- Tmp = casin (Z);
- __real__ Res = __imag__ Tmp;
- __imag__ Res = M_PI_2 - __real__ Tmp;
- return Res;
-}
-#endif
diff --git a/winsup/mingw/mingwex/complex/cacoshf.c b/winsup/mingw/mingwex/complex/cacoshf.c
deleted file mode 100755
index 411afb3c5..000000000
--- a/winsup/mingw/mingwex/complex/cacoshf.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- cacoshf.c
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-#include <math.h>
-#include <complex.h>
-
-#if 0
-/* cacoshf (z) = I * cacos (z) */
-float complex cacosh (float complex Z)
-{
- float complex Tmp;
- float complex Res;
-
- Tmp = cacosf (Z);
- __real__ Res = -__imag__ Tmp;
- __imag__ Res = __real__ Tmp;
- return Res;
-}
-
-#else
-
-/* cacosh (z) = I * cacos (z) = I * (pi/2 - casin (z)) */
-
-float complex cacoshf (float complex Z)
-{
- float complex Tmp;
- float complex Res;
-
- Tmp = casinf (Z);
- __real__ Res = __imag__ Tmp;
- __imag__ Res = M_PI_2 - __real__ Tmp;
- return Res;
-}
-#endif
diff --git a/winsup/mingw/mingwex/complex/cacoshl.c b/winsup/mingw/mingwex/complex/cacoshl.c
deleted file mode 100755
index 7f482c409..000000000
--- a/winsup/mingw/mingwex/complex/cacoshl.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- cacoshl.c
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-#if 0
-/* cacosh (z) = I * cacos (z) */
-long double complex cacoshl (long double complex Z)
-{
- long double complex Tmp;
- long double complex Res;
-
- Tmp = cacosl (Z);
- __real__ Res = -__imag__ Tmp;
- __imag__ Res = __real__ Tmp;
- return Res;
-}
-
-#else
-
-/* cacosh (z) = I * cacos (z) = I * (pi/2 - casin (z)) */
-#ifndef _M_PI_2L
-#define _M_PI_2L 1.5707963267948966192313L
-#endif
-long double complex cacoshl (long double complex Z)
-{
- long double complex Tmp;
- long double complex Res;
-
- Tmp = casinl (Z);
- __real__ Res = __imag__ Tmp;
- __imag__ Res = _M_PI_2L - __real__ Tmp;
- return Res;
-}
-#endif
diff --git a/winsup/mingw/mingwex/complex/cacosl.c b/winsup/mingw/mingwex/complex/cacosl.c
deleted file mode 100755
index c8e0b6eda..000000000
--- a/winsup/mingw/mingwex/complex/cacosl.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- cacosl.c
- Contributed by Danny Smith
- 2004-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-#if 0
-/* cacos (Z) = -I * clog(Z + I * csqrt(1 - Z * Z)) */
-
-long double complex cacosl (long double complex Z)
-{
- long double complex Res;
- long double x, y;
-
- x = __real__ Z;
- y = __imag__ Z;
-
- if (y == 0.0L)
- {
- __real__ Res = acosl (x);
- __imag__ Res = 0.0L;
- }
-
- else
- {
- long double complex ZZ;
- /* Z * Z = ((x - y) * (x + y)) + (2.0 * x * y) * I */
- /* caculate 1 - Z * Z */
- __real__ ZZ = 1.0L - (x - y) * (x + y);
- __imag__ ZZ = -2.0L * x * y;
-
-
- Res = csqrtl(ZZ);
-
- /* calculate ZZ + I * sqrt (ZZ) */
-
- __real__ ZZ = x - __imag__ Res;
- __imag__ ZZ = y + __real__ Res;
-
- ZZ = clogl(ZZ);
-
- /* mult by -I */
-
- __real__ Res = __imag__ ZZ;
- __imag__ Res = - __real__ ZZ;
- }
- return Res;
-}
-
-#else
-
-/* cacos ( Z ) = pi/2 - casin ( Z ) */
-#ifndef _M_PI_2L
-#define _M_PI_2L 1.5707963267948966192313L
-#endif
-long double complex cacosl (long double complex Z)
-{
- long double complex Res = casinl (Z);
- __real__ Res = _M_PI_2L - __real__ Res;
- __imag__ Res = - __imag__ Res;
- return Res;
-}
-#endif
diff --git a/winsup/mingw/mingwex/complex/carg.c b/winsup/mingw/mingwex/complex/carg.c
deleted file mode 100755
index cb47accb6..000000000
--- a/winsup/mingw/mingwex/complex/carg.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <complex.h>
-double __attribute__ ((const)) carg (double _Complex _Z)
-{
- double res;
- __asm__ ("fpatan;"
- : "=t" (res) : "0" (__real__ _Z), "u" (__imag__ _Z) : "st(1)");
- return res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/cargf.c b/winsup/mingw/mingwex/complex/cargf.c
deleted file mode 100755
index 360beefe4..000000000
--- a/winsup/mingw/mingwex/complex/cargf.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <complex.h>
-float __attribute__ ((const)) cargf (float _Complex _Z)
-{
- float res;
- __asm__ ("fpatan;"
- : "=t" (res) : "0" (__real__ _Z), "u" (__imag__ _Z) : "st(1)");
- return res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/cargl.c b/winsup/mingw/mingwex/complex/cargl.c
deleted file mode 100755
index 179dae704..000000000
--- a/winsup/mingw/mingwex/complex/cargl.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <complex.h>
-long double __attribute__ ((const)) cargl (long double _Complex _Z)
-{
- long double res;
- __asm__ ("fpatan;"
- : "=t" (res) : "0" (__real__ _Z), "u" (__imag__ _Z) : "st(1)");
- return res;
-}
diff --git a/winsup/mingw/mingwex/complex/casin.c b/winsup/mingw/mingwex/complex/casin.c
deleted file mode 100644
index cd79767b5..000000000
--- a/winsup/mingw/mingwex/complex/casin.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- casin.c
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* casin (Z ) = -I * clog(I * Z + csqrt (1.0 - Z * Z))) */
-
-double complex casin (double complex Z)
-{
- double complex Res;
- double x, y;
-
- x = __real__ Z;
- y = __imag__ Z;
-
- if (y == 0.0)
- {
- __real__ Res = asin (x);
- __imag__ Res = 0.0;
- }
- else /* -I * clog(I * Z + csqrt(1.0 - Z * Z))) */
- {
- double complex ZZ;
-
- /* Z * Z = ((x - y) * (x + y)) + (2.0 * x * y) * I */
- /* calculate 1 - Z * Z */
- __real__ ZZ = 1.0 - (x - y) * (x + y);
- __imag__ ZZ = -2.0 * x * y;
- ZZ = csqrt (ZZ);
-
-
- /* add I * Z to ZZ */
-
- __real__ ZZ -= y;
- __imag__ ZZ += x;
-
- ZZ = clog (ZZ);
-
- /* mult by -I */
- __real__ Res = __imag__ ZZ;
- __imag__ Res = - __real__ ZZ;
- }
- return (Res);
-}
diff --git a/winsup/mingw/mingwex/complex/casinf.c b/winsup/mingw/mingwex/complex/casinf.c
deleted file mode 100755
index a70058b0c..000000000
--- a/winsup/mingw/mingwex/complex/casinf.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- casinf.c
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* casin (Z ) = -I * clog(I * Z + csqrt (1.0 - Z * Z))) */
-
-float complex casinf (float complex Z)
-{
- float complex Res;
- float x, y;
-
- x = __real__ Z;
- y = __imag__ Z;
-
- if (y == 0.0f)
- {
- __real__ Res = asinf (x);
- __imag__ Res = 0.0f;
- }
- else /* -I * clog(I * Z + csqrt(1.0 - Z * Z))) */
- {
- float complex ZZ;
-
- /* Z * Z = ((x - y) * (x + y)) + (2.0 * x * y) * I */
- /* calculate 1 - Z * Z */
- __real__ ZZ = 1.0f - (x - y) * (x + y);
- __imag__ ZZ = -2.0f * x * y;
- ZZ = csqrtf (ZZ);
-
-
- /* add I * Z to ZZ */
-
- __real__ ZZ -= y;
- __imag__ ZZ += x;
-
- ZZ = clogf (ZZ);
-
- /* mult by -I */
- __real__ Res = __imag__ ZZ;
- __imag__ Res = - __real__ ZZ;
- }
- return (Res);
-}
diff --git a/winsup/mingw/mingwex/complex/casinh.c b/winsup/mingw/mingwex/complex/casinh.c
deleted file mode 100644
index a86c1d625..000000000
--- a/winsup/mingw/mingwex/complex/casinh.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- casinh.c
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* casinh (z) = -I casin (I * z) */
-
-double complex casinh (double complex Z)
-{
- double complex Tmp;
- double complex Res;
-
- __real__ Tmp = - __imag__ Z;
- __imag__ Tmp = __real__ Z;
- Tmp = casin (Tmp);
- __real__ Res = __imag__ Tmp;
- __imag__ Res = - __real__ Tmp;
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/casinhf.c b/winsup/mingw/mingwex/complex/casinhf.c
deleted file mode 100755
index 421cd3a96..000000000
--- a/winsup/mingw/mingwex/complex/casinhf.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- casinhf.c
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* casinh (z) = -I casin (I * z) */
-
-float complex casinhf (float complex Z)
-{
- float complex Tmp;
- float complex Res;
-
- __real__ Tmp = - __imag__ Z;
- __imag__ Tmp = __real__ Z;
- Tmp = casinf (Tmp);
- __real__ Res = __imag__ Tmp;
- __imag__ Res = - __real__ Tmp;
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/casinhl.c b/winsup/mingw/mingwex/complex/casinhl.c
deleted file mode 100755
index 348bf8084..000000000
--- a/winsup/mingw/mingwex/complex/casinhl.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- casinhl.c
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* casinh (z) = -I casin (I * z) */
-
-long double complex casinhl (long double complex Z)
-{
- long double complex Tmp;
- long double complex Res;
-
- __real__ Tmp = - __imag__ Z;
- __imag__ Tmp = __real__ Z;
- Tmp = casinl (Tmp);
- __real__ Res = __imag__ Tmp;
- __imag__ Res = - __real__ Tmp;
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/casinl.c b/winsup/mingw/mingwex/complex/casinl.c
deleted file mode 100755
index 3093fa542..000000000
--- a/winsup/mingw/mingwex/complex/casinl.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- casinl.c
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* casin (Z ) = -I * clog(I * Z + csqrt (1.0 - Z * Z))) */
-
-long double complex casinl (long double complex Z)
-{
- long double complex Res;
- long double x, y;
-
- x = __real__ Z;
- y = __imag__ Z;
-
- if (y == 0.0L)
- {
- __real__ Res = asinl (x);
- __imag__ Res = 0.0L;
- }
- else /* -I * clog(I * Z + csqrt(1.0 - Z * Z))) */
- {
- long double complex ZZ;
-
- /* Z * Z = ((x - y) * (x + y)) + (2.0 * x * y) * I */
- /* calculate 1 - Z * Z */
- __real__ ZZ = 1.0L - (x - y) * (x + y);
- __imag__ ZZ = -2.0L * x * y;
- ZZ = csqrtl (ZZ);
-
-
- /* add I * Z to ZZ */
-
- __real__ ZZ -= y;
- __imag__ ZZ += x;
-
- ZZ = clogl (ZZ);
-
- /* mult by -I */
- __real__ Res = __imag__ ZZ;
- __imag__ Res = - __real__ ZZ;
- }
- return (Res);
-}
diff --git a/winsup/mingw/mingwex/complex/catan.c b/winsup/mingw/mingwex/complex/catan.c
deleted file mode 100644
index eee1e8fa7..000000000
--- a/winsup/mingw/mingwex/complex/catan.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* catan.c */
-
-/*
- Contributed by Danny Smith
- 2003-10-17
-
- FIXME: This needs some serious numerical analysis.
-*/
-
-#include <math.h>
-#include <complex.h>
-#include <errno.h>
-
-/* catan (z) = -I/2 * clog ((I + z) / (I - z)) */
-
-double complex
-catan (double complex Z)
-{
- double complex Res;
- double complex Tmp;
- double x = __real__ Z;
- double y = __imag__ Z;
-
- if ( x == 0.0 && (1.0 - fabs (y)) == 0.0)
- {
- errno = ERANGE;
- __real__ Res = HUGE_VAL;
- __imag__ Res = HUGE_VAL;
- }
- else if (isinf (_hypot (x, y)))
- {
- __real__ Res = (x > 0 ? M_PI_2 : -M_PI_2);
- __imag__ Res = 0.0;
- }
- else
- {
- __real__ Tmp = - x;
- __imag__ Tmp = 1.0 - y;
-
- __real__ Res = x;
- __imag__ Res = y + 1.0;
-
- Tmp = clog (Res/Tmp);
- __real__ Res = - 0.5 * __imag__ Tmp;
- __imag__ Res = 0.5 * __real__ Tmp;
- }
-
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/catanf.c b/winsup/mingw/mingwex/complex/catanf.c
deleted file mode 100755
index adddde885..000000000
--- a/winsup/mingw/mingwex/complex/catanf.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* catanf.c */
-
-/*
- Contributed by Danny Smith
- 2004-12-24
-
- FIXME: This needs some serious numerical analysis.
-*/
-
-#include <math.h>
-#include <complex.h>
-#include <errno.h>
-
-/* catan (z) = -I/2 * clog ((I + z) / (I - z)) */
-
-float complex
-catanf (float complex Z)
-{
- float complex Res;
- float complex Tmp;
- float x = __real__ Z;
- float y = __imag__ Z;
-
- if ( x == 0.0f && (1.0f - fabsf (y)) == 0.0f)
- {
- errno = ERANGE;
- __real__ Res = HUGE_VALF;
- __imag__ Res = HUGE_VALF;
- }
- else if (isinf (hypotf (x, y)))
- {
- __real__ Res = (x > 0 ? M_PI_2 : -M_PI_2);
- __imag__ Res = 0.0f;
- }
- else
- {
- __real__ Tmp = - x;
- __imag__ Tmp = 1.0f - y;
-
- __real__ Res = x;
- __imag__ Res = y + 1.0f;
-
- Tmp = clogf (Res/Tmp);
- __real__ Res = - 0.5f * __imag__ Tmp;
- __imag__ Res = 0.5f * __real__ Tmp;
- }
-
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/catanh.c b/winsup/mingw/mingwex/complex/catanh.c
deleted file mode 100644
index 78f028014..000000000
--- a/winsup/mingw/mingwex/complex/catanh.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* catanh.c */
-/*
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* catanh (z) = -I * catan (I * z) */
-
-double complex catanh (double complex Z)
-{
- double complex Tmp;
- double complex Res;
-
- __real__ Tmp = - __imag__ Z;
- __imag__ Tmp = __real__ Z;
- Tmp = catan (Tmp);
- __real__ Res = __imag__ Tmp;
- __imag__ Res = - __real__ Tmp;
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/catanhf.c b/winsup/mingw/mingwex/complex/catanhf.c
deleted file mode 100755
index 7a792e88b..000000000
--- a/winsup/mingw/mingwex/complex/catanhf.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* catanhf.c */
-/*
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* catanh (z) = -I * catan (I * z) */
-
-float complex catanhf (float complex Z)
-{
- float complex Tmp;
- float complex Res;
-
- __real__ Tmp = - __imag__ Z;
- __imag__ Tmp = __real__ Z;
- Tmp = catanf (Tmp);
- __real__ Res = __imag__ Tmp;
- __imag__ Res = - __real__ Tmp;
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/catanhl.c b/winsup/mingw/mingwex/complex/catanhl.c
deleted file mode 100755
index 50a3be950..000000000
--- a/winsup/mingw/mingwex/complex/catanhl.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* catanhl.c */
-/*
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* catanh (z) = -I * catan (I * z) */
-
-long double complex catanhl (long double complex Z)
-{
- long double complex Tmp;
- long double complex Res;
-
- __real__ Tmp = - __imag__ Z;
- __imag__ Tmp = __real__ Z;
- Tmp = catanl (Tmp);
- __real__ Res = __imag__ Tmp;
- __imag__ Res = - __real__ Tmp;
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/catanl.c b/winsup/mingw/mingwex/complex/catanl.c
deleted file mode 100755
index 1fd62685a..000000000
--- a/winsup/mingw/mingwex/complex/catanl.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* catanl.c */
-
-/*
- Contributed by Danny Smith
- 2005-01-04
-
- FIXME: This needs some serious numerical analysis.
-*/
-
-#include <math.h>
-#include <complex.h>
-#include <errno.h>
-
-/* catan (z) = -I/2 * clog ((I + z) / (I - z)) */
-
-#ifndef _M_PI_2L
-#define _M_PI_2L 1.5707963267948966192313L
-#endif
-
-long double complex
-catanl (long double complex Z)
-{
- long double complex Res;
- long double complex Tmp;
- long double x = __real__ Z;
- long double y = __imag__ Z;
-
- if ( x == 0.0L && (1.0L - fabsl (y)) == 0.0L)
- {
- errno = ERANGE;
- __real__ Res = HUGE_VALL;
- __imag__ Res = HUGE_VALL;
- }
- else if (isinf (hypotl (x, y)))
- {
- __real__ Res = (x > 0 ? _M_PI_2L : -_M_PI_2L);
- __imag__ Res = 0.0L;
- }
- else
- {
- __real__ Tmp = - x;
- __imag__ Tmp = 1.0L - y;
-
- __real__ Res = x;
- __imag__ Res = y + 1.0L;
-
- Tmp = clogl (Res/Tmp);
- __real__ Res = - 0.5L * __imag__ Tmp;
- __imag__ Res = 0.5L * __real__ Tmp;
- }
-
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/ccos.c b/winsup/mingw/mingwex/complex/ccos.c
deleted file mode 100644
index ef5b5a70e..000000000
--- a/winsup/mingw/mingwex/complex/ccos.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- ccos.c
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* ccos (x + I * y) = cos (x) * cosh (y)
- + I * (sin (x) * sinh (y)) */
-
-
-double complex ccos (double complex Z)
-{
- double complex Res;
- __real__ Res = cos (__real__ Z) * cosh ( __imag__ Z);
- __imag__ Res = -sin (__real__ Z) * sinh ( __imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/ccosf.c b/winsup/mingw/mingwex/complex/ccosf.c
deleted file mode 100755
index 64a676455..000000000
--- a/winsup/mingw/mingwex/complex/ccosf.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- ccosf.c
- Contributed by Danny Smith
- 2003-12-24
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* ccos (x + I * y) = cos (x) * cosh (y)
- + I * (sin (x) * sinh (y)) */
-
-
-float complex ccosf (float complex Z)
-{
- float complex Res;
- __real__ Res = cosf (__real__ Z) * coshf ( __imag__ Z);
- __imag__ Res = -sinf (__real__ Z) * sinhf ( __imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/ccosh.c b/winsup/mingw/mingwex/complex/ccosh.c
deleted file mode 100644
index 8d304fd0e..000000000
--- a/winsup/mingw/mingwex/complex/ccosh.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- ccosh.c
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* ccosh (x + I * y) = cosh (x) * cos (y)
- + I * (sinh (x) * sin (y)) */
-
-double complex ccosh (double complex Z)
-{
- double complex Res;
- __real__ Res = cosh (__real__ Z) * cos (__imag__ Z);
- __imag__ Res = sinh (__real__ Z) * sin (__imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/ccoshf.c b/winsup/mingw/mingwex/complex/ccoshf.c
deleted file mode 100755
index ce78cd62d..000000000
--- a/winsup/mingw/mingwex/complex/ccoshf.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- ccoshf.c
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* ccosh (x + I * y) = cosh (x) * cos (y)
- + I * (sinh (x) * sin (y)) */
-
-float complex ccoshf (float complex Z)
-{
- float complex Res;
- __real__ Res = coshf (__real__ Z) * cosf (__imag__ Z);
- __imag__ Res = sinhf (__real__ Z) * sinf (__imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/ccoshl.c b/winsup/mingw/mingwex/complex/ccoshl.c
deleted file mode 100755
index 0fb2526c7..000000000
--- a/winsup/mingw/mingwex/complex/ccoshl.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- ccoshl.c
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* ccosh (x + I * y) = cosh (x) * cos (y)
- + I * (sinh (x) * sin (y)) */
-
-long double complex ccoshl (long double complex Z)
-{
- long double complex Res;
- __real__ Res = coshl (__real__ Z) * cosl (__imag__ Z);
- __imag__ Res = sinhl (__real__ Z) * sinl (__imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/ccosl.c b/winsup/mingw/mingwex/complex/ccosl.c
deleted file mode 100755
index 981fdf0ea..000000000
--- a/winsup/mingw/mingwex/complex/ccosl.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- ccosl.c
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* ccos (x + I * y) = cos (x) * cosh (y)
- + I * (sin (x) * sinh (y)) */
-
-
-long double complex ccosl (long double complex Z)
-{
- long double complex Res;
- __real__ Res = cosl (__real__ Z) * coshl ( __imag__ Z);
- __imag__ Res = -sinl (__real__ Z) * sinhl ( __imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/cexp.c b/winsup/mingw/mingwex/complex/cexp.c
deleted file mode 100644
index 43ac9ab9e..000000000
--- a/winsup/mingw/mingwex/complex/cexp.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- cexp.c
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* cexp (x + I * y) = exp (x) * cos (y) + I * exp (x) * sin (y) */
-
-double complex cexp (double complex Z)
-{
- double complex Res;
- long double rho = exp (__real__ Z);
- __real__ Res = rho * cos(__imag__ Z);
- __imag__ Res = rho * sin(__imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/cexpf.c b/winsup/mingw/mingwex/complex/cexpf.c
deleted file mode 100755
index fabb1a0cb..000000000
--- a/winsup/mingw/mingwex/complex/cexpf.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- cexpf.c
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* cexp (x + I * y) = exp (x) * cos (y) + I * exp (x) * sin (y) */
-
-float complex cexpf (float complex Z)
-{
- float complex Res;
- double rho = exp (__real__ Z);
- __real__ Res = rho * cosf(__imag__ Z);
- __imag__ Res = rho * sinf(__imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/cexpl.c b/winsup/mingw/mingwex/complex/cexpl.c
deleted file mode 100755
index 9f2ed2676..000000000
--- a/winsup/mingw/mingwex/complex/cexpl.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- cexpl.c
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* cexp (x + I * y) = exp (x) * cos (y) + I * exp (x) * sin (y) */
-
-long double complex cexpl (long double complex Z)
-{
- long double complex Res;
- long double rho = expl (__real__ Z);
- __real__ Res = rho * cosl(__imag__ Z);
- __imag__ Res = rho * sinl(__imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/cimag.c b/winsup/mingw/mingwex/complex/cimag.c
deleted file mode 100644
index b6b32561c..000000000
--- a/winsup/mingw/mingwex/complex/cimag.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <complex.h>
-double __attribute__ ((const)) cimag (double complex _Z)
-{
- return __imag__ _Z;
-}
-
diff --git a/winsup/mingw/mingwex/complex/cimagf.c b/winsup/mingw/mingwex/complex/cimagf.c
deleted file mode 100755
index f77b9ec54..000000000
--- a/winsup/mingw/mingwex/complex/cimagf.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <complex.h>
-float __attribute__ ((const)) cimagf (float complex _Z)
-{
- return __imag__ _Z;
-}
-
diff --git a/winsup/mingw/mingwex/complex/cimagl.c b/winsup/mingw/mingwex/complex/cimagl.c
deleted file mode 100755
index 9b023b49b..000000000
--- a/winsup/mingw/mingwex/complex/cimagl.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <complex.h>
-long double __attribute__ ((const)) cimagl (long double complex _Z)
-{
- return __imag__ _Z;
-}
diff --git a/winsup/mingw/mingwex/complex/clog.c b/winsup/mingw/mingwex/complex/clog.c
deleted file mode 100644
index 57c51ebb0..000000000
--- a/winsup/mingw/mingwex/complex/clog.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- clog.c
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-/* clog (x + I * y) = log (hypot (x, y)) + I * atan2 (y, x) */
-
-#include <math.h>
-#include <complex.h>
-
-double complex clog (double complex Z)
-{
- double complex Res;
- __real__ Res = log (_hypot (__real__ Z, __imag__ Z));
- __imag__ Res = carg (Z);
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/clogf.c b/winsup/mingw/mingwex/complex/clogf.c
deleted file mode 100755
index ead76025f..000000000
--- a/winsup/mingw/mingwex/complex/clogf.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- clogf.c
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-/* clog (x + I * y) = log (hypot (x, y)) + I * atan2 (y, x) */
-
-#include <math.h>
-#include <complex.h>
-
-float complex clogf (float complex Z)
-{
- float complex Res;
- __real__ Res = logf (_hypot (__real__ Z, __imag__ Z));
- __imag__ Res = cargf (Z);
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/clogl.c b/winsup/mingw/mingwex/complex/clogl.c
deleted file mode 100755
index 0114c91f6..000000000
--- a/winsup/mingw/mingwex/complex/clogl.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- clogl.c
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-/* clog (x + I * y) = log (hypot (x, y)) + I * atan2 (y, x) */
-
-#include <math.h>
-#include <complex.h>
-
-long double complex clogl (long double complex Z)
-{
- long double complex Res;
- __real__ Res = logl (hypotl (__real__ Z, __imag__ Z));
- __imag__ Res = cargl (Z);
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/cpow.c b/winsup/mingw/mingwex/complex/cpow.c
deleted file mode 100644
index c12b12fc0..000000000
--- a/winsup/mingw/mingwex/complex/cpow.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* cpow.c */
-/*
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-/* cpow(X, Y) = cexp(X * clog(Y)) */
-
-#include <math.h>
-#include <complex.h>
-
-/* Use dll version of pow */
-extern double (*_imp__pow) (double, double);
-#define pow (*_imp__pow)
-
-double complex cpow (double complex X, double complex Y)
-{
- double complex Res;
- double i;
- double r = hypot (__real__ X, __imag__ X);
- if (r == 0.0)
- {
- __real__ Res = __imag__ Res = 0.0;
- }
- else
- {
- double rho;
- double theta;
- i = carg (X);
- theta = i * __real__ Y;
-
- if (__imag__ Y == 0.0)
- /* This gives slightly more accurate results in these cases. */
- rho = pow (r, __real__ Y);
- else
- {
- r = log (r);
- /* rearrangement of cexp(X * clog(Y)) */
- theta += r * __imag__ Y;
- rho = exp (r * __real__ Y - i * __imag__ Y);
- }
-
- __real__ Res = rho * cos (theta);
- __imag__ Res = rho * sin (theta);
- }
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/cpowf.c b/winsup/mingw/mingwex/complex/cpowf.c
deleted file mode 100755
index eeeed1b7f..000000000
--- a/winsup/mingw/mingwex/complex/cpowf.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* cpowf.c */
-/*
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-/* cpow(X, Y) = cexp(X * clog(Y)) */
-
-#include <math.h>
-#include <complex.h>
-
-float complex cpowf (float complex X, float complex Y)
-{
- float complex Res;
- float i;
- float r = _hypot (__real__ X, __imag__ X);
- if (r == 0.0f)
- {
- __real__ Res = __imag__ Res = 0.0;
- }
- else
- {
- float rho;
- float theta;
- i = cargf (X);
- theta = i * __real__ Y;
-
- if (__imag__ Y == 0.0f)
- /* This gives slightly more accurate results in these cases. */
- rho = powf (r, __real__ Y);
- else
- {
- r = logf (r);
- /* rearrangement of cexp(X * clog(Y)) */
- theta += r * __imag__ Y;
- rho = expf (r * __real__ Y - i * __imag__ Y);
- }
-
- __real__ Res = rho * cosf (theta);
- __imag__ Res = rho * sinf (theta);
- }
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/cpowl.c b/winsup/mingw/mingwex/complex/cpowl.c
deleted file mode 100755
index c614a6d59..000000000
--- a/winsup/mingw/mingwex/complex/cpowl.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* cpowl.c */
-/*
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-/* cpow(X, Y) = cexp(X * clog(Y)) */
-
-#include <math.h>
-#include <complex.h>
-
-long double complex cpowl (long double complex X, long double complex Y)
-{
- long double complex Res;
- long double i;
- long double r = hypotl (__real__ X, __imag__ X);
- if (r == 0.0L)
- {
- __real__ Res = __imag__ Res = 0.0L;
- }
- else
- {
- long double rho;
- long double theta;
- i = cargl (X);
- theta = i * __real__ Y;
-
- if (__imag__ Y == 0.0L)
- /* This gives slightly more accurate results in these cases. */
- rho = powl (r, __real__ Y);
- else
- {
- r = logl (r);
- /* rearrangement of cexp(X * clog(Y)) */
- theta += r * __imag__ Y;
- rho = expl (r * __real__ Y - i * __imag__ Y);
- }
-
- __real__ Res = rho * cosl (theta);
- __imag__ Res = rho * sinl (theta);
- }
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/cproj.c b/winsup/mingw/mingwex/complex/cproj.c
deleted file mode 100644
index cc7c48d0f..000000000
--- a/winsup/mingw/mingwex/complex/cproj.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- cproj.c
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* Return the value of the projection onto the Riemann sphere.*/
-
-double complex cproj (double complex Z)
-{
- complex double Res = Z;
- if (isinf (__real__ Z) || isinf (__imag__ Z))
- {
- __real__ Res = HUGE_VAL;
- __imag__ Res = copysign (0.0, __imag__ Z);
- }
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/cprojf.c b/winsup/mingw/mingwex/complex/cprojf.c
deleted file mode 100755
index f1d2d730a..000000000
--- a/winsup/mingw/mingwex/complex/cprojf.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- cprojf.c
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* Return the value of the projection onto the Riemann sphere.*/
-
-float complex cprojf (float complex Z)
-{
- complex float Res = Z;
- if (isinf (__real__ Z) || isinf (__imag__ Z))
- {
- __real__ Res = HUGE_VALF;
- __imag__ Res = copysignf (0.0f, __imag__ Z);
- }
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/cprojl.c b/winsup/mingw/mingwex/complex/cprojl.c
deleted file mode 100755
index 224d26fd6..000000000
--- a/winsup/mingw/mingwex/complex/cprojl.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- cprojl.c
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* Return the value of the projection onto the Riemann sphere.*/
-
-long double complex cprojl (long double complex Z)
-{
- complex long double Res = Z;
- if (isinf (__real__ Z) || isinf (__imag__ Z))
- {
- __real__ Res = HUGE_VALL;
- __imag__ Res = copysignl (0.0L, __imag__ Z);
- }
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/creal.c b/winsup/mingw/mingwex/complex/creal.c
deleted file mode 100644
index 6905b7e2a..000000000
--- a/winsup/mingw/mingwex/complex/creal.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <complex.h>
-double __attribute__ ((const)) creal (double complex _Z)
-{
- return __real__ _Z;
-}
-
diff --git a/winsup/mingw/mingwex/complex/crealf.c b/winsup/mingw/mingwex/complex/crealf.c
deleted file mode 100755
index 16dc7ec46..000000000
--- a/winsup/mingw/mingwex/complex/crealf.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <complex.h>
-float __attribute__ ((const)) crealf (float complex _Z)
-{
- return __real__ _Z;
-}
-
diff --git a/winsup/mingw/mingwex/complex/creall.c b/winsup/mingw/mingwex/complex/creall.c
deleted file mode 100755
index 62470d961..000000000
--- a/winsup/mingw/mingwex/complex/creall.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <complex.h>
-long double __attribute__ ((const)) creall (long double complex _Z)
-{
- return __real__ _Z;
-}
diff --git a/winsup/mingw/mingwex/complex/csin.c b/winsup/mingw/mingwex/complex/csin.c
deleted file mode 100644
index 37df8057e..000000000
--- a/winsup/mingw/mingwex/complex/csin.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* csin.c */
-
-/*
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* csin (x + I * y) = sin (x) * cosh (y)
- + I * (cos (x) * sinh (y)) */
-
-double complex csin (double complex Z)
-{
- double complex Res;
- __real__ Res = sin (__real__ Z) * cosh ( __imag__ Z);
- __imag__ Res = cos (__real__ Z) * sinh ( __imag__ Z);
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/csinf.c b/winsup/mingw/mingwex/complex/csinf.c
deleted file mode 100755
index def23f27e..000000000
--- a/winsup/mingw/mingwex/complex/csinf.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* csinf.c */
-
-/*
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* csin (x + I * y) = sin (x) * cosh (y)
- + I * (cos (x) * sinh (y)) */
-
-float complex csinf (float complex Z)
-{
- float complex Res;
- __real__ Res = sinf (__real__ Z) * coshf ( __imag__ Z);
- __imag__ Res = cosf (__real__ Z) * sinhf ( __imag__ Z);
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/csinh.c b/winsup/mingw/mingwex/complex/csinh.c
deleted file mode 100644
index 4ee6cbe86..000000000
--- a/winsup/mingw/mingwex/complex/csinh.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* csinh.c */
-/*
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-
-#include <math.h>
-#include <complex.h>
-
-/* csinh (x + I * y) = sinh (x) * cos (y)
- + I * (cosh (x) * sin (y)) */
-
-
-double complex csinh (double complex Z)
-{
- double complex Res;
- __real__ Res = sinh (__real__ Z) * cos (__imag__ Z);
- __imag__ Res = cosh (__real__ Z) * sin (__imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/csinhf.c b/winsup/mingw/mingwex/complex/csinhf.c
deleted file mode 100755
index b0d008ed7..000000000
--- a/winsup/mingw/mingwex/complex/csinhf.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* csinhf.c */
-/*
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-
-#include <math.h>
-#include <complex.h>
-
-/* csinh (x + I * y) = sinh (x) * cos (y)
- + I * (cosh (x) * sin (y)) */
-
-
-float complex csinhf (float complex Z)
-{
- float complex Res;
- __real__ Res = sinhf (__real__ Z) * cosf (__imag__ Z);
- __imag__ Res = coshf (__real__ Z) * sinf (__imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/csinhl.c b/winsup/mingw/mingwex/complex/csinhl.c
deleted file mode 100755
index 187ccf0f6..000000000
--- a/winsup/mingw/mingwex/complex/csinhl.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* csinhl.c */
-/*
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* csinh (x + I * y) = sinh (x) * cos (y)
- + I * (cosh (x) * sin (y)) */
-
-
-long double complex csinhl (long double complex Z)
-{
- long double complex Res;
- __real__ Res = sinhl (__real__ Z) * cosl (__imag__ Z);
- __imag__ Res = coshl (__real__ Z) * sinl (__imag__ Z);
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/csinl.c b/winsup/mingw/mingwex/complex/csinl.c
deleted file mode 100755
index 2a98c7c0f..000000000
--- a/winsup/mingw/mingwex/complex/csinl.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* csinl.c */
-
-/*
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-/* csin (x + I * y) = sin (x) * cosh (y)
- + I * (cos (x) * sinh (y)) */
-
-long double complex csinl (long double complex Z)
-{
- long double complex Res;
- __real__ Res = sinl (__real__ Z) * coshl ( __imag__ Z);
- __imag__ Res = cosl (__real__ Z) * sinhl ( __imag__ Z);
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/csqrt.c b/winsup/mingw/mingwex/complex/csqrt.c
deleted file mode 100644
index b5f8868e9..000000000
--- a/winsup/mingw/mingwex/complex/csqrt.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- csqrt.c
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-
-double complex csqrt (double complex Z)
-{
- double complex Res;
- double t;
- double x = __real__ Z;
- double y = __imag__ Z;
-
- if (y == 0.0)
- {
- if (x < 0.0)
- {
- __real__ Res = 0.0;
- __imag__ Res = sqrt (-x);
- }
- else
- {
- __real__ Res = sqrt (x);
- __imag__ Res = 0.0;
- }
- }
-
- else if (x == 0.0)
- {
- t = sqrt(0.5 * fabs (y));
- __real__ Res = t;
- __imag__ Res = y > 0 ? t : -t;
- }
-
- else
- {
- t = sqrt (2.0 * (_hypot (x, y) + fabs (x)));
- double u = t / 2.0;
- if ( x > 0.0)
- {
- __real__ Res = u;
- __imag__ Res = y / t;
- }
- else
- {
- __real__ Res = fabs ( y / t);
- __imag__ Res = y < 0.0 ? -u : u;
- }
- }
-
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/csqrtf.c b/winsup/mingw/mingwex/complex/csqrtf.c
deleted file mode 100755
index 7c37e99ce..000000000
--- a/winsup/mingw/mingwex/complex/csqrtf.c
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <math.h>
-#include <complex.h>
-
-float complex csqrtf (float complex Z)
-{
- float complex Res;
- float r;
- float x = __real__ Z;
- float y = __imag__ Z;
-
- if (y == 0.0f)
- {
- if (x < 0.0f)
- {
- __real__ Res = 0.0f;
- __imag__ Res = sqrtf (-x);
- }
- else
- {
- __real__ Res = sqrtf (x);
- __imag__ Res = 0.0f;
- }
- }
-
- else if (x == 0.0f)
- {
- r = sqrtf(0.5f * fabsf (y));
- __real__ Res = r;
- __imag__ Res = y > 0 ? r : -r;
- }
-
- else
- {
- float t = sqrtf (2 * (_hypot (__real__ Z, __imag__ Z) + fabsf (x)));
- float u = t / 2.0f;
- if ( x > 0.0f)
- {
- __real__ Res = u;
- __imag__ Res = y / t;
- }
- else
- {
- __real__ Res = fabsf (y / t);
- __imag__ Res = y < 0 ? -u : u;
- }
- }
-
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/csqrtl.c b/winsup/mingw/mingwex/complex/csqrtl.c
deleted file mode 100755
index 1b2ebbe5b..000000000
--- a/winsup/mingw/mingwex/complex/csqrtl.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* csqrtl.c */
-/*
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-
-long double complex csqrtl (long double complex Z)
-{
- long double complex Res;
- long double r;
- long double x = __real__ Z;
- long double y = __imag__ Z;
-
- if (y == 0.0L)
- {
- if (x < 0.0L)
- {
- __real__ Res = 0.0L;
- __imag__ Res = sqrtl (-x);
- }
- else
- {
- __real__ Res = sqrtl (x);
- __imag__ Res = 0.0L;
- }
- }
-
- else if (x == 0.0L)
- {
- r = sqrtl(0.5L * fabsl (y));
- __real__ Res = r;
- __imag__ Res = y > 0 ? r : -r;
- }
-
- else
- {
- long double t = sqrtl (2.0L * (hypotl (__real__ Z, __imag__ Z) + fabsl (x)));
- long double u = t / 2.0L;
- if ( x > 0.0L)
- {
- __real__ Res = u;
- __imag__ Res = y / t;
- }
- else
- {
- __real__ Res = fabsl (y / t);
- __imag__ Res = y < 0 ? -u : u;
- }
- }
-
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/ctan.c b/winsup/mingw/mingwex/complex/ctan.c
deleted file mode 100644
index a479772a9..000000000
--- a/winsup/mingw/mingwex/complex/ctan.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ctan.c */
-
-/*
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-#include <math.h>
-#include <complex.h>
-#include <errno.h>
-
-
-/* ctan (x + I * y) = (sin (2 * x) + I * sinh(2 * y))
- / (cos (2 * x) + cosh (2 * y)) */
-
-double complex ctan (double complex Z)
-{
- double complex Res;
- double two_I = 2.0 * __imag__ Z;
- double two_R = 2.0 * __real__ Z;
- double denom = cos (two_R) + cosh (two_I);
- if (denom == 0.0)
- {
- errno = ERANGE;
- __real__ Res = HUGE_VAL;
- __imag__ Res = HUGE_VAL;
- }
- else if (isinf (denom))
- {
- errno = ERANGE;
- __real__ Res = 0.0;
- __imag__ Res = two_I > 0 ? 1.0 : -1.0;
- }
- else
- {
- __real__ Res = sin (two_R) / denom;
- __imag__ Res = sinh (two_I) / denom;
- }
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/ctanf.c b/winsup/mingw/mingwex/complex/ctanf.c
deleted file mode 100755
index 99699e427..000000000
--- a/winsup/mingw/mingwex/complex/ctanf.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ctanf.c */
-
-/*
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-#include <math.h>
-#include <complex.h>
-#include <errno.h>
-
-
-/* ctan (x + I * y) = (sin (2 * x) + I * sinh(2 * y))
- / (cos (2 * x) + cosh (2 * y)) */
-
-float complex ctanf (float complex Z)
-{
- float complex Res;
- float two_I = 2.0f * __imag__ Z;
- float two_R = 2.0f * __real__ Z;
- float denom = cosf (two_R) + coshf (two_I);
- if (denom == 0.0f)
- {
- errno = ERANGE;
- __real__ Res = HUGE_VALF;
- __imag__ Res = HUGE_VALF;
- }
- else if (isinf (denom))
- {
- errno = ERANGE;
- __real__ Res = 0.0;
- __imag__ Res = two_I > 0 ? 1.0f : -1.0f;
- }
- else
- {
- __real__ Res = sinf (two_R) / denom;
- __imag__ Res = sinhf (two_I) / denom;
- }
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/complex/ctanh.c b/winsup/mingw/mingwex/complex/ctanh.c
deleted file mode 100644
index 6d3e615da..000000000
--- a/winsup/mingw/mingwex/complex/ctanh.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ctanh.c */
-
-/*
- Contributed by Danny Smith
- 2003-10-20
-*/
-
-
-#include <math.h>
-#include <complex.h>
-#include <errno.h>
-
-/*
- ctanh (x + I * y) = (sinh (2 * x) + sin (2 * y) * I )
- / (cosh (2 * x) + cos (2 * y)) .
-*/
-
-double complex
-ctanh (double complex Z)
-{
- double complex Res;
- double two_R = 2.0 * __real__ Z;
- double two_I = 2.0 * __imag__ Z;
- double denom = cosh (two_R) + cos (two_I);
-
- if (denom == 0.0)
- {
- errno = ERANGE;
- __real__ Res = HUGE_VAL;
- __imag__ Res = HUGE_VAL;
- }
- else if ( isinf (denom))
- {
- errno = ERANGE;
- __real__ Res = two_R > 0 ? 1.0 : -1.0;
- __imag__ Res = 0.0;
- }
- else
- {
- __real__ Res = sinh (two_R) / denom;
- __imag__ Res = sin (two_I) / denom;
- }
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/ctanhf.c b/winsup/mingw/mingwex/complex/ctanhf.c
deleted file mode 100755
index 82a9c9a43..000000000
--- a/winsup/mingw/mingwex/complex/ctanhf.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ctanhf.c */
-
-/*
- Contributed by Danny Smith
- 2004-12-24
-*/
-
-
-#include <math.h>
-#include <complex.h>
-#include <errno.h>
-
-/*
- ctanh (x + I * y) = (sinh (2 * x) + sin (2 * y) * I )
- / (cosh (2 * x) + cos (2 * y)) .
-*/
-
-float complex
-ctanhf (float complex Z)
-{
- float complex Res;
- float two_R = 2.0f * __real__ Z;
- float two_I = 2.0f * __imag__ Z;
- float denom = coshf (two_R) + cosf (two_I);
-
- if (denom == 0.0f)
- {
- errno = ERANGE;
- __real__ Res = HUGE_VALF;
- __imag__ Res = HUGE_VALF;
- }
- else if (isinf (denom))
- {
- errno = ERANGE;
- __real__ Res = two_R > 0 ? 1.0f : -1.0f;
- __imag__ Res = 0.0f;
- }
- else
- {
- __real__ Res = sinhf (two_R) / denom;
- __imag__ Res = sinf (two_I) / denom;
- }
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/ctanhl.c b/winsup/mingw/mingwex/complex/ctanhl.c
deleted file mode 100755
index 050b636a1..000000000
--- a/winsup/mingw/mingwex/complex/ctanhl.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ctanhl.c */
-
-/*
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-
-#include <math.h>
-#include <complex.h>
-#include <errno.h>
-
-/*
- ctanh (x + I * y) = (sinh (2 * x) + sin (2 * y) * I )
- / (cosh (2 * x) + cos (2 * y)) .
-*/
-
-long double complex
-ctanhl (long double complex Z)
-{
- long double complex Res;
- long double two_R = 2.0L * __real__ Z;
- long double two_I = 2.0L * __imag__ Z;
- long double denom = coshl (two_R) + cosl (two_I);
-
- if (denom == 0.0L)
- {
- errno = ERANGE;
- __real__ Res = HUGE_VALL;
- __imag__ Res = HUGE_VALL;
- }
- else if (isinf (denom))
- {
- errno = ERANGE;
- __real__ Res = two_R > 0 ? 1.0L : -1.0L;
- __imag__ Res = 0.0L;
- }
- else
- {
- __real__ Res = sinhl (two_R) / denom;
- __imag__ Res = sinl (two_I) / denom;
- }
- return Res;
-}
diff --git a/winsup/mingw/mingwex/complex/ctanl.c b/winsup/mingw/mingwex/complex/ctanl.c
deleted file mode 100755
index 7d3076159..000000000
--- a/winsup/mingw/mingwex/complex/ctanl.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ctanl.c */
-
-/*
- Contributed by Danny Smith
- 2005-01-04
-*/
-
-#include <math.h>
-#include <complex.h>
-#include <errno.h>
-
-
-/* ctan (x + I * y) = (sin (2 * x) + I * sinh(2 * y))
- / (cos (2 * x) + cosh (2 * y)) */
-
-long double complex ctanl (long double complex Z)
-{
- long double complex Res;
- long double two_I = 2.0L * __imag__ Z;
- long double two_R = 2.0L * __real__ Z;
- long double denom = cosl (two_R) + coshl (two_I);
- if (denom == 0.0L)
- {
- errno = ERANGE;
- __real__ Res = HUGE_VALL;
- __imag__ Res = HUGE_VALL;
- }
- else if (isinf (denom))
- {
- errno = ERANGE;
- __real__ Res = 0.0;
- __imag__ Res = two_I > 0 ? 1.0L : -1.0L;
- }
- else
- {
- __real__ Res = sinl (two_R) / denom;
- __imag__ Res = sinhl (two_I) / denom;
- }
- return Res;
-}
-
diff --git a/winsup/mingw/mingwex/dirent.c b/winsup/mingw/mingwex/dirent.c
deleted file mode 100644
index 831855551..000000000
--- a/winsup/mingw/mingwex/dirent.c
+++ /dev/null
@@ -1,455 +0,0 @@
-/*
- * dirent.c
- *
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is a part of the mingw-runtime package.
- * No warranty is given; refer to the file DISCLAIMER within the package.
- *
- * Derived from DIRLIB.C by Matt J. Weinstein
- * This note appears in the DIRLIB.H
- * DIRLIB.H by M. J. Weinstein Released to public domain 1-Jan-89
- *
- * Updated by Jeremy Bettis <jeremy@hksys.com>
- * Significantly revised and rewinddir, seekdir and telldir added
- * by Colin Peters <colin@fu.is.saga-u.ac.jp>
- *
- */
-
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <io.h>
-#include <direct.h>
-#include <dirent.h>
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h> /* for GetFileAttributes */
-
-#include <tchar.h>
-#define SUFFIX _T("*")
-#define SLASH _T("\\")
-
-#define DIRENT_RETURN_NOTHING
-#define DIRENT_REJECT( chk, err, rtn ) \
- do { if( chk ){ errno = (err); return rtn; }} while(0)
-
-union __dirstream_t
-{
- /* Actual (private) declaration for opaque data type "DIR". */
-
- /* dirent struct to return from dir (NOTE: this makes this thread
- * safe as long as only one thread uses a particular DIR struct at
- * a time) */
- struct dirent dd_dir;
-
- struct __dirstream_private_t
- {
- /* Three padding fields, matching the head of dd_dir...
- */
- long dd_ino; /* Always zero. */
- unsigned short dd_reclen; /* Always zero. */
- unsigned short dd_namlen; /* Length of name in d_name. */
-
- /* ...to keep the start of this disk transfer area for this dir
- * aligned at the offset of the dd_dir.d_type field
- */
- struct _finddata_t dd_dta;
-
- /* _findnext handle */
- intptr_t dd_handle;
-
- /* Status of search:
- * (type is now int -- was short in older versions).
- * 0 = not started yet (next entry to read is first entry)
- * -1 = off the end
- * positive = 0 based index of next entry
- */
- int dd_stat;
-
- /* given path for dir with search pattern (struct is extended) */
- char dd_name[1];
-
- } dd_private;
-};
-
-union __wdirstream_t
-{
- /* Actual (private) declaration for opaque data type "_WDIR". */
-
- /* dirent struct to return from dir (NOTE: this makes this thread
- * safe as long as only one thread uses a particular DIR struct at
- * a time) */
- struct _wdirent dd_dir;
-
- struct __wdirstream_private_t
- {
- /* Three padding fields, matching the head of dd_dir...
- */
- long dd_ino; /* Always zero. */
- unsigned short dd_reclen; /* Always zero. */
- unsigned short dd_namlen; /* Length of name in d_name. */
-
- /* ...to keep the start of this disk transfer area for this dir
- * aligned at the offset of the dd_dir.d_type field
- */
- struct _wfinddata_t dd_dta;
-
- /* _findnext handle */
- intptr_t dd_handle;
-
- /* Status of search:
- * 0 = not started yet (next entry to read is first entry)
- * -1 = off the end
- * positive = 0 based index of next entry
- */
- int dd_stat;
-
- /* given path for dir with search pattern (struct is extended) */
- wchar_t dd_name[1];
-
- } dd_private;
-};
-
-/* We map the BSD d_type field in the returned dirent structure
- * from the Microsoft _finddata_t dd_dta.attrib bits, which are:
- *
- * _A_NORMAL (0x0000) normal file: best fit for DT_REG
- * _A_RDONLY (0x0001) read-only: no BSD d_type equivalent
- * _A_HIDDEN (0x0002) hidden entity: no BSD equivalent
- * _A_SYSTEM (0x0004) system entity: no BSD equivalent
- * _A_VOLID (0x0008) volume label: no BSD equivalent
- * _A_SUBDIR (0x0010) directory: best fit for DT_DIR
- * _A_ARCH (0x0020) "dirty": no BSD equivalent
- *
- * Of these, _A_RDONLY, _A_HIDDEN, _A_SYSTEM, and _A_ARCH are
- * modifier bits, rather than true entity type specifiers; we
- * will ignore them in the mapping, by applying this mask:
- */
-#define DT_IGNORED (_A_RDONLY | _A_HIDDEN | _A_SYSTEM | _A_ARCH)
-
-/* Helper for opendir(). */
-static inline unsigned _tGetFileAttributes (const _TCHAR * tPath)
-{
-#ifdef _UNICODE
- /* GetFileAttributesW does not work on W9x, so convert to ANSI */
- if (_osver & 0x8000)
- {
- char aPath [MAX_PATH];
- WideCharToMultiByte (CP_ACP, 0, tPath, -1, aPath, MAX_PATH, NULL,
- NULL);
- return GetFileAttributesA (aPath);
- }
- return GetFileAttributesW (tPath);
-#else
- return GetFileAttributesA (tPath);
-#endif
-}
-
-/*
- * opendir
- *
- * Returns a pointer to a DIR structure appropriately filled in to begin
- * searching a directory.
- */
-_TDIR *
-_topendir (const _TCHAR *szPath)
-{
- _TDIR *nd;
- unsigned int rc;
- _TCHAR szFullPath[MAX_PATH];
-
- /* Reject any request which passes a NULL or an empty path name;
- * note that POSIX doesn't specify the handling for the NULL case,
- * and some implementations may simply fail with a segmentation
- * fault. We will fail more gracefully; however, the choice of
- * EFAULT is not specified by POSIX, for any opendir failure.
- */
- DIRENT_REJECT( (!szPath), EFAULT, (_TDIR *)(0) );
- /*
- * Conversely, POSIX *does* specify ENOENT for the empty path
- * name case, where we previously had ENOTDIR; here, we correct
- * this previous anomaly.
- */
- DIRENT_REJECT( (*szPath == _T('\0')), ENOENT, (_TDIR *)(0) );
-
- /* Attempt to determine if the given path really is a directory.
- * On error, user may call GetLastError() for more error info
- */
- DIRENT_REJECT( ((rc = _tGetFileAttributes (szPath)) == (unsigned int)(-1)),
- ENOENT, (_TDIR *)(0)
- );
-
- /* Error, entry exists but not a directory.
- */
- DIRENT_REJECT( (!(rc & FILE_ATTRIBUTE_DIRECTORY)), ENOTDIR, (_TDIR *)(0) );
-
- /* Make an absolute pathname. */
- _tfullpath (szFullPath, szPath, MAX_PATH);
-
- /* Allocate enough space to store DIR structure and the complete
- * directory path given. */
- nd = (_TDIR *)(malloc( sizeof( _TDIR )
- + (_tcslen( szFullPath ) + _tcslen( SLASH ) + _tcslen( SUFFIX ) + 1)
- * sizeof( _TCHAR )
- ));
-
- /* Error, out of memory.
- */
- DIRENT_REJECT( (!nd), ENOMEM, (_TDIR *)(0) );
-
- /* Create the search expression. */
- _tcscpy (nd->dd_private.dd_name, szFullPath);
-
- /* Add on a slash if the path does not end with one. */
- if (nd->dd_private.dd_name[0] != _T('\0')
- && _tcsrchr (nd->dd_private.dd_name, _T('/')) != nd->dd_private.dd_name
- + _tcslen (nd->dd_private.dd_name) - 1
- && _tcsrchr (nd->dd_private.dd_name, _T('\\')) != nd->dd_private.dd_name
- + _tcslen (nd->dd_private.dd_name) - 1)
- {
- _tcscat (nd->dd_private.dd_name, SLASH);
- }
-
- /* Add on the search pattern */
- _tcscat (nd->dd_private.dd_name, SUFFIX);
-
- /* Initialize handle to -1 so that a premature closedir doesn't try
- * to call _findclose on it. */
- nd->dd_private.dd_handle = -1;
-
- /* Initialize the status. */
- nd->dd_private.dd_stat = 0;
-
- /* Initialize the dirent structure. ino and reclen are invalid under
- * Win32, and name simply points at the appropriate part of the
- * findfirst_t structure. */
- nd->dd_dir.d_ino = 0;
- nd->dd_dir.d_reclen = 0;
- nd->dd_dir.d_namlen = 0;
- memset (nd->dd_dir.d_name, 0, FILENAME_MAX);
-
- return nd;
-}
-
-
-/*
- * readdir
- *
- * Return a pointer to a dirent structure filled with the information on the
- * next entry in the directory.
- */
-struct _tdirent *
-_treaddir (_TDIR *dirp)
-{
- /* Check for a valid DIR stream reference; (we can't really
- * be certain until we try to read from it, except in the case
- * of a NULL pointer reference). Where we lack a valid reference,
- * POSIX mandates reporting EBADF; we previously had EFAULT, so
- * this version corrects the former anomaly.
- */
- DIRENT_REJECT( (!dirp), EBADF, (struct _tdirent *)(0) );
-
- if (dirp->dd_private.dd_stat < 0)
- {
- /* We have already returned all files in the directory
- * (or the structure has an invalid dd_stat). */
- return (struct _tdirent *) 0;
- }
- else if (dirp->dd_private.dd_stat == 0)
- {
- /* We haven't started the search yet. */
- /* Start the search */
- dirp->dd_private.dd_handle = _tfindfirst (dirp->dd_private.dd_name, &(dirp->dd_private.dd_dta));
-
- if (dirp->dd_private.dd_handle == -1)
- {
- /* Oops! Seems there are no files in that
- * directory. */
- dirp->dd_private.dd_stat = -1;
- }
- else
- {
- dirp->dd_private.dd_stat = 1;
- }
- }
- else
- {
- /* Get the next search entry. POSIX mandates that this must
- * return NULL after the last entry has been read, but that it
- * MUST NOT change errno in this case. MS-Windows _findnext()
- * DOES change errno (to ENOENT) after the last entry has been
- * read, so we must be prepared to restore it to its previous
- * value, when no actual error has occurred.
- */
- int prev_errno = errno;
- if (_tfindnext (dirp->dd_private.dd_handle, &(dirp->dd_private.dd_dta)))
- {
- /* May be an error, or just the case described above...
- */
- if( GetLastError() == ERROR_NO_MORE_FILES )
- /*
- * ...which requires us to reset errno.
- */
- errno = prev_errno;
-
- /* FIXME: this is just wrong: we should NOT close the DIR
- * handle here; it is the responsibility of closedir().
- */
- _findclose (dirp->dd_private.dd_handle);
- dirp->dd_private.dd_handle = -1;
- dirp->dd_private.dd_stat = -1;
- }
- else
- {
- /* Update the status to indicate the correct
- * number. */
- dirp->dd_private.dd_stat++;
- }
- }
-
- if (dirp->dd_private.dd_stat > 0)
- {
- /* Successfully got an entry. Everything about the file is
- * already appropriately filled in except the length of the
- * file name...
- */
- dirp->dd_dir.d_namlen = _tcslen (dirp->dd_dir.d_name);
- /*
- * ...and the attributes returned in the dd_dta.attrib field;
- * these require adjustment to their BSD equivalents, which are
- * returned via the union with the dd_dir.d_type field:
- */
- switch( dirp->dd_dir.d_type &= ~DT_IGNORED )
- {
- case DT_REG:
- case DT_DIR:
- /* After stripping out the modifier bits in DT_IGNORED,
- * (which we ALWAYS ignore), this pair require no further
- * adjustment...
- */
- break;
-
- default:
- /* ...while nothing else has an appropriate equivalent
- * in the BSD d_type identification model.
- */
- dirp->dd_dir.d_type = DT_UNKNOWN;
- }
- return &dirp->dd_dir;
- }
-
- return (struct _tdirent *) 0;
-}
-
-
-/*
- * closedir
- *
- * Frees up resources allocated by opendir.
- */
-int
-_tclosedir (_TDIR * dirp)
-{
- int rc = 0;
-
- /* Attempting to reference a directory stream via a NULL pointer
- * would cause a segmentation fault; evade this. Since NULL can
- * never represent an open directory stream, set the EBADF errno
- * status, as mandated by POSIX, once again correcting previous
- * anomalous use of EFAULT in this context.
- */
- DIRENT_REJECT( (!dirp), EBADF, -1 );
-
- if (dirp->dd_private.dd_handle != -1)
- {
- rc = _findclose (dirp->dd_private.dd_handle);
- }
-
- /* Delete the dir structure. */
- free (dirp);
-
- return rc;
-}
-
-/*
- * rewinddir
- *
- * Return to the beginning of the directory "stream". We simply call findclose
- * and then reset things like an opendir.
- */
-void
-_trewinddir (_TDIR * dirp)
-{
- /* Once again, evade a potential segmentation fault on passing
- * a NULL reference pointer, and again correct previous anomalous
- * use of EFAULT, where POSIX mandates EBADF for errno reporting.
- */
- DIRENT_REJECT( (!dirp), EBADF, DIRENT_RETURN_NOTHING );
-
- if (dirp->dd_private.dd_handle != -1)
- {
- _findclose (dirp->dd_private.dd_handle);
- }
-
- dirp->dd_private.dd_handle = -1;
- dirp->dd_private.dd_stat = 0;
-}
-
-/*
- * telldir
- *
- * Returns the "position" in the "directory stream" which can be used with
- * seekdir to go back to an old entry. We simply return the value in stat.
- */
-long
-_ttelldir (_TDIR * dirp)
-{
- /* Once again, evade a potential segmentation fault on passing
- * a NULL reference pointer, and again correct previous anomalous
- * use of EFAULT, where POSIX mandates EBADF for errno reporting.
- */
- DIRENT_REJECT( (!dirp), EBADF, -1 );
- return dirp->dd_private.dd_stat;
-}
-
-/*
- * seekdir
- *
- * Seek to an entry previously returned by telldir. We rewind the directory
- * and call readdir repeatedly until either dd_stat is the position number
- * or -1 (off the end). This is not perfect, in that the directory may
- * have changed while we weren't looking. But that is probably the case with
- * any such system.
- */
-void
-_tseekdir (_TDIR * dirp, long lPos)
-{
- /* Once again, evade a potential segmentation fault on passing
- * a NULL reference pointer, and again correct previous anomalous
- * use of EFAULT, where POSIX mandates EBADF for errno reporting.
- */
- DIRENT_REJECT( (!dirp), EBADF, DIRENT_RETURN_NOTHING );
-
- /* Seeking to an invalid position.
- */
- DIRENT_REJECT( (lPos < -1), EINVAL, DIRENT_RETURN_NOTHING );
-
- if (lPos == -1)
- {
- /* Seek past end. */
- if (dirp->dd_private.dd_handle != -1)
- {
- _findclose (dirp->dd_private.dd_handle);
- }
- dirp->dd_private.dd_handle = -1;
- dirp->dd_private.dd_stat = -1;
- }
- else
- {
- /* Rewind and read forward to the appropriate index. */
- _trewinddir (dirp);
-
- while ((dirp->dd_private.dd_stat < lPos) && _treaddir (dirp))
- ;
- }
-}
diff --git a/winsup/mingw/mingwex/dirname.c b/winsup/mingw/mingwex/dirname.c
deleted file mode 100755
index 20d7a30bb..000000000
--- a/winsup/mingw/mingwex/dirname.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/* dirname.c
- *
- * $Id$
- *
- * Provides an implementation of the "dirname" function, conforming
- * to SUSv3, with extensions to accommodate Win32 drive designators,
- * and suitable for use on native Microsoft(R) Win32 platforms.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libgen.h>
-#include <locale.h>
-
-#ifndef __cdecl /* If compiling on any non-Win32 platform ... */
-#define __cdecl /* this may not be defined. */
-#endif
-
-__cdecl char *dirname( char *path )
-{
- size_t len;
- static char *retfail = NULL;
-
- /* to handle path names for files in multibyte character locales,
- * we need to set up LC_CTYPE to match the host file system locale.
- */
-
- char *locale = setlocale( LC_CTYPE, NULL );
- if( locale != NULL ) locale = strdup( locale );
- setlocale( LC_CTYPE, "" );
-
- if( path && *path )
- {
- /* allocate sufficient local storage space,
- * in which to create a wide character reference copy of path
- */
-
- wchar_t refcopy[1 + (len = mbstowcs( NULL, path, 0 ))];
-
- /* create the wide character reference copy of path */
-
- wchar_t *refpath = refcopy;
- len = mbstowcs( refpath, path, len );
- refcopy[ len ] = L'\0';
-
- /* SUSv3 identifies a special case, where path is exactly equal to "//";
- * (we will also accept "\\" in the Win32 context, but not "/\" or "\/",
- * and neither will we consider paths with an initial drive designator).
- * For this special case, SUSv3 allows the implementation to choose to
- * return "/" or "//", (or "\" or "\\", since this is Win32); we will
- * simply return the path unchanged, (i.e. "//" or "\\").
- */
-
- if( (len > 1) && ((refpath[0] == L'/') || (refpath[0] == L'\\')) )
- {
- if( (refpath[1] == refpath[0]) && (refpath[2] == L'\0') )
- {
- setlocale( LC_CTYPE, locale );
- free( locale );
- return path;
- }
- }
-
- /* For all other cases ...
- * step over the drive designator, if present ...
- */
-
- else if( (len > 1) && (refpath[1] == L':') )
- {
- /* FIXME: maybe should confirm *refpath is a valid drive designator */
-
- refpath += 2;
- }
-
- /* check again, just to ensure we still have a non-empty path name ... */
-
- if( *refpath )
- {
- /* reproduce the scanning logic of the "basename" function
- * to locate the basename component of the current path string,
- * (but also remember where the dirname component starts).
- */
-
- wchar_t *refname, *basename;
- for( refname = basename = refpath ; *refpath ; ++refpath )
- {
- if( (*refpath == L'/') || (*refpath == L'\\') )
- {
- /* we found a dir separator ...
- * step over it, and any others which immediately follow it
- */
-
- while( (*refpath == L'/') || (*refpath == L'\\') )
- ++refpath;
-
- /* if we didn't reach the end of the path string ... */
-
- if( *refpath )
-
- /* then we have a new candidate for the base name */
-
- basename = refpath;
-
- else
-
- /* we struck an early termination of the path string,
- * with trailing dir separators following the base name,
- * so break out of the for loop, to avoid overrun.
- */
-
- break;
- }
- }
-
- /* now check,
- * to confirm that we have distinct dirname and basename components
- */
-
- if( basename > refname )
- {
- /* and, when we do ...
- * backtrack over all trailing separators on the dirname component,
- * (but preserve exactly two initial dirname separators, if identical),
- * and add a NUL terminator in their place.
- */
-
- do --basename;
- while( (basename > refname) && ((*basename == L'/') || (*basename == L'\\')) );
- if( (basename == refname) && ((refname[0] == L'/') || (refname[0] == L'\\'))
- && (refname[1] == refname[0]) && (refname[2] != L'/') && (refname[2] != L'\\') )
- ++basename;
- *++basename = L'\0';
-
- /* if the resultant dirname begins with EXACTLY two dir separators,
- * AND both are identical, then we preserve them.
- */
-
- refpath = refcopy;
- while( ((*refpath == L'/') || (*refpath == L'\\')) )
- ++refpath;
- if( ((refpath - refcopy) > 2) || (refcopy[1] != refcopy[0]) )
- refpath = refcopy;
-
- /* and finally ...
- * we remove any residual, redundantly duplicated separators from the dirname,
- * reterminate, and return it.
- */
-
- refname = refpath;
- while( *refpath )
- {
- if( ((*refname++ = *refpath) == L'/') || (*refpath++ == L'\\') )
- {
- while( (*refpath == L'/') || (*refpath == L'\\') )
- ++refpath;
- }
- }
- *refname = L'\0';
-
- /* finally ...
- * transform the resolved dirname back into the multibyte char domain,
- * restore the caller's locale, and return the resultant dirname
- */
-
- if( (len = wcstombs( path, refcopy, len )) != (size_t)(-1) )
- path[ len ] = '\0';
- }
-
- else
- {
- /* either there were no dirname separators in the path name,
- * or there was nothing else ...
- */
-
- if( (*refname == L'/') || (*refname == L'\\') )
- {
- /* it was all separators, so return one */
-
- ++refname;
- }
-
- else
- {
- /* there were no separators, so return '.' */
-
- *refname++ = L'.';
- }
-
- /* add a NUL terminator, in either case,
- * then transform to the multibyte char domain,
- * using our own buffer
- */
-
- *refname = L'\0';
- retfail = realloc( retfail, len = 1 + wcstombs( NULL, refcopy, 0 ));
- wcstombs( path = retfail, refcopy, len );
- }
-
- /* restore caller's locale, clean up, and return the resolved dirname */
-
- setlocale( LC_CTYPE, locale );
- free( locale );
- return path;
- }
- }
-
- /* path is NULL, or an empty string; default return value is "." ...
- * return this in our own buffer, regenerated by wide char transform,
- * in case the caller trashed it after a previous call.
- */
-
- retfail = realloc( retfail, len = 1 + wcstombs( NULL, L".", 0 ));
- wcstombs( retfail, L".", len );
-
- /* restore caller's locale, clean up, and return the default dirname */
-
- setlocale( LC_CTYPE, locale );
- free( locale );
- return retfail;
-}
-
-/* $RCSfile$$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/feclearexcept.c b/winsup/mingw/mingwex/feclearexcept.c
deleted file mode 100644
index a68884f41..000000000
--- a/winsup/mingw/mingwex/feclearexcept.c
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <fenv.h>
-#include "cpu_features.h"
-
-/* 7.6.2.1
- The feclearexcept function clears the supported exceptions
- represented by its argument. */
-
-int feclearexcept (int excepts)
-{
- fenv_t _env;
- excepts &= FE_ALL_EXCEPT;
- __asm__ volatile ("fnstenv %0;" : "=m" (_env)); /* get the env */
- _env.__status_word &= ~excepts; /* clear the except */
- __asm__ volatile ("fldenv %0;" :: "m" (_env)); /*set the env */
-
- if (__HAS_SSE)
- {
- unsigned _csr;
- __asm__ volatile("stmxcsr %0" : "=m" (_csr)); /* get the register */
- _csr &= ~excepts; /* clear the except */
- __asm__ volatile("ldmxcsr %0" : : "m" (_csr)); /* set the register */
- }
- return 0;
-}
diff --git a/winsup/mingw/mingwex/fegetenv.c b/winsup/mingw/mingwex/fegetenv.c
deleted file mode 100644
index 0c5d591e7..000000000
--- a/winsup/mingw/mingwex/fegetenv.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <fenv.h>
-#include "cpu_features.h"
-
-/* 7.6.4.1
- The fegetenv function stores the current floating-point environment
- in the object pointed to by envp. */
-
-int fegetenv (fenv_t * envp)
-{
- __asm__ ("fnstenv %0;": "=m" (*envp));
- /* fnstenv sets control word to non-stop for all exceptions, so we
- need to reload our env to restore the original mask. */
- __asm__ ("fldenv %0" : : "m" (*envp));
-
- /* And the SSE environment. */
- if (__HAS_SSE)
- __asm__ ("stmxcsr %0" : "=m" (envp->__mxcsr));
-
- return 0;
-}
diff --git a/winsup/mingw/mingwex/fegetexceptflag.c b/winsup/mingw/mingwex/fegetexceptflag.c
deleted file mode 100644
index 353e90dfa..000000000
--- a/winsup/mingw/mingwex/fegetexceptflag.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <fenv.h>
-
-
-/* 7.6.2.2
- The fegetexceptflag function stores an implementation-defined
- representation of the exception flags indicated by the argument
- excepts in the object pointed to by the argument flagp. */
-
-int fegetexceptflag (fexcept_t * flagp, int excepts)
-{
- unsigned short _sw;
- __asm__ ("fnstsw %%ax;": "=a" (_sw));
- *flagp = _sw & excepts & FE_ALL_EXCEPT;
- return 0;
-}
diff --git a/winsup/mingw/mingwex/fegetround.c b/winsup/mingw/mingwex/fegetround.c
deleted file mode 100644
index 01d42849f..000000000
--- a/winsup/mingw/mingwex/fegetround.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <fenv.h>
-#include "cpu_features.h"
-
-/* 7.6.3.1
- The fegetround function returns the value of the rounding direction
- macro representing the current rounding direction. */
-
-int
-fegetround (void)
-{
- unsigned short _cw;
- __asm__ ("fnstcw %0;" : "=m" (_cw));
-
- /* If the MXCSR flag is different, there is no way to indicate, so just
- report the FPU flag. */
- return _cw
- & (FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO);
-
-}
diff --git a/winsup/mingw/mingwex/feholdexcept.c b/winsup/mingw/mingwex/feholdexcept.c
deleted file mode 100644
index 66912d85d..000000000
--- a/winsup/mingw/mingwex/feholdexcept.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <fenv.h>
-#include "cpu_features.h"
-
-/* 7.6.4.2
- The feholdexcept function saves the current floating-point
- environment in the object pointed to by envp, clears the exception
- flags, and then installs a non-stop (continue on exceptions) mode,
- if available, for all exceptions. */
-
-int feholdexcept (fenv_t * envp)
-{
- __asm__ ("fnstenv %0;" : "=m" (* envp)); /* save current into envp */
- /* fnstenv sets control word to non-stop for all exceptions, so all we
- need to do is clear the exception flags. */
- __asm__ ("fnclex");
-
- if (__HAS_SSE)
- {
- unsigned int _csr;
- /* Save the SSE MXCSR register. */
- __asm__ ("stmxcsr %0" : "=m" (envp->__mxcsr));
- /* Clear the exception flags. */
- _csr = envp->__mxcsr & ~FE_ALL_EXCEPT;
- /* Set exception mask to non-stop */
- _csr |= (FE_ALL_EXCEPT << __MXCSR_EXCEPT_MASK_SHIFT) /*= 0x1f80 */;
- __asm__ volatile ("ldmxcsr %0" : : "m" (_csr));
- }
-
- return 0;
-}
diff --git a/winsup/mingw/mingwex/feraiseexcept.c b/winsup/mingw/mingwex/feraiseexcept.c
deleted file mode 100644
index b1ba87006..000000000
--- a/winsup/mingw/mingwex/feraiseexcept.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <fenv.h>
-
-/* 7.6.2.3
- The feraiseexcept function raises the supported exceptions
- represented by its argument The order in which these exceptions
- are raised is unspecified, except as stated in F.7.6.
- Whether the feraiseexcept function additionally raises
- the inexact exception whenever it raises the overflow
- or underflow exception is implementation-defined. */
-
-int feraiseexcept (int excepts)
-{
- fenv_t _env;
- __asm__ volatile ("fnstenv %0;" : "=m" (_env));
- _env.__status_word |= excepts & FE_ALL_EXCEPT;
- __asm__ volatile ("fldenv %0;"
- "fwait;" : : "m" (_env));
- return 0;
-}
diff --git a/winsup/mingw/mingwex/fesetenv.c b/winsup/mingw/mingwex/fesetenv.c
deleted file mode 100644
index 105a0af10..000000000
--- a/winsup/mingw/mingwex/fesetenv.c
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <fenv.h>
-#include <float.h>
-#include "cpu_features.h"
-
-/* 7.6.4.3
- The fesetenv function establishes the floating-point environment
- represented by the object pointed to by envp. The argument envp
- points to an object set by a call to fegetenv or feholdexcept, or
- equal the macro FE_DFL_ENV or an implementation-defined environment
- macro. Note that fesetenv merely installs the state of the exception
- flags represented through its argument, and does not raise these
- exceptions.
- */
-
-extern void (*_imp___fpreset)( void ) ;
-
-int fesetenv (const fenv_t * envp)
-{
- /* Default mxcsr status is to mask all exceptions. All other bits
- are zero. */
-
- unsigned int _csr = FE_ALL_EXCEPT << __MXCSR_EXCEPT_MASK_SHIFT /*= 0x1f80 */;
-
- if (envp == FE_PC64_ENV)
- /*
- * fninit initializes the control register to 0x37f,
- * the status register to zero and the tag word to 0FFFFh.
- * The other registers are unaffected.
- */
- __asm__ ("fninit");
-
- else if (envp == FE_PC53_ENV)
- /*
- * MS _fpreset() does same *except* it sets control word
- * to 0x27f (53-bit precison).
- * We force calling _fpreset in msvcrt.dll
- */
-
- (*_imp___fpreset)();
-
- else if (envp == FE_DFL_ENV)
- /* Use the choice made at app startup */
- _fpreset();
-
- else
- {
- __asm__ ("fldenv %0;" : : "m" (*envp));
- /* Setting the reserved high order bits of MXCSR causes a segfault */
- _csr = envp ->__mxcsr & 0xffff;
- }
-
- /* Set MXCSR */
- if (__HAS_SSE)
- __asm__ volatile ("ldmxcsr %0" : : "m" (_csr));
-
- return 0;
-}
diff --git a/winsup/mingw/mingwex/fesetexceptflag.c b/winsup/mingw/mingwex/fesetexceptflag.c
deleted file mode 100644
index 876174b69..000000000
--- a/winsup/mingw/mingwex/fesetexceptflag.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <fenv.h>
-#include "cpu_features.h"
-
-/* 7.6.2.4
- The fesetexceptflag function sets the complete status for those
- exception flags indicated by the argument excepts, according to the
- representation in the object pointed to by flagp. The value of
- *flagp shall have been set by a previous call to fegetexceptflag
- whose second argument represented at least those exceptions
- represented by the argument excepts. This function does not raise
- exceptions, but only sets the state of the flags. */
-
-int fesetexceptflag (const fexcept_t * flagp, int excepts)
-{
- fenv_t _env;
-
- excepts &= FE_ALL_EXCEPT;
- __asm__ volatile ("fnstenv %0;" : "=m" (_env));
- _env.__status_word &= ~excepts;
- _env.__status_word |= (*flagp & excepts);
- __asm__ volatile ("fldenv %0;" : : "m" (_env));
-
- if (__HAS_SSE)
- {
- unsigned int _csr;
- __asm__ __volatile__("stmxcsr %0" : "=m" (_csr));
- _csr &= ~excepts;
- _csr |= *flagp & excepts;
- __asm__ volatile ("ldmxcsr %0" : : "m" (_csr));
- }
-
- return 0;
-}
diff --git a/winsup/mingw/mingwex/fesetround.c b/winsup/mingw/mingwex/fesetround.c
deleted file mode 100644
index f14e6a631..000000000
--- a/winsup/mingw/mingwex/fesetround.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <fenv.h>
-#include "cpu_features.h"
-
- /* 7.6.3.2
- The fesetround function establishes the rounding direction
- represented by its argument round. If the argument is not equal
- to the value of a rounding direction macro, the rounding direction
- is not changed. */
-
-int fesetround (int mode)
-{
- unsigned short _cw;
- if ((mode & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO))
- != 0)
- return -1;
- __asm__ volatile ("fnstcw %0;": "=m" (_cw));
- _cw &= ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO);
- _cw |= mode;
- __asm__ volatile ("fldcw %0;" : : "m" (_cw));
-
- if (__HAS_SSE)
- {
- unsigned int _mxcsr;
- __asm__ volatile ("stmxcsr %0" : "=m" (_mxcsr));
- _mxcsr &= ~ 0x6000;
- _mxcsr |= (mode << __MXCSR_ROUND_FLAG_SHIFT);
- __asm__ volatile ("ldmxcsr %0" : : "m" (_mxcsr));
- }
-
- return 0;
-}
diff --git a/winsup/mingw/mingwex/fetestexcept.c b/winsup/mingw/mingwex/fetestexcept.c
deleted file mode 100644
index 062d585eb..000000000
--- a/winsup/mingw/mingwex/fetestexcept.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <fenv.h>
-#include "cpu_features.h"
-/* 7.6.2.5
- The fetestexcept function determines which of a specified subset of
- the exception flags are currently set. The excepts argument
- specifies the exception flags to be queried.
- The fetestexcept function returns the value of the bitwise OR of the
- exception macros corresponding to the currently set exceptions
- included in excepts. */
-
-int fetestexcept (int excepts)
-{
-
- unsigned int _res;
- __asm__ ("fnstsw %%ax" : "=a" (_res));
-
-
- /* If SSE supported, return the union of the FPU and SSE flags. */
- if (__HAS_SSE)
- {
- unsigned int _csr;
- __asm__ volatile("stmxcsr %0" : "=m" (_csr));
- _res |= _csr;
- }
-
- return (_res & excepts & FE_ALL_EXCEPT);
-}
diff --git a/winsup/mingw/mingwex/feupdateenv.c b/winsup/mingw/mingwex/feupdateenv.c
deleted file mode 100644
index e37566b02..000000000
--- a/winsup/mingw/mingwex/feupdateenv.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <fenv.h>
-#include "cpu_features.h"
-
-/* 7.6.4.4
- The feupdateenv function saves the currently raised exceptions in
- its automatic storage, installs the floating-point environment
- represented by the object pointed to by envp, and then raises the
- saved exceptions. The argument envp shall point to an object
- set by a call to feholdexcept or fegetenv, or equal the macro
- FE_DFL_ENV or an implementation-defined environment macro. */
-
-
-int feupdateenv (const fenv_t * envp)
-{
- unsigned int _fexcept;
- __asm__ ("fnstsw %%ax" : "=a" (_fexcept)); /*save excepts */
- if (__HAS_SSE)
- {
- unsigned int _csr;
- __asm__ ("stmxcsr %0" : "=m" (_csr));
- _fexcept |= _csr;
- }
- fesetenv (envp); /* install the env */
- feraiseexcept (_fexcept & FE_ALL_EXCEPT); /* raise the execeptions */
- return 0;
-}
diff --git a/winsup/mingw/mingwex/ftruncate.c b/winsup/mingw/mingwex/ftruncate.c
deleted file mode 100755
index fdb62951a..000000000
--- a/winsup/mingw/mingwex/ftruncate.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <unistd.h>
-int ftruncate(int __fd, off_t __length)
-{
- return _chsize (__fd, __length);
-}
diff --git a/winsup/mingw/mingwex/fwide.c b/winsup/mingw/mingwex/fwide.c
deleted file mode 100644
index 79d5848f7..000000000
--- a/winsup/mingw/mingwex/fwide.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <wchar.h>
-#include <stdio.h>
-
-int
-fwide(FILE* stream, int mode)
-{
- return mode; /* Nothing to do. */
-}
-
diff --git a/winsup/mingw/mingwex/gdtoa/README b/winsup/mingw/mingwex/gdtoa/README
deleted file mode 100755
index ce8be5588..000000000
--- a/winsup/mingw/mingwex/gdtoa/README
+++ /dev/null
@@ -1,357 +0,0 @@
-This directory contains source for a library of binary -> decimal
-and decimal -> binary conversion routines, for single-, double-,
-and extended-precision IEEE binary floating-point arithmetic, and
-other IEEE-like binary floating-point, including "double double",
-as in
-
- T. J. Dekker, "A Floating-Point Technique for Extending the
- Available Precision", Numer. Math. 18 (1971), pp. 224-242
-
-and
-
- "Inside Macintosh: PowerPC Numerics", Addison-Wesley, 1994
-
-The conversion routines use double-precision floating-point arithmetic
-and, where necessary, high precision integer arithmetic. The routines
-are generalizations of the strtod and dtoa routines described in
-
- David M. Gay, "Correctly Rounded Binary-Decimal and
- Decimal-Binary Conversions", Numerical Analysis Manuscript
- No. 90-10, Bell Labs, Murray Hill, 1990;
- http://cm.bell-labs.com/cm/cs/what/ampl/REFS/rounding.ps.gz
-
-(based in part on papers by Clinger and Steele & White: see the
-references in the above paper).
-
-The present conversion routines should be able to use any of IEEE binary,
-VAX, or IBM-mainframe double-precision arithmetic internally, but I (dmg)
-have so far only had a chance to test them with IEEE double precision
-arithmetic.
-
-The core conversion routines are strtodg for decimal -> binary conversions
-and gdtoa for binary -> decimal conversions. These routines operate
-on arrays of unsigned 32-bit integers of type ULong, a signed 32-bit
-exponent of type Long, and arithmetic characteristics described in
-struct FPI; FPI, Long, and ULong are defined in gdtoa.h. File arith.h
-is supposed to provide #defines that cause gdtoa.h to define its
-types correctly. File arithchk.c is source for a program that
-generates a suitable arith.h on all systems where I've been able to
-test it.
-
-The core conversion routines are meant to be called by helper routines
-that know details of the particular binary arithmetic of interest and
-convert. The present directory provides helper routines for 5 variants
-of IEEE binary floating-point arithmetic, each indicated by one or
-two letters:
-
- f IEEE single precision
- d IEEE double precision
- x IEEE extended precision, as on Intel 80x87
- and software emulations of Motorola 68xxx chips
- that do not pad the way the 68xxx does, but
- only store 80 bits
- xL IEEE extended precision, as on Motorola 68xxx chips
- Q quad precision, as on Sun Sparc chips
- dd double double, pairs of IEEE double numbers
- whose sum is the desired value
-
-For decimal -> binary conversions, there are three families of
-helper routines: one for round-nearest (or the current rounding
-mode on IEEE-arithmetic systems that provide the C99 fegetround()
-function, if compiled with -DHonor_FLT_ROUNDS):
-
- strtof
- strtod
- strtodd
- strtopd
- strtopf
- strtopx
- strtopxL
- strtopQ
-
-one with rounding direction specified:
-
- strtorf
- strtord
- strtordd
- strtorx
- strtorxL
- strtorQ
-
-and one for computing an interval (at most one bit wide) that contains
-the decimal number:
-
- strtoIf
- strtoId
- strtoIdd
- strtoIx
- strtoIxL
- strtoIQ
-
-The latter call strtoIg, which makes one call on strtodg and adjusts
-the result to provide the desired interval. On systems where native
-arithmetic can easily make one-ulp adjustments on values in the
-desired floating-point format, it might be more efficient to use the
-native arithmetic. Routine strtodI is a variant of strtoId that
-illustrates one way to do this for IEEE binary double-precision
-arithmetic -- but whether this is more efficient remains to be seen.
-
-Functions strtod and strtof have "natural" return types, float and
-double -- strtod is specified by the C standard, and strtof appears
-in the stdlib.h of some systems, such as (at least some) Linux systems.
-The other functions write their results to their final argument(s):
-to the final two argument for the strtoI... (interval) functions,
-and to the final argument for the others (strtop... and strtor...).
-Where possible, these arguments have "natural" return types (double*
-or float*), to permit at least some type checking. In reality, they
-are viewed as arrays of ULong (or, for the "x" functions, UShort)
-values. On systems where long double is the appropriate type, one can
-pass long double* final argument(s) to these routines. The int value
-that these routines return is the return value from the call they make
-on strtodg; see the enum of possible return values in gdtoa.h.
-
-Source files g_ddfmt.c, misc.c, smisc.c, strtod.c, strtodg.c, and ulp.c
-should use true IEEE double arithmetic (not, e.g., double extended),
-at least for storing (and viewing the bits of) the variables declared
-"double" within them.
-
-One detail indicated in struct FPI is whether the target binary
-arithmetic departs from the IEEE standard by flushing denormalized
-numbers to 0. On systems that do this, the helper routines for
-conversion to double-double format (when compiled with
-Sudden_Underflow #defined) penalize the bottom of the exponent
-range so that they return a nonzero result only when the least
-significant bit of the less significant member of the pair of
-double values returned can be expressed as a normalized double
-value. An alternative would be to drop to 53-bit precision near
-the bottom of the exponent range. To get correct rounding, this
-would (in general) require two calls on strtodg (one specifying
-126-bit arithmetic, then, if necessary, one specifying 53-bit
-arithmetic).
-
-By default, the core routine strtodg and strtod set errno to ERANGE
-if the result overflows to +Infinity or underflows to 0. Compile
-these routines with NO_ERRNO #defined to inhibit errno assignments.
-
-Routine strtod is based on netlib's "dtoa.c from fp", and
-(f = strtod(s,se)) is more efficient for some conversions than, say,
-strtord(s,se,1,&f). Parts of strtod require true IEEE double
-arithmetic with the default rounding mode (round-to-nearest) and, on
-systems with IEEE extended-precision registers, double-precision
-(53-bit) rounding precision. If the machine uses (the equivalent of)
-Intel 80x87 arithmetic, the call
- _control87(PC_53, MCW_PC);
-does this with many compilers. Whether this or another call is
-appropriate depends on the compiler; for this to work, it may be
-necessary to #include "float.h" or another system-dependent header
-file.
-
-Source file strtodnrp.c gives a strtod that does not require 53-bit
-rounding precision on systems (such as Intel IA32 systems) that may
-suffer double rounding due to use of extended-precision registers.
-For some conversions this variant of strtod is less efficient than the
-one in strtod.c when the latter is run with 53-bit rounding precision.
-
-The values that the strto* routines return for NaNs are determined by
-gd_qnan.h, which the makefile generates by running the program whose
-source is qnan.c. Note that the rules for distinguishing signaling
-from quiet NaNs are system-dependent. For cross-compilation, you need
-to determine arith.h and gd_qnan.h suitably, e.g., using the
-arithmetic of the target machine.
-
-C99's hexadecimal floating-point constants are recognized by the
-strto* routines (but this feature has not yet been heavily tested).
-Compiling with NO_HEX_FP #defined disables this feature.
-
-When compiled with -DINFNAN_CHECK, the strto* routines recognize C99's
-NaN and Infinity syntax. Moreover, unless No_Hex_NaN is #defined, the
-strto* routines also recognize C99's NaN(...) syntax: they accept
-(case insensitively) strings of the form NaN(x), where x is a string
-of hexadecimal digits and spaces; if there is only one string of
-hexadecimal digits, it is taken for the fraction bits of the resulting
-NaN; if there are two or more strings of hexadecimal digits, each
-string is assigned to the next available sequence of 32-bit words of
-fractions bits (starting with the most significant), right-aligned in
-each sequence.
-
-For binary -> decimal conversions, I've provided just one family
-of helper routines:
-
- g_ffmt
- g_dfmt
- g_ddfmt
- g_xfmt
- g_xLfmt
- g_Qfmt
-
-which do a "%g" style conversion either to a specified number of decimal
-places (if their ndig argument is positive), or to the shortest
-decimal string that rounds to the given binary floating-point value
-(if ndig <= 0). They write into a buffer supplied as an argument
-and return either a pointer to the end of the string (a null character)
-in the buffer, if the buffer was long enough, or 0. Other forms of
-conversion are easily done with the help of gdtoa(), such as %e or %f
-style and conversions with direction of rounding specified (so that, if
-desired, the decimal value is either >= or <= the binary value).
-On IEEE-arithmetic systems that provide the C99 fegetround() function,
-if compiled with -DHonor_FLT_ROUNDS, these routines honor the current
-rounding mode.
-
-For an example of more general conversions based on dtoa(), see
-netlib's "printf.c from ampl/solvers".
-
-For double-double -> decimal, g_ddfmt() assumes IEEE-like arithmetic
-of precision max(126, #bits(input)) bits, where #bits(input) is the
-number of mantissa bits needed to represent the sum of the two double
-values in the input.
-
-The makefile creates a library, gdtoa.a. To use the helper
-routines, a program only needs to include gdtoa.h. All the
-source files for gdtoa.a include a more extensive gdtoaimp.h;
-among other things, gdtoaimp.h has #defines that make "internal"
-names end in _D2A. To make a "system" library, one could modify
-these #defines to make the names start with __.
-
-Various comments about possible #defines appear in gdtoaimp.h,
-but for most purposes, arith.h should set suitable #defines.
-
-Systems with preemptive scheduling of multiple threads require some
-manual intervention. On such systems, it's necessary to compile
-dmisc.c, dtoa.c gdota.c, and misc.c with MULTIPLE_THREADS #defined,
-and to provide (or suitably #define) two locks, acquired by
-ACQUIRE_DTOA_LOCK(n) and freed by FREE_DTOA_LOCK(n) for n = 0 or 1.
-(The second lock, accessed in pow5mult, ensures lazy evaluation of
-only one copy of high powers of 5; omitting this lock would introduce
-a small probability of wasting memory, but would otherwise be harmless.)
-Routines that call dtoa or gdtoa directly must also invoke freedtoa(s)
-to free the value s returned by dtoa or gdtoa. It's OK to do so whether
-or not MULTIPLE_THREADS is #defined, and the helper g_*fmt routines
-listed above all do this indirectly (in gfmt_D2A(), which they all call).
-
-By default, there is a private pool of memory of length 2000 bytes
-for intermediate quantities, and MALLOC (see gdtoaimp.h) is called only
-if the private pool does not suffice. 2000 is large enough that MALLOC
-is called only under very unusual circumstances (decimal -> binary
-conversion of very long strings) for conversions to and from double
-precision. For systems with preemptively scheduled multiple threads
-or for conversions to extended or quad, it may be appropriate to
-#define PRIVATE_MEM nnnn, where nnnn is a suitable value > 2000.
-For extended and quad precisions, -DPRIVATE_MEM=20000 is probably
-plenty even for many digits at the ends of the exponent range.
-Use of the private pool avoids some overhead.
-
-Directory test provides some test routines. See its README.
-I've also tested this stuff (except double double conversions)
-with Vern Paxson's testbase program: see
-
- V. Paxson and W. Kahan, "A Program for Testing IEEE Binary-Decimal
- Conversion", manuscript, May 1991,
- ftp://ftp.ee.lbl.gov/testbase-report.ps.Z .
-
-(The same ftp directory has source for testbase.)
-
-Some system-dependent additions to CFLAGS in the makefile:
-
- HU-UX: -Aa -Ae
- OSF (DEC Unix): -ieee_with_no_inexact
- SunOS 4.1x: -DKR_headers -DBad_float_h
-
-If you want to put this stuff into a shared library and your
-operating system requires export lists for shared libraries,
-the following would be an appropriate export list:
-
- dtoa
- freedtoa
- g_Qfmt
- g_ddfmt
- g_dfmt
- g_ffmt
- g_xLfmt
- g_xfmt
- gdtoa
- strtoIQ
- strtoId
- strtoIdd
- strtoIf
- strtoIx
- strtoIxL
- strtod
- strtodI
- strtodg
- strtof
- strtopQ
- strtopd
- strtopdd
- strtopf
- strtopx
- strtopxL
- strtorQ
- strtord
- strtordd
- strtorf
- strtorx
- strtorxL
-
-When time permits, I (dmg) hope to write in more detail about the
-present conversion routines; for now, this README file must suffice.
-Meanwhile, if you wish to write helper functions for other kinds of
-IEEE-like arithmetic, some explanation of struct FPI and the bits
-array may be helpful. Both gdtoa and strtodg operate on a bits array
-described by FPI *fpi. The bits array is of type ULong, a 32-bit
-unsigned integer type. Floating-point numbers have fpi->nbits bits,
-with the least significant 32 bits in bits[0], the next 32 bits in
-bits[1], etc. These numbers are regarded as integers multiplied by
-2^e (i.e., 2 to the power of the exponent e), where e is the second
-argument (be) to gdtoa and is stored in *exp by strtodg. The minimum
-and maximum exponent values fpi->emin and fpi->emax for normalized
-floating-point numbers reflect this arrangement. For example, the
-P754 standard for binary IEEE arithmetic specifies doubles as having
-53 bits, with normalized values of the form 1.xxxxx... times 2^(b-1023),
-with 52 bits (the x's) and the biased exponent b represented explicitly;
-b is an unsigned integer in the range 1 <= b <= 2046 for normalized
-finite doubles, b = 0 for denormals, and b = 2047 for Infinities and NaNs.
-To turn an IEEE double into the representation used by strtodg and gdtoa,
-we multiply 1.xxxx... by 2^52 (to make it an integer) and reduce the
-exponent e = (b-1023) by 52:
-
- fpi->emin = 1 - 1023 - 52
- fpi->emax = 1046 - 1023 - 52
-
-In various wrappers for IEEE double, we actually write -53 + 1 rather
-than -52, to emphasize that there are 53 bits including one implicit bit.
-Field fpi->rounding indicates the desired rounding direction, with
-possible values
- FPI_Round_zero = toward 0,
- FPI_Round_near = unbiased rounding -- the IEEE default,
- FPI_Round_up = toward +Infinity, and
- FPI_Round_down = toward -Infinity
-given in gdtoa.h.
-
-Field fpi->sudden_underflow indicates whether strtodg should return
-denormals or flush them to zero. Normal floating-point numbers have
-bit fpi->nbits in the bits array on. Denormals have it off, with
-exponent = fpi->emin. Strtodg provides distinct return values for normals
-and denormals; see gdtoa.h.
-
-Compiling g__fmt.c, strtod.c, and strtodg.c with -DUSE_LOCALE causes
-the decimal-point character to be taken from the current locale; otherwise
-it is '.'.
-
-Source files dtoa.c and strtod.c in this directory are derived from
-netlib's "dtoa.c from fp" and are meant to function equivalently.
-When compiled with Honor_FLT_ROUNDS #defined (on systems that provide
-FLT_ROUNDS and fegetround() as specified in the C99 standard), they
-honor the current rounding mode. Because FLT_ROUNDS is buggy on some
-(Linux) systems -- not reflecting calls on fesetround(), as the C99
-standard says it should -- when Honor_FLT_ROUNDS is #defined, the
-current rounding mode is obtained from fegetround() rather than from
-FLT_ROUNDS, unless Trust_FLT_ROUNDS is also #defined.
-
-Compile with -DUSE_LOCALE to use the current locale; otherwise
-decimal points are assumed to be '.'. With -DUSE_LOCALE, unless
-you also compile with -DNO_LOCALE_CACHE, the details about the
-current "decimal point" character string are cached and assumed not
-to change during the program's execution.
-
-Please send comments to David M. Gay (dmg at acm dot org, with " at "
-changed at "@" and " dot " changed to ".").
diff --git a/winsup/mingw/mingwex/gdtoa/README.mingw b/winsup/mingw/mingwex/gdtoa/README.mingw
deleted file mode 100644
index 006cf8cbd..000000000
--- a/winsup/mingw/mingwex/gdtoa/README.mingw
+++ /dev/null
@@ -1,19 +0,0 @@
-The gdtoa code here is based on David M. Gay's original
-gdtoa source at http://www.netlib.org/fp/ from April 20,
-2009. The major changes between the original source and
-the mingw port here include:
-
-* IBM, CRAY and VAX code removed.
-* KR_headers, ANSI, Void and Char ifdefs are removed.
-* gdtoa symbols are prepended with "__".
-* g_xfmt() uses __fpclassifyl() instead of interpreting
- the flags bit-wise.
-* lo0bits() and hi0bits() of misc.c replaced by wrappers
- to gcc's __builtin_clz()
-* The double/ulong union renamed from U to dbl_union
- (grep'ped better..)
-* A few compiler warning fixes here and there.
-* A few other insignificant changes (if any..)
-
-MinGW specific compile-time definitions are at the top of
-gdtoaimp.h and gdtoa.h headers.
diff --git a/winsup/mingw/mingwex/gdtoa/arithchk.c b/winsup/mingw/mingwex/gdtoa/arithchk.c
deleted file mode 100755
index 3211aeda4..000000000
--- a/winsup/mingw/mingwex/gdtoa/arithchk.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/****************************************************************
-Copyright (C) 1997, 1998 Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-****************************************************************/
-
-/* Try to deduce arith.h from arithmetic properties. */
-
-#include <stdio.h>
-
- static int dalign;
- typedef struct
-Akind {
- char *name;
- int kind;
- } Akind;
-
- static Akind
-IEEE_8087 = { "IEEE_8087", 1 },
-IEEE_MC68k = { "IEEE_MC68k", 2 },
-IBM = { "IBM", 3 },
-VAX = { "VAX", 4 },
-CRAY = { "CRAY", 5};
-
- static Akind *
-Lcheck()
-{
- union {
- double d;
- long L[2];
- } u;
- struct {
- double d;
- long L;
- } x[2];
-
- if (sizeof(x) > 2*(sizeof(double) + sizeof(long)))
- dalign = 1;
- u.L[0] = u.L[1] = 0;
- u.d = 1e13;
- if (u.L[0] == 1117925532 && u.L[1] == -448790528)
- return &IEEE_MC68k;
- if (u.L[1] == 1117925532 && u.L[0] == -448790528)
- return &IEEE_8087;
- if (u.L[0] == -2065213935 && u.L[1] == 10752)
- return &VAX;
- if (u.L[0] == 1267827943 && u.L[1] == 704643072)
- return &IBM;
- return 0;
- }
-
- static Akind *
-icheck()
-{
- union {
- double d;
- int L[2];
- } u;
- struct {
- double d;
- int L;
- } x[2];
-
- if (sizeof(x) > 2*(sizeof(double) + sizeof(int)))
- dalign = 1;
- u.L[0] = u.L[1] = 0;
- u.d = 1e13;
- if (u.L[0] == 1117925532 && u.L[1] == -448790528)
- return &IEEE_MC68k;
- if (u.L[1] == 1117925532 && u.L[0] == -448790528)
- return &IEEE_8087;
- if (u.L[0] == -2065213935 && u.L[1] == 10752)
- return &VAX;
- if (u.L[0] == 1267827943 && u.L[1] == 704643072)
- return &IBM;
- return 0;
- }
-
-char *emptyfmt = ""; /* avoid possible warning message with printf("") */
-
- static Akind *
-ccheck()
-{
- union {
- double d;
- long L;
- } u;
- long Cray1;
-
- /* Cray1 = 4617762693716115456 -- without overflow on non-Crays */
- Cray1 = printf(emptyfmt) < 0 ? 0 : 4617762;
- if (printf(emptyfmt, Cray1) >= 0)
- Cray1 = 1000000*Cray1 + 693716;
- if (printf(emptyfmt, Cray1) >= 0)
- Cray1 = 1000000*Cray1 + 115456;
- u.d = 1e13;
- if (u.L == Cray1)
- return &CRAY;
- return 0;
- }
-
- static int
-fzcheck()
-{
- double a, b;
- int i;
-
- a = 1.;
- b = .1;
- for(i = 155;; b *= b, i >>= 1) {
- if (i & 1) {
- a *= b;
- if (i == 1)
- break;
- }
- }
- b = a * a;
- return b == 0.;
- }
-
- int
-main()
-{
- Akind *a = 0;
- int Ldef = 0;
- FILE *f;
-
-#ifdef WRITE_ARITH_H /* for Symantec's buggy "make" */
- f = fopen("arith.h", "w");
- if (!f) {
- printf("Cannot open arith.h\n");
- return 1;
- }
-#else
- f = stdout;
-#endif
-
- if (sizeof(double) == 2*sizeof(long))
- a = Lcheck();
- else if (sizeof(double) == 2*sizeof(int)) {
- Ldef = 1;
- a = icheck();
- }
- else if (sizeof(double) == sizeof(long))
- a = ccheck();
- if (a) {
- fprintf(f, "#define %s\n#define Arith_Kind_ASL %d\n",
- a->name, a->kind);
- if (Ldef)
- fprintf(f, "#define Long int\n#define Intcast (int)(long)\n");
- if (dalign)
- fprintf(f, "#define Double_Align\n");
- if (sizeof(char*) == 8)
- fprintf(f, "#define X64_bit_pointers\n");
-#ifndef NO_LONG_LONG
- if (sizeof(long long) < 8)
-#endif
- fprintf(f, "#define NO_LONG_LONG\n");
- if (a->kind <= 2 && fzcheck())
- fprintf(f, "#define Sudden_Underflow\n");
- return 0;
- }
- fprintf(f, "/* Unknown arithmetic */\n");
- return 1;
- }
diff --git a/winsup/mingw/mingwex/gdtoa/dmisc.c b/winsup/mingw/mingwex/gdtoa/dmisc.c
deleted file mode 100755
index 4e9a6bc5c..000000000
--- a/winsup/mingw/mingwex/gdtoa/dmisc.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-#ifndef MULTIPLE_THREADS
-char *dtoa_result;
-#endif
-
-char *rv_alloc (int i)
-{
- int j, k, *r;
-
- j = sizeof(ULong);
- for(k = 0;
- sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= i;
- j <<= 1)
- k++;
- r = (int*)Balloc(k);
- *r = k;
- return
-#ifndef MULTIPLE_THREADS
- dtoa_result =
-#endif
- (char *)(r+1);
-}
-
-char *nrv_alloc (char *s, char **rve, int n)
-{
- char *rv, *t;
-
- t = rv = rv_alloc(n);
- while((*t = *s++) !=0)
- t++;
- if (rve)
- *rve = t;
- return rv;
-}
-
-/* freedtoa(s) must be used to free values s returned by dtoa
- * when MULTIPLE_THREADS is #defined. It should be used in all cases,
- * but for consistency with earlier versions of dtoa, it is optional
- * when MULTIPLE_THREADS is not defined.
- */
-
-void __freedtoa (char *s)
-{
- Bigint *b = (Bigint *)((int *)s - 1);
- b->maxwds = 1 << (b->k = *(int*)b);
- Bfree(b);
-#ifndef MULTIPLE_THREADS
- if (s == dtoa_result)
- dtoa_result = 0;
-#endif
-}
-
-int quorem (Bigint *b, Bigint *S)
-{
- int n;
- ULong *bx, *bxe, q, *sx, *sxe;
-#ifdef ULLong
- ULLong borrow, carry, y, ys;
-#else
- ULong borrow, carry, y, ys;
-#ifdef Pack_32
- ULong si, z, zs;
-#endif
-#endif
-
- n = S->wds;
-#ifdef DEBUG
- /*debug*/ if (b->wds > n)
- /*debug*/ Bug("oversize b in quorem");
-#endif
- if (b->wds < n)
- return 0;
- sx = S->x;
- sxe = sx + --n;
- bx = b->x;
- bxe = bx + n;
- q = *bxe / (*sxe + 1); /* ensure q <= true quotient */
-#ifdef DEBUG
- /*debug*/ if (q > 9)
- /*debug*/ Bug("oversized quotient in quorem");
-#endif
- if (q) {
- borrow = 0;
- carry = 0;
- do {
-#ifdef ULLong
- ys = *sx++ * (ULLong)q + carry;
- carry = ys >> 32;
- y = *bx - (ys & 0xffffffffUL) - borrow;
- borrow = y >> 32 & 1UL;
- *bx++ = y & 0xffffffffUL;
-#else
-#ifdef Pack_32
- si = *sx++;
- ys = (si & 0xffff) * q + carry;
- zs = (si >> 16) * q + (ys >> 16);
- carry = zs >> 16;
- y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- z = (*bx >> 16) - (zs & 0xffff) - borrow;
- borrow = (z & 0x10000) >> 16;
- Storeinc(bx, z, y);
-#else
- ys = *sx++ * q + carry;
- carry = ys >> 16;
- y = *bx - (ys & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- *bx++ = y & 0xffff;
-#endif
-#endif
- } while(sx <= sxe);
-
- if (!*bxe) {
- bx = b->x;
- while(--bxe > bx && !*bxe)
- --n;
- b->wds = n;
- }
- }
-
- if (cmp(b, S) >= 0) {
- q++;
- borrow = 0;
- carry = 0;
- bx = b->x;
- sx = S->x;
- do {
-#ifdef ULLong
- ys = *sx++ + carry;
- carry = ys >> 32;
- y = *bx - (ys & 0xffffffffUL) - borrow;
- borrow = y >> 32 & 1UL;
- *bx++ = y & 0xffffffffUL;
-#else
-#ifdef Pack_32
- si = *sx++;
- ys = (si & 0xffff) + carry;
- zs = (si >> 16) + (ys >> 16);
- carry = zs >> 16;
- y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- z = (*bx >> 16) - (zs & 0xffff) - borrow;
- borrow = (z & 0x10000) >> 16;
- Storeinc(bx, z, y);
-#else
- ys = *sx++ + carry;
- carry = ys >> 16;
- y = *bx - (ys & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- *bx++ = y & 0xffff;
-#endif
-#endif
- } while(sx <= sxe);
-
- bx = b->x;
- bxe = bx + n;
- if (!*bxe) {
- while(--bxe > bx && !*bxe)
- --n;
- b->wds = n;
- }
- }
- return q;
-}
diff --git a/winsup/mingw/mingwex/gdtoa/dtoa.c b/winsup/mingw/mingwex/gdtoa/dtoa.c
deleted file mode 100755
index 56b517bbd..000000000
--- a/winsup/mingw/mingwex/gdtoa/dtoa.c
+++ /dev/null
@@ -1,736 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
- *
- * Inspired by "How to Print Floating-Point Numbers Accurately" by
- * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
- *
- * Modifications:
- * 1. Rather than iterating, we use a simple numeric overestimate
- * to determine k = floor(log10(d)). We scale relevant
- * quantities using O(log2(k)) rather than O(k) multiplications.
- * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
- * try to generate digits strictly left to right. Instead, we
- * compute with fewer bits and propagate the carry if necessary
- * when rounding the final digit up. This is often faster.
- * 3. Under the assumption that input will be rounded nearest,
- * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
- * That is, we allow equality in stopping tests when the
- * round-nearest rule will give the same floating-point value
- * as would satisfaction of the stopping test with strict
- * inequality.
- * 4. We remove common factors of powers of 2 from relevant
- * quantities.
- * 5. When converting floating-point integers less than 1e16,
- * we use floating-point arithmetic rather than resorting
- * to multiple-precision integers.
- * 6. When asked to produce fewer than 15 digits, we first try
- * to get by with floating-point arithmetic; we resort to
- * multiple-precision integer arithmetic only if we cannot
- * guarantee that the floating-point calculation has given
- * the correctly rounded result. For k requested digits and
- * "uniformly" distributed input, the probability is
- * something like 10^(k-15) that we must resort to the Long
- * calculation.
- */
-
-#ifdef Honor_FLT_ROUNDS
-#undef Check_FLT_ROUNDS
-#define Check_FLT_ROUNDS
-#else
-#define Rounding Flt_Rounds
-#endif
-
-char *__dtoa (double d0, int mode, int ndigits, int *decpt, int *sign, char **rve)
-{
- /* Arguments ndigits, decpt, sign are similar to those
- of ecvt and fcvt; trailing zeros are suppressed from
- the returned string. If not null, *rve is set to point
- to the end of the return value. If d is +-Infinity or NaN,
- then *decpt is set to 9999.
-
- mode:
- 0 ==> shortest string that yields d when read in
- and rounded to nearest.
- 1 ==> like 0, but with Steele & White stopping rule;
- e.g. with IEEE P754 arithmetic , mode 0 gives
- 1e23 whereas mode 1 gives 9.999999999999999e22.
- 2 ==> max(1,ndigits) significant digits. This gives a
- return value similar to that of ecvt, except
- that trailing zeros are suppressed.
- 3 ==> through ndigits past the decimal point. This
- gives a return value similar to that from fcvt,
- except that trailing zeros are suppressed, and
- ndigits can be negative.
- 4,5 ==> similar to 2 and 3, respectively, but (in
- round-nearest mode) with the tests of mode 0 to
- possibly return a shorter string that rounds to d.
- With IEEE arithmetic and compilation with
- -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
- as modes 2 and 3 when FLT_ROUNDS != 1.
- 6-9 ==> Debugging modes similar to mode - 4: don't try
- fast floating-point estimate (if applicable).
-
- Values of mode other than 0-9 are treated as mode 0.
-
- Sufficient space is allocated to the return value
- to hold the suppressed trailing zeros.
- */
-
- int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
- j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
- spec_case, try_quick;
- Long L;
-#ifndef Sudden_Underflow
- int denorm;
- ULong x;
-#endif
- Bigint *b, *b1, *delta, *mlo, *mhi, *S;
- union _dbl_union d, d2, eps;
- double ds;
- char *s, *s0;
-#ifdef SET_INEXACT
- int inexact, oldinexact;
-#endif
-#ifdef Honor_FLT_ROUNDS /*{*/
- int Rounding;
-#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */
- Rounding = Flt_Rounds;
-#else /*}{*/
- Rounding = 1;
- switch(fegetround()) {
- case FE_TOWARDZERO: Rounding = 0; break;
- case FE_UPWARD: Rounding = 2; break;
- case FE_DOWNWARD: Rounding = 3;
- }
-#endif /*}}*/
-#endif /*}*/
-
-#ifndef MULTIPLE_THREADS
- if (dtoa_result) {
- __freedtoa(dtoa_result);
- dtoa_result = 0;
- }
-#endif
- d.d = d0;
- if (word0(&d) & Sign_bit) {
- /* set sign for everything, including 0's and NaNs */
- *sign = 1;
- word0(&d) &= ~Sign_bit; /* clear sign bit */
- }
- else
- *sign = 0;
-
- if ((word0(&d) & Exp_mask) == Exp_mask)
- {
- /* Infinity or NaN */
- *decpt = 9999;
- if (!word1(&d) && !(word0(&d) & 0xfffff))
- return nrv_alloc("Infinity", rve, 8);
- return nrv_alloc("NaN", rve, 3);
- }
- if (!dval(&d)) {
- *decpt = 1;
- return nrv_alloc("0", rve, 1);
- }
-
-#ifdef SET_INEXACT
- try_quick = oldinexact = get_inexact();
- inexact = 1;
-#endif
-#ifdef Honor_FLT_ROUNDS
- if (Rounding >= 2) {
- if (*sign)
- Rounding = Rounding == 2 ? 0 : 2;
- else
- if (Rounding != 2)
- Rounding = 0;
- }
-#endif
-
- b = d2b(dval(&d), &be, &bbits);
-#ifdef Sudden_Underflow
- i = (int)(word0(&d) >> Exp_shift1 & (Exp_mask>>Exp_shift1));
-#else
- if (( i = (int)(word0(&d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)) )!=0) {
-#endif
- dval(&d2) = dval(&d);
- word0(&d2) &= Frac_mask1;
- word0(&d2) |= Exp_11;
-
- /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
- * log10(x) = log(x) / log(10)
- * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
- * log10(&d) = (i-Bias)*log(2)/log(10) + log10(&d2)
- *
- * This suggests computing an approximation k to log10(&d) by
- *
- * k = (i - Bias)*0.301029995663981
- * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
- *
- * We want k to be too large rather than too small.
- * The error in the first-order Taylor series approximation
- * is in our favor, so we just round up the constant enough
- * to compensate for any error in the multiplication of
- * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
- * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
- * adding 1e-13 to the constant term more than suffices.
- * Hence we adjust the constant term to 0.1760912590558.
- * (We could get a more accurate k by invoking log10,
- * but this is probably not worthwhile.)
- */
-
- i -= Bias;
-#ifndef Sudden_Underflow
- denorm = 0;
- }
- else {
- /* d is denormalized */
-
- i = bbits + be + (Bias + (P-1) - 1);
- x = i > 32 ? word0(&d) << (64 - i) | word1(&d) >> (i - 32)
- : word1(&d) << (32 - i);
- dval(&d2) = x;
- word0(&d2) -= 31*Exp_msk1; /* adjust exponent */
- i -= (Bias + (P-1) - 1) + 1;
- denorm = 1;
- }
-#endif
- ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981;
- k = (int)ds;
- if (ds < 0. && ds != k)
- k--; /* want k = floor(ds) */
- k_check = 1;
- if (k >= 0 && k <= Ten_pmax) {
- if (dval(&d) < tens[k])
- k--;
- k_check = 0;
- }
- j = bbits - i - 1;
- if (j >= 0) {
- b2 = 0;
- s2 = j;
- }
- else {
- b2 = -j;
- s2 = 0;
- }
- if (k >= 0) {
- b5 = 0;
- s5 = k;
- s2 += k;
- }
- else {
- b2 -= k;
- b5 = -k;
- s5 = 0;
- }
- if (mode < 0 || mode > 9)
- mode = 0;
-
-#ifndef SET_INEXACT
-#ifdef Check_FLT_ROUNDS
- try_quick = Rounding == 1;
-#else
- try_quick = 1;
-#endif
-#endif /*SET_INEXACT*/
-
- if (mode > 5) {
- mode -= 4;
- try_quick = 0;
- }
- leftright = 1;
- ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */
- /* silence erroneous "gcc -Wall" warning. */
- switch(mode) {
- case 0:
- case 1:
- i = 18;
- ndigits = 0;
- break;
- case 2:
- leftright = 0;
- /* no break */
- case 4:
- if (ndigits <= 0)
- ndigits = 1;
- ilim = ilim1 = i = ndigits;
- break;
- case 3:
- leftright = 0;
- /* no break */
- case 5:
- i = ndigits + k + 1;
- ilim = i;
- ilim1 = i - 1;
- if (i <= 0)
- i = 1;
- }
- s = s0 = rv_alloc(i);
-
-#ifdef Honor_FLT_ROUNDS
- if (mode > 1 && Rounding != 1)
- leftright = 0;
-#endif
-
- if (ilim >= 0 && ilim <= Quick_max && try_quick) {
-
- /* Try to get by with floating-point arithmetic. */
-
- i = 0;
- dval(&d2) = dval(&d);
- k0 = k;
- ilim0 = ilim;
- ieps = 2; /* conservative */
- if (k > 0) {
- ds = tens[k&0xf];
- j = k >> 4;
- if (j & Bletch) {
- /* prevent overflows */
- j &= Bletch - 1;
- dval(&d) /= bigtens[n_bigtens-1];
- ieps++;
- }
- for(; j; j >>= 1, i++)
- if (j & 1) {
- ieps++;
- ds *= bigtens[i];
- }
- dval(&d) /= ds;
- }
- else if (( j1 = -k )!=0) {
- dval(&d) *= tens[j1 & 0xf];
- for(j = j1 >> 4; j; j >>= 1, i++)
- if (j & 1) {
- ieps++;
- dval(&d) *= bigtens[i];
- }
- }
- if (k_check && dval(&d) < 1. && ilim > 0) {
- if (ilim1 <= 0)
- goto fast_failed;
- ilim = ilim1;
- k--;
- dval(&d) *= 10.;
- ieps++;
- }
- dval(&eps) = ieps*dval(&d) + 7.;
- word0(&eps) -= (P-1)*Exp_msk1;
- if (ilim == 0) {
- S = mhi = 0;
- dval(&d) -= 5.;
- if (dval(&d) > dval(&eps))
- goto one_digit;
- if (dval(&d) < -dval(&eps))
- goto no_digits;
- goto fast_failed;
- }
-#ifndef No_leftright
- if (leftright) {
- /* Use Steele & White method of only
- * generating digits needed.
- */
- dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
- for(i = 0;;) {
- L = dval(&d);
- dval(&d) -= L;
- *s++ = '0' + (int)L;
- if (dval(&d) < dval(&eps))
- goto ret1;
- if (1. - dval(&d) < dval(&eps))
- goto bump_up;
- if (++i >= ilim)
- break;
- dval(&eps) *= 10.;
- dval(&d) *= 10.;
- }
- }
- else {
-#endif
- /* Generate ilim digits, then fix them up. */
- dval(&eps) *= tens[ilim-1];
- for(i = 1;; i++, dval(&d) *= 10.) {
- L = (Long)(dval(&d));
- if (!(dval(&d) -= L))
- ilim = i;
- *s++ = '0' + (int)L;
- if (i == ilim) {
- if (dval(&d) > 0.5 + dval(&eps))
- goto bump_up;
- else if (dval(&d) < 0.5 - dval(&eps)) {
- while(*--s == '0');
- s++;
- goto ret1;
- }
- break;
- }
- }
-#ifndef No_leftright
- }
-#endif
- fast_failed:
- s = s0;
- dval(&d) = dval(&d2);
- k = k0;
- ilim = ilim0;
- }
-
- /* Do we have a "small" integer? */
-
- if (be >= 0 && k <= Int_max) {
- /* Yes. */
- ds = tens[k];
- if (ndigits < 0 && ilim <= 0) {
- S = mhi = 0;
- if (ilim < 0 || dval(&d) <= 5*ds)
- goto no_digits;
- goto one_digit;
- }
- for(i = 1;; i++, dval(&d) *= 10.) {
- L = (Long)(dval(&d) / ds);
- dval(&d) -= L*ds;
-#ifdef Check_FLT_ROUNDS
- /* If FLT_ROUNDS == 2, L will usually be high by 1 */
- if (dval(&d) < 0) {
- L--;
- dval(&d) += ds;
- }
-#endif
- *s++ = '0' + (int)L;
- if (!dval(&d)) {
-#ifdef SET_INEXACT
- inexact = 0;
-#endif
- break;
- }
- if (i == ilim) {
-#ifdef Honor_FLT_ROUNDS
- if (mode > 1)
- switch(Rounding) {
- case 0: goto ret1;
- case 2: goto bump_up;
- }
-#endif
- dval(&d) += dval(&d);
- if (dval(&d) > ds || (dval(&d) == ds && L & 1)) {
- bump_up:
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s = '0';
- break;
- }
- ++*s++;
- }
- break;
- }
- }
- goto ret1;
- }
-
- m2 = b2;
- m5 = b5;
- mhi = mlo = 0;
- if (leftright) {
- i =
-#ifndef Sudden_Underflow
- denorm ? be + (Bias + (P-1) - 1 + 1) :
-#endif
- 1 + P - bbits;
- b2 += i;
- s2 += i;
- mhi = i2b(1);
- }
- if (m2 > 0 && s2 > 0) {
- i = m2 < s2 ? m2 : s2;
- b2 -= i;
- m2 -= i;
- s2 -= i;
- }
- if (b5 > 0) {
- if (leftright) {
- if (m5 > 0) {
- mhi = pow5mult(mhi, m5);
- b1 = mult(mhi, b);
- Bfree(b);
- b = b1;
- }
- if (( j = b5 - m5 )!=0)
- b = pow5mult(b, j);
- }
- else
- b = pow5mult(b, b5);
- }
- S = i2b(1);
- if (s5 > 0)
- S = pow5mult(S, s5);
-
- /* Check for special case that d is a normalized power of 2. */
-
- spec_case = 0;
- if ((mode < 2 || leftright)
-#ifdef Honor_FLT_ROUNDS
- && Rounding == 1
-#endif
- ) {
- if (!word1(&d) && !(word0(&d) & Bndry_mask)
-#ifndef Sudden_Underflow
- && word0(&d) & (Exp_mask & ~Exp_msk1)
-#endif
- ) {
- /* The special case */
- b2 += Log2P;
- s2 += Log2P;
- spec_case = 1;
- }
- }
-
- /* Arrange for convenient computation of quotients:
- * shift left if necessary so divisor has 4 leading 0 bits.
- *
- * Perhaps we should just compute leading 28 bits of S once
- * and for all and pass them and a shift to quorem, so it
- * can do shifts and ors to compute the numerator for q.
- */
-#ifdef Pack_32
- if (( i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f )!=0)
- i = 32 - i;
-#else
- if (( i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf )!=0)
- i = 16 - i;
-#endif
- if (i > 4) {
- i -= 4;
- b2 += i;
- m2 += i;
- s2 += i;
- }
- else if (i < 4) {
- i += 28;
- b2 += i;
- m2 += i;
- s2 += i;
- }
- if (b2 > 0)
- b = lshift(b, b2);
- if (s2 > 0)
- S = lshift(S, s2);
- if (k_check) {
- if (cmp(b,S) < 0) {
- k--;
- b = multadd(b, 10, 0); /* we botched the k estimate */
- if (leftright)
- mhi = multadd(mhi, 10, 0);
- ilim = ilim1;
- }
- }
- if (ilim <= 0 && (mode == 3 || mode == 5)) {
- if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) {
- /* no digits, fcvt style */
- no_digits:
- k = -1 - ndigits;
- goto ret;
- }
- one_digit:
- *s++ = '1';
- k++;
- goto ret;
- }
- if (leftright) {
- if (m2 > 0)
- mhi = lshift(mhi, m2);
-
- /* Compute mlo -- check for special case
- * that d is a normalized power of 2.
- */
-
- mlo = mhi;
- if (spec_case) {
- mhi = Balloc(mhi->k);
- Bcopy(mhi, mlo);
- mhi = lshift(mhi, Log2P);
- }
-
- for(i = 1;;i++) {
- dig = quorem(b,S) + '0';
- /* Do we yet have the shortest decimal string
- * that will round to d?
- */
- j = cmp(b, mlo);
- delta = diff(S, mhi);
- j1 = delta->sign ? 1 : cmp(b, delta);
- Bfree(delta);
-#ifndef ROUND_BIASED
- if (j1 == 0 && mode != 1 && !(word1(&d) & 1)
-#ifdef Honor_FLT_ROUNDS
- && Rounding >= 1
-#endif
- ) {
- if (dig == '9')
- goto round_9_up;
- if (j > 0)
- dig++;
-#ifdef SET_INEXACT
- else if (!b->x[0] && b->wds <= 1)
- inexact = 0;
-#endif
- *s++ = dig;
- goto ret;
- }
-#endif
- if (j < 0 || (j == 0 && mode != 1
-#ifndef ROUND_BIASED
- && !(word1(&d) & 1)
-#endif
- )) {
- if (!b->x[0] && b->wds <= 1) {
-#ifdef SET_INEXACT
- inexact = 0;
-#endif
- goto accept_dig;
- }
-#ifdef Honor_FLT_ROUNDS
- if (mode > 1)
- switch(Rounding) {
- case 0: goto accept_dig;
- case 2: goto keep_dig;
- }
-#endif /*Honor_FLT_ROUNDS*/
- if (j1 > 0) {
- b = lshift(b, 1);
- j1 = cmp(b, S);
- if ((j1 > 0 || (j1 == 0 && dig & 1))
- && dig++ == '9')
- goto round_9_up;
- }
- accept_dig:
- *s++ = dig;
- goto ret;
- }
- if (j1 > 0) {
-#ifdef Honor_FLT_ROUNDS
- if (!Rounding)
- goto accept_dig;
-#endif
- if (dig == '9') { /* possible if i == 1 */
- round_9_up:
- *s++ = '9';
- goto roundoff;
- }
- *s++ = dig + 1;
- goto ret;
- }
-#ifdef Honor_FLT_ROUNDS
- keep_dig:
-#endif
- *s++ = dig;
- if (i == ilim)
- break;
- b = multadd(b, 10, 0);
- if (mlo == mhi)
- mlo = mhi = multadd(mhi, 10, 0);
- else {
- mlo = multadd(mlo, 10, 0);
- mhi = multadd(mhi, 10, 0);
- }
- }
- }
- else
- for(i = 1;; i++) {
- *s++ = dig = quorem(b,S) + '0';
- if (!b->x[0] && b->wds <= 1) {
-#ifdef SET_INEXACT
- inexact = 0;
-#endif
- goto ret;
- }
- if (i >= ilim)
- break;
- b = multadd(b, 10, 0);
- }
-
- /* Round off last digit */
-
-#ifdef Honor_FLT_ROUNDS
- switch(Rounding) {
- case 0: goto trimzeros;
- case 2: goto roundoff;
- }
-#endif
- b = lshift(b, 1);
- j = cmp(b, S);
- if (j > 0 || (j == 0 && dig & 1)) {
- roundoff:
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s++ = '1';
- goto ret;
- }
- ++*s++;
- }
- else {
-#ifdef Honor_FLT_ROUNDS
- trimzeros:
-#endif
- while(*--s == '0');
- s++;
- }
- ret:
- Bfree(S);
- if (mhi) {
- if (mlo && mlo != mhi)
- Bfree(mlo);
- Bfree(mhi);
- }
- ret1:
-#ifdef SET_INEXACT
- if (inexact) {
- if (!oldinexact) {
- word0(&d) = Exp_1 + (70 << Exp_shift);
- word1(&d) = 0;
- dval(&d) += 1.;
- }
- }
- else if (!oldinexact)
- clear_inexact();
-#endif
- Bfree(b);
- *s = 0;
- *decpt = k + 1;
- if (rve)
- *rve = s;
- return s0;
-}
diff --git a/winsup/mingw/mingwex/gdtoa/g__fmt.c b/winsup/mingw/mingwex/gdtoa/g__fmt.c
deleted file mode 100755
index 49bd95a84..000000000
--- a/winsup/mingw/mingwex/gdtoa/g__fmt.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-#ifdef USE_LOCALE
-#include "locale.h"
-#endif
-
-char *__g__fmt (char *b, char *s, char *se, int decpt, ULong sign, size_t blen)
-{
- int i, j, k;
- char *be, *s0;
- size_t len;
-#ifdef USE_LOCALE
-#ifdef NO_LOCALE_CACHE
- char *decimalpoint = localeconv()->decimal_point;
- size_t dlen = strlen(decimalpoint);
-#else
- char *decimalpoint;
- static char *decimalpoint_cache;
- static size_t dlen;
- if (!(s0 = decimalpoint_cache)) {
- s0 = localeconv()->decimal_point;
- dlen = strlen(s0);
- if ((decimalpoint_cache = (char*)MALLOC(strlen(s0) + 1))) {
- strcpy(decimalpoint_cache, s0);
- s0 = decimalpoint_cache;
- }
- }
- decimalpoint = s0;
-#endif
-#else
-#define dlen 0
-#endif
- s0 = s;
- len = (se-s) + dlen + 6; /* 6 = sign + e+dd + trailing null */
- if (blen < len)
- goto ret0;
- be = b + blen - 1;
- if (sign)
- *b++ = '-';
- if (decpt <= -4 || decpt > se - s + 5) {
- *b++ = *s++;
- if (*s) {
-#ifdef USE_LOCALE
- while((*b = *decimalpoint++))
- ++b;
-#else
- *b++ = '.';
-#endif
- while((*b = *s++) !=0)
- b++;
- }
- *b++ = 'e';
- /* sprintf(b, "%+.2d", decpt - 1); */
- if (--decpt < 0) {
- *b++ = '-';
- decpt = -decpt;
- }
- else
- *b++ = '+';
- for(j = 2, k = 10; 10*k <= decpt; j++, k *= 10){}
- for(;;) {
- i = decpt / k;
- if (b >= be)
- goto ret0;
- *b++ = i + '0';
- if (--j <= 0)
- break;
- decpt -= i*k;
- decpt *= 10;
- }
- *b = 0;
- }
- else if (decpt <= 0) {
-#ifdef USE_LOCALE
- while((*b = *decimalpoint++))
- ++b;
-#else
- *b++ = '.';
-#endif
- if (be < b - decpt + (se - s))
- goto ret0;
- for(; decpt < 0; decpt++)
- *b++ = '0';
- while((*b = *s++) != 0)
- b++;
- }
- else {
- while((*b = *s++) != 0) {
- b++;
- if (--decpt == 0 && *s) {
-#ifdef USE_LOCALE
- while((*b = *decimalpoint++))
- ++b;
-#else
- *b++ = '.';
-#endif
- }
- }
- if (b + decpt > be) {
- ret0:
- b = 0;
- goto ret;
- }
- for(; decpt > 0; decpt--)
- *b++ = '0';
- *b = 0;
- }
- ret:
- __freedtoa(s0);
- return b;
-}
diff --git a/winsup/mingw/mingwex/gdtoa/g_dfmt.c b/winsup/mingw/mingwex/gdtoa/g_dfmt.c
deleted file mode 100755
index 426f8e4b5..000000000
--- a/winsup/mingw/mingwex/gdtoa/g_dfmt.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-char *__g_dfmt (char *buf, double *d, int ndig, size_t bufsize)
-{
- static FPI fpi0 = { 53, 1-1023-53+1, 2046-1023-53+1, 1, 0 };
- char *b, *s, *se;
- ULong bits[2], *L, sign;
- int decpt, ex, i, mode;
-#ifdef Honor_FLT_ROUNDS
-#include "gdtoa_fltrnds.h"
-#else
-#define fpi &fpi0
-#endif
-
- if (ndig < 0)
- ndig = 0;
- if (bufsize < ndig + 10)
- return 0;
-
- L = (ULong*)d;
- sign = L[_0] & 0x80000000L;
- if ((L[_0] & 0x7ff00000) == 0x7ff00000) {
- /* Infinity or NaN */
- if (bufsize < 10)
- return 0;
- if (L[_0] & 0xfffff || L[_1]) {
- return strcp(buf, "NaN");
- }
- b = buf;
- if (sign)
- *b++ = '-';
- return strcp(b, "Infinity");
- }
- if (L[_1] == 0 && (L[_0] ^ sign) == 0 /*d == 0.*/) {
- b = buf;
-#ifndef IGNORE_ZERO_SIGN
- if (L[_0] & 0x80000000L)
- *b++ = '-';
-#endif
- *b++ = '0';
- *b = 0;
- return b;
- }
- bits[0] = L[_1];
- bits[1] = L[_0] & 0xfffff;
- if ( (ex = (L[_0] >> 20) & 0x7ff) !=0)
- bits[1] |= 0x100000;
- else
- ex = 1;
- ex -= 0x3ff + 52;
- mode = 2;
- if (ndig <= 0)
- mode = 0;
- i = STRTOG_Normal;
- s = __gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se);
- return __g__fmt(buf, s, se, decpt, sign, bufsize);
-}
diff --git a/winsup/mingw/mingwex/gdtoa/g_ffmt.c b/winsup/mingw/mingwex/gdtoa/g_ffmt.c
deleted file mode 100755
index 1088ac8e7..000000000
--- a/winsup/mingw/mingwex/gdtoa/g_ffmt.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-char *__g_ffmt (char *buf, float *f, int ndig, size_t bufsize)
-{
- static FPI fpi0 = { 24, 1-127-24+1, 254-127-24+1, 1, 0 };
- char *b, *s, *se;
- ULong bits[1], *L, sign;
- int decpt, ex, i, mode;
-#ifdef Honor_FLT_ROUNDS
-#include "gdtoa_fltrnds.h"
-#else
-#define fpi &fpi0
-#endif
-
- if (ndig < 0)
- ndig = 0;
- if (bufsize < ndig + 10)
- return 0;
-
- L = (ULong*)f;
- sign = L[0] & 0x80000000L;
- if ((L[0] & 0x7f800000) == 0x7f800000) {
- /* Infinity or NaN */
- if (L[0] & 0x7fffff) {
- return strcp(buf, "NaN");
- }
- b = buf;
- if (sign)
- *b++ = '-';
- return strcp(b, "Infinity");
- }
- if (*f == 0.) {
- b = buf;
-#ifndef IGNORE_ZERO_SIGN
- if (L[0] & 0x80000000L)
- *b++ = '-';
-#endif
- *b++ = '0';
- *b = 0;
- return b;
- }
- bits[0] = L[0] & 0x7fffff;
- if ( (ex = (L[0] >> 23) & 0xff) !=0)
- bits[0] |= 0x800000;
- else
- ex = 1;
- ex -= 0x7f + 23;
- mode = 2;
- if (ndig <= 0) {
- if (bufsize < 16)
- return 0;
- mode = 0;
- }
- i = STRTOG_Normal;
- s = __gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se);
- return __g__fmt(buf, s, se, decpt, sign, bufsize);
-}
diff --git a/winsup/mingw/mingwex/gdtoa/g_xfmt.c b/winsup/mingw/mingwex/gdtoa/g_xfmt.c
deleted file mode 100755
index 6919ace31..000000000
--- a/winsup/mingw/mingwex/gdtoa/g_xfmt.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#define _3 3
-#define _4 4
-#endif
-#ifdef IEEE_8087
-#define _0 4
-#define _1 3
-#define _2 2
-#define _3 1
-#define _4 0
-#endif
-
-char *__g_xfmt (char *buf, void *V, int ndig, size_t bufsize)
-{
- static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0 };
- char *b, *s, *se;
- ULong bits[2], sign;
- UShort *L;
- int decpt, ex, i, mode;
-#if defined(__MINGW32__) || defined(__MINGW64__)
- int fptype = __fpclassifyl (*(long double*) V);
-#endif /* MinGW */
-#ifdef Honor_FLT_ROUNDS
-#include "gdtoa_fltrnds.h"
-#else
-#define fpi &fpi0
-#endif
-
- if (ndig < 0)
- ndig = 0;
- if (bufsize < ndig + 10)
- return 0;
-
- L = (UShort *)V;
- sign = L[_0] & 0x8000;
- ex = L[_0] & 0x7fff;
- bits[1] = (L[_1] << 16) | L[_2];
- bits[0] = (L[_3] << 16) | L[_4];
-
-#if defined(__MINGW32__) || defined(__MINGW64__)
- if (fptype & FP_NAN) {
- /* NaN or Inf */
- if (fptype & FP_NORMAL) {
- b = buf;
- *b++ = sign ? '-': '+';
- strncpy (b, "Infinity", ndig ? ndig : 8);
- return (buf + strlen (buf));
- }
- strncpy (buf, "NaN", ndig ? ndig : 3);
- return (buf + strlen (buf));
- }
- else if (fptype & FP_NORMAL) {
- /* Normal or subnormal */
- if (fptype & FP_ZERO) {
- i = STRTOG_Denormal;
- ex = 1;
- }
- else
- i = STRTOG_Normal;
- }
-#else
- if (ex != 0) {
- if (ex == 0x7fff) {
- /* Infinity or NaN */
- if (bits[0] | bits[1])
- b = strcp(buf, "NaN");
- else {
- b = buf;
- if (sign)
- *b++ = '-';
- b = strcp(b, "Infinity");
- }
- return b;
- }
- i = STRTOG_Normal;
- }
- else if (bits[0] | bits[1]) {
- i = STRTOG_Denormal;
- ex = 1;
- }
-#endif
- else {
- /* i = STRTOG_Zero; */
- b = buf;
-#ifndef IGNORE_ZERO_SIGN
- if (sign)
- *b++ = '-';
-#endif
- *b++ = '0';
- *b = 0;
- return b;
- }
- ex -= 0x3fff + 63;
- mode = 2;
- if (ndig <= 0) {
- if (bufsize < 32)
- return 0;
- mode = 0;
- }
- s = __gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se);
- return __g__fmt(buf, s, se, decpt, sign, bufsize);
-}
diff --git a/winsup/mingw/mingwex/gdtoa/gd_arith.h b/winsup/mingw/mingwex/gdtoa/gd_arith.h
deleted file mode 100644
index f86e633b3..000000000
--- a/winsup/mingw/mingwex/gdtoa/gd_arith.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#define IEEE_8087
-#define Arith_Kind_ASL 1
-#define Double_Align
-#ifdef _WIN64
-#define X64_bit_pointers
-#endif /* w64 */
diff --git a/winsup/mingw/mingwex/gdtoa/gd_qnan.h b/winsup/mingw/mingwex/gdtoa/gd_qnan.h
deleted file mode 100644
index 87eba8fb3..000000000
--- a/winsup/mingw/mingwex/gdtoa/gd_qnan.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#define f_QNAN 0xffc00000
-#define d_QNAN0 0x0
-#define d_QNAN1 0xfff80000
-#define ld_QNAN0 0x0
-#define ld_QNAN1 0xc0000000
-#define ld_QNAN2 0xffff
-#define ld_QNAN3 0x0
-#define ldus_QNAN0 0x0
-#define ldus_QNAN1 0x0
-#define ldus_QNAN2 0x0
-#define ldus_QNAN3 0xc000
-#define ldus_QNAN4 0xffff
diff --git a/winsup/mingw/mingwex/gdtoa/gdtoa.c b/winsup/mingw/mingwex/gdtoa/gdtoa.c
deleted file mode 100755
index 84eaebfd4..000000000
--- a/winsup/mingw/mingwex/gdtoa/gdtoa.c
+++ /dev/null
@@ -1,714 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-static Bigint *bitstob (ULong *bits, int nbits, int *bbits)
-{
- int i, k;
- Bigint *b;
- ULong *be, *x, *x0;
-
- i = ULbits;
- k = 0;
- while(i < nbits) {
- i <<= 1;
- k++;
- }
-#ifndef Pack_32
- if (!k)
- k = 1;
-#endif
- b = Balloc(k);
- be = bits + ((nbits - 1) >> kshift);
- x = x0 = b->x;
- do {
- *x++ = *bits & ALL_ON;
-#ifdef Pack_16
- *x++ = (*bits >> 16) & ALL_ON;
-#endif
- } while(++bits <= be);
- i = x - x0;
- while(!x0[--i])
- if (!i) {
- b->wds = 0;
- *bbits = 0;
- goto ret;
- }
- b->wds = i + 1;
- *bbits = i*ULbits + 32 - hi0bits(b->x[i]);
- ret:
- return b;
-}
-
-/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
- *
- * Inspired by "How to Print Floating-Point Numbers Accurately" by
- * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
- *
- * Modifications:
- * 1. Rather than iterating, we use a simple numeric overestimate
- * to determine k = floor(log10(d)). We scale relevant
- * quantities using O(log2(k)) rather than O(k) multiplications.
- * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
- * try to generate digits strictly left to right. Instead, we
- * compute with fewer bits and propagate the carry if necessary
- * when rounding the final digit up. This is often faster.
- * 3. Under the assumption that input will be rounded nearest,
- * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
- * That is, we allow equality in stopping tests when the
- * round-nearest rule will give the same floating-point value
- * as would satisfaction of the stopping test with strict
- * inequality.
- * 4. We remove common factors of powers of 2 from relevant
- * quantities.
- * 5. When converting floating-point integers less than 1e16,
- * we use floating-point arithmetic rather than resorting
- * to multiple-precision integers.
- * 6. When asked to produce fewer than 15 digits, we first try
- * to get by with floating-point arithmetic; we resort to
- * multiple-precision integer arithmetic only if we cannot
- * guarantee that the floating-point calculation has given
- * the correctly rounded result. For k requested digits and
- * "uniformly" distributed input, the probability is
- * something like 10^(k-15) that we must resort to the Long
- * calculation.
- */
-
-char *__gdtoa (FPI *fpi, int be, ULong *bits, int *kindp, int mode, int ndigits,
- int *decpt, char **rve)
-{
- /* Arguments ndigits and decpt are similar to the second and third
- arguments of ecvt and fcvt; trailing zeros are suppressed from
- the returned string. If not null, *rve is set to point
- to the end of the return value. If d is +-Infinity or NaN,
- then *decpt is set to 9999.
-
- mode:
- 0 ==> shortest string that yields d when read in
- and rounded to nearest.
- 1 ==> like 0, but with Steele & White stopping rule;
- e.g. with IEEE P754 arithmetic , mode 0 gives
- 1e23 whereas mode 1 gives 9.999999999999999e22.
- 2 ==> max(1,ndigits) significant digits. This gives a
- return value similar to that of ecvt, except
- that trailing zeros are suppressed.
- 3 ==> through ndigits past the decimal point. This
- gives a return value similar to that from fcvt,
- except that trailing zeros are suppressed, and
- ndigits can be negative.
- 4-9 should give the same return values as 2-3, i.e.,
- 4 <= mode <= 9 ==> same return as mode
- 2 + (mode & 1). These modes are mainly for
- debugging; often they run slower but sometimes
- faster than modes 2-3.
- 4,5,8,9 ==> left-to-right digit generation.
- 6-9 ==> don't try fast floating-point estimate
- (if applicable).
-
- Values of mode other than 0-9 are treated as mode 0.
-
- Sufficient space is allocated to the return value
- to hold the suppressed trailing zeros.
- */
-
- int bbits, b2, b5, be0, dig, i, ieps, ilim, ilim0, ilim1, inex;
- int j, j1, k, k0, k_check, kind, leftright, m2, m5, nbits;
- int rdir, s2, s5, spec_case, try_quick;
- Long L;
- Bigint *b, *b1, *delta, *mlo, *mhi, *mhi1, *S;
- double d2, ds;
- char *s, *s0;
- union _dbl_union d, eps;
-
-#ifndef MULTIPLE_THREADS
- if (dtoa_result) {
- __freedtoa(dtoa_result);
- dtoa_result = 0;
- }
-#endif
- inex = 0;
- kind = *kindp &= ~STRTOG_Inexact;
- switch(kind & STRTOG_Retmask) {
- case STRTOG_Zero:
- goto ret_zero;
- case STRTOG_Normal:
- case STRTOG_Denormal:
- break;
- case STRTOG_Infinite:
- *decpt = -32768;
- return nrv_alloc("Infinity", rve, 8);
- case STRTOG_NaN:
- *decpt = -32768;
- return nrv_alloc("NaN", rve, 3);
- default:
- return 0;
- }
- b = bitstob(bits, nbits = fpi->nbits, &bbits);
- be0 = be;
- if ( (i = trailz(b)) !=0) {
- rshift(b, i);
- be += i;
- bbits -= i;
- }
- if (!b->wds) {
- Bfree(b);
- ret_zero:
- *decpt = 1;
- return nrv_alloc("0", rve, 1);
- }
-
- dval(&d) = b2d(b, &i);
- i = be + bbits - 1;
- word0(&d) &= Frac_mask1;
- word0(&d) |= Exp_11;
-
- /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
- * log10(x) = log(x) / log(10)
- * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
- * log10(&d) = (i-Bias)*log(2)/log(10) + log10(d2)
- *
- * This suggests computing an approximation k to log10(&d) by
- *
- * k = (i - Bias)*0.301029995663981
- * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
- *
- * We want k to be too large rather than too small.
- * The error in the first-order Taylor series approximation
- * is in our favor, so we just round up the constant enough
- * to compensate for any error in the multiplication of
- * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
- * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
- * adding 1e-13 to the constant term more than suffices.
- * Hence we adjust the constant term to 0.1760912590558.
- * (We could get a more accurate k by invoking log10,
- * but this is probably not worthwhile.)
- */
- ds = (dval(&d)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981;
-
- /* correct assumption about exponent range */
- if ((j = i) < 0)
- j = -j;
- if ((j -= 1077) > 0)
- ds += j * 7e-17;
-
- k = (int)ds;
- if (ds < 0. && ds != k)
- k--; /* want k = floor(ds) */
- k_check = 1;
- word0(&d) += (be + bbits - 1) << Exp_shift;
- if (k >= 0 && k <= Ten_pmax) {
- if (dval(&d) < tens[k])
- k--;
- k_check = 0;
- }
- j = bbits - i - 1;
- if (j >= 0) {
- b2 = 0;
- s2 = j;
- }
- else {
- b2 = -j;
- s2 = 0;
- }
- if (k >= 0) {
- b5 = 0;
- s5 = k;
- s2 += k;
- }
- else {
- b2 -= k;
- b5 = -k;
- s5 = 0;
- }
- if (mode < 0 || mode > 9)
- mode = 0;
- try_quick = 1;
- if (mode > 5) {
- mode -= 4;
- try_quick = 0;
- }
- leftright = 1;
- ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */
- /* silence erroneous "gcc -Wall" warning. */
- switch(mode) {
- case 0:
- case 1:
- i = (int)(nbits * .30103) + 3;
- ndigits = 0;
- break;
- case 2:
- leftright = 0;
- /* no break */
- case 4:
- if (ndigits <= 0)
- ndigits = 1;
- ilim = ilim1 = i = ndigits;
- break;
- case 3:
- leftright = 0;
- /* no break */
- case 5:
- i = ndigits + k + 1;
- ilim = i;
- ilim1 = i - 1;
- if (i <= 0)
- i = 1;
- }
- s = s0 = rv_alloc(i);
-
- if ( (rdir = fpi->rounding - 1) !=0) {
- if (rdir < 0)
- rdir = 2;
- if (kind & STRTOG_Neg)
- rdir = 3 - rdir;
- }
-
- /* Now rdir = 0 ==> round near, 1 ==> round up, 2 ==> round down. */
-
- if (ilim >= 0 && ilim <= Quick_max && try_quick && !rdir
-#ifndef IMPRECISE_INEXACT
- && k == 0
-#endif
- ) {
-
- /* Try to get by with floating-point arithmetic. */
-
- i = 0;
- d2 = dval(&d);
- k0 = k;
- ilim0 = ilim;
- ieps = 2; /* conservative */
- if (k > 0) {
- ds = tens[k&0xf];
- j = k >> 4;
- if (j & Bletch) {
- /* prevent overflows */
- j &= Bletch - 1;
- dval(&d) /= bigtens[n_bigtens-1];
- ieps++;
- }
- for(; j; j >>= 1, i++)
- if (j & 1) {
- ieps++;
- ds *= bigtens[i];
- }
- }
- else {
- ds = 1.;
- if ( (j1 = -k) !=0) {
- dval(&d) *= tens[j1 & 0xf];
- for(j = j1 >> 4; j; j >>= 1, i++)
- if (j & 1) {
- ieps++;
- dval(&d) *= bigtens[i];
- }
- }
- }
- if (k_check && dval(&d) < 1. && ilim > 0) {
- if (ilim1 <= 0)
- goto fast_failed;
- ilim = ilim1;
- k--;
- dval(&d) *= 10.;
- ieps++;
- }
- dval(&eps) = ieps*dval(&d) + 7.;
- word0(&eps) -= (P-1)*Exp_msk1;
- if (ilim == 0) {
- S = mhi = 0;
- dval(&d) -= 5.;
- if (dval(&d) > dval(&eps))
- goto one_digit;
- if (dval(&d) < -dval(&eps))
- goto no_digits;
- goto fast_failed;
- }
-#ifndef No_leftright
- if (leftright) {
- /* Use Steele & White method of only
- * generating digits needed.
- */
- dval(&eps) = ds*0.5/tens[ilim-1] - dval(&eps);
- for(i = 0;;) {
- L = (Long)(dval(&d)/ds);
- dval(&d) -= L*ds;
- *s++ = '0' + (int)L;
- if (dval(&d) < dval(&eps)) {
- if (dval(&d))
- inex = STRTOG_Inexlo;
- goto ret1;
- }
- if (ds - dval(&d) < dval(&eps))
- goto bump_up;
- if (++i >= ilim)
- break;
- dval(&eps) *= 10.;
- dval(&d) *= 10.;
- }
- }
- else {
-#endif
- /* Generate ilim digits, then fix them up. */
- dval(&eps) *= tens[ilim-1];
- for(i = 1;; i++, dval(&d) *= 10.) {
- if ( (L = (Long)(dval(&d)/ds)) !=0)
- dval(&d) -= L*ds;
- *s++ = '0' + (int)L;
- if (i == ilim) {
- ds *= 0.5;
- if (dval(&d) > ds + dval(&eps))
- goto bump_up;
- else if (dval(&d) < ds - dval(&eps)) {
- if (dval(&d))
- inex = STRTOG_Inexlo;
- goto clear_trailing0;
- }
- break;
- }
- }
-#ifndef No_leftright
- }
-#endif
- fast_failed:
- s = s0;
- dval(&d) = d2;
- k = k0;
- ilim = ilim0;
- }
-
- /* Do we have a "small" integer? */
-
- if (be >= 0 && k <= Int_max) {
- /* Yes. */
- ds = tens[k];
- if (ndigits < 0 && ilim <= 0) {
- S = mhi = 0;
- if (ilim < 0 || dval(&d) <= 5*ds)
- goto no_digits;
- goto one_digit;
- }
- for(i = 1;; i++, dval(&d) *= 10.) {
- L = dval(&d) / ds;
- dval(&d) -= L*ds;
-#ifdef Check_FLT_ROUNDS
- /* If FLT_ROUNDS == 2, L will usually be high by 1 */
- if (dval(&d) < 0) {
- L--;
- dval(&d) += ds;
- }
-#endif
- *s++ = '0' + (int)L;
- if (dval(&d) == 0.)
- break;
- if (i == ilim) {
- if (rdir) {
- if (rdir == 1)
- goto bump_up;
- inex = STRTOG_Inexlo;
- goto ret1;
- }
- dval(&d) += dval(&d);
- if (dval(&d) > ds || (dval(&d) == ds && L & 1)) {
- bump_up:
- inex = STRTOG_Inexhi;
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s = '0';
- break;
- }
- ++*s++;
- }
- else {
- inex = STRTOG_Inexlo;
- clear_trailing0:
- while(*--s == '0'){}
- ++s;
- }
- break;
- }
- }
- goto ret1;
- }
-
- m2 = b2;
- m5 = b5;
- mhi = mlo = 0;
- if (leftright) {
- if (mode < 2) {
- i = nbits - bbits;
- if (be - i++ < fpi->emin)
- /* denormal */
- i = be - fpi->emin + 1;
- }
- else {
- j = ilim - 1;
- if (m5 >= j)
- m5 -= j;
- else {
- s5 += j -= m5;
- b5 += j;
- m5 = 0;
- }
- if ((i = ilim) < 0) {
- m2 -= i;
- i = 0;
- }
- }
- b2 += i;
- s2 += i;
- mhi = i2b(1);
- }
- if (m2 > 0 && s2 > 0) {
- i = m2 < s2 ? m2 : s2;
- b2 -= i;
- m2 -= i;
- s2 -= i;
- }
- if (b5 > 0) {
- if (leftright) {
- if (m5 > 0) {
- mhi = pow5mult(mhi, m5);
- b1 = mult(mhi, b);
- Bfree(b);
- b = b1;
- }
- if ( (j = b5 - m5) !=0)
- b = pow5mult(b, j);
- }
- else
- b = pow5mult(b, b5);
- }
- S = i2b(1);
- if (s5 > 0)
- S = pow5mult(S, s5);
-
- /* Check for special case that d is a normalized power of 2. */
-
- spec_case = 0;
- if (mode < 2) {
- if (bbits == 1 && be0 > fpi->emin + 1) {
- /* The special case */
- b2++;
- s2++;
- spec_case = 1;
- }
- }
-
- /* Arrange for convenient computation of quotients:
- * shift left if necessary so divisor has 4 leading 0 bits.
- *
- * Perhaps we should just compute leading 28 bits of S once
- * and for all and pass them and a shift to quorem, so it
- * can do shifts and ors to compute the numerator for q.
- */
- i = ((s5 ? hi0bits(S->x[S->wds-1]) : ULbits - 1) - s2 - 4) & kmask;
- m2 += i;
- if ((b2 += i) > 0)
- b = lshift(b, b2);
- if ((s2 += i) > 0)
- S = lshift(S, s2);
- if (k_check) {
- if (cmp(b,S) < 0) {
- k--;
- b = multadd(b, 10, 0); /* we botched the k estimate */
- if (leftright)
- mhi = multadd(mhi, 10, 0);
- ilim = ilim1;
- }
- }
- if (ilim <= 0 && mode > 2) {
- if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) {
- /* no digits, fcvt style */
- no_digits:
- k = -1 - ndigits;
- inex = STRTOG_Inexlo;
- goto ret;
- }
- one_digit:
- inex = STRTOG_Inexhi;
- *s++ = '1';
- k++;
- goto ret;
- }
- if (leftright) {
- if (m2 > 0)
- mhi = lshift(mhi, m2);
-
- /* Compute mlo -- check for special case
- * that d is a normalized power of 2.
- */
-
- mlo = mhi;
- if (spec_case) {
- mhi = Balloc(mhi->k);
- Bcopy(mhi, mlo);
- mhi = lshift(mhi, 1);
- }
-
- for(i = 1;;i++) {
- dig = quorem(b,S) + '0';
- /* Do we yet have the shortest decimal string
- * that will round to d?
- */
- j = cmp(b, mlo);
- delta = diff(S, mhi);
- j1 = delta->sign ? 1 : cmp(b, delta);
- Bfree(delta);
-#ifndef ROUND_BIASED
- if (j1 == 0 && !mode && !(bits[0] & 1) && !rdir) {
- if (dig == '9')
- goto round_9_up;
- if (j <= 0) {
- if (b->wds > 1 || b->x[0])
- inex = STRTOG_Inexlo;
- }
- else {
- dig++;
- inex = STRTOG_Inexhi;
- }
- *s++ = dig;
- goto ret;
- }
-#endif
- if (j < 0 || (j == 0 && !mode
-#ifndef ROUND_BIASED
- && !(bits[0] & 1)
-#endif
- )) {
- if (rdir && (b->wds > 1 || b->x[0])) {
- if (rdir == 2) {
- inex = STRTOG_Inexlo;
- goto accept;
- }
- while (cmp(S,mhi) > 0) {
- *s++ = dig;
- mhi1 = multadd(mhi, 10, 0);
- if (mlo == mhi)
- mlo = mhi1;
- mhi = mhi1;
- b = multadd(b, 10, 0);
- dig = quorem(b,S) + '0';
- }
- if (dig++ == '9')
- goto round_9_up;
- inex = STRTOG_Inexhi;
- goto accept;
- }
- if (j1 > 0) {
- b = lshift(b, 1);
- j1 = cmp(b, S);
- if ((j1 > 0 || (j1 == 0 && dig & 1))
- && dig++ == '9')
- goto round_9_up;
- inex = STRTOG_Inexhi;
- }
- if (b->wds > 1 || b->x[0])
- inex = STRTOG_Inexlo;
- accept:
- *s++ = dig;
- goto ret;
- }
- if (j1 > 0 && rdir != 2) {
- if (dig == '9') { /* possible if i == 1 */
- round_9_up:
- *s++ = '9';
- inex = STRTOG_Inexhi;
- goto roundoff;
- }
- inex = STRTOG_Inexhi;
- *s++ = dig + 1;
- goto ret;
- }
- *s++ = dig;
- if (i == ilim)
- break;
- b = multadd(b, 10, 0);
- if (mlo == mhi)
- mlo = mhi = multadd(mhi, 10, 0);
- else {
- mlo = multadd(mlo, 10, 0);
- mhi = multadd(mhi, 10, 0);
- }
- }
- }
- else
- for(i = 1;; i++) {
- *s++ = dig = quorem(b,S) + '0';
- if (i >= ilim)
- break;
- b = multadd(b, 10, 0);
- }
-
- /* Round off last digit */
-
- if (rdir) {
- if (rdir == 2 || (b->wds <= 1 && !b->x[0]))
- goto chopzeros;
- goto roundoff;
- }
- b = lshift(b, 1);
- j = cmp(b, S);
- if (j > 0 || (j == 0 && dig & 1)) {
- roundoff:
- inex = STRTOG_Inexhi;
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s++ = '1';
- goto ret;
- }
- ++*s++;
- }
- else {
- chopzeros:
- if (b->wds > 1 || b->x[0])
- inex = STRTOG_Inexlo;
- while(*--s == '0'){}
- ++s;
- }
- ret:
- Bfree(S);
- if (mhi) {
- if (mlo && mlo != mhi)
- Bfree(mlo);
- Bfree(mhi);
- }
- ret1:
- Bfree(b);
- *s = 0;
- *decpt = k + 1;
- if (rve)
- *rve = s;
- *kindp |= inex;
- return s0;
-}
diff --git a/winsup/mingw/mingwex/gdtoa/gdtoa.h b/winsup/mingw/mingwex/gdtoa/gdtoa.h
deleted file mode 100755
index d7464db53..000000000
--- a/winsup/mingw/mingwex/gdtoa/gdtoa.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-/* Modified by Danny Smith for inclusion in libmingwex.a
- Aug 2006 */
-
-#ifndef GDTOA_H_INCLUDED
-#define GDTOA_H_INCLUDED
-
-#include "gd_arith.h"
-#include <stddef.h> /* for size_t */
-
-#if defined(__MINGW32__) || defined(__MINGW64__)
-/* keep the 'Long' definition as 'long' for compatibility
- * with older/other software. long in w64 is 32 bits anyway..
- */
-#define Long long /* int */
-#undef NO_LONG_LONG /* we have long long type */
-#endif /* MinGW */
-
-#ifndef Long
-#define Long long
-#endif
-#ifndef ULong
-typedef unsigned Long ULong;
-#endif
-#ifndef UShort
-typedef unsigned short UShort;
-#endif
-
-enum { /* return values from strtodg */
- STRTOG_Zero = 0,
- STRTOG_Normal = 1,
- STRTOG_Denormal = 2,
- STRTOG_Infinite = 3,
- STRTOG_NaN = 4,
- STRTOG_NaNbits = 5,
- STRTOG_NoNumber = 6,
- STRTOG_Retmask = 7,
-
- /* The following may be or-ed into one of the above values. */
-
- STRTOG_Neg = 0x08, /* does not affect STRTOG_Inexlo or STRTOG_Inexhi */
- STRTOG_Inexlo = 0x10, /* returned result rounded toward zero */
- STRTOG_Inexhi = 0x20, /* returned result rounded away from zero */
- STRTOG_Inexact = 0x30,
- STRTOG_Underflow= 0x40,
- STRTOG_Overflow = 0x80
-};
-
-typedef struct
-FPI {
- int nbits;
- int emin;
- int emax;
- int rounding;
- int sudden_underflow;
-} FPI;
-
-enum { /* FPI.rounding values: same as FLT_ROUNDS */
- FPI_Round_zero = 0,
- FPI_Round_near = 1,
- FPI_Round_up = 2,
- FPI_Round_down = 3
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern char* __dtoa (double d, int mode, int ndigits, int *decpt,
- int *sign, char **rve);
-extern char* __gdtoa (FPI *fpi, int be, ULong *bits, int *kindp,
- int mode, int ndigits, int *decpt, char **rve);
-extern void __freedtoa (char *);
-
-extern float __strtof (const char *, char **);
-extern double __strtod (const char *, char **);
-extern long double __strtold (const char *, char **);
-extern int __strtodg (const char *, char **, FPI *, Long *, ULong *);
-
-extern char* __g__fmt (char*, char*, char*, int, ULong, size_t);
-extern char* __g_dfmt (char*, double*, int, size_t);
-extern char* __g_ffmt (char*, float*, int, size_t);
-extern char* __g_xfmt (char*, void*, int, size_t);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* GDTOA_H_INCLUDED */
diff --git a/winsup/mingw/mingwex/gdtoa/gdtoa_fltrnds.h b/winsup/mingw/mingwex/gdtoa/gdtoa_fltrnds.h
deleted file mode 100644
index 28c474e2c..000000000
--- a/winsup/mingw/mingwex/gdtoa/gdtoa_fltrnds.h
+++ /dev/null
@@ -1,18 +0,0 @@
- FPI *fpi, fpi1;
- int Rounding;
-#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */
- Rounding = Flt_Rounds;
-#else /*}{*/
- Rounding = 1;
- switch(fegetround()) {
- case FE_TOWARDZERO: Rounding = 0; break;
- case FE_UPWARD: Rounding = 2; break;
- case FE_DOWNWARD: Rounding = 3;
- }
-#endif /*}}*/
- fpi = &fpi0;
- if (Rounding != 1) {
- fpi1 = fpi0;
- fpi = &fpi1;
- fpi1.rounding = Rounding;
- }
diff --git a/winsup/mingw/mingwex/gdtoa/gdtoaimp.h b/winsup/mingw/mingwex/gdtoa/gdtoaimp.h
deleted file mode 100755
index 69f4ab809..000000000
--- a/winsup/mingw/mingwex/gdtoa/gdtoaimp.h
+++ /dev/null
@@ -1,628 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998-2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* This is a variation on dtoa.c that converts arbitary binary
- floating-point formats to and from decimal notation. It uses
- double-precision arithmetic internally, so there are still
- various #ifdefs that adapt the calculations to the native
- double-precision arithmetic (any of IEEE, VAX D_floating,
- or IBM mainframe arithmetic).
-
- Please send bug reports to David M. Gay (dmg at acm dot org,
- with " at " changed at "@" and " dot " changed to ".").
- */
-
-/* On a machine with IEEE extended-precision registers, it is
- * necessary to specify double-precision (53-bit) rounding precision
- * before invoking strtod or dtoa. If the machine uses (the equivalent
- * of) Intel 80x87 arithmetic, the call
- * _control87(PC_53, MCW_PC);
- * does this with many compilers. Whether this or another call is
- * appropriate depends on the compiler; for this to work, it may be
- * necessary to #include "float.h" or another system-dependent header
- * file.
- */
-
-/* strtod for IEEE-, VAX-, and IBM-arithmetic machines.
- *
- * This strtod returns a nearest machine number to the input decimal
- * string (or sets errno to ERANGE). With IEEE arithmetic, ties are
- * broken by the IEEE round-even rule. Otherwise ties are broken by
- * biased rounding (add half and chop).
- *
- * Inspired loosely by William D. Clinger's paper "How to Read Floating
- * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 112-126].
- *
- * Modifications:
- *
- * 1. We only require IEEE, IBM, or VAX double-precision
- * arithmetic (not IEEE double-extended).
- * 2. We get by with floating-point arithmetic in a case that
- * Clinger missed -- when we're computing d * 10^n
- * for a small integer d and the integer n is not too
- * much larger than 22 (the maximum integer k for which
- * we can represent 10^k exactly), we may be able to
- * compute (d*10^k) * 10^(e-k) with just one roundoff.
- * 3. Rather than a bit-at-a-time adjustment of the binary
- * result in the hard case, we use floating-point
- * arithmetic to determine the adjustment to within
- * one bit; only in really hard cases do we need to
- * compute a second residual.
- * 4. Because of 3., we don't need a large table of powers of 10
- * for ten-to-e (just some small tables, e.g. of 10^k
- * for 0 <= k <= 22).
- */
-
-/*
- * #define IEEE_8087 for IEEE-arithmetic machines where the least
- * significant byte has the lowest address.
- * #define IEEE_MC68k for IEEE-arithmetic machines where the most
- * significant byte has the lowest address.
- * #define Long int on machines with 32-bit ints and 64-bit longs.
- * #define Sudden_Underflow for IEEE-format machines without gradual
- * underflow (i.e., that flush to zero on underflow).
- * #define IBM for IBM mainframe-style floating-point arithmetic.
- * #define VAX for VAX-style floating-point arithmetic (D_floating).
- * #define No_leftright to omit left-right logic in fast floating-point
- * computation of dtoa.
- * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3.
- * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines
- * that use extended-precision instructions to compute rounded
- * products and quotients) with IBM.
- * #define ROUND_BIASED for IEEE-format with biased rounding.
- * #define Inaccurate_Divide for IEEE-format with correctly rounded
- * products but inaccurate quotients, e.g., for Intel i860.
- * #define NO_LONG_LONG on machines that do not have a "long long"
- * integer type (of >= 64 bits). On such machines, you can
- * #define Just_16 to store 16 bits per 32-bit Long when doing
- * high-precision integer arithmetic. Whether this speeds things
- * up or slows things down depends on the machine and the number
- * being converted. If long long is available and the name is
- * something other than "long long", #define Llong to be the name,
- * and if "unsigned Llong" does not work as an unsigned version of
- * Llong, #define #ULLong to be the corresponding unsigned type.
- * #define KR_headers for old-style C function headers.
- * #define Bad_float_h if your system lacks a float.h or if it does not
- * define some or all of DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP,
- * FLT_RADIX, FLT_ROUNDS, and DBL_MAX.
- * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n)
- * if memory is available and otherwise does something you deem
- * appropriate. If MALLOC is undefined, malloc will be invoked
- * directly -- and assumed always to succeed.
- * #define Omit_Private_Memory to omit logic (added Jan. 1998) for making
- * memory allocations from a private pool of memory when possible.
- * When used, the private pool is PRIVATE_MEM bytes long: 2304 bytes,
- * unless #defined to be a different length. This default length
- * suffices to get rid of MALLOC calls except for unusual cases,
- * such as decimal-to-binary conversion of a very long string of
- * digits. When converting IEEE double precision values, the
- * longest string gdtoa can return is about 751 bytes long. For
- * conversions by strtod of strings of 800 digits and all gdtoa
- * conversions of IEEE doubles in single-threaded executions with
- * 8-byte pointers, PRIVATE_MEM >= 7400 appears to suffice; with
- * 4-byte pointers, PRIVATE_MEM >= 7112 appears adequate.
- * #define NO_INFNAN_CHECK if you do not wish to have INFNAN_CHECK
- * #defined automatically on IEEE systems. On such systems,
- * when INFNAN_CHECK is #defined, strtod checks
- * for Infinity and NaN (case insensitively).
- * When INFNAN_CHECK is #defined and No_Hex_NaN is not #defined,
- * strtodg also accepts (case insensitively) strings of the form
- * NaN(x), where x is a string of hexadecimal digits (optionally
- * preceded by 0x or 0X) and spaces; if there is only one string
- * of hexadecimal digits, it is taken for the fraction bits of the
- * resulting NaN; if there are two or more strings of hexadecimal
- * digits, each string is assigned to the next available sequence
- * of 32-bit words of fractions bits (starting with the most
- * significant), right-aligned in each sequence.
- * Unless GDTOA_NON_PEDANTIC_NANCHECK is #defined, input "NaN(...)"
- * is consumed even when ... has the wrong form (in which case the
- * "(...)" is consumed but ignored).
- * #define MULTIPLE_THREADS if the system offers preemptively scheduled
- * multiple threads. In this case, you must provide (or suitably
- * #define) two locks, acquired by ACQUIRE_DTOA_LOCK(n) and freed
- * by FREE_DTOA_LOCK(n) for n = 0 or 1. (The second lock, accessed
- * in pow5mult, ensures lazy evaluation of only one copy of high
- * powers of 5; omitting this lock would introduce a small
- * probability of wasting memory, but would otherwise be harmless.)
- * You must also invoke freedtoa(s) to free the value s returned by
- * dtoa. You may do so whether or not MULTIPLE_THREADS is #defined.
- * #define IMPRECISE_INEXACT if you do not care about the setting of
- * the STRTOG_Inexact bits in the special case of doing IEEE double
- * precision conversions (which could also be done by the strtog in
- * dtoa.c).
- * #define NO_HEX_FP to disable recognition of C9x's hexadecimal
- * floating-point constants.
- * #define -DNO_ERRNO to suppress setting errno (in strtod.c and
- * strtodg.c).
- * #define NO_STRING_H to use private versions of memcpy.
- * On some K&R systems, it may also be necessary to
- * #define DECLARE_SIZE_T in this case.
- * #define USE_LOCALE to use the current locale's decimal_point value.
- */
-
-#ifndef GDTOAIMP_H_INCLUDED
-#define GDTOAIMP_H_INCLUDED
-#include "gdtoa.h"
-#include "gd_qnan.h"
-
-#if defined(__MINGW32__) || defined(__MINGW64__)
-#define MULTIPLE_THREADS 1
-#define USE_LOCALE 1
-#define NO_LOCALE_CACHE 1
-#endif /* MinGW */
-
-#ifdef Honor_FLT_ROUNDS
-#include <fenv.h>
-#endif
-
-#ifdef DEBUG
-#include <stdio.h>
-#define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef MALLOC
-extern void *MALLOC (size_t);
-#else
-#define MALLOC malloc
-#endif
-
-#undef IEEE_Arith
-#undef Avoid_Underflow
-#ifdef IEEE_MC68k
-#define IEEE_Arith
-#endif
-#ifdef IEEE_8087
-#define IEEE_Arith
-#endif
-
-#include <errno.h>
-
-#ifdef NO_ERRNO
-#define SET_ERRNO(x)
-#else
-#define SET_ERRNO(x) \
- errno = (x)
-#endif
-
-#ifdef Bad_float_h
-
-#ifdef IEEE_Arith
-#define DBL_DIG 15
-#define DBL_MAX_10_EXP 308
-#define DBL_MAX_EXP 1024
-#define FLT_RADIX 2
-#define DBL_MAX 1.7976931348623157e+308
-#endif
-
-#ifdef IBM
-#define DBL_DIG 16
-#define DBL_MAX_10_EXP 75
-#define DBL_MAX_EXP 63
-#define FLT_RADIX 16
-#define DBL_MAX 7.2370055773322621e+75
-#endif
-
-#ifdef VAX
-#define DBL_DIG 16
-#define DBL_MAX_10_EXP 38
-#define DBL_MAX_EXP 127
-#define FLT_RADIX 2
-#define DBL_MAX 1.7014118346046923e+38
-#define n_bigtens 2
-#endif
-
-#ifndef LONG_MAX
-#define LONG_MAX 2147483647
-#endif
-
-#else /* ifndef Bad_float_h */
-#include <float.h>
-#endif /* Bad_float_h */
-
-#ifdef IEEE_Arith
-#define Scale_Bit 0x10
-#define n_bigtens 5
-#endif
-
-#ifdef IBM
-#define n_bigtens 3
-#endif
-
-#ifdef VAX
-#define n_bigtens 2
-#endif
-
-#ifndef __MATH_H__
-#include <math.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1
-Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined.
-#endif
-
-typedef union _dbl_union { double d; ULong L[2]; } dbl_union;
-
-#ifdef IEEE_8087
-#define word0(x) (x)->L[1]
-#define word1(x) (x)->L[0]
-#else
-#define word0(x) (x)->L[0]
-#define word1(x) (x)->L[1]
-#endif
-#define dval(x) (x)->d
-
-/* The following definition of Storeinc is appropriate for MIPS processors.
- * An alternative that might be better on some machines is
- * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
- */
-#if defined(IEEE_8087) + defined(VAX)
-#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \
-((unsigned short *)a)[0] = (unsigned short)c, a++)
-#else
-#define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \
-((unsigned short *)a)[1] = (unsigned short)c, a++)
-#endif
-
-/* #define P DBL_MANT_DIG */
-/* Ten_pmax = floor(P*log(2)/log(5)) */
-/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
-/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
-/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
-
-#ifdef IEEE_Arith
-#define Exp_shift 20
-#define Exp_shift1 20
-#define Exp_msk1 0x100000
-#define Exp_msk11 0x100000
-#define Exp_mask 0x7ff00000
-#define P 53
-#define Bias 1023
-#define Emin (-1022)
-#define Exp_1 0x3ff00000
-#define Exp_11 0x3ff00000
-#define Ebits 11
-#define Frac_mask 0xfffff
-#define Frac_mask1 0xfffff
-#define Ten_pmax 22
-#define Bletch 0x10
-#define Bndry_mask 0xfffff
-#define Bndry_mask1 0xfffff
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 1
-#define Tiny0 0
-#define Tiny1 1
-#define Quick_max 14
-#define Int_max 14
-
-#ifndef Flt_Rounds
-#ifdef FLT_ROUNDS
-#define Flt_Rounds FLT_ROUNDS
-#else
-#define Flt_Rounds 1
-#endif
-#endif /*Flt_Rounds*/
-
-#else /* ifndef IEEE_Arith */
-#undef Sudden_Underflow
-#define Sudden_Underflow
-#ifdef IBM
-#undef Flt_Rounds
-#define Flt_Rounds 0
-#define Exp_shift 24
-#define Exp_shift1 24
-#define Exp_msk1 0x1000000
-#define Exp_msk11 0x1000000
-#define Exp_mask 0x7f000000
-#define P 14
-#define Bias 65
-#define Exp_1 0x41000000
-#define Exp_11 0x41000000
-#define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */
-#define Frac_mask 0xffffff
-#define Frac_mask1 0xffffff
-#define Bletch 4
-#define Ten_pmax 22
-#define Bndry_mask 0xefffff
-#define Bndry_mask1 0xffffff
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 4
-#define Tiny0 0x100000
-#define Tiny1 0
-#define Quick_max 14
-#define Int_max 15
-#else /* VAX */
-#undef Flt_Rounds
-#define Flt_Rounds 1
-#define Exp_shift 23
-#define Exp_shift1 7
-#define Exp_msk1 0x80
-#define Exp_msk11 0x800000
-#define Exp_mask 0x7f80
-#define P 56
-#define Bias 129
-#define Exp_1 0x40800000
-#define Exp_11 0x4080
-#define Ebits 8
-#define Frac_mask 0x7fffff
-#define Frac_mask1 0xffff007f
-#define Ten_pmax 24
-#define Bletch 2
-#define Bndry_mask 0xffff007f
-#define Bndry_mask1 0xffff007f
-#define LSB 0x10000
-#define Sign_bit 0x8000
-#define Log2P 1
-#define Tiny0 0x80
-#define Tiny1 0
-#define Quick_max 15
-#define Int_max 15
-#endif /* IBM, VAX */
-#endif /* IEEE_Arith */
-
-#ifndef IEEE_Arith
-#define ROUND_BIASED
-#endif
-
-#ifdef RND_PRODQUOT
-#define rounded_product(a,b) a = rnd_prod(a, b)
-#define rounded_quotient(a,b) a = rnd_quot(a, b)
-extern double rnd_prod(double, double), rnd_quot(double, double);
-#else
-#define rounded_product(a,b) a *= b
-#define rounded_quotient(a,b) a /= b
-#endif
-
-#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
-#define Big1 0xffffffff
-
-#undef Pack_16
-#ifndef Pack_32
-#define Pack_32
-#endif
-
-#ifdef NO_LONG_LONG
-#undef ULLong
-#ifdef Just_16
-#undef Pack_32
-#define Pack_16
-/* When Pack_32 is not defined, we store 16 bits per 32-bit Long.
- * This makes some inner loops simpler and sometimes saves work
- * during multiplications, but it often seems to make things slightly
- * slower. Hence the default is now to store 32 bits per Long.
- */
-#endif
-#else /* long long available */
-#ifndef Llong
-#define Llong long long
-#endif
-#ifndef ULLong
-#define ULLong unsigned Llong
-#endif
-#endif /* NO_LONG_LONG */
-
-#ifdef Pack_32
-#define ULbits 32
-#define kshift 5
-#define kmask 31
-#define ALL_ON 0xffffffff
-#else
-#define ULbits 16
-#define kshift 4
-#define kmask 15
-#define ALL_ON 0xffff
-#endif
-
-#ifndef MULTIPLE_THREADS
-#define ACQUIRE_DTOA_LOCK(n) /*nothing*/
-#define FREE_DTOA_LOCK(n) /*nothing*/
-#endif
-
-#define Kmax 9
-
-#define Bigint __Bigint
-struct
-Bigint {
- struct Bigint *next;
- int k, maxwds, sign, wds;
- ULong x[1];
-};
-typedef struct Bigint Bigint;
-
-#ifdef NO_STRING_H
-#ifdef DECLARE_SIZE_T
-typedef unsigned int size_t;
-#endif
-extern void memcpy_D2A (void*, const void*, size_t);
-#define Bcopy(x,y) memcpy_D2A(&x->sign,&y->sign,y->wds*sizeof(ULong) + 2*sizeof(int))
-#else /* !NO_STRING_H */
-#define Bcopy(x,y) memcpy(&x->sign,&y->sign,y->wds*sizeof(ULong) + 2*sizeof(int))
-#endif /* NO_STRING_H */
-
-#ifdef __GNUC__
-static inline int
-__lo0bits_D2A (ULong *y)
-{
- int ret = __builtin_ctz(*y);
- *y = *y >> ret;
- return ret;
-}
-
-static inline int
-__hi0bits_D2A (ULong y)
-{
- return __builtin_clz(y);
-}
-#endif
-
-#define Balloc __Balloc_D2A
-#define Bfree __Bfree_D2A
-#define ULtoQ __ULtoQ_D2A
-#define ULtof __ULtof_D2A
-#define ULtod __ULtod_D2A
-#define ULtodd __ULtodd_D2A
-#define ULtox __ULtox_D2A
-#define ULtoxL __ULtoxL_D2A
-#define any_on __any_on_D2A
-#define b2d __b2d_D2A
-#define bigtens __bigtens_D2A
-#define cmp __cmp_D2A
-#define copybits __copybits_D2A
-#define d2b __d2b_D2A
-#define decrement __decrement_D2A
-#define diff __diff_D2A
-#define dtoa_result __dtoa_result_D2A
-#define gethex __gethex_D2A
-#define hexdig __hexdig_D2A
-#define hexnan __hexnan_D2A
-#define hi0bits_D2A __hi0bits_D2A
-#define hi0bits(x) __hi0bits_D2A((ULong)(x))
-#define i2b __i2b_D2A
-#define increment __increment_D2A
-#define lo0bits __lo0bits_D2A
-#define lshift __lshift_D2A
-#define match __match_D2A
-#define mult __mult_D2A
-#define multadd __multadd_D2A
-#define nrv_alloc __nrv_alloc_D2A
-#define pow5mult __pow5mult_D2A
-#define quorem __quorem_D2A
-#define ratio __ratio_D2A
-#define rshift __rshift_D2A
-#define rv_alloc __rv_alloc_D2A
-#define s2b __s2b_D2A
-#define set_ones __set_ones_D2A
-#define strcp_D2A __strcp_D2A
-#define strcp __strcp_D2A
-#define strtoIg __strtoIg_D2A
-#define sum __sum_D2A
-#define tens __tens_D2A
-#define tinytens __tinytens_D2A
-#define tinytens __tinytens_D2A
-#define trailz __trailz_D2A
-#define ulp __ulp_D2A
-
-extern char *dtoa_result;
-extern const double bigtens[], tens[], tinytens[];
-extern unsigned char hexdig[];
-
-extern Bigint *Balloc (int);
-extern void Bfree (Bigint*);
-extern void ULtof (ULong*, ULong*, Long, int);
-extern void ULtod (ULong*, ULong*, Long, int);
-extern void ULtodd (ULong*, ULong*, Long, int);
-extern void ULtoQ (ULong*, ULong*, Long, int);
-extern void ULtox (UShort*, ULong*, Long, int);
-extern void ULtoxL (ULong*, ULong*, Long, int);
-extern ULong any_on (Bigint*, int);
-extern double b2d (Bigint*, int*);
-extern int cmp (Bigint*, Bigint*);
-extern void copybits (ULong*, int, Bigint*);
-extern Bigint *d2b (double, int*, int*);
-extern void decrement (Bigint*);
-extern Bigint *diff (Bigint*, Bigint*);
-extern int gethex (const char**, FPI*, Long*, Bigint**, int);
-extern void hexdig_init_D2A(void);
-extern int hexnan (const char**, FPI*, ULong*);
-extern int hi0bits_D2A (ULong);
-extern Bigint *i2b (int);
-extern Bigint *increment (Bigint*);
-extern int lo0bits (ULong*);
-extern Bigint *lshift (Bigint*, int);
-extern int match (const char**, char*);
-extern Bigint *mult (Bigint*, Bigint*);
-extern Bigint *multadd (Bigint*, int, int);
-extern char *nrv_alloc (char*, char **, int);
-extern Bigint *pow5mult (Bigint*, int);
-extern int quorem (Bigint*, Bigint*);
-extern double ratio (Bigint*, Bigint*);
-extern void rshift (Bigint*, int);
-extern char *rv_alloc (int);
-extern Bigint *s2b (const char*, int, int, ULong, int);
-extern Bigint *set_ones (Bigint*, int);
-extern char *strcp (char*, const char*);
-extern Bigint *sum (Bigint*, Bigint*);
-extern int trailz (Bigint*);
-extern double ulp (dbl_union *);
-
-#ifdef __cplusplus
-}
-#endif
-/*
- * NAN_WORD0 and NAN_WORD1 are only referenced in strtod.c. Prior to
- * 20050115, they used to be hard-wired here (to 0x7ff80000 and 0,
- * respectively), but now are determined by compiling and running
- * qnan.c to generate gd_qnan.h, which specifies d_QNAN0 and d_QNAN1.
- * Formerly gdtoaimp.h recommended supplying suitable -DNAN_WORD0=...
- * and -DNAN_WORD1=... values if necessary. This should still work.
- * (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.)
- */
-#ifdef IEEE_Arith
-#ifndef NO_INFNAN_CHECK
-#undef INFNAN_CHECK
-#define INFNAN_CHECK
-#endif
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#ifndef NAN_WORD0
-#define NAN_WORD0 d_QNAN0
-#endif
-#ifndef NAN_WORD1
-#define NAN_WORD1 d_QNAN1
-#endif
-#else
-#define _0 1
-#define _1 0
-#ifndef NAN_WORD0
-#define NAN_WORD0 d_QNAN1
-#endif
-#ifndef NAN_WORD1
-#define NAN_WORD1 d_QNAN0
-#endif
-#endif
-#else
-#undef INFNAN_CHECK
-#endif
-
-#undef SI
-#ifdef Sudden_Underflow
-#define SI 1
-#else
-#define SI 0
-#endif
-
-#endif /* GDTOAIMP_H_INCLUDED */
diff --git a/winsup/mingw/mingwex/gdtoa/gethex.c b/winsup/mingw/mingwex/gdtoa/gethex.c
deleted file mode 100755
index b123e91ef..000000000
--- a/winsup/mingw/mingwex/gdtoa/gethex.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-#ifdef USE_LOCALE
-#include "locale.h"
-#endif
-
-int gethex (const char **sp, FPI *fpi, Long *exp, Bigint **bp, int sign)
-{
- Bigint *b;
- const unsigned char *decpt, *s0, *s, *s1;
- int big, esign, havedig, irv, j, k, n, n0, nbits, up, zret;
- ULong L, lostbits, *x;
- Long e, e1;
-#ifdef USE_LOCALE
- int i;
- const unsigned char *decimalpoint;
-#ifdef NO_LOCALE_CACHE
- decimalpoint = (unsigned char *)localeconv()->decimal_point;
-#else
- static unsigned char *decimalpoint_cache;
- if (!(s0 = decimalpoint_cache)) {
- s0 = (unsigned char *)localeconv()->decimal_point;
- decimalpoint_cache = (unsigned char *)
- MALLOC(strlen((char *)s0) + 1);
- if (decimalpoint_cache) {
- strcpy((char *)decimalpoint_cache, (char *)s0);
- s0 = decimalpoint_cache;
- }
- }
- decimalpoint = s0;
-#endif
-#endif
-
- if (!hexdig['0'])
- hexdig_init_D2A();
- *bp = 0;
- havedig = 0;
- s0 = *(const unsigned char **)sp + 2;
- while(s0[havedig] == '0')
- havedig++;
- s0 += havedig;
- s = s0;
- decpt = 0;
- zret = 0;
- e = 0;
- if (hexdig[*s])
- havedig++;
- else {
- zret = 1;
-#ifdef USE_LOCALE
- for(i = 0; decimalpoint[i]; ++i) {
- if (s[i] != decimalpoint[i])
- goto pcheck;
- }
- decpt = s += i;
-#else
- if (*s != '.')
- goto pcheck;
- decpt = ++s;
-#endif
- if (!hexdig[*s])
- goto pcheck;
- while(*s == '0')
- s++;
- if (hexdig[*s])
- zret = 0;
- havedig = 1;
- s0 = s;
- }
- while(hexdig[*s])
- s++;
-#ifdef USE_LOCALE
- if (*s == *decimalpoint && !decpt) {
- for(i = 1; decimalpoint[i]; ++i) {
- if (s[i] != decimalpoint[i])
- goto pcheck;
- }
- decpt = s += i;
-#else
- if (*s == '.' && !decpt) {
- decpt = ++s;
-#endif
- while(hexdig[*s])
- s++;
- }/*}*/
- if (decpt)
- e = -(((Long)(s-decpt)) << 2);
- pcheck:
- s1 = s;
- big = esign = 0;
- switch(*s) {
- case 'p':
- case 'P':
- switch(*++s) {
- case '-':
- esign = 1;
- /* no break */
- case '+':
- s++;
- }
- if ((n = hexdig[*s]) == 0 || n > 0x19) {
- s = s1;
- break;
- }
- e1 = n - 0x10;
- while((n = hexdig[*++s]) !=0 && n <= 0x19) {
- if (e1 & 0xf8000000)
- big = 1;
- e1 = 10*e1 + n - 0x10;
- }
- if (esign)
- e1 = -e1;
- e += e1;
- }
- *sp = (char*)s;
- if (!havedig)
- *sp = (char*)s0 - 1;
- if (zret)
- return STRTOG_Zero;
- if (big) {
- if (esign) {
- switch(fpi->rounding) {
- case FPI_Round_up:
- if (sign)
- break;
- goto ret_tiny;
- case FPI_Round_down:
- if (!sign)
- break;
- goto ret_tiny;
- }
- goto retz;
- ret_tiny:
- b = Balloc(0);
- b->wds = 1;
- b->x[0] = 1;
- goto dret;
- }
- switch(fpi->rounding) {
- case FPI_Round_near:
- goto ovfl1;
- case FPI_Round_up:
- if (!sign)
- goto ovfl1;
- goto ret_big;
- case FPI_Round_down:
- if (sign)
- goto ovfl1;
- goto ret_big;
- }
- ret_big:
- nbits = fpi->nbits;
- n0 = n = nbits >> kshift;
- if (nbits & kmask)
- ++n;
- for(j = n, k = 0; j >>= 1; ++k);
- *bp = b = Balloc(k);
- b->wds = n;
- for(j = 0; j < n0; ++j)
- b->x[j] = ALL_ON;
- if (n > n0)
- b->x[j] = ULbits >> (ULbits - (nbits & kmask));
- *exp = fpi->emin;
- return STRTOG_Normal | STRTOG_Inexlo;
- }
- n = s1 - s0 - 1;
- for(k = 0; n > (1 << (kshift-2)) - 1; n >>= 1)
- k++;
- b = Balloc(k);
- x = b->x;
- n = 0;
- L = 0;
-#ifdef USE_LOCALE
- for(i = 0; decimalpoint[i+1]; ++i);
-#endif
- while(s1 > s0) {
-#ifdef USE_LOCALE
- if (*--s1 == decimalpoint[i]) {
- s1 -= i;
- continue;
- }
-#else
- if (*--s1 == '.')
- continue;
-#endif
- if (n == ULbits) {
- *x++ = L;
- L = 0;
- n = 0;
- }
- L |= (hexdig[*s1] & 0x0f) << n;
- n += 4;
- }
- *x++ = L;
- b->wds = n = x - b->x;
- n = ULbits*n - hi0bits(L);
- nbits = fpi->nbits;
- lostbits = 0;
- x = b->x;
- if (n > nbits) {
- n -= nbits;
- if (any_on(b,n)) {
- lostbits = 1;
- k = n - 1;
- if (x[k>>kshift] & 1 << (k & kmask)) {
- lostbits = 2;
- if (k > 0 && any_on(b,k))
- lostbits = 3;
- }
- }
- rshift(b, n);
- e += n;
- }
- else if (n < nbits) {
- n = nbits - n;
- b = lshift(b, n);
- e -= n;
- x = b->x;
- }
- if (e > fpi->emax) {
- ovfl:
- Bfree(b);
- ovfl1:
- SET_ERRNO(ERANGE);
- return STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi;
- }
- irv = STRTOG_Normal;
- if (e < fpi->emin) {
- irv = STRTOG_Denormal;
- n = fpi->emin - e;
- if (n >= nbits) {
- switch (fpi->rounding) {
- case FPI_Round_near:
- if (n == nbits && (n < 2 || any_on(b,n-1)))
- goto one_bit;
- break;
- case FPI_Round_up:
- if (!sign)
- goto one_bit;
- break;
- case FPI_Round_down:
- if (sign) {
- one_bit:
- x[0] = b->wds = 1;
- dret:
- *bp = b;
- *exp = fpi->emin;
- SET_ERRNO(ERANGE);
- return STRTOG_Denormal | STRTOG_Inexhi
- | STRTOG_Underflow;
- }
- }
- Bfree(b);
- retz:
- SET_ERRNO(ERANGE);
- return STRTOG_Zero | STRTOG_Inexlo | STRTOG_Underflow;
- }
- k = n - 1;
- if (lostbits)
- lostbits = 1;
- else if (k > 0)
- lostbits = any_on(b,k);
- if (x[k>>kshift] & 1 << (k & kmask))
- lostbits |= 2;
- nbits -= n;
- rshift(b,n);
- e = fpi->emin;
- }
- if (lostbits) {
- up = 0;
- switch(fpi->rounding) {
- case FPI_Round_zero:
- break;
- case FPI_Round_near:
- if (lostbits & 2
- && (lostbits | x[0]) & 1)
- up = 1;
- break;
- case FPI_Round_up:
- up = 1 - sign;
- break;
- case FPI_Round_down:
- up = sign;
- }
- if (up) {
- k = b->wds;
- b = increment(b);
- x = b->x;
- if (irv == STRTOG_Denormal) {
- if (nbits == fpi->nbits - 1
- && x[nbits >> kshift] & 1 << (nbits & kmask))
- irv = STRTOG_Normal;
- }
- else if (b->wds > k
- || ((n = nbits & kmask) !=0
- && hi0bits(x[k-1]) < 32-n)) {
- rshift(b,1);
- if (++e > fpi->emax)
- goto ovfl;
- }
- irv |= STRTOG_Inexhi;
- }
- else
- irv |= STRTOG_Inexlo;
- }
- *bp = b;
- *exp = e;
- return irv;
-}
diff --git a/winsup/mingw/mingwex/gdtoa/gmisc.c b/winsup/mingw/mingwex/gdtoa/gmisc.c
deleted file mode 100755
index 157e87231..000000000
--- a/winsup/mingw/mingwex/gdtoa/gmisc.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-void rshift (Bigint *b, int k)
-{
- ULong *x, *x1, *xe, y;
- int n;
-
- x = x1 = b->x;
- n = k >> kshift;
- if (n < b->wds) {
- xe = x + b->wds;
- x += n;
- if (k &= kmask) {
- n = ULbits - k;
- y = *x++ >> k;
- while(x < xe) {
- *x1++ = (y | (*x << n)) & ALL_ON;
- y = *x++ >> k;
- }
- if ((*x1 = y) !=0)
- x1++;
- }
- else
- while(x < xe)
- *x1++ = *x++;
- }
- if ((b->wds = x1 - b->x) == 0)
- b->x[0] = 0;
-}
-
-int trailz (Bigint *b)
-{
- ULong L, *x, *xe;
- int n = 0;
-
- x = b->x;
- xe = x + b->wds;
- for(n = 0; x < xe && !*x; x++)
- n += ULbits;
- if (x < xe) {
- L = *x;
- n += lo0bits(&L);
- }
- return n;
-}
diff --git a/winsup/mingw/mingwex/gdtoa/hd_init.c b/winsup/mingw/mingwex/gdtoa/hd_init.c
deleted file mode 100755
index 5ee0caa73..000000000
--- a/winsup/mingw/mingwex/gdtoa/hd_init.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-unsigned char hexdig[256];
-
-static void htinit (unsigned char *h, unsigned char *s, int inc)
-{
- int i, j;
- for(i = 0; (j = s[i]) !=0; i++)
- h[j] = i + inc;
-}
-
-void hexdig_init_D2A (void)
-{
-#define USC (unsigned char *)
- htinit(hexdig, USC "0123456789", 0x10);
- htinit(hexdig, USC "abcdef", 0x10 + 10);
- htinit(hexdig, USC "ABCDEF", 0x10 + 10);
-}
diff --git a/winsup/mingw/mingwex/gdtoa/hexnan.c b/winsup/mingw/mingwex/gdtoa/hexnan.c
deleted file mode 100755
index 4fa4c7745..000000000
--- a/winsup/mingw/mingwex/gdtoa/hexnan.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-static void L_shift (ULong *x, ULong *x1, int i)
-{
- int j;
-
- i = 8 - i;
- i <<= 2;
- j = ULbits - i;
- do {
- *x |= x[1] << j;
- x[1] >>= i;
- } while(++x < x1);
-}
-
-int hexnan (const char **sp, FPI *fpi, ULong *x0)
-{
- ULong c, h, *x, *x1, *xe;
- const char *s;
- int havedig, hd0, i, nbits;
-
- if (!hexdig['0'])
- hexdig_init_D2A();
- nbits = fpi->nbits;
- x = x0 + (nbits >> kshift);
- if (nbits & kmask)
- x++;
- *--x = 0;
- x1 = xe = x;
- havedig = hd0 = i = 0;
- s = *sp;
- /* allow optional initial 0x or 0X */
- while((c = *(const unsigned char*)(s+1)) && c <= ' ')
- ++s;
- if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X')
- && *(const unsigned char*)(s+3) > ' ')
- s += 2;
- while((c = *(const unsigned char*)++s)) {
- if (!(h = hexdig[c])) {
- if (c <= ' ') {
- if (hd0 < havedig) {
- if (x < x1 && i < 8)
- L_shift(x, x1, i);
- if (x <= x0) {
- i = 8;
- continue;
- }
- hd0 = havedig;
- *--x = 0;
- x1 = x;
- i = 0;
- }
- while(*(const unsigned char*)(s+1) <= ' ')
- ++s;
- if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X')
- && *(const unsigned char*)(s+3) > ' ')
- s += 2;
- continue;
- }
- if (/*(*/ c == ')' && havedig) {
- *sp = s + 1;
- break;
- }
-#ifndef GDTOA_NON_PEDANTIC_NANCHECK
- do {
- if (/*(*/ c == ')') {
- *sp = s + 1;
- break;
- }
- } while((c = *++s));
-#endif
- return STRTOG_NaN;
- }
- havedig++;
- if (++i > 8) {
- if (x <= x0)
- continue;
- i = 1;
- *--x = 0;
- }
- *x = (*x << 4) | (h & 0xf);
- }
- if (!havedig)
- return STRTOG_NaN;
- if (x < x1 && i < 8)
- L_shift(x, x1, i);
- if (x > x0) {
- x1 = x0;
- do *x1++ = *x++;
- while(x <= xe);
- do *x1++ = 0;
- while(x1 <= xe);
- }
- else {
- /* truncate high-order word if necessary */
- if ( (i = nbits & (ULbits-1)) !=0)
- *xe &= ((ULong)0xffffffff) >> (ULbits - i);
- }
- for(x1 = xe;; --x1) {
- if (*x1 != 0)
- break;
- if (x1 == x0) {
- *x1 = 1;
- break;
- }
- }
- return STRTOG_NaNbits;
-}
diff --git a/winsup/mingw/mingwex/gdtoa/misc.c b/winsup/mingw/mingwex/gdtoa/misc.c
deleted file mode 100755
index 49934c42f..000000000
--- a/winsup/mingw/mingwex/gdtoa/misc.c
+++ /dev/null
@@ -1,857 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-
-#if defined(__MINGW32__) || defined(__MINGW64__)
-/* we have to include windows.h before gdtoa
- headers, otherwise defines cause conflicts. */
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-#define NLOCKS 2
-
-#ifdef USE_WIN32_SL
-/* Use spin locks. */
-static long dtoa_sl[NLOCKS];
-
-#define ACQUIRE_DTOA_LOCK(n) \
- while (InterlockedCompareExchange (&dtoa_sl[n], 1, 0) != 0) \
- Sleep (0);
-#define FREE_DTOA_LOCK(n) InterlockedExchange (&dtoa_sl[n], 0);
-
-#else /* USE_WIN32_SL */
-
-#include <stdlib.h>
-static CRITICAL_SECTION dtoa_CritSec[NLOCKS];
-static long dtoa_CS_init = 0;
-/*
- 1 = initializing
- 2 = initialized
- 3 = deleted
-*/
-static void dtoa_lock_cleanup (void)
-{
- long last_CS_init = InterlockedExchange (&dtoa_CS_init,3);
- if (2 == last_CS_init) {
- int i;
- for (i = 0; i < NLOCKS; i++)
- DeleteCriticalSection (&dtoa_CritSec[i]);
- }
-}
-
-static void dtoa_lock (int n)
-{
- if (2 == dtoa_CS_init) {
- EnterCriticalSection (&dtoa_CritSec[n]);
- return;
- }
- else if (0 == dtoa_CS_init) {
- long last_CS_init = InterlockedExchange (&dtoa_CS_init, 1);
- if (0 == last_CS_init) {
- int i;
- for (i = 0; i < NLOCKS; i++)
- InitializeCriticalSection (&dtoa_CritSec[i]);
- atexit (dtoa_lock_cleanup);
- dtoa_CS_init = 2;
- }
- else if (2 == last_CS_init)
- dtoa_CS_init = 2;
- }
- /* Another thread is initializing. Wait. */
- while (1 == dtoa_CS_init)
- Sleep (1);
-
- /* It had better be initialized now. */
- if (2 == dtoa_CS_init)
- EnterCriticalSection(&dtoa_CritSec[n]);
-}
-
-static void dtoa_unlock (int n)
-{
- if (2 == dtoa_CS_init)
- LeaveCriticalSection (&dtoa_CritSec[n]);
-}
-
-#define ACQUIRE_DTOA_LOCK(n) dtoa_lock(n)
-#define FREE_DTOA_LOCK(n) dtoa_unlock(n)
-#endif /* USE_WIN32_SL */
-
-#endif /* __MINGW32__ / __MINGW64__ */
-
-#include "gdtoaimp.h"
-
-static Bigint *freelist[Kmax+1];
-#ifndef Omit_Private_Memory
-#ifndef PRIVATE_MEM
-#define PRIVATE_MEM 2304
-#endif
-#define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double))
-static double private_mem[PRIVATE_mem], *pmem_next = private_mem;
-#endif
-
-Bigint *Balloc (int k)
-{
- int x;
- Bigint *rv;
-#ifndef Omit_Private_Memory
- unsigned int len;
-#endif
-
- ACQUIRE_DTOA_LOCK(0);
- /* The k > Kmax case does not need ACQUIRE_DTOA_LOCK(0), */
- /* but this case seems very unlikely. */
- if (k <= Kmax && (rv = freelist[k]) !=0) {
- freelist[k] = rv->next;
- }
- else {
- x = 1 << k;
-#ifdef Omit_Private_Memory
- rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(ULong));
- if (rv == NULL)
- return NULL;
-#else
- len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
- /sizeof(double);
- if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) {
- rv = (Bigint*)pmem_next;
- pmem_next += len;
- }
- else
- {
- rv = (Bigint*)MALLOC(len*sizeof(double));
- if (rv == NULL)
- return NULL;
- }
-#endif
- rv->k = k;
- rv->maxwds = x;
- }
- FREE_DTOA_LOCK(0);
- rv->sign = rv->wds = 0;
- return rv;
-}
-
-void Bfree (Bigint *v)
-{
- if (v) {
- if (v->k > Kmax)
- free((void*)v);
- else {
- ACQUIRE_DTOA_LOCK(0);
- v->next = freelist[v->k];
- freelist[v->k] = v;
- FREE_DTOA_LOCK(0);
- }
- }
-}
-
-/* lo0bits(): Shift y so lowest bit is 1 and return the
- * number of bits y was shifted.
- * With GCC, we use an inline wrapper for __builtin_clz()
- */
-#ifndef __GNUC__
-int lo0bits (ULong *y)
-{
- int k;
- ULong x = *y;
-
- if (x & 7) {
- if (x & 1)
- return 0;
- if (x & 2) {
- *y = x >> 1;
- return 1;
- }
- *y = x >> 2;
- return 2;
- }
- k = 0;
- if (!(x & 0xffff)) {
- k = 16;
- x >>= 16;
- }
- if (!(x & 0xff)) {
- k += 8;
- x >>= 8;
- }
- if (!(x & 0xf)) {
- k += 4;
- x >>= 4;
- }
- if (!(x & 0x3)) {
- k += 2;
- x >>= 2;
- }
- if (!(x & 1)) {
- k++;
- x >>= 1;
- if (!x)
- return 32;
- }
- *y = x;
- return k;
-}
-#endif /* __GNUC__ */
-
-Bigint *multadd (Bigint *b, int m, int a) /* multiply by m and add a */
-{
- int i, wds;
-#ifdef ULLong
- ULong *x;
- ULLong carry, y;
-#else
- ULong carry, *x, y;
-#ifdef Pack_32
- ULong xi, z;
-#endif
-#endif
- Bigint *b1;
-
- wds = b->wds;
- x = b->x;
- i = 0;
- carry = a;
- do {
-#ifdef ULLong
- y = *x * (ULLong)m + carry;
- carry = y >> 32;
- *x++ = y & 0xffffffffUL;
-#else
-#ifdef Pack_32
- xi = *x;
- y = (xi & 0xffff) * m + carry;
- z = (xi >> 16) * m + (y >> 16);
- carry = z >> 16;
- *x++ = (z << 16) + (y & 0xffff);
-#else
- y = *x * m + carry;
- carry = y >> 16;
- *x++ = y & 0xffff;
-#endif
-#endif
- } while(++i < wds);
- if (carry) {
- if (wds >= b->maxwds) {
- b1 = Balloc(b->k+1);
- if (b1 == NULL)
- return NULL;
- Bcopy(b1, b);
- Bfree(b);
- b = b1;
- }
- b->x[wds++] = carry;
- b->wds = wds;
- }
- return b;
-}
-
-/* hi0bits();
- * With GCC, we use an inline wrapper for __builtin_clz()
- */
-#ifndef __GNUC__
-int hi0bits_D2A (ULong x)
-{
- int k = 0;
-
- if (!(x & 0xffff0000)) {
- k = 16;
- x <<= 16;
- }
- if (!(x & 0xff000000)) {
- k += 8;
- x <<= 8;
- }
- if (!(x & 0xf0000000)) {
- k += 4;
- x <<= 4;
- }
- if (!(x & 0xc0000000)) {
- k += 2;
- x <<= 2;
- }
- if (!(x & 0x80000000)) {
- k++;
- if (!(x & 0x40000000))
- return 32;
- }
- return k;
-}
-#endif /* __GNUC__ */
-
-Bigint *i2b (int i)
-{
- Bigint *b;
-
- b = Balloc(1);
- if (b == NULL)
- return NULL;
- b->x[0] = i;
- b->wds = 1;
- return b;
-}
-
-Bigint *mult (Bigint *a, Bigint *b)
-{
- Bigint *c;
- int k, wa, wb, wc;
- ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
- ULong y;
-#ifdef ULLong
- ULLong carry, z;
-#else
- ULong carry, z;
-#ifdef Pack_32
- ULong z2;
-#endif
-#endif
-
- if (a->wds < b->wds) {
- c = a;
- a = b;
- b = c;
- }
- k = a->k;
- wa = a->wds;
- wb = b->wds;
- wc = wa + wb;
- if (wc > a->maxwds)
- k++;
- c = Balloc(k);
- if (c == NULL)
- return NULL;
- for(x = c->x, xa = x + wc; x < xa; x++)
- *x = 0;
- xa = a->x;
- xae = xa + wa;
- xb = b->x;
- xbe = xb + wb;
- xc0 = c->x;
-#ifdef ULLong
- for(; xb < xbe; xc0++) {
- if ( (y = *xb++) !=0) {
- x = xa;
- xc = xc0;
- carry = 0;
- do {
- z = *x++ * (ULLong)y + *xc + carry;
- carry = z >> 32;
- *xc++ = z & 0xffffffffUL;
- } while(x < xae);
- *xc = carry;
- }
- }
-#else
-#ifdef Pack_32
- for(; xb < xbe; xb++, xc0++) {
- if ( (y = *xb & 0xffff) !=0) {
- x = xa;
- xc = xc0;
- carry = 0;
- do {
- z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
- carry = z >> 16;
- z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
- carry = z2 >> 16;
- Storeinc(xc, z2, z);
- } while(x < xae);
- *xc = carry;
- }
- if ( (y = *xb >> 16) !=0) {
- x = xa;
- xc = xc0;
- carry = 0;
- z2 = *xc;
- do {
- z = (*x & 0xffff) * y + (*xc >> 16) + carry;
- carry = z >> 16;
- Storeinc(xc, z, z2);
- z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
- carry = z2 >> 16;
- } while(x < xae);
- *xc = z2;
- }
- }
-#else
- for(; xb < xbe; xc0++) {
- if ( (y = *xb++) !=0) {
- x = xa;
- xc = xc0;
- carry = 0;
- do {
- z = *x++ * y + *xc + carry;
- carry = z >> 16;
- *xc++ = z & 0xffff;
- } while(x < xae);
- *xc = carry;
- }
- }
-#endif
-#endif
- for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
- c->wds = wc;
- return c;
-}
-
-static Bigint *p5s;
-
-Bigint *pow5mult (Bigint *b, int k)
-{
- Bigint *b1, *p5, *p51;
- int i;
- static int p05[3] = { 5, 25, 125 };
-
- if ( (i = k & 3) !=0)
- {
- b = multadd(b, p05[i-1], 0);
- if (b == NULL)
- return NULL;
- }
-
- if (!(k >>= 2))
- return b;
- if ((p5 = p5s) == 0) {
- /* first time */
-#ifdef MULTIPLE_THREADS
- ACQUIRE_DTOA_LOCK(1);
- if (!(p5 = p5s)) {
- p5 = p5s = i2b(625);
- if (p5 == NULL)
- return NULL;
- p5->next = 0;
- }
- FREE_DTOA_LOCK(1);
-#else
- p5 = p5s = i2b(625);
- if (p5 == NULL)
- return NULL;
- p5->next = 0;
-#endif
- }
- for(;;) {
- if (k & 1) {
- b1 = mult(b, p5);
- if (b1 == NULL)
- return NULL;
- Bfree(b);
- b = b1;
- }
- if (!(k >>= 1))
- break;
- if ((p51 = p5->next) == 0) {
-#ifdef MULTIPLE_THREADS
- ACQUIRE_DTOA_LOCK(1);
- if (!(p51 = p5->next)) {
- p51 = p5->next = mult(p5,p5);
- if (p51 == NULL)
- return NULL;
- p51->next = 0;
- }
- FREE_DTOA_LOCK(1);
-#else
- p51 = p5->next = mult(p5,p5);
- if (p51 == NULL)
- return NULL;
- p51->next = 0;
-#endif
- }
- p5 = p51;
- }
- return b;
-}
-
-Bigint *lshift (Bigint *b, int k)
-{
- int i, k1, n, n1;
- Bigint *b1;
- ULong *x, *x1, *xe, z;
-
- n = k >> kshift;
- k1 = b->k;
- n1 = n + b->wds + 1;
- for(i = b->maxwds; n1 > i; i <<= 1)
- k1++;
- b1 = Balloc(k1);
- if (b1 == NULL)
- return NULL;
- x1 = b1->x;
- for(i = 0; i < n; i++)
- *x1++ = 0;
- x = b->x;
- xe = x + b->wds;
- if (k &= kmask) {
-#ifdef Pack_32
- k1 = 32 - k;
- z = 0;
- do {
- *x1++ = *x << k | z;
- z = *x++ >> k1;
- } while(x < xe);
- if ((*x1 = z) !=0)
- ++n1;
-#else
- k1 = 16 - k;
- z = 0;
- do {
- *x1++ = *x << k & 0xffff | z;
- z = *x++ >> k1;
- } while(x < xe);
- if (*x1 = z)
- ++n1;
-#endif
- }
- else do
- *x1++ = *x++;
- while(x < xe);
- b1->wds = n1 - 1;
- Bfree(b);
- return b1;
-}
-
-int cmp (Bigint *a, Bigint *b)
-{
- ULong *xa, *xa0, *xb, *xb0;
- int i, j;
-
- i = a->wds;
- j = b->wds;
-#ifdef DEBUG
- if (i > 1 && !a->x[i-1])
- Bug("cmp called with a->x[a->wds-1] == 0");
- if (j > 1 && !b->x[j-1])
- Bug("cmp called with b->x[b->wds-1] == 0");
-#endif
- if (i -= j)
- return i;
- xa0 = a->x;
- xa = xa0 + j;
- xb0 = b->x;
- xb = xb0 + j;
- for(;;) {
- if (*--xa != *--xb)
- return *xa < *xb ? -1 : 1;
- if (xa <= xa0)
- break;
- }
- return 0;
-}
-
-Bigint *diff (Bigint *a, Bigint *b)
-{
- Bigint *c;
- int i, wa, wb;
- ULong *xa, *xae, *xb, *xbe, *xc;
-#ifdef ULLong
- ULLong borrow, y;
-#else
- ULong borrow, y;
-#ifdef Pack_32
- ULong z;
-#endif
-#endif
-
- i = cmp(a,b);
- if (!i) {
- c = Balloc(0);
- if (c == NULL)
- return NULL;
- c->wds = 1;
- c->x[0] = 0;
- return c;
- }
- if (i < 0) {
- c = a;
- a = b;
- b = c;
- i = 1;
- }
- else
- i = 0;
- c = Balloc(a->k);
- if (c == NULL)
- return NULL;
- c->sign = i;
- wa = a->wds;
- xa = a->x;
- xae = xa + wa;
- wb = b->wds;
- xb = b->x;
- xbe = xb + wb;
- xc = c->x;
- borrow = 0;
-#ifdef ULLong
- do {
- y = (ULLong)*xa++ - *xb++ - borrow;
- borrow = y >> 32 & 1UL;
- *xc++ = y & 0xffffffffUL;
- } while(xb < xbe);
- while(xa < xae) {
- y = *xa++ - borrow;
- borrow = y >> 32 & 1UL;
- *xc++ = y & 0xffffffffUL;
- }
-#else
-#ifdef Pack_32
- do {
- y = (*xa & 0xffff) - (*xb & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- z = (*xa++ >> 16) - (*xb++ >> 16) - borrow;
- borrow = (z & 0x10000) >> 16;
- Storeinc(xc, z, y);
- } while(xb < xbe);
- while(xa < xae) {
- y = (*xa & 0xffff) - borrow;
- borrow = (y & 0x10000) >> 16;
- z = (*xa++ >> 16) - borrow;
- borrow = (z & 0x10000) >> 16;
- Storeinc(xc, z, y);
- }
-#else
- do {
- y = *xa++ - *xb++ - borrow;
- borrow = (y & 0x10000) >> 16;
- *xc++ = y & 0xffff;
- } while(xb < xbe);
- while(xa < xae) {
- y = *xa++ - borrow;
- borrow = (y & 0x10000) >> 16;
- *xc++ = y & 0xffff;
- }
-#endif
-#endif
- while(!*--xc)
- wa--;
- c->wds = wa;
- return c;
-}
-
-double b2d (Bigint *a, int *e)
-{
- ULong *xa, *xa0, w, y, z;
- int k;
- union _dbl_union d;
-#define d0 word0(&d)
-#define d1 word1(&d)
-
- xa0 = a->x;
- xa = xa0 + a->wds;
- y = *--xa;
-#ifdef DEBUG
- if (!y) Bug("zero y in b2d");
-#endif
- k = hi0bits(y);
- *e = 32 - k;
-#ifdef Pack_32
- if (k < Ebits) {
- d0 = Exp_1 | y >> (Ebits - k);
- w = xa > xa0 ? *--xa : 0;
- d1 = y << ((32-Ebits) + k) | w >> (Ebits - k);
- goto ret_d;
- }
- z = xa > xa0 ? *--xa : 0;
- if (k -= Ebits) {
- d0 = Exp_1 | y << k | z >> (32 - k);
- y = xa > xa0 ? *--xa : 0;
- d1 = z << k | y >> (32 - k);
- }
- else {
- d0 = Exp_1 | y;
- d1 = z;
- }
-#else
- if (k < Ebits + 16) {
- z = xa > xa0 ? *--xa : 0;
- d0 = Exp_1 | y << k - Ebits | z >> Ebits + 16 - k;
- w = xa > xa0 ? *--xa : 0;
- y = xa > xa0 ? *--xa : 0;
- d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k;
- goto ret_d;
- }
- z = xa > xa0 ? *--xa : 0;
- w = xa > xa0 ? *--xa : 0;
- k -= Ebits + 16;
- d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k;
- y = xa > xa0 ? *--xa : 0;
- d1 = w << k + 16 | y << k;
-#endif
- ret_d:
- return dval(&d);
-#undef d0
-#undef d1
-}
-
-Bigint *d2b (double dd, int *e, int *bits)
-{
- Bigint *b;
- union _dbl_union d;
-#ifndef Sudden_Underflow
- int i;
-#endif
- int de, k;
- ULong *x, y, z;
-#define d0 word0(&d)
-#define d1 word1(&d)
- d.d = dd;
-
-#ifdef Pack_32
- b = Balloc(1);
-#else
- b = Balloc(2);
-#endif
- if (b == NULL)
- return NULL;
- x = b->x;
-
- z = d0 & Frac_mask;
- d0 &= 0x7fffffff; /* clear sign bit, which we ignore */
-#ifdef Sudden_Underflow
- de = (int)(d0 >> Exp_shift);
- z |= Exp_msk11;
-#else
- if ( (de = (int)(d0 >> Exp_shift)) !=0)
- z |= Exp_msk1;
-#endif
-#ifdef Pack_32
- if ( (y = d1) !=0) {
- if ( (k = lo0bits(&y)) !=0) {
- x[0] = y | z << (32 - k);
- z >>= k;
- }
- else
- x[0] = y;
-#ifndef Sudden_Underflow
- i =
-#endif
- b->wds = (x[1] = z) !=0 ? 2 : 1;
- }
- else {
- k = lo0bits(&z);
- x[0] = z;
-#ifndef Sudden_Underflow
- i =
-#endif
- b->wds = 1;
- k += 32;
- }
-#else
- if ( (y = d1) !=0) {
- if ( (k = lo0bits(&y)) !=0)
- if (k >= 16) {
- x[0] = y | z << 32 - k & 0xffff;
- x[1] = z >> k - 16 & 0xffff;
- x[2] = z >> k;
- i = 2;
- }
- else {
- x[0] = y & 0xffff;
- x[1] = y >> 16 | z << 16 - k & 0xffff;
- x[2] = z >> k & 0xffff;
- x[3] = z >> k+16;
- i = 3;
- }
- else {
- x[0] = y & 0xffff;
- x[1] = y >> 16;
- x[2] = z & 0xffff;
- x[3] = z >> 16;
- i = 3;
- }
- }
- else {
-#ifdef DEBUG
- if (!z)
- Bug("Zero passed to d2b");
-#endif
- k = lo0bits(&z);
- if (k >= 16) {
- x[0] = z;
- i = 0;
- }
- else {
- x[0] = z & 0xffff;
- x[1] = z >> 16;
- i = 1;
- }
- k += 32;
- }
- while(!x[i])
- --i;
- b->wds = i + 1;
-#endif
-#ifndef Sudden_Underflow
- if (de) {
-#endif
- *e = de - Bias - (P-1) + k;
- *bits = P - k;
-#ifndef Sudden_Underflow
- }
- else {
- *e = de - Bias - (P-1) + 1 + k;
-#ifdef Pack_32
- *bits = 32*i - hi0bits(x[i-1]);
-#else
- *bits = (i+2)*16 - hi0bits(x[i]);
-#endif
- }
-#endif
- return b;
-#undef d0
-#undef d1
-}
-
-const double
-bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
-const double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, 1e-256 };
-
-const double
-tens[] = {
- 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
- 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
- 1e20, 1e21, 1e22
-};
-
-char *strcp_D2A (char *a, const char *b)
-{
- while((*a = *b++))
- a++;
- return a;
-}
-
-#ifdef NO_STRING_H
-void *memcpy_D2A (void *a1, void *b1, size_t len)
-{
- char *a = (char*)a1, *ae = a + len;
- char *b = (char*)b1, *a0 = a;
- while(a < ae)
- *a++ = *b++;
- return a0;
-}
-#endif /* NO_STRING_H */
-
diff --git a/winsup/mingw/mingwex/gdtoa/qnan.c b/winsup/mingw/mingwex/gdtoa/qnan.c
deleted file mode 100755
index 9f4c25890..000000000
--- a/winsup/mingw/mingwex/gdtoa/qnan.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 2005 by David M. Gay
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that the copyright notice and this permission notice and warranty
-disclaimer appear in supporting documentation, and that the name of
-the author or any of his current or former employers not be used in
-advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
-NO EVENT SHALL THE AUTHOR OR ANY OF HIS CURRENT OR FORMER EMPLOYERS BE
-LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
-DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-/* Program to compute quiet NaNs of various precisions (float, */
-/* double, and perhaps long double) on the current system, */
-/* provided the system uses binary IEEE (P754) arithmetic. */
-/* Note that one system's quiet NaN may be a signaling NaN on */
-/* another system. The IEEE arithmetic standards (P754, P854) */
-/* do not specify how to distinguish signaling NaNs from quiet */
-/* ones, and this detail varies across systems. The computed */
-/* NaN values are encoded in #defines for values for an */
-/* unsigned 32-bit integer type, called Ulong below, and */
-/* (for long double) perhaps as unsigned short values. Once */
-/* upon a time, there were PC compilers for Intel CPUs that */
-/* had sizeof(long double) = 10. Are such compilers still */
-/* distributed? */
-
-#include <stdio.h>
-#include "gd_arith.h"
-
-#ifndef Long
-#define Long long
-#endif
-
-typedef unsigned Long Ulong;
-
-#undef HAVE_IEEE
-#ifdef IEEE_8087
-#define _0 1
-#define _1 0
-#define HAVE_IEEE
-#endif
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define HAVE_IEEE
-#endif
-
-#define UL (unsigned long)
-
- int
-main(void)
-{
-#ifdef HAVE_IEEE
- typedef union {
- float f;
- double d;
- Ulong L[4];
-#ifndef NO_LONG_LONG
-/* need u[8] instead of u[5] for 64 bit */
- unsigned short u[8];
- long double D;
-#endif
- } U;
- U a, b, c;
- int i;
- a.L[0]=a.L[1]=a.L[2]=a.L[3]=0;
- b.L[0]=b.L[1]=b.L[2]=b.L[3]=0;
- c.L[0]=c.L[1]=c.L[2]=c.L[3]=0;
-
- a.L[0] = b.L[0] = 0x7f800000;
- c.f = a.f - b.f;
- printf("#define f_QNAN 0x%lx\n", UL c.L[0]);
- a.L[_0] = b.L[_0] = 0x7ff00000;
- a.L[_1] = b.L[_1] = 0;
- c.d = a.d - b.d; /* quiet NaN */
- printf("#define d_QNAN0 0x%lx\n", UL c.L[0]);
- printf("#define d_QNAN1 0x%lx\n", UL c.L[1]);
-#ifdef NO_LONG_LONG
- for(i = 0; i < 4; i++)
- printf("#define ld_QNAN%d 0xffffffff\n", i);
- for(i = 0; i < 5; i++)
- printf("#define ldus_QNAN%d 0xffff\n", i);
-#else
- b.D = c.D = a.d;
- if (printf("") < 0)
- c.D = 37; /* never executed; just defeat optimization */
- a.L[2] = a.L[3] = 0;
- a.D = b.D - c.D;
- for(i = 0; i < 4; i++)
- printf("#define ld_QNAN%d 0x%lx\n", i, UL a.L[i]);
- for(i = 0; i < 5; i++)
- printf("#define ldus_QNAN%d 0x%x\n", i, a.u[i]);
-#endif
-#endif /* HAVE_IEEE */
- return 0;
- }
diff --git a/winsup/mingw/mingwex/gdtoa/smisc.c b/winsup/mingw/mingwex/gdtoa/smisc.c
deleted file mode 100755
index 1d09b44ea..000000000
--- a/winsup/mingw/mingwex/gdtoa/smisc.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-Bigint *s2b (const char *s, int nd0, int nd, ULong y9, int dplen)
-{
- Bigint *b;
- int i, k;
- Long x, y;
-
- x = (nd + 8) / 9;
- for(k = 0, y = 1; x > y; y <<= 1, k++) ;
-#ifdef Pack_32
- b = Balloc(k);
- b->x[0] = y9;
- b->wds = 1;
-#else
- b = Balloc(k+1);
- b->x[0] = y9 & 0xffff;
- b->wds = (b->x[1] = y9 >> 16) ? 2 : 1;
-#endif
-
- i = 9;
- if (9 < nd0) {
- s += 9;
- do b = multadd(b, 10, *s++ - '0');
- while(++i < nd0);
- s += dplen;
- }
- else
- s += dplen + 9;
- for(; i < nd; i++)
- b = multadd(b, 10, *s++ - '0');
- return b;
-}
-
-double ratio (Bigint *a, Bigint *b)
-{
- union _dbl_union da, db;
- int k, ka, kb;
-
- dval(&da) = b2d(a, &ka);
- dval(&db) = b2d(b, &kb);
- k = ka - kb + ULbits*(a->wds - b->wds);
- if (k > 0)
- word0(&da) += k*Exp_msk1;
- else {
- k = -k;
- word0(&db) += k*Exp_msk1;
- }
- return dval(&da) / dval(&db);
-}
-
-#ifdef INFNAN_CHECK
-
-int match (const char **sp, char *t)
-{
- int c, d;
- const char *s = *sp;
-
- while( (d = *t++) !=0) {
- if ((c = *++s) >= 'A' && c <= 'Z')
- c += 'a' - 'A';
- if (c != d)
- return 0;
- }
- *sp = s + 1;
- return 1;
-}
-#endif /* INFNAN_CHECK */
-
-void copybits (ULong *c, int n, Bigint *b)
-{
- ULong *ce, *x, *xe;
-#ifdef Pack_16
- int nw, nw1;
-#endif
-
- ce = c + ((n-1) >> kshift) + 1;
- x = b->x;
-#ifdef Pack_32
- xe = x + b->wds;
- while(x < xe)
- *c++ = *x++;
-#else
- nw = b->wds;
- nw1 = nw & 1;
- for(xe = x + (nw - nw1); x < xe; x += 2)
- Storeinc(c, x[1], x[0]);
- if (nw1)
- *c++ = *x;
-#endif
- while(c < ce)
- *c++ = 0;
-}
-
-ULong any_on (Bigint *b, int k)
-{
- int n, nwds;
- ULong *x, *x0, x1, x2;
-
- x = b->x;
- nwds = b->wds;
- n = k >> kshift;
- if (n > nwds)
- n = nwds;
- else if (n < nwds && (k &= kmask)) {
- x1 = x2 = x[n];
- x1 >>= k;
- x1 <<= k;
- if (x1 != x2)
- return 1;
- }
- x0 = x;
- x += n;
- while(x > x0)
- if (*--x)
- return 1;
- return 0;
-}
diff --git a/winsup/mingw/mingwex/gdtoa/strtodg.c b/winsup/mingw/mingwex/gdtoa/strtodg.c
deleted file mode 100755
index 8de730f4b..000000000
--- a/winsup/mingw/mingwex/gdtoa/strtodg.c
+++ /dev/null
@@ -1,979 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998-2001 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-#ifdef USE_LOCALE
-#include "locale.h"
-#endif
-
-static const int
-fivesbits[] = { 0, 3, 5, 7, 10, 12, 14, 17, 19, 21,
- 24, 26, 28, 31, 33, 35, 38, 40, 42, 45,
- 47, 49, 52
-};
-
-Bigint *increment (Bigint *b)
-{
- ULong *x, *xe;
- Bigint *b1;
-#ifdef Pack_16
- ULong carry = 1, y;
-#endif
-
- x = b->x;
- xe = x + b->wds;
-#ifdef Pack_32
- do {
- if (*x < (ULong)0xffffffffL) {
- ++*x;
- return b;
- }
- *x++ = 0;
- } while(x < xe);
-#else
- do {
- y = *x + carry;
- carry = y >> 16;
- *x++ = y & 0xffff;
- if (!carry)
- return b;
- } while(x < xe);
- if (carry)
-#endif
- {
- if (b->wds >= b->maxwds) {
- b1 = Balloc(b->k+1);
- Bcopy(b1,b);
- Bfree(b);
- b = b1;
- }
- b->x[b->wds++] = 1;
- }
- return b;
-}
-
-void decrement (Bigint *b)
-{
- ULong *x, *xe;
-#ifdef Pack_16
- ULong borrow = 1, y;
-#endif
-
- x = b->x;
- xe = x + b->wds;
-#ifdef Pack_32
- do {
- if (*x) {
- --*x;
- break;
- }
- *x++ = 0xffffffffL;
- } while(x < xe);
-#else
- do {
- y = *x - borrow;
- borrow = (y & 0x10000) >> 16;
- *x++ = y & 0xffff;
- } while(borrow && x < xe);
-#endif
-}
-
-static int all_on (Bigint *b, int n)
-{
- ULong *x, *xe;
-
- x = b->x;
- xe = x + (n >> kshift);
- while(x < xe)
- if ((*x++ & ALL_ON) != ALL_ON)
- return 0;
- if (n &= kmask)
- return ((*x | (ALL_ON << n)) & ALL_ON) == ALL_ON;
- return 1;
-}
-
-Bigint *set_ones (Bigint *b, int n)
-{
- int k;
- ULong *x, *xe;
-
- k = (n + ((1 << kshift) - 1)) >> kshift;
- if (b->k < k) {
- Bfree(b);
- b = Balloc(k);
- }
- k = n >> kshift;
- if (n &= kmask)
- k++;
- b->wds = k;
- x = b->x;
- xe = x + k;
- while(x < xe)
- *x++ = ALL_ON;
- if (n)
- x[-1] >>= ULbits - n;
- return b;
-}
-
-static int rvOK (dbl_union *d, FPI *fpi, Long *exp, ULong *bits,
- int exact, int rd, int *irv)
-{
- Bigint *b;
- ULong carry, inex, lostbits;
- int bdif, e, j, k, k1, nb, rv;
-
- carry = rv = 0;
- b = d2b(dval(d), &e, &bdif);
- bdif -= nb = fpi->nbits;
- e += bdif;
- if (bdif <= 0) {
- if (exact)
- goto trunc;
- goto ret;
- }
- if (P == nb) {
- if (
-#ifndef IMPRECISE_INEXACT
- exact &&
-#endif
- fpi->rounding ==
-#ifdef RND_PRODQUOT
- FPI_Round_near
-#else
- Flt_Rounds
-#endif
- ) goto trunc;
- goto ret;
- }
- switch(rd) {
- case 1: /* round down (toward -Infinity) */
- goto trunc;
- case 2: /* round up (toward +Infinity) */
- break;
- default: /* round near */
- k = bdif - 1;
- if (k < 0)
- goto trunc;
- if (!k) {
- if (!exact)
- goto ret;
- if (b->x[0] & 2)
- break;
- goto trunc;
- }
- if (b->x[k>>kshift] & ((ULong)1 << (k & kmask)))
- break;
- goto trunc;
- }
- /* "break" cases: round up 1 bit, then truncate; bdif > 0 */
- carry = 1;
- trunc:
- inex = lostbits = 0;
- if (bdif > 0) {
- if ( (lostbits = any_on(b, bdif)) !=0)
- inex = STRTOG_Inexlo;
- rshift(b, bdif);
- if (carry) {
- inex = STRTOG_Inexhi;
- b = increment(b);
- if ( (j = nb & kmask) !=0)
- j = ULbits - j;
- if (hi0bits(b->x[b->wds - 1]) != j) {
- if (!lostbits)
- lostbits = b->x[0] & 1;
- rshift(b, 1);
- e++;
- }
- }
- }
- else if (bdif < 0)
- b = lshift(b, -bdif);
- if (e < fpi->emin) {
- k = fpi->emin - e;
- e = fpi->emin;
- if (k > nb || fpi->sudden_underflow) {
- b->wds = inex = 0;
- *irv = STRTOG_Underflow | STRTOG_Inexlo;
- }
- else {
- k1 = k - 1;
- if (k1 > 0 && !lostbits)
- lostbits = any_on(b, k1);
- if (!lostbits && !exact)
- goto ret;
- lostbits |=
- carry = b->x[k1>>kshift] & (1 << (k1 & kmask));
- rshift(b, k);
- *irv = STRTOG_Denormal;
- if (carry) {
- b = increment(b);
- inex = STRTOG_Inexhi | STRTOG_Underflow;
- }
- else if (lostbits)
- inex = STRTOG_Inexlo | STRTOG_Underflow;
- }
- }
- else if (e > fpi->emax) {
- e = fpi->emax + 1;
- *irv = STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi;
- SET_ERRNO(ERANGE);
- b->wds = inex = 0;
- }
- *exp = e;
- copybits(bits, nb, b);
- *irv |= inex;
- rv = 1;
- ret:
- Bfree(b);
- return rv;
-}
-
-static int mantbits (dbl_union *d)
-{
- ULong L;
- if ( (L = word1(d)) !=0)
- return P - lo0bits(&L);
- L = word0(d) | Exp_msk1;
- return P - 32 - lo0bits(&L);
-}
-
-int __strtodg (const char *s00, char **se, FPI *fpi, Long *exp, ULong *bits)
-{
- int abe, abits, asub;
- int bb0, bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, decpt, denorm;
- int dsign, e, e1, e2, emin, esign, finished, i, inex, irv;
- int j, k, nbits, nd, nd0, nf, nz, nz0, rd, rvbits, rve, rve1, sign;
- int sudden_underflow;
- const char *s, *s0, *s1;
- double adj0, tol;
- Long L;
- union _dbl_union adj, rv;
- ULong *b, *be, y, z;
- Bigint *ab, *bb, *bb1, *bd, *bd0, *bs, *delta, *rvb, *rvb0;
-#ifdef USE_LOCALE /*{{*/
-#ifdef NO_LOCALE_CACHE
- char *decimalpoint = localeconv()->decimal_point;
- int dplen = strlen(decimalpoint);
-#else
- char *decimalpoint;
- static char *decimalpoint_cache;
- static int dplen;
- if (!(s0 = decimalpoint_cache)) {
- s0 = localeconv()->decimal_point;
- if ((decimalpoint_cache = (char*)MALLOC(strlen(s0) + 1))) {
- strcpy(decimalpoint_cache, s0);
- s0 = decimalpoint_cache;
- }
- dplen = strlen(s0);
- }
- decimalpoint = (char*)s0;
-#endif /*NO_LOCALE_CACHE*/
-#else /*USE_LOCALE}{*/
-#define dplen 1
-#endif /*USE_LOCALE}}*/
-
- irv = STRTOG_Zero;
- denorm = sign = nz0 = nz = 0;
- dval(&rv) = 0.;
- rvb = 0;
- nbits = fpi->nbits;
- for(s = s00;;s++) switch(*s) {
- case '-':
- sign = 1;
- /* no break */
- case '+':
- if (*++s)
- goto break2;
- /* no break */
- case 0:
- sign = 0;
- irv = STRTOG_NoNumber;
- s = s00;
- goto ret;
- case '\t':
- case '\n':
- case '\v':
- case '\f':
- case '\r':
- case ' ':
- continue;
- default:
- goto break2;
- }
- break2:
- if (*s == '0') {
-#ifndef NO_HEX_FP
- switch(s[1]) {
- case 'x':
- case 'X':
- irv = gethex(&s, fpi, exp, &rvb, sign);
- if (irv == STRTOG_NoNumber) {
- s = s00;
- sign = 0;
- }
- goto ret;
- }
-#endif
- nz0 = 1;
- while(*++s == '0') ;
- if (!*s)
- goto ret;
- }
- sudden_underflow = fpi->sudden_underflow;
- s0 = s;
- y = z = 0;
- for(decpt = nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
- if (nd < 9)
- y = 10*y + c - '0';
- else if (nd < 16)
- z = 10*z + c - '0';
- nd0 = nd;
-#ifdef USE_LOCALE
- if (c == *decimalpoint) {
- for(i = 1; decimalpoint[i]; ++i)
- if (s[i] != decimalpoint[i])
- goto dig_done;
- s += i;
- c = *s;
-#else
- if (c == '.') {
- c = *++s;
-#endif
- decpt = 1;
- if (!nd) {
- for(; c == '0'; c = *++s)
- nz++;
- if (c > '0' && c <= '9') {
- s0 = s;
- nf += nz;
- nz = 0;
- goto have_dig;
- }
- goto dig_done;
- }
- for(; c >= '0' && c <= '9'; c = *++s) {
- have_dig:
- nz++;
- if (c -= '0') {
- nf += nz;
- for(i = 1; i < nz; i++)
- if (nd++ < 9)
- y *= 10;
- else if (nd <= DBL_DIG + 1)
- z *= 10;
- if (nd++ < 9)
- y = 10*y + c;
- else if (nd <= DBL_DIG + 1)
- z = 10*z + c;
- nz = 0;
- }
- }
- }/*}*/
- dig_done:
- e = 0;
- if (c == 'e' || c == 'E') {
- if (!nd && !nz && !nz0) {
- irv = STRTOG_NoNumber;
- s = s00;
- goto ret;
- }
- s00 = s;
- esign = 0;
- switch(c = *++s) {
- case '-':
- esign = 1;
- case '+':
- c = *++s;
- }
- if (c >= '0' && c <= '9') {
- while(c == '0')
- c = *++s;
- if (c > '0' && c <= '9') {
- L = c - '0';
- s1 = s;
- while((c = *++s) >= '0' && c <= '9')
- L = 10*L + c - '0';
- if (s - s1 > 8 || L > 19999)
- /* Avoid confusion from exponents
- * so large that e might overflow.
- */
- e = 19999; /* safe for 16 bit ints */
- else
- e = (int)L;
- if (esign)
- e = -e;
- }
- else
- e = 0;
- }
- else
- s = s00;
- }
- if (!nd) {
- if (!nz && !nz0) {
-#ifdef INFNAN_CHECK
- /* Check for Nan and Infinity */
- if (!decpt)
- switch(c) {
- case 'i':
- case 'I':
- if (match(&s,"nf")) {
- --s;
- if (!match(&s,"inity"))
- ++s;
- irv = STRTOG_Infinite;
- goto infnanexp;
- }
- break;
- case 'n':
- case 'N':
- if (match(&s, "an")) {
- irv = STRTOG_NaN;
- *exp = fpi->emax + 1;
-#ifndef No_Hex_NaN
- if (*s == '(') /*)*/
- irv = hexnan(&s, fpi, bits);
-#endif
- goto infnanexp;
- }
- }
-#endif /* INFNAN_CHECK */
- irv = STRTOG_NoNumber;
- s = s00;
- }
- goto ret;
- }
-
- irv = STRTOG_Normal;
- e1 = e -= nf;
- rd = 0;
- switch(fpi->rounding & 3) {
- case FPI_Round_up:
- rd = 2 - sign;
- break;
- case FPI_Round_zero:
- rd = 1;
- break;
- case FPI_Round_down:
- rd = 1 + sign;
- }
-
- /* Now we have nd0 digits, starting at s0, followed by a
- * decimal point, followed by nd-nd0 digits. The number we're
- * after is the integer represented by those digits times
- * 10**e */
-
- if (!nd0)
- nd0 = nd;
- k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
- dval(&rv) = y;
- if (k > 9)
- dval(&rv) = tens[k - 9] * dval(&rv) + z;
- bd0 = 0;
- if (nbits <= P && nd <= DBL_DIG) {
- if (!e) {
- if (rvOK(&rv, fpi, exp, bits, 1, rd, &irv))
- goto ret;
- }
- else if (e > 0) {
- if (e <= Ten_pmax) {
- i = fivesbits[e] + mantbits(&rv) <= P;
- /* rv = */ rounded_product(dval(&rv), tens[e]);
- if (rvOK(&rv, fpi, exp, bits, i, rd, &irv))
- goto ret;
- e1 -= e;
- goto rv_notOK;
- }
- i = DBL_DIG - nd;
- if (e <= Ten_pmax + i) {
- /* A fancier test would sometimes let us do
- * this for larger i values.
- */
- e2 = e - i;
- e1 -= i;
- dval(&rv) *= tens[i];
- /* rv = */ rounded_product(dval(&rv), tens[e2]);
- if (rvOK(&rv, fpi, exp, bits, 0, rd, &irv))
- goto ret;
- e1 -= e2;
- }
- }
-#ifndef Inaccurate_Divide
- else if (e >= -Ten_pmax) {
- /* rv = */ rounded_quotient(dval(&rv), tens[-e]);
- if (rvOK(&rv, fpi, exp, bits, 0, rd, &irv))
- goto ret;
- e1 -= e;
- }
-#endif
- }
- rv_notOK:
- e1 += nd - k;
-
- /* Get starting approximation = rv * 10**e1 */
-
- e2 = 0;
- if (e1 > 0) {
- if ( (i = e1 & 15) !=0)
- dval(&rv) *= tens[i];
- if (e1 &= ~15) {
- e1 >>= 4;
- while(e1 >= (1 << (n_bigtens-1))) {
- e2 += ((word0(&rv) & Exp_mask)
- >> Exp_shift1) - Bias;
- word0(&rv) &= ~Exp_mask;
- word0(&rv) |= Bias << Exp_shift1;
- dval(&rv) *= bigtens[n_bigtens-1];
- e1 -= 1 << (n_bigtens-1);
- }
- e2 += ((word0(&rv) & Exp_mask) >> Exp_shift1) - Bias;
- word0(&rv) &= ~Exp_mask;
- word0(&rv) |= Bias << Exp_shift1;
- for(j = 0; e1 > 0; j++, e1 >>= 1)
- if (e1 & 1)
- dval(&rv) *= bigtens[j];
- }
- }
- else if (e1 < 0) {
- e1 = -e1;
- if ( (i = e1 & 15) !=0)
- dval(&rv) /= tens[i];
- if (e1 &= ~15) {
- e1 >>= 4;
- while(e1 >= (1 << (n_bigtens-1))) {
- e2 += ((word0(&rv) & Exp_mask)
- >> Exp_shift1) - Bias;
- word0(&rv) &= ~Exp_mask;
- word0(&rv) |= Bias << Exp_shift1;
- dval(&rv) *= tinytens[n_bigtens-1];
- e1 -= 1 << (n_bigtens-1);
- }
- e2 += ((word0(&rv) & Exp_mask) >> Exp_shift1) - Bias;
- word0(&rv) &= ~Exp_mask;
- word0(&rv) |= Bias << Exp_shift1;
- for(j = 0; e1 > 0; j++, e1 >>= 1)
- if (e1 & 1)
- dval(&rv) *= tinytens[j];
- }
- }
- rvb = d2b(dval(&rv), &rve, &rvbits); /* rv = rvb * 2^rve */
- rve += e2;
- if ((j = rvbits - nbits) > 0) {
- rshift(rvb, j);
- rvbits = nbits;
- rve += j;
- }
- bb0 = 0; /* trailing zero bits in rvb */
- e2 = rve + rvbits - nbits;
- if (e2 > fpi->emax + 1)
- goto huge;
- rve1 = rve + rvbits - nbits;
- if (e2 < (emin = fpi->emin)) {
- denorm = 1;
- j = rve - emin;
- if (j > 0) {
- rvb = lshift(rvb, j);
- rvbits += j;
- }
- else if (j < 0) {
- rvbits += j;
- if (rvbits <= 0) {
- if (rvbits < -1) {
- ufl:
- rvb->wds = 0;
- rvb->x[0] = 0;
- *exp = emin;
- irv = STRTOG_Underflow | STRTOG_Inexlo;
- goto ret;
- }
- rvb->x[0] = rvb->wds = rvbits = 1;
- }
- else
- rshift(rvb, -j);
- }
- rve = rve1 = emin;
- if (sudden_underflow && e2 + 1 < emin)
- goto ufl;
- }
-
- /* Now the hard part -- adjusting rv to the correct value.*/
-
- /* Put digits into bd: true value = bd * 10^e */
-
- bd0 = s2b(s0, nd0, nd, y, dplen);
-
- for(;;) {
- bd = Balloc(bd0->k);
- Bcopy(bd, bd0);
- bb = Balloc(rvb->k);
- Bcopy(bb, rvb);
- bbbits = rvbits - bb0;
- bbe = rve + bb0;
- bs = i2b(1);
-
- if (e >= 0) {
- bb2 = bb5 = 0;
- bd2 = bd5 = e;
- }
- else {
- bb2 = bb5 = -e;
- bd2 = bd5 = 0;
- }
- if (bbe >= 0)
- bb2 += bbe;
- else
- bd2 -= bbe;
- bs2 = bb2;
- j = nbits + 1 - bbbits;
- i = bbe + bbbits - nbits;
- if (i < emin) /* denormal */
- j += i - emin;
- bb2 += j;
- bd2 += j;
- i = bb2 < bd2 ? bb2 : bd2;
- if (i > bs2)
- i = bs2;
- if (i > 0) {
- bb2 -= i;
- bd2 -= i;
- bs2 -= i;
- }
- if (bb5 > 0) {
- bs = pow5mult(bs, bb5);
- bb1 = mult(bs, bb);
- Bfree(bb);
- bb = bb1;
- }
- bb2 -= bb0;
- if (bb2 > 0)
- bb = lshift(bb, bb2);
- else if (bb2 < 0)
- rshift(bb, -bb2);
- if (bd5 > 0)
- bd = pow5mult(bd, bd5);
- if (bd2 > 0)
- bd = lshift(bd, bd2);
- if (bs2 > 0)
- bs = lshift(bs, bs2);
- asub = 1;
- inex = STRTOG_Inexhi;
- delta = diff(bb, bd);
- if (delta->wds <= 1 && !delta->x[0])
- break;
- dsign = delta->sign;
- delta->sign = finished = 0;
- L = 0;
- i = cmp(delta, bs);
- if (rd && i <= 0) {
- irv = STRTOG_Normal;
- if ( (finished = dsign ^ (rd&1)) !=0) {
- if (dsign != 0) {
- irv |= STRTOG_Inexhi;
- goto adj1;
- }
- irv |= STRTOG_Inexlo;
- if (rve1 == emin)
- goto adj1;
- for(i = 0, j = nbits; j >= ULbits;
- i++, j -= ULbits) {
- if (rvb->x[i] & ALL_ON)
- goto adj1;
- }
- if (j > 1 && lo0bits(rvb->x + i) < j - 1)
- goto adj1;
- rve = rve1 - 1;
- rvb = set_ones(rvb, rvbits = nbits);
- break;
- }
- irv |= dsign ? STRTOG_Inexlo : STRTOG_Inexhi;
- break;
- }
- if (i < 0) {
- /* Error is less than half an ulp -- check for
- * special case of mantissa a power of two.
- */
- irv = dsign
- ? STRTOG_Normal | STRTOG_Inexlo
- : STRTOG_Normal | STRTOG_Inexhi;
- if (dsign || bbbits > 1 || denorm || rve1 == emin)
- break;
- delta = lshift(delta,1);
- if (cmp(delta, bs) > 0) {
- irv = STRTOG_Normal | STRTOG_Inexlo;
- goto drop_down;
- }
- break;
- }
- if (i == 0) {
- /* exactly half-way between */
- if (dsign) {
- if (denorm && all_on(rvb, rvbits)) {
- /*boundary case -- increment exponent*/
- rvb->wds = 1;
- rvb->x[0] = 1;
- rve = emin + nbits - (rvbits = 1);
- irv = STRTOG_Normal | STRTOG_Inexhi;
- denorm = 0;
- break;
- }
- irv = STRTOG_Normal | STRTOG_Inexlo;
- }
- else if (bbbits == 1) {
- irv = STRTOG_Normal;
- drop_down:
- /* boundary case -- decrement exponent */
- if (rve1 == emin) {
- irv = STRTOG_Normal | STRTOG_Inexhi;
- if (rvb->wds == 1 && rvb->x[0] == 1)
- sudden_underflow = 1;
- break;
- }
- rve -= nbits;
- rvb = set_ones(rvb, rvbits = nbits);
- break;
- }
- else
- irv = STRTOG_Normal | STRTOG_Inexhi;
- if ((bbbits < nbits && !denorm) || !(rvb->x[0] & 1))
- break;
- if (dsign) {
- rvb = increment(rvb);
- j = kmask & (ULbits - (rvbits & kmask));
- if (hi0bits(rvb->x[rvb->wds - 1]) != j)
- rvbits++;
- irv = STRTOG_Normal | STRTOG_Inexhi;
- }
- else {
- if (bbbits == 1)
- goto undfl;
- decrement(rvb);
- irv = STRTOG_Normal | STRTOG_Inexlo;
- }
- break;
- }
- if ((dval(&adj) = ratio(delta, bs)) <= 2.) {
- adj1:
- inex = STRTOG_Inexlo;
- if (dsign) {
- asub = 0;
- inex = STRTOG_Inexhi;
- }
- else if (denorm && bbbits <= 1) {
- undfl:
- rvb->wds = 0;
- rve = emin;
- irv = STRTOG_Underflow | STRTOG_Inexlo;
- break;
- }
- adj0 = dval(&adj) = 1.;
- }
- else {
- adj0 = dval(&adj) *= 0.5;
- if (dsign) {
- asub = 0;
- inex = STRTOG_Inexlo;
- }
- if (dval(&adj) < 2147483647.) {
- L = adj0;
- adj0 -= L;
- switch(rd) {
- case 0:
- if (adj0 >= .5)
- goto inc_L;
- break;
- case 1:
- if (asub && adj0 > 0.)
- goto inc_L;
- break;
- case 2:
- if (!asub && adj0 > 0.) {
- inc_L:
- L++;
- inex = STRTOG_Inexact - inex;
- }
- }
- dval(&adj) = L;
- }
- }
- y = rve + rvbits;
-
- /* adj *= ulp(&rv); */
- /* if (asub) rv -= adj; else rv += adj; */
-
- if (!denorm && rvbits < nbits) {
- rvb = lshift(rvb, j = nbits - rvbits);
- rve -= j;
- rvbits = nbits;
- }
- ab = d2b(dval(&adj), &abe, &abits);
- if (abe < 0)
- rshift(ab, -abe);
- else if (abe > 0)
- ab = lshift(ab, abe);
- rvb0 = rvb;
- if (asub) {
- /* rv -= adj; */
- j = hi0bits(rvb->x[rvb->wds-1]);
- rvb = diff(rvb, ab);
- k = rvb0->wds - 1;
- if (denorm)
- /* do nothing */;
- else if (rvb->wds <= k
- || hi0bits( rvb->x[k]) >
- hi0bits(rvb0->x[k])) {
- /* unlikely; can only have lost 1 high bit */
- if (rve1 == emin) {
- --rvbits;
- denorm = 1;
- }
- else {
- rvb = lshift(rvb, 1);
- --rve;
- --rve1;
- L = finished = 0;
- }
- }
- }
- else {
- rvb = sum(rvb, ab);
- k = rvb->wds - 1;
- if (k >= rvb0->wds
- || hi0bits(rvb->x[k]) < hi0bits(rvb0->x[k])) {
- if (denorm) {
- if (++rvbits == nbits)
- denorm = 0;
- }
- else {
- rshift(rvb, 1);
- rve++;
- rve1++;
- L = 0;
- }
- }
- }
- Bfree(ab);
- Bfree(rvb0);
- if (finished)
- break;
-
- z = rve + rvbits;
- if (y == z && L) {
- /* Can we stop now? */
- tol = dval(&adj) * 5e-16; /* > max rel error */
- dval(&adj) = adj0 - .5;
- if (dval(&adj) < -tol) {
- if (adj0 > tol) {
- irv |= inex;
- break;
- }
- }
- else if (dval(&adj) > tol && adj0 < 1. - tol) {
- irv |= inex;
- break;
- }
- }
- bb0 = denorm ? 0 : trailz(rvb);
- Bfree(bb);
- Bfree(bd);
- Bfree(bs);
- Bfree(delta);
- }
- if (!denorm && (j = nbits - rvbits)) {
- if (j > 0)
- rvb = lshift(rvb, j);
- else
- rshift(rvb, -j);
- rve -= j;
- }
- *exp = rve;
- Bfree(bb);
- Bfree(bd);
- Bfree(bs);
- Bfree(bd0);
- Bfree(delta);
- if (rve > fpi->emax) {
- switch(fpi->rounding & 3) {
- case FPI_Round_near:
- goto huge;
- case FPI_Round_up:
- if (!sign)
- goto huge;
- break;
- case FPI_Round_down:
- if (sign)
- goto huge;
- }
- /* Round to largest representable magnitude */
- Bfree(rvb);
- rvb = 0;
- irv = STRTOG_Normal | STRTOG_Inexlo;
- *exp = fpi->emax;
- b = bits;
- be = b + ((fpi->nbits + 31) >> 5);
- while(b < be)
- *b++ = -1;
- if ((j = fpi->nbits & 0x1f))
- *--be >>= (32 - j);
- goto ret;
- huge:
- rvb->wds = 0;
- irv = STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi;
- SET_ERRNO(ERANGE);
- infnanexp:
- *exp = fpi->emax + 1;
- }
- ret:
- if (denorm) {
- if (sudden_underflow) {
- rvb->wds = 0;
- irv = STRTOG_Underflow | STRTOG_Inexlo;
- SET_ERRNO(ERANGE);
- }
- else {
- irv = (irv & ~STRTOG_Retmask) |
- (rvb->wds > 0 ? STRTOG_Denormal : STRTOG_Zero);
- if (irv & STRTOG_Inexact) {
- irv |= STRTOG_Underflow;
- SET_ERRNO(ERANGE);
- }
- }
- }
- if (se)
- *se = (char *)s;
- if (sign)
- irv |= STRTOG_Neg;
- if (rvb) {
- copybits(bits, nbits, rvb);
- Bfree(rvb);
- }
- return irv;
-}
diff --git a/winsup/mingw/mingwex/gdtoa/strtodnrp.c b/winsup/mingw/mingwex/gdtoa/strtodnrp.c
deleted file mode 100755
index cde674897..000000000
--- a/winsup/mingw/mingwex/gdtoa/strtodnrp.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 2004 by David M. Gay.
-All Rights Reserved
-Based on material in the rest of /netlib/fp/gdota.tar.gz,
-which is copyright (C) 1998, 2000 by Lucent Technologies.
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* This is a variant of strtod that works on Intel ia32 systems */
-/* with the default extended-precision arithmetic -- it does not */
-/* require setting the precision control to 53 bits. */
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-double __strtod (const char *s, char **sp)
-{
- static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
- ULong bits[2];
- Long exp;
- int k;
- union { ULong L[2]; double d; } u;
-
- k = __strtodg(s, sp, &fpi, &exp, bits);
- switch(k & STRTOG_Retmask) {
- case STRTOG_NoNumber:
- case STRTOG_Zero:
- u.L[0] = u.L[1] = 0;
- break;
-
- case STRTOG_Normal:
- u.L[_1] = bits[0];
- u.L[_0] = (bits[1] & ~0x100000) | ((exp + 0x3ff + 52) << 20);
- break;
-
- case STRTOG_Denormal:
- u.L[_1] = bits[0];
- u.L[_0] = bits[1];
- break;
-
- case STRTOG_Infinite:
- u.L[_0] = 0x7ff00000;
- u.L[_1] = 0;
- break;
-
- case STRTOG_NaN:
- u.L[0] = d_QNAN0;
- u.L[1] = d_QNAN1;
- break;
-
- case STRTOG_NaNbits:
- u.L[_0] = 0x7ff00000 | bits[1];
- u.L[_1] = bits[0];
- }
- if (k & STRTOG_Neg)
- u.L[_0] |= 0x80000000L;
- return u.d;
-}
diff --git a/winsup/mingw/mingwex/gdtoa/strtof.c b/winsup/mingw/mingwex/gdtoa/strtof.c
deleted file mode 100755
index c7e35f6d8..000000000
--- a/winsup/mingw/mingwex/gdtoa/strtof.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-float __strtof (const char *s, char **sp)
-{
- static FPI fpi0 = { 24, 1-127-24+1, 254-127-24+1, 1, SI };
- ULong bits[1];
- Long exp;
- int k;
- union { ULong L[1]; float f; } u = { { 0 } };
-#ifdef Honor_FLT_ROUNDS
-#include "gdtoa_fltrnds.h"
-#else
-#define fpi &fpi0
-#endif
-
- k = __strtodg(s, sp, fpi, &exp, bits);
- switch(k & STRTOG_Retmask) {
- case STRTOG_NoNumber:
- case STRTOG_Zero:
- u.L[0] = 0;
- break;
-
- case STRTOG_Normal:
- case STRTOG_NaNbits:
- u.L[0] = (bits[0] & 0x7fffff) | ((exp + 0x7f + 23) << 23);
- break;
-
- case STRTOG_Denormal:
- u.L[0] = bits[0];
- break;
-
- case STRTOG_Infinite:
- u.L[0] = 0x7f800000;
- break;
-
- case STRTOG_NaN:
- u.L[0] = f_QNAN;
- }
- if (k & STRTOG_Neg)
- u.L[0] |= 0x80000000L;
- return u.f;
-}
-
-float __cdecl
-strtof (const char * __restrict__ src, char ** __restrict__ endptr)
- __attribute__((alias("__strtof")));
diff --git a/winsup/mingw/mingwex/gdtoa/strtopx.c b/winsup/mingw/mingwex/gdtoa/strtopx.c
deleted file mode 100755
index c15919689..000000000
--- a/winsup/mingw/mingwex/gdtoa/strtopx.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 2000 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-#undef _0
-#undef _1
-
-/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */
-
-#ifdef IEEE_MC68k
-#define _0 0
-#define _1 1
-#define _2 2
-#define _3 3
-#define _4 4
-#endif
-#ifdef IEEE_8087
-#define _0 4
-#define _1 3
-#define _2 2
-#define _3 1
-#define _4 0
-#endif
-
-typedef union lD {
- UShort L[5];
- long double D;
-} lD;
-
-static int __strtopx (const char *s, char **sp, lD *V)
-{
- static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
- ULong bits[2];
- Long exp;
- int k;
- UShort *L = & (V->L[0]);
-#ifdef Honor_FLT_ROUNDS
-#include "gdtoa_fltrnds.h"
-#else
-#define fpi &fpi0
-#endif
- V->D = 0.0L;
-
- k = __strtodg(s, sp, fpi, &exp, bits);
- switch(k & STRTOG_Retmask) {
- case STRTOG_NoNumber:
- case STRTOG_Zero:
- L[0] = L[1] = L[2] = L[3] = L[4] = 0;
- break;
-
- case STRTOG_Denormal:
- L[_0] = 0;
- goto normal_bits;
-
- case STRTOG_Normal:
- case STRTOG_NaNbits:
- L[_0] = exp + 0x3fff + 63;
- normal_bits:
- L[_4] = (UShort)bits[0];
- L[_3] = (UShort)(bits[0] >> 16);
- L[_2] = (UShort)bits[1];
- L[_1] = (UShort)(bits[1] >> 16);
- break;
-
- case STRTOG_Infinite:
- L[_0] = 0x7fff;
- L[_1] = 0x8000;
- L[_2] = L[_3] = L[_4] = 0;
- break;
-
- case STRTOG_NaN:
- L[0] = ldus_QNAN0;
- L[1] = ldus_QNAN1;
- L[2] = ldus_QNAN2;
- L[3] = ldus_QNAN3;
- L[4] = ldus_QNAN4;
- }
- if (k & STRTOG_Neg)
- L[_0] |= 0x8000;
- return k;
-}
-
-long double __cdecl
-__strtold (const char * __restrict__ src, char ** __restrict__ endptr)
-{
- lD ret;
- ret.D = 0.0L;
- __strtopx(src, endptr, &ret);
- return ret.D;
-}
-
-long double __cdecl
-strtold (const char * __restrict__ src, char ** __restrict__ endptr)
- __attribute__((alias("__strtold")));
-
diff --git a/winsup/mingw/mingwex/gdtoa/sum.c b/winsup/mingw/mingwex/gdtoa/sum.c
deleted file mode 100755
index 8823541ea..000000000
--- a/winsup/mingw/mingwex/gdtoa/sum.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-Bigint *sum (Bigint *a, Bigint *b)
-{
- Bigint *c;
- ULong carry, *xc, *xa, *xb, *xe, y;
-#ifdef Pack_32
- ULong z;
-#endif
-
- if (a->wds < b->wds) {
- c = b; b = a; a = c;
- }
- c = Balloc(a->k);
- c->wds = a->wds;
- carry = 0;
- xa = a->x;
- xb = b->x;
- xc = c->x;
- xe = xc + b->wds;
-#ifdef Pack_32
- do {
- y = (*xa & 0xffff) + (*xb & 0xffff) + carry;
- carry = (y & 0x10000) >> 16;
- z = (*xa++ >> 16) + (*xb++ >> 16) + carry;
- carry = (z & 0x10000) >> 16;
- Storeinc(xc, z, y);
- } while(xc < xe);
- xe += a->wds - b->wds;
- while(xc < xe) {
- y = (*xa & 0xffff) + carry;
- carry = (y & 0x10000) >> 16;
- z = (*xa++ >> 16) + carry;
- carry = (z & 0x10000) >> 16;
- Storeinc(xc, z, y);
- }
-#else
- do {
- y = *xa++ + *xb++ + carry;
- carry = (y & 0x10000) >> 16;
- *xc++ = y & 0xffff;
- } while(xc < xe);
- xe += a->wds - b->wds;
- while(xc < xe) {
- y = *xa++ + carry;
- carry = (y & 0x10000) >> 16;
- *xc++ = y & 0xffff;
- }
-#endif
- if (carry) {
- if (c->wds == c->maxwds) {
- b = Balloc(c->k + 1);
- Bcopy(b, c);
- Bfree(c);
- c = b;
- }
- c->x[c->wds++] = 1;
- }
- return c;
-}
diff --git a/winsup/mingw/mingwex/gdtoa/ulp.c b/winsup/mingw/mingwex/gdtoa/ulp.c
deleted file mode 100755
index bfa9bdeea..000000000
--- a/winsup/mingw/mingwex/gdtoa/ulp.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************
-
-The author of this software is David M. Gay.
-
-Copyright (C) 1998, 1999 by Lucent Technologies
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of Lucent or any of its entities
-not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
-
-****************************************************************/
-
-/* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
-
-#include "gdtoaimp.h"
-
-double ulp (dbl_union *x)
-{
- Long L;
- union _dbl_union a;
-
- L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
-#ifndef Sudden_Underflow
- if (L > 0) {
-#endif
- word0(&a) = L;
- word1(&a) = 0;
-#ifndef Sudden_Underflow
- }
- else {
- L = -L >> Exp_shift;
- if (L < Exp_shift) {
- word0(&a) = 0x80000 >> L;
- word1(&a) = 0;
- }
- else {
- word0(&a) = 0;
- L -= Exp_shift;
- word1(&a) = L >= 31 ? 1 : 1 << (31 - L);
- }
- }
-#endif
- return dval(&a);
-}
diff --git a/winsup/mingw/mingwex/getopt.c b/winsup/mingw/mingwex/getopt.c
deleted file mode 100644
index b26e97c43..000000000
--- a/winsup/mingw/mingwex/getopt.c
+++ /dev/null
@@ -1,784 +0,0 @@
-/*
- * getopt.c
- *
- * $Id$
- *
- * Implementation of the `getopt', `getopt_long' and `getopt_long_only'
- * APIs, for inclusion in the MinGW runtime library.
- *
- * This file is part of the MinGW32 package set.
- *
- * Contributed by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * $Revision$
- * $Author$
- * $Date$
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <getopt.h>
-
-/* Identify how to get the calling program name, for use in messages...
- */
-#ifdef __CYGWIN__
-/*
- * CYGWIN uses this DLL reference...
- */
-# define PROGNAME __progname
-extern char __declspec(dllimport) *__progname;
-#else
-/*
- * ...while elsewhere, we simply use the first argument passed.
- */
-# define PROGNAME *argv
-#endif
-
-/* Initialise the public variables. */
-
-int optind = 1; /* index for first non-option arg */
-int opterr = 1; /* enable built-in error messages */
-
-char *optarg = NULL; /* pointer to current option argument */
-
-#define CHAR char /* argument type selector */
-
-#define getopt_switchar '-' /* option prefix character in argv */
-#define getopt_pluschar '+' /* prefix for POSIX mode in optstring */
-#define getopt_takes_argument ':' /* marker for optarg in optstring */
-#define getopt_arg_assign '=' /* longopt argument field separator */
-#define getopt_unknown '?' /* return code for unmatched option */
-#define getopt_ordered 1 /* return code for ordered non-option */
-
-#define getopt_all_done -1 /* return code to indicate completion */
-
-enum
-{ /* All `getopt' API functions are implemented via calls to the
- * common static function `getopt_parse()'; these `mode' selectors
- * determine the behaviour of `getopt_parse()', to deliver the
- * appropriate result in each case.
- */
- getopt_mode_standard = 0, /* getopt() */
- getopt_mode_long, /* getopt_long() */
- getopt_mode_long_only /* getopt_long_only() */
-};
-
-enum
-{ /* When attempting to match a command line argument to a long form option,
- * these indicate the status of the match.
- */
- getopt_no_match = 0, /* no successful match */
- getopt_abbreviated_match, /* argument is an abbreviation for an option */
- getopt_exact_match /* argument matches the full option name */
-};
-
-int optopt = getopt_unknown; /* return value for option being evaluated */
-
-/* Some BSD applications expect to be able to reinitialise `getopt' parsing
- * by setting a global variable called `optreset'. We provide an obfuscated
- * API, which allows applications to emulate this brain damage; however, any
- * use of this is non-portable, and is strongly discouraged.
- */
-#define optreset __mingw_optreset
-int optreset = 0;
-
-static __inline__
-int getopt_missing_arg( const CHAR *optstring )
-{
- /* Helper function to determine the appropriate return value,
- * for the case where a required option argument is missing.
- */
- if( (*optstring == getopt_pluschar) || (*optstring == getopt_switchar) )
- ++optstring;
- return (*optstring == getopt_takes_argument)
- ? getopt_takes_argument
- : getopt_unknown;
-}
-
-/* `complain' macro facilitates the generation of simple built-in
- * error messages, displayed on various fault conditions, provided
- * `opterr' is non-zero.
- */
-#define complain( MSG, ARG ) if( opterr ) \
- fprintf( stderr, "%s: "MSG"\n", PROGNAME, ARG )
-
-static __inline__
-int getopt_argerror( int mode, char *fmt, CHAR *prog, struct option *opt, int retval )
-{
- /* Helper function, to generate more complex built-in error
- * messages, for invalid arguments to long form options ...
- */
- if( opterr )
- {
- /* ... but, displayed only if `opterr' is non-zero.
- */
- char flag[] = "--";
- if( mode != getopt_mode_long )
- /*
- * only display one hyphen, for implicit long form options,
- * improperly resolved by `getopt_long_only()'.
- */
- flag[1] = 0;
- /*
- * always preface the program name ...
- */
- fprintf( stderr, "%s: ", prog );
- /*
- * to the appropriate, option specific message.
- */
- fprintf( stderr, fmt, flag, opt->name );
- }
- /* Whether displaying the message, or not, always set `optopt'
- * to identify the faulty option ...
- */
- optopt = opt->val;
- /*
- * and return the `invalid option' indicator.
- */
- return retval;
-}
-
-/* `getopt_conventions' establish behavioural options, to control
- * the operation of `getopt_parse()', e.g. to select between POSIX
- * and GNU style argument parsing behaviour.
- */
-#define getopt_set_conventions 0x1000
-#define getopt_posixly_correct 0x0010
-
-static __inline__
-int getopt_conventions( int flags )
-{
- static int conventions = 0;
-
- if( (conventions == 0) && ((flags & getopt_set_conventions) == 0) )
- {
- /* default conventions have not yet been established;
- * initialise them now!
- */
- conventions = getopt_set_conventions;
- if( (flags == getopt_pluschar) || (getenv( "POSIXLY_CORRECT" ) != NULL) )
- conventions |= getopt_posixly_correct;
- }
-
- else if( flags & getopt_set_conventions )
- /*
- * default conventions may have already been established,
- * but this is a specific request to augment them.
- */
- conventions |= flags;
-
- /* in any event, return the currently established conventions.
- */
- return conventions;
-}
-
-static __inline__
-int is_switchar( CHAR flag )
-{
- /* A simple helper function, used to identify the switch character
- * introducing an optional command line argument.
- */
- return flag == getopt_switchar;
-}
-
-static __inline__
-const CHAR *getopt_match( CHAR lookup, const CHAR *opt_string )
-{
- /* Helper function, used to identify short form options.
- */
- if( (*opt_string == getopt_pluschar) || (*opt_string == getopt_switchar) )
- ++opt_string;
- if( *opt_string == getopt_takes_argument )
- ++opt_string;
- do if( lookup == *opt_string ) return opt_string;
- while( *++opt_string );
- return NULL;
-}
-
-static __inline__
-int getopt_match_long( const CHAR *nextchar, const CHAR *optname )
-{
- /* Helper function, used to identify potential matches for
- * long form options.
- */
- CHAR matchchar;
- while( (matchchar = *nextchar++) && (matchchar == *optname) )
- /*
- * skip over initial substring which DOES match.
- */
- ++optname;
-
- if( matchchar )
- {
- /* did NOT match the entire argument to an initial substring
- * of a defined option name ...
- */
- if( matchchar != getopt_arg_assign )
- /*
- * ... and didn't stop at an `=' internal field separator,
- * so this is NOT a possible match.
- */
- return getopt_no_match;
-
- /* DID stop at an `=' internal field separator,
- * so this IS a possible match, and what follows is an
- * argument to the possibly matched option.
- */
- optarg = (char *)(nextchar);
- }
- return *optname
- /*
- * if we DIDN'T match the ENTIRE text of the option name,
- * then it's a possible abbreviated match ...
- */
- ? getopt_abbreviated_match
- /*
- * but if we DID match the entire option name,
- * then it's a DEFINITE EXACT match.
- */
- : getopt_exact_match;
-}
-
-static __inline__
-int getopt_resolved( int mode, int argc, CHAR *const *argv, int *argind,
-struct option *opt, int index, int *retindex, const CHAR *optstring )
-{
- /* Helper function to establish appropriate return conditions,
- * on resolution of a long form option.
- */
- if( retindex != NULL )
- *retindex = index;
-
- /* On return, `optind' should normally refer to the argument, if any,
- * which follows the current one; it is convenient to set this, before
- * checking for the presence of any `optarg'.
- */
- optind = *argind + 1;
-
- if( optarg && (opt[index].has_arg == no_argument) )
- /*
- * it is an error for the user to specify an option specific argument
- * with an option which doesn't expect one!
- */
- return getopt_argerror( mode, "option `%s%s' doesn't accept an argument\n",
- PROGNAME, opt + index, getopt_unknown );
-
- else if( (optarg == NULL) && (opt[index].has_arg == required_argument) )
- {
- /* similarly, it is an error if no argument is specified
- * with an option which requires one ...
- */
- if( optind < argc )
- /*
- * ... except that the requirement may be satisfied from
- * the following command line argument, if any ...
- */
- optarg = argv[*argind = optind++];
-
- else
- /* so fail this case, only if no such argument exists!
- */
- return getopt_argerror( mode, "option `%s%s' requires an argument\n",
- PROGNAME, opt + index, getopt_missing_arg( optstring ) );
- }
-
- /* when the caller has provided a return buffer ...
- */
- if( opt[index].flag != NULL )
- {
- /* ... then we place the proper return value there,
- * and return a status code of zero ...
- */
- *(opt[index].flag) = opt[index].val;
- return 0;
- }
- /* ... otherwise, the return value becomes the status code.
- */
- return opt[index].val;
-}
-
-static __inline__
-int getopt_verify( const CHAR *nextchar, const CHAR *optstring )
-{
- /* Helper function, called by getopt_parse() when invoked
- * by getopt_long_only(), to verify when an unmatched or an
- * ambiguously matched long form option string is valid as
- * a short form option specification.
- */
- if( ! (nextchar && *nextchar && optstring && *optstring) )
- /*
- * There are no characters to be matched, or there are no
- * valid short form option characters to which they can be
- * matched, so this can never be valid.
- */
- return 0;
-
- while( *nextchar )
- {
- /* For each command line character in turn ...
- */
- const CHAR *test;
- if( (test = getopt_match( *nextchar++, optstring )) == NULL )
- /*
- * ... there is no short form option to match the current
- * candidate, so the entire argument fails.
- */
- return 0;
-
- if( test[1] == getopt_takes_argument )
- /*
- * The current candidate is valid, and it matches an option
- * which takes an argument, so this command line argument is
- * a valid short form option specification; accept it.
- */
- return 1;
- }
- /* If we get to here, then every character in the command line
- * argument was valid as a short form option; accept it.
- */
- return 1;
-}
-
-static
-#define getopt_std_args int argc, CHAR *const argv[], const CHAR *optstring
-int getopt_parse( int mode, getopt_std_args, ... )
-{
- /* Common core implementation for ALL `getopt' functions.
- */
- static int argind = 0;
- static int optbase = 0;
- static const CHAR *nextchar = NULL;
- static int optmark = 0;
-
- if( (optreset |= (optind < 1)) || (optind < optbase) )
- {
- /* POSIX does not prescribe any definitive mechanism for restarting
- * a `getopt' scan, but some applications may require such capability.
- * We will support it, by allowing the caller to adjust the value of
- * `optind' downwards, (nominally setting it to zero). Since POSIX
- * wants `optind' to have an initial value of one, but we want all
- * of our internal place holders to be initialised to zero, when we
- * are called for the first time, we will handle such a reset by
- * adjusting all of the internal place holders to one less than
- * the adjusted `optind' value, (but never to less than zero).
- */
- if( optreset )
- {
- /* User has explicitly requested reinitialisation...
- * We need to reset `optind' to it's normal initial value of 1,
- * to avoid a potential infinitely recursive loop; by doing this
- * up front, we also ensure that the remaining place holders
- * will be correctly reinitialised to no less than zero.
- */
- optind = 1;
-
- /* We also need to clear the `optreset' request...
- */
- optreset = 0;
- }
-
- /* Now, we may safely reinitialise the internal place holders, to
- * one less than `optind', without fear of making them negative.
- */
- optmark = optbase = argind = optind - 1;
- nextchar = NULL;
- }
-
- /* From a POSIX perspective, the following is `undefined behaviour';
- * we implement it thus, for compatibility with GNU and BSD getopt.
- */
- else if( optind > (argind + 1) )
- {
- /* Some applications expect to be able to manipulate `optind',
- * causing `getopt' to skip over one or more elements of `argv';
- * POSIX doesn't require us to support this brain-damaged concept;
- * (indeed, POSIX defines no particular behaviour, in the event of
- * such usage, so it must be considered a bug for an application
- * to rely on any particular outcome); nonetheless, Mac-OS-X and
- * BSD actually provide *documented* support for this capability,
- * so we ensure that our internal place holders keep track of
- * external `optind' increments; (`argind' must lag by one).
- */
- argind = optind - 1;
-
- /* When `optind' is misused, in this fashion, we also abandon any
- * residual text in the argument we had been parsing; this is done
- * without any further processing of such abandoned text, assuming
- * that the caller is equipped to handle it appropriately.
- */
- nextchar = NULL;
- }
-
- if( nextchar && *nextchar )
- {
- /* we are parsing a standard, or short format, option argument ...
- */
- const CHAR *optchar;
- if( (optchar = getopt_match( optopt = *nextchar++, optstring )) != NULL )
- {
- /* we have identified it as valid ...
- */
- if( optchar[1] == getopt_takes_argument )
- {
- /* and determined that it requires an associated argument ...
- */
- if( ! *(optarg = (char *)(nextchar)) )
- {
- /* the argument is NOT attached ...
- */
- if( optchar[2] == getopt_takes_argument )
- /*
- * but this GNU extension marks it as optional,
- * so we don't provide one on this occasion.
- */
- optarg = NULL;
-
- /* otherwise this option takes a mandatory argument,
- * so, provided there is one available ...
- */
- else if( (argc - argind) > 1 )
- /*
- * we take the following command line argument,
- * as the appropriate option argument.
- */
- optarg = argv[++argind];
-
- /* but if no further argument is available,
- * then there is nothing we can do, except for
- * issuing the requisite diagnostic message.
- */
- else
- {
- complain( "option requires an argument -- %c", optopt );
- return getopt_missing_arg( optstring );
- }
- }
- optind = argind + 1;
- nextchar = NULL;
- }
- else
- optarg = NULL;
- optind = (nextchar && *nextchar) ? argind : argind + 1;
- return optopt;
- }
- /* if we didn't find a valid match for the specified option character,
- * then we fall through to here, so take appropriate diagnostic action.
- */
- if( mode == getopt_mode_long_only )
- {
- complain( "unrecognised option `-%s'", --nextchar );
- nextchar = NULL;
- optopt = 0;
- }
- else
- complain( "invalid option -- %c", optopt );
- optind = (nextchar && *nextchar) ? argind : argind + 1;
- return getopt_unknown;
- }
-
- if( optmark > optbase )
- {
- /* This can happen, in GNU parsing mode ONLY, when we have
- * skipped over non-option arguments, and found a subsequent
- * option argument; in this case we permute the arguments.
- */
- int index;
- /*
- * `optspan' specifies the number of contiguous arguments
- * which are spanned by the current option, and so must be
- * moved together during permutation.
- */
- int optspan = argind - optmark + 1;
- /*
- * we use `this_arg' to store these temporarily.
- */
- CHAR *this_arg[optspan];
- /*
- * we cannot manipulate `argv' directly, since the `getopt'
- * API prototypes it as `read-only'; this cast to `arglist'
- * allows us to work around that restriction.
- */
- CHAR **arglist = (char **)(argv);
-
- /* save temporary copies of the arguments which are associated
- * with the current option ...
- */
- for( index = 0; index < optspan; ++index )
- this_arg[index] = arglist[optmark + index];
-
- /* move all preceding non-option arguments to the right,
- * overwriting these saved arguments, while making space
- * to replace them in their permuted location.
- */
- for( --optmark; optmark >= optbase; --optmark )
- arglist[optmark + optspan] = arglist[optmark];
-
- /* restore the temporarily saved option arguments to
- * their permuted location.
- */
- for( index = 0; index < optspan; ++index )
- arglist[optbase + index] = this_arg[index];
-
- /* adjust `optbase', to account for the relocated option.
- */
- optbase += optspan;
- }
-
- else
- /* no permutation occurred ...
- * simply adjust `optbase' for all options parsed so far.
- */
- optbase = argind + 1;
-
- /* enter main parsing loop ...
- */
- while( argc > ++argind )
- {
- /* inspect each argument in turn, identifying possible options ...
- */
- if( is_switchar( *(nextchar = argv[optmark = argind]) ) && *++nextchar )
- {
- /* we've found a candidate option argument ... */
-
- if( is_switchar( *nextchar ) )
- {
- /* it's a double hyphen argument ... */
-
- const CHAR *refchar = nextchar;
- if( *++refchar )
- {
- /* and it looks like a long format option ...
- * `getopt_long' mode must be active to accept it as such,
- * `getopt_long_only' also qualifies, but we must downgrade
- * it to force explicit handling as a long format option.
- */
- if( mode >= getopt_mode_long )
- {
- nextchar = refchar;
- mode = getopt_mode_long;
- }
- }
- else
- {
- /* this is an explicit `--' end of options marker, so wrap up now!
- */
- if( optmark > optbase )
- {
- /* permuting the argument list as necessary ...
- * (note use of `this_arg' and `arglist', as above).
- */
- CHAR *this_arg = argv[optmark];
- CHAR **arglist = (CHAR **)(argv);
-
- /* move all preceding non-option arguments to the right ...
- */
- do arglist[optmark] = arglist[optmark - 1];
- while( optmark-- > optbase );
-
- /* reinstate the `--' marker, in its permuted location.
- */
- arglist[optbase] = this_arg;
- }
- /* ... before finally bumping `optbase' past the `--' marker,
- * and returning the `all done' completion indicator.
- */
- optind = ++optbase;
- return getopt_all_done;
- }
- }
- else if( mode < getopt_mode_long_only )
- {
- /* it's not an explicit long option, and `getopt_long_only' isn't active,
- * so we must explicitly try to match it as a short option.
- */
- mode = getopt_mode_standard;
- }
-
- if( mode >= getopt_mode_long )
- {
- /* the current argument is a long form option, (either explicitly,
- * introduced by a double hyphen, or implicitly because we were called
- * by `getopt_long_only'); this is where we parse it.
- */
- int lookup;
- int matched = -1;
-
- /* we need to fetch the `extra' function arguments, which are
- * specified for the `getopt_long' APIs.
- */
- va_list refptr;
- va_start( refptr, optstring );
- struct option *longopts = va_arg( refptr, struct option * );
- int *optindex = va_arg( refptr, int * );
- va_end( refptr );
-
- /* ensuring that `optarg' does not inherit any junk, from parsing
- * preceding arguments ...
- */
- optarg = NULL;
- for( lookup = 0; longopts && longopts[lookup].name; ++lookup )
- {
- /* scan the list of defined long form options ...
- */
- switch( getopt_match_long( nextchar, longopts[lookup].name ) )
- {
- /* looking for possible matches for the current argument.
- */
- case getopt_exact_match:
- /*
- * when an exact match is found,
- * return it immediately, setting `nextchar' to NULL,
- * to ensure we don't mistakenly try to match any
- * subsequent characters as short form options.
- */
- nextchar = NULL;
- return getopt_resolved( mode, argc, argv, &argind,
- longopts, lookup, optindex, optstring );
-
- case getopt_abbreviated_match:
- /*
- * but, for a partial (initial substring) match ...
- */
- if( matched >= 0 )
- {
- /* if this is not the first, then we have an ambiguity ...
- */
- if( (mode == getopt_mode_long_only)
- /*
- * However, in the case of getopt_long_only(), if
- * the entire ambiguously matched string represents
- * a valid short option specification, then we may
- * proceed to interpret it as such.
- */
- && getopt_verify( nextchar, optstring ) )
- return getopt_parse( mode, argc, argv, optstring );
-
- /* If we get to here, then the ambiguously matched
- * partial long option isn't valid for short option
- * evaluation; reset parser context to resume with
- * the following command line argument, diagnose
- * ambiguity, and bail out.
- */
- optopt = 0;
- nextchar = NULL;
- optind = argind + 1;
- complain( "option `%s' is ambiguous", argv[argind] );
- return getopt_unknown;
- }
- /* otherwise just note that we've found a possible match ...
- */
- matched = lookup;
- }
- }
- if( matched >= 0 )
- {
- /* if we get to here, then we found exactly one partial match,
- * so return it, as for an exact match.
- */
- nextchar = NULL;
- return getopt_resolved( mode, argc, argv, &argind,
- longopts, matched, optindex, optstring );
- }
- /* if here, then we had what SHOULD have been a long form option,
- * but it is unmatched ...
- */
- if( (mode < getopt_mode_long_only)
- /*
- * ... although paradoxically, `mode == getopt_mode_long_only'
- * allows us to still try to match it as a short form option.
- */
- || (getopt_verify( nextchar, optstring ) == 0) )
- {
- /* When it cannot be matched, reset the parsing context to
- * resume from the next argument, diagnose the failed match,
- * and bail out.
- */
- optopt = 0;
- nextchar = NULL;
- optind = argind + 1;
- complain( "unrecognised option `%s'", argv[argind] );
- return getopt_unknown;
- }
- }
- /* fall through to handle standard short form options...
- * when the option argument format is neither explictly identified
- * as long, nor implicitly matched as such, and the argument isn't
- * just a bare hyphen, (which isn't an option), then we make one
- * recursive call to explicitly interpret it as short format.
- */
- if( *nextchar )
- return getopt_parse( mode, argc, argv, optstring );
- }
- /* if we get to here, then we've parsed a non-option argument ...
- * in GNU compatibility mode, we step over it, so we can permute
- * any subsequent option arguments, but ...
- */
- if( *optstring == getopt_switchar )
- {
- /* if `optstring' begins with a `-' character, this special
- * GNU specific behaviour requires us to return the non-option
- * arguments in strict order, as pseudo-arguments to a special
- * option, with return value defined as `getopt_ordered'.
- */
- nextchar = NULL;
- optind = argind + 1;
- optarg = argv[argind];
- return getopt_ordered;
- }
- if( getopt_conventions( *optstring ) & getopt_posixly_correct )
- /*
- * otherwise ...
- * for POSIXLY_CORRECT behaviour, or if `optstring' begins with
- * a `+' character, then we break out of the parsing loop, so that
- * the scan ends at the current argument, with no permutation.
- */
- break;
- }
- /* fall through when all arguments have been evaluated,
- */
- optind = optbase;
- return getopt_all_done;
-}
-
-/* All three public API entry points are trivially defined,
- * in terms of the internal `getopt_parse' function.
- */
-int getopt( getopt_std_args )
-{
- return getopt_parse( getopt_mode_standard, argc, argv, optstring );
-}
-
-int getopt_long( getopt_std_args, const struct option *opts, int *index )
-{
- return getopt_parse( getopt_mode_long, argc, argv, optstring, opts, index );
-}
-
-int getopt_long_only( getopt_std_args, const struct option *opts, int *index )
-{
- return getopt_parse( getopt_mode_long_only, argc, argv, optstring, opts, index );
-}
-
-#ifdef __weak_alias
-/*
- * These Microsnot style uglified aliases are provided for compatibility
- * with the previous MinGW implementation of the getopt API.
- */
-__weak_alias( getopt, _getopt )
-__weak_alias( getopt_long, _getopt_long )
-__weak_alias( getopt_long_only, _getopt_long_only )
-#endif
-
-/* $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/gettimeofday.c b/winsup/mingw/mingwex/gettimeofday.c
deleted file mode 100755
index 194cf0499..000000000
--- a/winsup/mingw/mingwex/gettimeofday.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * gettimeofday
- * Implementation according to:
- * The Open Group Base Specifications Issue 6
- * IEEE Std 1003.1, 2004 Edition
- */
-
-/*
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Contributed by:
- * Danny Smith <dannysmith@users.sourceforge.net>
- */
-
-#include <sys/time.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-/* Offset between 1/1/1601 and 1/1/1970 in 100 nanosec units */
-#define _W32_FT_OFFSET (116444736000000000ULL)
-
-
-int __cdecl gettimeofday(struct timeval *__restrict__ tp,
- void *__restrict__ tzp __attribute__((unused)))
- {
- union {
- unsigned long long ns100; /*time since 1 Jan 1601 in 100ns units */
- FILETIME ft;
- } _now;
-
- if(tp)
- {
- GetSystemTimeAsFileTime (&_now.ft);
- tp->tv_usec=(long)((_now.ns100 / 10ULL) % 1000000ULL );
- tp->tv_sec= (long)((_now.ns100 - _W32_FT_OFFSET) / 10000000ULL);
- }
- /* Always return 0 as per Open Group Base Specifications Issue 6.
- Do not set errno on error. */
- return 0;
-}
-
diff --git a/winsup/mingw/mingwex/imaxabs.c b/winsup/mingw/mingwex/imaxabs.c
deleted file mode 100644
index b643ceab6..000000000
--- a/winsup/mingw/mingwex/imaxabs.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- This source code was extracted from the Q8 package created and
- placed in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E).
-
- This particular implementation requires the matching <inttypes.h>.
-*/
-
-#include <inttypes.h>
-
-intmax_t
-imaxabs (intmax_t _j)
- { return _j >= 0 ? _j : -_j; }
-
-long long __attribute__ ((alias ("imaxabs"))) llabs (long long);
diff --git a/winsup/mingw/mingwex/imaxdiv.c b/winsup/mingw/mingwex/imaxdiv.c
deleted file mode 100644
index 6acfcf6cb..000000000
--- a/winsup/mingw/mingwex/imaxdiv.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- This source code was extracted from the Q8 package created and
- placed in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
- last edit: 1999/11/05 gwyn@arl.mil
-
-
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E).
-
-*/
-
-#include <inttypes.h>
-
-imaxdiv_t
-imaxdiv(intmax_t numer, intmax_t denom)
-{
- imaxdiv_t result;
- result.quot = numer / denom;
- result.rem = numer % denom;
- return result;
-}
-
-long long __attribute__ ((alias ("imaxdiv")))
-lldiv (long long, long long);
diff --git a/winsup/mingw/mingwex/isblank.c b/winsup/mingw/mingwex/isblank.c
deleted file mode 100755
index 1dc1246d2..000000000
--- a/winsup/mingw/mingwex/isblank.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#define __NO_CTYPE_LINES
-#include <ctype.h>
-
-int __cdecl isblank (int c)
-{return (_isctype(c, _BLANK) || c == '\t');}
diff --git a/winsup/mingw/mingwex/iswblank.c b/winsup/mingw/mingwex/iswblank.c
deleted file mode 100755
index 316168940..000000000
--- a/winsup/mingw/mingwex/iswblank.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#define __NO_CTYPE_LINES
-#include <wctype.h>
-
-int __cdecl iswblank (wint_t wc)
- {return (iswctype(wc, _BLANK) || wc == L'\t');}
diff --git a/winsup/mingw/mingwex/lltoa.c b/winsup/mingw/mingwex/lltoa.c
deleted file mode 100644
index 28248a834..000000000
--- a/winsup/mingw/mingwex/lltoa.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <stdlib.h>
-char* lltoa(long long _n, char * _c, int _i)
- { return _i64toa (_n, _c, _i); }
diff --git a/winsup/mingw/mingwex/lltow.c b/winsup/mingw/mingwex/lltow.c
deleted file mode 100644
index cdf45b742..000000000
--- a/winsup/mingw/mingwex/lltow.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <stdlib.h>
-wchar_t* lltow(long long _n, wchar_t * _w, int _i)
- { return _i64tow (_n, _w, _i); }
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_mconf.h b/winsup/mingw/mingwex/math/cephes_mconf.h
deleted file mode 100644
index 3733d983f..000000000
--- a/winsup/mingw/mingwex/math/cephes_mconf.h
+++ /dev/null
@@ -1,402 +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
-
-typedef union uLD { const unsigned short sh[6]; long double ld; } uLD;
-typedef union uD { const unsigned short sh[4]; double d; } uD;
-
-#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 uD *p;
-int n;
-{
-register double y;
-
-y = p->d;
-p++;
-do
- {
- y = y * x + p->d;
- 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 uD *p;
-int n;
-{
-register double y;
-
-n -= 1;
-y = x + p->d;
-p++;
-do
- {
- y = y * x + p->d;
- 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 uLD *p;
-int n;
-{
-register long double y;
-
-y = p->ld;
-p++;
-do
- {
- y = y * x + p->ld;
- 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 uLD *p;
-int n;
-{
-register long double y;
-
-n -= 1;
-y = x + p->ld;
-p++;
-do
- {
- y = y * x + p->ld;
- 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 3f9b2b9f3..000000000
--- a/winsup/mingw/mingwex/math/erfl.c
+++ /dev/null
@@ -1,296 +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 uLD 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 uLD Q[] = {
-{ { 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 uLD 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 uLD S[] = {
-{ { 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 uLD 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 uLD U[] = {
-{ { 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 4b974ba01..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) || __isnanf (_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 e4a67bcde..000000000
--- a/winsup/mingw/mingwex/math/lgamma.c
+++ /dev/null
@@ -1,368 +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 uD A[] = {
-{ { 0x6661,0x2733,0x9850,0x3f4a } },
-{ { 0xe943,0xb580,0x7fbd,0xbf43 } },
-{ { 0x5ebb,0x20dc,0x019f,0x3f4a } },
-{ { 0xa5a1,0x16b0,0xc16c,0xbf66 } },
-{ { 0x554b,0x5555,0x5555,0x3fb5 } }
-};
-static const uD 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 uD C[] = {
-{ { 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 union
-{
- unsigned short s[4];
- double d;
-} ls2p = {{0xbeb5,0xc864,0x67f1,0x3fed}};
-#define LS2PI (ls2p.d)
-#define MAXLGM 2.556348e305
-/* log (pi) */
-static const union
-{
- unsigned short s[4];
- double d;
-} lpi = {{0xa1bd,0x48e7,0x50d0,0x3ff2}};
-#define LOGPI (lpi.d)
-#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 union
-{
- unsigned short s[4];
- double d;
-} ls2p = {{0x3fed,0x67f1,0xc864,0xbeb5}};
-#define LS2PI ls2p.d
-#define MAXLGM 2.556348e305
-/* log (pi) */
-static const union
-{
- unsigned short s[4];
- double d;
-} lpi = {{0x3ff2, 0x50d0, 0x48e7, 0xa1bd}};
-#define LOGPI (lpi.d)
-#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 54631fc5d..000000000
--- a/winsup/mingw/mingwex/math/lgammal.c
+++ /dev/null
@@ -1,415 +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 uLD 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 uLD 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 uLD 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 uLD 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 uLD C[] = {
-{ { 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/log10f.S b/winsup/mingw/mingwex/math/log10f.S
deleted file mode 100644
index 64838143a..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 46f6b980c..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 12e223c8c..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 b5b1acb7e..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 158d8ae58..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 68e7fc7f5..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 900e26ded..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 0ad56966e..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 d59fe580d..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 75a282fea..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_generic.c b/winsup/mingw/mingwex/math/lround_generic.c
deleted file mode 100644
index e0056a665..000000000
--- a/winsup/mingw/mingwex/math/lround_generic.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * lround_generic.c
- *
- * $Id$
- *
- * Provides a generic implementation for the `lround()', `lroundf()',
- * `lroundl()', `llround()', `llroundf()' and `llroundl()' functions;
- * compile with `-D FUNCTION=name', with `name' set to each of these
- * six in turn, to create separate object files for each of the six
- * functions.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-#ifndef FUNCTION
-/*
- * Normally specified with `-D FUNCTION=name', on the command line.
- * Valid FUNCTION names are `lround', `lroundf', `lroundl', `llround'
- * `llroundf' and `llroundl'; specifying anything else will most likely
- * cause a compilation error. If user did not specify an appropriate
- * FUNCTION name, default to `lround'.
- */
-#define FUNCTION lround
-#endif
-
-#include "round_internal.h"
-
-#include <limits.h>
-#include <errno.h>
-
-/* Generic implementation.
- * The user is required to specify the FUNCTION name;
- * the RETURN_TYPE and INPUT_TYPE macros resolve to appropriate
- * type declarations, to match the selected FUNCTION prototype,
- * while RETURN_MAX and RETURN_MIN map to the correspondingly
- * appropriate limits.h manifest values, to establish the
- * valid range for the RETURN_TYPE.
- */
-RETURN_TYPE FUNCTION( INPUT_TYPE x )
-{
- if( !isfinite( x ) || !isfinite( x = round_internal( x ) )
- || (x > MAX_RETURN_VALUE) || (x < MIN_RETURN_VALUE) )
- /*
- * Undefined behaviour...
- * POSIX requires us to report a domain error; ANSI C99 says we
- * _may_ report a range error, and previous MinGW implementation
- * set `errno = ERANGE' here; we change that, conforming to the
- * stricter requiremment of the POSIX standard.
- */
- errno = EDOM;
-
- return (RETURN_TYPE)(x);
-}
-
-/* $RCSfile$$Revision$: end of file */
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 75e6f7dbe..000000000
--- a/winsup/mingw/mingwex/math/powl.c
+++ /dev/null
@@ -1,803 +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 uLD 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 uLD Q[] = {
-{ { 0x6307,0xa469,0x3b33,0xa800,0x4001, XPD } },
-{ { 0xfec2,0x62d7,0xa51c,0x8666,0x4002, XPD } },
-{ { 0xda32,0xd072,0xa5d7,0x8666,0x4001, XPD } }
-};
-static const uLD 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 uLD 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 uLD 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) (A[(k)].ld)
-#define doubb(k) (B[(k)].ld)
-#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_generic.c b/winsup/mingw/mingwex/math/round_generic.c
deleted file mode 100644
index b3e0f2608..000000000
--- a/winsup/mingw/mingwex/math/round_generic.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * round_generic.c
- *
- * $Id$
- *
- * Provides a generic implementation for the `round()', `roundf()'
- * and `roundl()' functions; compile with `-D FUNCTION=name', with
- * `name' set to each of these three in turn, to create separate
- * object files for each of the three functions.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-#ifndef FUNCTION
-/*
- * Normally specified with `-D FUNCTION=name', on the command line.
- * Valid FUNCTION names are `round', `roundf' and `roundl'; specifying
- * anything else will most likely cause a compilation error. If user
- * did not specify any FUNCTION name, default to `round'.
- */
-#define FUNCTION round
-#endif
-
-#include "round_internal.h"
-
-/* Generic implementation.
- * The user is required to specify the FUNCTION name;
- * the RETURN_TYPE and INPUT_TYPE macros resolve to appropriate
- * type declarations, to match the selected FUNCTION prototype.
- */
-RETURN_TYPE FUNCTION( INPUT_TYPE x )
-{
- /* Round to nearest integer, away from zero for half-way.
- *
- * We split it with the `round_internal()' function in
- * a private header file, so that it may be shared by this,
- * `lround()' and `llround()' implementations.
- */
- return isfinite( x ) ? round_internal( x ) : x;
-}
-
-/* $RCSfile$$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/math/round_internal.h b/winsup/mingw/mingwex/math/round_internal.h
deleted file mode 100644
index bb3c5ad23..000000000
--- a/winsup/mingw/mingwex/math/round_internal.h
+++ /dev/null
@@ -1,155 +0,0 @@
-#ifndef _ROUND_INTERNAL_H
-/*
- * round_internal.h
- *
- * $Id$
- *
- * Provides a generic implementation of the numerical rounding
- * algorithm, which is shared by all functions in the `round()',
- * `lround()' and `llround()' families.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-#define _ROUND_INTERNAL_H
-
-#include <math.h>
-#include <fenv.h>
-
-#define TYPE_PASTE( NAME, TYPE ) NAME##TYPE
-
-#define INPUT_TYPE INPUT_TYPEDEF( FUNCTION )
-#define INPUT_TYPEDEF( FUNCTION ) TYPE_PASTE( FUNCTION, _input_type )
-/*
- * The types for the formal parameter, to each of the derived functions.
- */
-#define round_input_type double
-#define roundf_input_type float
-#define roundl_input_type long double
-
-#define lround_input_type double
-#define lroundf_input_type float
-#define lroundl_input_type long double
-
-#define llround_input_type double
-#define llroundf_input_type float
-#define llroundl_input_type long double
-
-#define RETURN_TYPE RETURN_TYPEDEF( FUNCTION )
-#define RETURN_TYPEDEF( FUNCTION ) TYPE_PASTE( FUNCTION, _return_type )
-/*
- * The types for the return value, from each of the derived functions.
- */
-#define round_return_type double
-#define roundf_return_type float
-#define roundl_return_type long double
-
-#define lround_return_type long
-#define lroundf_return_type long
-#define lroundl_return_type long
-
-#define llround_return_type long long
-#define llroundf_return_type long long
-#define llroundl_return_type long long
-
-#define MAX_RETURN_VALUE RETURN_MAX( FUNCTION )
-#define RETURN_MAX( FUNCTION ) TYPE_PASTE( FUNCTION, _return_max )
-/*
- * The maximum values which may be returned by each of the derived functions
- * in the `lround' or the `llround' families.
- */
-#define lround_return_max LONG_MAX
-#define lroundf_return_max LONG_MAX
-#define lroundl_return_max LONG_MAX
-
-#define llround_return_max LLONG_MAX
-#define llroundf_return_max LLONG_MAX
-#define llroundl_return_max LLONG_MAX
-
-#define MIN_RETURN_VALUE RETURN_MIN( FUNCTION )
-#define RETURN_MIN( FUNCTION ) TYPE_PASTE( FUNCTION, _return_min )
-/*
- * The minimum values which may be returned by each of the derived functions
- * in the `lround' or the `llround' families.
- */
-#define lround_return_min LONG_MIN
-#define lroundf_return_min LONG_MIN
-#define lroundl_return_min LONG_MIN
-
-#define llround_return_min LLONG_MIN
-#define llroundf_return_min LLONG_MIN
-#define llroundl_return_min LLONG_MIN
-
-#define REF_VALUE( VALUE ) REF_TYPE( FUNCTION, VALUE )
-#define REF_TYPE( FUNC, VAL ) TYPE_PASTE( FUNC, _ref )( VAL )
-/*
- * Macros for expressing constant values of the appropriate data type,
- * for use in each of the derived functions.
- */
-#define round_ref( VALUE ) VALUE
-#define lround_ref( VALUE ) VALUE
-#define llround_ref( VALUE ) VALUE
-
-#define roundl_ref( VALUE ) TYPE_PASTE( VALUE, L )
-#define lroundl_ref( VALUE ) TYPE_PASTE( VALUE, L )
-#define llroundl_ref( VALUE ) TYPE_PASTE( VALUE, L )
-
-#define roundf_ref( VALUE ) TYPE_PASTE( VALUE, F )
-#define lroundf_ref( VALUE ) TYPE_PASTE( VALUE, F )
-#define llroundf_ref( VALUE ) TYPE_PASTE( VALUE, F )
-
-static __inline__
-INPUT_TYPE __attribute__(( always_inline )) round_internal( INPUT_TYPE x )
-#define ROUND_MODES ( FE_TONEAREST | FE_UPWARD | FE_DOWNWARD | FE_TOWARDZERO )
-{
- /* Generic helper function, for rounding of the input parameter value to
- * the nearest integer value.
- */
- INPUT_TYPE z;
- unsigned short saved_CW, tmp_required_CW;
-
- /* Rounding method suggested by Danny Smith <dannysmith@users.sf.net>
- *
- * Save the FPU control word state, set rounding mode TONEAREST, round the
- * input value, then restore the original FPU control word state.
- */
- __asm__( "fnstcw %0;" : "=m"( saved_CW ));
- tmp_required_CW = ( saved_CW & ~ROUND_MODES ) | FE_TONEAREST;
- __asm__( "fldcw %0;" :: "m"( tmp_required_CW ));
- __asm__( "frndint;" : "=t"( z ) : "0"( x ));
- __asm__( "fldcw %0;" :: "m"( saved_CW ));
-
- /* We now have a possible rounded value; unfortunately the FPU uses the
- * `round-to-even' rule for exact mid-way cases, where both C99 and POSIX
- * require us to always round away from zero, so we need to adjust those
- * mid-way cases which the FPU rounded in the wrong direction.
- *
- * Correction method suggested by Greg Chicares <gchicares@sbcglobal.net>
- */
- return x < REF_VALUE( 0.0 )
- ? /*
- * For negative input values, an incorrectly rounded value will be
- * exactly 0.5 greater than the original value; when we find such an
- * exact rounding offset, we must subtract an additional 1.0 from the
- * rounded result, otherwise we return the rounded result unchanged.
- */
- z - x == REF_VALUE( 0.5 ) ? z - REF_VALUE( 1.0 ) : z
-
- : /* For positive input values, an incorrectly rounded value will be
- * exactly 0.5 less than the original value; when we find such an exact
- * rounding offset, we must add an additional 1.0 to the rounded result,
- * otherwise we return the rounded result unchanged.
- */
- x - z == REF_VALUE( 0.5 ) ? z + REF_VALUE( 1.0 ) : z;
-}
-
-#endif /* !defined _ROUND_INTERNAL_H: $RCSfile$: end of file */
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 2188539a7..000000000
--- a/winsup/mingw/mingwex/math/sf_erf.c
+++ /dev/null
@@ -1,267 +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))))));
- }
-
- z = x;
- __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))))));
- }
- z = x;
- __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 18ac5daea..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 uLD 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 uLD 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 a589e512b..000000000
--- a/winsup/mingw/mingwex/math/tanhl.c
+++ /dev/null
@@ -1,150 +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 uLD 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 uLD Q[] = {
-{ { 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 2e60c9ef6..000000000
--- a/winsup/mingw/mingwex/math/tgamma.c
+++ /dev/null
@@ -1,388 +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 uD 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 uD 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 uD STIR[] = {
-{ { 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 union
-{
- unsigned short s[4];
- double d;
-} sqt = {{0x2706,0x1ff6,0x0d93,0x4004}};
-#define SQTPI (sqt.d)
-#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 f9fe285d4..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 uLD 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 uLD 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 uLD 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 uLD 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 uLD 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;
-}
diff --git a/winsup/mingw/mingwex/mb_wc_common.h b/winsup/mingw/mingwex/mb_wc_common.h
deleted file mode 100755
index d1c2f9d10..000000000
--- a/winsup/mingw/mingwex/mb_wc_common.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <locale.h>
-#include <string.h>
-#include <stdlib.h>
-
-static inline
-unsigned int get_codepage (void)
-{
- /* locale :: "lang[_country[.code_page]]" | ".code_page" */
- char * cp_string;
- if ((cp_string = strchr (setlocale(LC_CTYPE, NULL), '.')))
- return ((unsigned) atoi (cp_string + 1));
- return 0;
-}
diff --git a/winsup/mingw/mingwex/mbrtowc.c b/winsup/mingw/mingwex/mbrtowc.c
deleted file mode 100755
index 52fb5ece4..000000000
--- a/winsup/mingw/mingwex/mbrtowc.c
+++ /dev/null
@@ -1,154 +0,0 @@
-#include "mb_wc_common.h"
-#include <wchar.h>
-#include <stdlib.h>
-#include <errno.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-static int __MINGW_ATTRIB_NONNULL(1) __MINGW_ATTRIB_NONNULL(4)
-__mbrtowc_cp (wchar_t * __restrict__ pwc, const char * __restrict__ s,
- size_t n, mbstate_t* __restrict__ ps,
- const unsigned int cp, const unsigned int mb_max)
-{
- union {
- mbstate_t val;
- char mbcs[4];
- } shift_state;
-
-
- /* Do the prelim checks */
- if (s == NULL)
- return 0;
-
- if (n == 0)
- /* The standard doesn't mention this case explicitly. Tell
- caller that the conversion from a non-null s is incomplete. */
- return -2;
-
- /* Save the current shift state, in case we need it in DBCS case. */
- shift_state.val = *ps;
- *ps = 0;
-
- if (!*s)
- {
- *pwc = 0;
- return 0;
- }
-
- if (mb_max > 1)
- {
- if (shift_state.mbcs[0] != 0)
- {
- /* Complete the mb char with the trailing byte. */
- shift_state.mbcs[1] = *s; /* the second byte */
- if (MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS,
- shift_state.mbcs, 2, pwc, 1)
- == 0)
- {
- /* An invalid trailing byte */
- errno = EILSEQ;
- return -1;
- }
- return 2;
- }
- else if (IsDBCSLeadByteEx (cp, *s))
- {
- /* If told to translate one byte, just save the leadbyte
- in *ps. */
- if (n < 2)
- {
- ((char*) ps)[0] = *s;
- return -2;
- }
- /* Else translate the first two bytes */
- else if (MultiByteToWideChar (cp, MB_ERR_INVALID_CHARS,
- s, 2, pwc, 1)
- == 0)
- {
- errno = EILSEQ;
- return -1;
- }
- return 2;
- }
- }
-
- /* Fall through to single byte char */
- if (cp == 0)
- *pwc = (wchar_t)(unsigned char)*s;
-
- else if (MultiByteToWideChar (cp, MB_ERR_INVALID_CHARS, s, 1, pwc, 1)
- == 0)
- {
- errno = EILSEQ;
- return -1;
- }
- return 1;
-}
-
-size_t
-mbrtowc (wchar_t * __restrict__ pwc, const char * __restrict__ s,
- size_t n, mbstate_t* __restrict__ ps)
-{
- static mbstate_t internal_mbstate = 0;
- wchar_t byte_bucket = 0;
- wchar_t* dst = pwc ? pwc : &byte_bucket;
-
- return (size_t) __mbrtowc_cp (dst, s, n, ps ? ps : &internal_mbstate,
- get_codepage(), MB_CUR_MAX);
-}
-
-
-size_t
-mbsrtowcs (wchar_t* __restrict__ dst, const char ** __restrict__ src,
- size_t len, mbstate_t* __restrict__ ps)
-{
- int ret =0 ;
- size_t n = 0;
- static mbstate_t internal_mbstate = 0;
- mbstate_t* internal_ps = ps ? ps : &internal_mbstate;
- const unsigned int cp = get_codepage();
- const unsigned int mb_max = MB_CUR_MAX;
-
- if ( src == NULL || *src == NULL ) /* undefined behavior */
- return 0;
-
- if (dst != NULL)
- {
- while (n < len
- && (ret = __mbrtowc_cp(dst, *src, len - n,
- internal_ps, cp, mb_max))
- > 0)
- {
- ++dst;
- *src += ret;
- n += ret;
- }
-
- if (n < len && ret == 0)
- *src = (char *)NULL;
- }
-
- else
- {
- wchar_t byte_bucket = 0;
- while (n < len
- && (ret = __mbrtowc_cp (&byte_bucket, *src, mb_max,
- internal_ps, cp, mb_max))
- > 0)
- {
- *src += ret;
- n += ret;
- }
- }
- return n;
-}
-
-size_t
-mbrlen (const char * __restrict__ s, size_t n,
- mbstate_t * __restrict__ ps)
-{
- static mbstate_t s_mbstate = 0;
- wchar_t byte_bucket = 0;
- return __mbrtowc_cp (&byte_bucket, s, n, (ps) ? ps : &s_mbstate,
- get_codepage(), MB_CUR_MAX);
-}
diff --git a/winsup/mingw/mingwex/mbsinit.c b/winsup/mingw/mingwex/mbsinit.c
deleted file mode 100644
index c130afebd..000000000
--- a/winsup/mingw/mingwex/mbsinit.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* This source code was extracted from the Q8 package created and placed
- in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.24 of ISO/IEC 9899:1999 (E).
-
- It supports an encoding where all char codes are mapped
- to the *same* code values within a wchar_t or wint_t,
- so long as no other wchar_t codes are used by the program.
-
-*/
-
-#include <wchar.h>
-
-int
-mbsinit(ps)
- const mbstate_t *ps;
- {
- return 1; /* don't have shift states */
- }
-
diff --git a/winsup/mingw/mingwex/mingw-aligned-malloc.c b/winsup/mingw/mingwex/mingw-aligned-malloc.c
deleted file mode 100755
index a6d4ac934..000000000
--- a/winsup/mingw/mingwex/mingw-aligned-malloc.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- __mingw_aligned_malloc and friends, implemented using Microsoft's public
- interfaces and with the help of the algorithm description provided
- by Wu Yongwei: http://sourceforge.net/mailarchive/message.php?msg_id=3847075
-
- I hereby place this implementation in the public domain.
- -- Steven G. Johnson (stevenj@alum.mit.edu)
-*/
-
-#include <stdlib.h>
-#include <errno.h>
-#include <stddef.h> /* ptrdiff_t */
-#include <string.h> /* memmove */
-
-#ifdef HAVE_STDINT_H
-# include <stdint.h> /* uintptr_t */
-#else
-# define uintptr_t size_t
-#endif
-
-#define NOT_POWER_OF_TWO(n) (((n) & ((n) - 1)))
-#define UI(p) ((uintptr_t) (p))
-#define CP(p) ((char *) p)
-
-#define PTR_ALIGN(p0, alignment, offset) \
- ((void *) (((UI(p0) + (alignment + sizeof(void*)) + offset) \
- & (~UI(alignment - 1))) \
- - offset))
-
-/* Pointer must sometimes be aligned; assume sizeof(void*) is a power of two. */
-#define ORIG_PTR(p) (*(((void **) (UI(p) & (~UI(sizeof(void*) - 1)))) - 1))
-
-void *
-__mingw_aligned_offset_malloc (size_t size, size_t alignment, size_t offset)
-{
- void *p0, *p;
-
- if (NOT_POWER_OF_TWO (alignment))
- {
- errno = EINVAL;
- return ((void *) 0);
- }
- if (size == 0)
- return ((void *) 0);
- if (alignment < sizeof (void *))
- alignment = sizeof (void *);
-
- /* Including the extra sizeof(void*) is overkill on a 32-bit
- machine, since malloc is already 8-byte aligned, as long
- as we enforce alignment >= 8 ...but oh well. */
-
- p0 = malloc (size + (alignment + sizeof (void *)));
- if (!p0)
- return ((void *) 0);
- p = PTR_ALIGN (p0, alignment, offset);
- ORIG_PTR (p) = p0;
- return p;
-}
-
-void *
-__mingw_aligned_malloc (size_t size, size_t alignment)
-{
- return __mingw_aligned_offset_malloc (size, alignment, 0);
-}
-
-void
-__mingw_aligned_free (void *memblock)
-{
- if (memblock)
- free (ORIG_PTR (memblock));
-}
-
-void *
-__mingw_aligned_offset_realloc (void *memblock, size_t size,
- size_t alignment, size_t offset)
-{
- void *p0, *p;
- ptrdiff_t shift;
-
- if (!memblock)
- return __mingw_aligned_offset_malloc (size, alignment, offset);
- if (NOT_POWER_OF_TWO (alignment))
- goto bad;
- if (size == 0)
- {
- __mingw_aligned_free (memblock);
- return ((void *) 0);
- }
- if (alignment < sizeof (void *))
- alignment = sizeof (void *);
-
- p0 = ORIG_PTR (memblock);
- /* It is an error for the alignment to change. */
- if (memblock != PTR_ALIGN (p0, alignment, offset))
- goto bad;
- shift = CP (memblock) - CP (p0);
-
- p0 = realloc (p0, size + (alignment + sizeof (void *)));
- if (!p0)
- return ((void *) 0);
- p = PTR_ALIGN (p0, alignment, offset);
-
- /* Relative shift of actual data may be different from before, ugh. */
- if (shift != CP (p) - CP (p0))
- /* ugh, moves more than necessary if size is increased. */
- memmove (CP (p), CP (p0) + shift, size);
-
- ORIG_PTR (p) = p0;
- return p;
-
-bad:
- errno = EINVAL;
- return ((void *) 0);
-}
-
-void *
-__mingw_aligned_realloc (void *memblock, size_t size, size_t alignment)
-{
- return __mingw_aligned_offset_realloc (memblock, size, alignment, 0);
-}
diff --git a/winsup/mingw/mingwex/mingw-fseek.c b/winsup/mingw/mingwex/mingw-fseek.c
deleted file mode 100644
index 9a13957be..000000000
--- a/winsup/mingw/mingwex/mingw-fseek.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Workaround for limitations on win9x where a file contents are
- * not zero'd out if you seek past the end and then write.
- * Copied from ming local-patch to binutils/bfd/libbfd.c written by
- * Mumit Khan <khan@xraylith.wisc.edu>
- */
-
-#include <windows.h>
-#include <stdio.h>
-#include <io.h>
-#include <stdlib.h>
-
-#define ZEROBLOCKSIZE 512
-static int __mingw_fseek_called;
-
-/* The fseek in Win9x runtime does not zero out the file if seeking past
- the end; if you don't want random stuff from your disk included in your
- output DLL/executable, use this version instead. On WinNT/Win2k, it
- just calls runtime fseek().
-
- CHECK/FIXME: Does this work for both text and binary modes?? */
-
-
-int
-__mingw_fseek (FILE *fp, long offset, int whence)
-{
-# undef fseek
- __mingw_fseek_called = 1;
- return fseek (fp, offset, whence);
-}
-
-int
-__mingw_fseeko64 (FILE *fp, off64_t offset, int whence)
-{
-# undef fseeko64
- __mingw_fseek_called = 1;
- return fseeko64 (fp, offset, whence);
-}
-
-size_t
-__mingw_fwrite (const void *buffer, size_t size, size_t count, FILE *fp)
-{
-# undef fwrite
- if ((_osver & 0x8000) && __mingw_fseek_called)
- {
- ULARGE_INTEGER actual_length;
- LARGE_INTEGER current_position = {{0LL}};
- __mingw_fseek_called = 0;
- fflush (fp);
- actual_length.u.LowPart = GetFileSize ((HANDLE) _get_osfhandle (fileno (fp)),
- &actual_length.u.HighPart);
- if (actual_length.u.LowPart == 0xFFFFFFFF
- && GetLastError() != NO_ERROR )
- return -1;
- current_position.u.LowPart = SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
- current_position.u.LowPart,
- &current_position.u.HighPart,
- FILE_CURRENT);
- if (current_position.u.LowPart == 0xFFFFFFFF
- && GetLastError() != NO_ERROR )
- return -1;
-
-#ifdef DEBUG
- printf ("__mingw_fwrite: current %I64u, actual %I64u\n",
- current_position.QuadPart, actual_length.QuadPart);
-#endif /* DEBUG */
- if (current_position.QuadPart > actual_length.QuadPart)
- {
- static char __mingw_zeros[ZEROBLOCKSIZE];
- long long numleft;
-
- SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
- 0, 0, FILE_END);
- numleft = current_position.QuadPart - actual_length.QuadPart;
-
-#ifdef DEBUG
- printf ("__mingw_fwrite: Seeking %I64d bytes past end\n", numleft);
-#endif /* DEBUG */
- while (numleft > 0LL)
- {
- DWORD nzeros = (numleft > ZEROBLOCKSIZE)
- ? ZEROBLOCKSIZE : numleft;
- DWORD written;
- if (! WriteFile ((HANDLE) _get_osfhandle (fileno (fp)),
- __mingw_zeros, nzeros, &written, NULL))
- {
- /* Best we can hope for, or at least DJ says so. */
- SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
- 0, 0, FILE_BEGIN);
- return -1;
- }
- if (written < nzeros)
- {
- /* Likewise. */
- SetFilePointer ((HANDLE) _get_osfhandle (fileno (fp)),
- 0, 0, FILE_BEGIN);
- return -1;
- }
-
- numleft -= written;
- }
- FlushFileBuffers ((HANDLE) _get_osfhandle (fileno (fp)));
- }
- }
- return (fwrite) (buffer, size, count, fp);
-}
diff --git a/winsup/mingw/mingwex/sitest.c b/winsup/mingw/mingwex/sitest.c
deleted file mode 100644
index 9e06bf164..000000000
--- a/winsup/mingw/mingwex/sitest.c
+++ /dev/null
@@ -1,1527 +0,0 @@
-/*
- sitest -- exercise features of C99 <stdint.h> and <inttypes.h>
-
- This source code has been placed into the PUBLIC DOMAIN by its author.
-
- last edit: 1999/11/05 gwyn@arl.mil
-
- Tries to accommodate pre-C99 versions of <inttypes.h>.
-
- Takes advantage of __Q8_* symbols defined by a particular
- implementation of <stdint.h>, but doesn't require them.
-
- NOTE: This is not a thorough validation test of the facilities.
-*/
-
-#include <errno.h>
-#include <limits.h> /* for CHAR_BIT */
-#include <stdio.h>
-#include <stddef.h> /* for ptrdiff_t */
-#include <stdlib.h>
-#include <string.h>
-
-#include <inttypes.h> /* embeds <stdint.h> */
-#include <signal.h> /* for sig_atomic_t */
-#if defined(INTMAX_MAX) /* <inttypes.h> has C99 features */
-#include <wchar.h>
-#endif
-
-#include <inttypes.h> /* test idempotency */
-
-#if 1 /* __STDC_VERSION__ >= 199901 */
-#ifndef __Q8_QT
-#define __Q8_QT long long
-#endif
-#endif
-
-#ifdef PRIdMAX
-#define HAVE_PRIdMAX
-#ifndef __Q8_MT
-#define __Q8_MT intmax_t
-#endif
-#else
-#ifdef PRIdLEAST64
-#ifndef __Q8_MT
-#define __Q8_MT int_least64_t
-#endif
-#define PRIdMAX PRIdLEAST64
-#else
-#ifndef __Q8_MT
-#define __Q8_MT long
-#endif
-#define PRIdMAX "ld"
-#endif
-#endif
-
-#ifdef PRIuMAX
-#define HAVE_PRIuMAX
-#define U__Q8_MT uintmax_t
-#else
-#ifdef PRIuLEAST64
-#define U__Q8_MT uint_least64_t
-#define PRIuMAX PRIuLEAST64
-#else
-#define U__Q8_MT unsigned long
-#define PRIuMAX "lu"
-#endif
-#endif
-
-#define STR_SUB(s) #s
-#define STRINGIZE(s) STR_SUB(s) /* extra level to expand argument */
-
-#if defined(SCNo32) || defined(PRIo32)
-static int32_t int32;
-#endif
-static int_least16_t intl16;
-static uint_least16_t uintl16;
-static uint_fast16_t uintf16;
-static intmax_t intmax;
-static uintmax_t uintmax;
-
-int
-main() {
- int status = 0; /* exit status to be returned */
-
- /* <stdint.h> features: */
-
- printf("CHAR_BIT=%u\n", (unsigned)CHAR_BIT );
- printf("sizeof(char)=%u\n", (unsigned)sizeof(char)); /* s.b. 1 */
- printf("sizeof(short)=%u\n", (unsigned)sizeof(short));
- printf("sizeof(int)=%u\n", (unsigned)sizeof(int));
- printf("sizeof(long)=%u\n", (unsigned)sizeof(long));
-#ifdef __Q8_QT
- printf("sizeof(long long)=%u\n", (unsigned)sizeof(__Q8_QT));
-#endif
- printf("sizeof(intmax_t)=%u\n", (unsigned)sizeof(intmax_t));
- printf("sizeof(ptrdiff_t)=%u\n", (unsigned)sizeof(ptrdiff_t));
- printf("sizeof(size_t)=%u\n", (unsigned)sizeof(size_t));
- printf("sizeof(sig_atomic_t)=%u\n", (unsigned)sizeof(sig_atomic_t));
- printf("sizeof(wchar_t)=%u\n", (unsigned)sizeof(wchar_t));
-#if defined(WINT_MAX) || __STDC_VERSION__ >= 199901
- printf("sizeof(wint_t)=%u\n", (unsigned)sizeof(wint_t));
-#else
- printf("*** wint_t isn't defined ***\n");
- status = EXIT_FAILURE;
-#endif
-#ifdef INT8_MAX
- printf("sizeof(int8_t)=%u\n", (unsigned)sizeof(int8_t));
- printf("sizeof(uint8_t)=%u\n", (unsigned)sizeof(uint8_t));
-#endif
-#ifdef INT9_MAX
- printf("sizeof(int9_t)=%u\n", (unsigned)sizeof(int9_t));
- printf("sizeof(uint9_t)=%u\n", (unsigned)sizeof(uint9_t));
-#endif
-#ifdef INT12_MAX
- printf("sizeof(int12_t)=%u\n", (unsigned)sizeof(int12_t));
- printf("sizeof(uint12_t)=%u\n", (unsigned)sizeof(uint12_t));
-#endif
-#ifdef INT16_MAX
- printf("sizeof(int16_t)=%u\n", (unsigned)sizeof(int16_t));
- printf("sizeof(uint16_t)=%u\n", (unsigned)sizeof(uint16_t));
-#endif
-#ifdef INT18_MAX
- printf("sizeof(int18_t)=%u\n", (unsigned)sizeof(int18_t));
- printf("sizeof(uint18_t)=%u\n", (unsigned)sizeof(uint18_t));
-#endif
-#ifdef INT24_MAX
- printf("sizeof(int24_t)=%u\n", (unsigned)sizeof(int24_t));
- printf("sizeof(uint24_t)=%u\n", (unsigned)sizeof(uint24_t));
-#endif
-#ifdef INT32_MAX
- printf("sizeof(int32_t)=%u\n", (unsigned)sizeof(int32_t));
- printf("sizeof(uint32_t)=%u\n", (unsigned)sizeof(uint32_t));
-#endif
-#ifdef INT36_MAX
- printf("sizeof(int36_t)=%u\n", (unsigned)sizeof(int36_t));
- printf("sizeof(uint36_t)=%u\n", (unsigned)sizeof(uint36_t));
-#endif
-#ifdef INT40_MAX
- printf("sizeof(int40_t)=%u\n", (unsigned)sizeof(int40_t));
- printf("sizeof(uint40_t)=%u\n", (unsigned)sizeof(uint40_t));
-#endif
-#ifdef INT48_MAX
- printf("sizeof(int48_t)=%u\n", (unsigned)sizeof(int48_t));
- printf("sizeof(uint48_t)=%u\n", (unsigned)sizeof(uint48_t));
-#endif
-#ifdef INT60_MAX
- printf("sizeof(int60_t)=%u\n", (unsigned)sizeof(int60_t));
- printf("sizeof(uint60_t)=%u\n", (unsigned)sizeof(uint60_t));
-#endif
-#ifdef INT64_MAX
- printf("sizeof(int64_t)=%u\n", (unsigned)sizeof(int64_t));
- printf("sizeof(uint64_t)=%u\n", (unsigned)sizeof(uint64_t));
-#endif
-#ifdef INT72_MAX
- printf("sizeof(int72_t)=%u\n", (unsigned)sizeof(int72_t));
- printf("sizeof(uint72_t)=%u\n", (unsigned)sizeof(uint72_t));
-#endif
-#ifdef INT128_MAX
- printf("sizeof(int128_t)=%u\n", (unsigned)sizeof(int128_t));
- printf("sizeof(uint128_t)=%u\n", (unsigned)sizeof(uint128_t));
-#endif
- printf("sizeof(int_least8_t)=%u\n", (unsigned)sizeof(int_least8_t));
- printf("sizeof(uint_least8_t)=%u\n", (unsigned)sizeof(uint_least8_t));
- printf("sizeof(int_least16_t)=%u\n", (unsigned)sizeof(int_least16_t));
- printf("sizeof(uint_least16_t)=%u\n", (unsigned)sizeof(uint_least16_t));
- printf("sizeof(int_least32_t)=%u\n", (unsigned)sizeof(int_least32_t));
- printf("sizeof(uint_least32_t)=%u\n", (unsigned)sizeof(uint_least32_t));
-#ifdef INT_LEAST64_MAX
- printf("sizeof(int_least64_t)=%u\n", (unsigned)sizeof(int_least64_t));
- printf("sizeof(uint_least64_t)=%u\n", (unsigned)sizeof(uint_least64_t));
-#else
- printf("*** uint_least64_t isn't defined ***\n");
- status = EXIT_FAILURE;
-#endif
-#ifdef INT_LEAST128_MAX
- printf("sizeof(int_least128_t)=%u\n", (unsigned)sizeof(int_least128_t));
- printf("sizeof(uint_least128_t)=%u\n",
- (unsigned)sizeof(uint_least128_t));
-#endif
- printf("sizeof(int_fast8_t)=%u\n", (unsigned)sizeof(int_fast8_t));
- printf("sizeof(uint_fast8_t)=%u\n", (unsigned)sizeof(uint_fast8_t));
- printf("sizeof(int_fast16_t)=%u\n", (unsigned)sizeof(int_fast16_t));
- printf("sizeof(uint_fast16_t)=%u\n", (unsigned)sizeof(uint_fast16_t));
- printf("sizeof(int_fast32_t)=%u\n", (unsigned)sizeof(int_fast32_t));
- printf("sizeof(uint_fast32_t)=%u\n", (unsigned)sizeof(uint_fast32_t));
-#ifdef INT_FAST64_MAX
- printf("sizeof(int_fast64_t)=%u\n", (unsigned)sizeof(int_fast64_t));
- printf("sizeof(uint_fast64_t)=%u\n", (unsigned)sizeof(uint_fast64_t));
-#else
- printf("*** int_fast64_t isn't defined ***\n");
- status = EXIT_FAILURE;
-#endif
-#ifdef INT_FAST128_MAX
- printf("sizeof(int_fast128_t)=%u\n", (unsigned)sizeof(int_fast128_t));
- printf("sizeof(uint_fast128_t)=%u\n", (unsigned)sizeof(uint_fast128_t));
-#endif
-#if defined(INTPTR_MAX)
- printf("sizeof(intptr_t)=%u\n", (unsigned)sizeof(intptr_t));
-#if defined(UINTPTR_MAX)
- printf("sizeof(uintptr_t)=%u\n", (unsigned)sizeof(uintptr_t));
-#else
- printf("*** intptr_t is defined but uintptr_t isn't ***\n");
- status = EXIT_FAILURE;
-#endif
-#elif defined(UINTPTR_MAX)
- printf("sizeof(uintptr_t)=%u\n", (unsigned)sizeof(uintptr_t));
- printf("*** uintptr_t is defined but intptr_t isn't ***\n");
- status = EXIT_FAILURE;
-#else
- printf("*** neither intptr_t nor uintptr_t is defined ***\n");
- status = EXIT_FAILURE;
-#endif
-#ifdef INTMAX_MAX
- printf("sizeof(intmax_t)=%u\n", (unsigned)sizeof(intmax_t));
- printf("sizeof(uintmax_t)=%u\n", (unsigned)sizeof(uintmax_t));
-#else
- printf("*** intmax_t isn't defined ***\n");
- status = EXIT_FAILURE;
-#endif
-
-#ifdef INT8_MAX
- printf("INT8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT8_MIN);
- printf("INT8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT8_MAX);
- printf("UINT8_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT8_MAX);
-#endif
-#ifdef INT9_MAX
- printf("INT9_MIN=%"PRIdMAX"\n", (__Q8_MT)INT9_MIN);
- printf("INT9_MAX=%"PRIdMAX"\n", (__Q8_MT)INT9_MAX);
- printf("UINT9_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT9_MAX);
-#endif
-#ifdef INT12_MAX
- printf("INT12_MIN=%"PRIdMAX"\n", (__Q8_MT)INT12_MIN);
- printf("INT12_MAX=%"PRIdMAX"\n", (__Q8_MT)INT12_MAX);
- printf("UINT12_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT12_MAX);
-#endif
-#ifdef INT16_MAX
- printf("INT16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT16_MIN);
- printf("INT16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT16_MAX);
- printf("UINT16_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT16_MAX);
-#endif
-#ifdef INT18_MAX
- printf("INT18_MIN=%"PRIdMAX"\n", (__Q8_MT)INT18_MIN);
- printf("INT18_MAX=%"PRIdMAX"\n", (__Q8_MT)INT18_MAX);
- printf("UINT18_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT18_MAX);
-#endif
-#ifdef INT24_MAX
- printf("INT24_MIN=%"PRIdMAX"\n", (__Q8_MT)INT24_MIN);
- printf("INT24_MAX=%"PRIdMAX"\n", (__Q8_MT)INT24_MAX);
- printf("UINT24_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT24_MAX);
-#endif
-#ifdef INT32_MAX
- printf("INT32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT32_MIN);
- printf("INT32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT32_MAX);
- printf("UINT32_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT32_MAX);
-#endif
-#ifdef INT36_MAX
- printf("INT36_MIN=%"PRIdMAX"\n", (__Q8_MT)INT36_MIN);
- printf("INT36_MAX=%"PRIdMAX"\n", (__Q8_MT)INT36_MAX);
- printf("UINT36_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT36_MAX);
-#endif
-#ifdef INT40_MAX
- printf("INT40_MIN=%"PRIdMAX"\n", (__Q8_MT)INT40_MIN);
- printf("INT40_MAX=%"PRIdMAX"\n", (__Q8_MT)INT40_MAX);
- printf("UINT40_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT40_MAX);
-#endif
-#ifdef INT48_MAX
- printf("INT48_MIN=%"PRIdMAX"\n", (__Q8_MT)INT48_MIN);
- printf("INT48_MAX=%"PRIdMAX"\n", (__Q8_MT)INT48_MAX);
- printf("UINT48_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT48_MAX);
-#endif
-#ifdef INT60_MAX
- printf("INT60_MIN=%"PRIdMAX"\n", (__Q8_MT)INT60_MIN);
- printf("INT60_MAX=%"PRIdMAX"\n", (__Q8_MT)INT60_MAX);
- printf("UINT60_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT60_MAX);
-#endif
-#ifdef INT64_MAX
- printf("INT64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT64_MIN);
- printf("INT64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT64_MAX);
- printf("UINT64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT64_MAX);
-#endif
-#ifdef INT72_MAX
- printf("INT72_MIN=%"PRIdMAX"\n", (__Q8_MT)INT72_MIN);
- printf("INT72_MAX=%"PRIdMAX"\n", (__Q8_MT)INT72_MAX);
- printf("UINT72_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT72_MAX);
-#endif
-#ifdef INT128_MAX
- printf("INT128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT128_MIN);
- printf("INT128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT128_MAX);
- printf("UINT128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT128_MAX);
-#endif
- printf("INT_LEAST8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST8_MIN);
- printf("INT_LEAST8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST8_MAX);
- printf("UINT_LEAST8_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_LEAST8_MAX);
- printf("INT_LEAST16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST16_MIN);
- printf("INT_LEAST16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST16_MAX);
- printf("UINT_LEAST16_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_LEAST16_MAX);
- printf("INT_LEAST32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST32_MIN);
- printf("INT_LEAST32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST32_MAX);
- printf("UINT_LEAST32_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_LEAST32_MAX);
-#ifdef INT_LEAST64_MAX
- printf("INT_LEAST64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST64_MIN);
- printf("INT_LEAST64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST64_MAX);
- printf("UINT_LEAST64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_LEAST64_MAX);
-#endif
-#ifdef INT_LEAST128_MAX
- printf("INT_LEAST128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST128_MIN);
- printf("INT_LEAST128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST128_MAX);
- printf("UINT_LEAST128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_LEAST128_MAX);
-#endif
- printf("INT_FAST8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST8_MIN);
- printf("INT_FAST8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST8_MAX);
- printf("UINT_FAST8_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_FAST8_MAX);
- printf("INT_FAST16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST16_MIN);
- printf("INT_FAST16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST16_MAX);
- printf("UINT_FAST16_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_FAST16_MAX);
- printf("INT_FAST32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST32_MIN);
- printf("INT_FAST32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST32_MAX);
- printf("UINT_FAST32_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_FAST32_MAX);
-#ifdef INT_FAST64_MAX
- printf("INT_FAST64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST64_MIN);
- printf("INT_FAST64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST64_MAX);
- printf("UINT_FAST64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_FAST64_MAX);
-#endif
-#ifdef INT_FAST128_MAX
- printf("INT_FAST128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST128_MIN);
- printf("INT_FAST128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST128_MAX);
- printf("UINT_FAST128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_FAST128_MAX);
-#endif
-#ifdef INTPTR_MAX
- printf("INTPTR_MIN=%"PRIdMAX"\n", (__Q8_MT)INTPTR_MIN);
- printf("INTPTR_MAX=%"PRIdMAX"\n", (__Q8_MT)INTPTR_MAX);
-#endif
-#ifdef UINTPTR_MAX
- printf("UINTPTR_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINTPTR_MAX);
-#endif
-#ifdef INTMAX_MAX
- printf("INTMAX_MIN=%"PRIdMAX"\n", (__Q8_MT)INTMAX_MIN);
- printf("INTMAX_MAX=%"PRIdMAX"\n", (__Q8_MT)INTMAX_MAX);
- printf("UINTMAX_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINTMAX_MAX);
-#endif
-#ifdef PTRDIFF_MAX
- printf("PTRDIFF_MIN=%"PRIdMAX"\n", (__Q8_MT)PTRDIFF_MIN);
- printf("PTRDIFF_MAX=%"PRIdMAX"\n", (__Q8_MT)PTRDIFF_MAX);
-#endif
-#ifdef SIG_ATOMIC_MAX
-#if SIG_ATOMIC_MIN < 0
- printf("SIG_ATOMIC_MIN=%"PRIdMAX"\n", (__Q8_MT)SIG_ATOMIC_MIN);
- printf("SIG_ATOMIC_MAX=%"PRIdMAX"\n", (__Q8_MT)SIG_ATOMIC_MAX);
-#else
- printf("SIG_ATOMIC_MIN=%"PRIuMAX"\n", (U__Q8_MT)SIG_ATOMIC_MIN);
- printf("SIG_ATOMIC_MAX=%"PRIuMAX"\n", (U__Q8_MT)SIG_ATOMIC_MAX);
-#endif
-#endif
-#ifdef SIZE_MAX
- printf("SIZE_MAX=%"PRIuMAX"\n", (U__Q8_MT)SIZE_MAX);
-#endif
-
-#ifdef WCHAR_MAX
-#if WCHAR_MIN < 0
- printf("WCHAR_MIN=%"PRIdMAX"\n", (__Q8_MT)WCHAR_MIN);
- printf("WCHAR_MAX=%"PRIdMAX"\n", (__Q8_MT)WCHAR_MAX);
-#else
- printf("WCHAR_MIN=%"PRIuMAX"\n", (U__Q8_MT)WCHAR_MIN);
- printf("WCHAR_MAX=%"PRIuMAX"\n", (U__Q8_MT)WCHAR_MAX);
-#endif
-#endif
-#ifdef WINT_MAX
-#if WINT_MIN < 0
- printf("WINT_MIN=%"PRIdMAX"\n", (__Q8_MT)WINT_MIN);
- printf("WINT_MAX=%"PRIdMAX"\n", (__Q8_MT)WINT_MAX);
-#else
- printf("WINT_MIN=%"PRIuMAX"\n", (U__Q8_MT)WINT_MIN);
- printf("WINT_MAX=%"PRIuMAX"\n", (U__Q8_MT)WINT_MAX);
-#endif
-#endif
-
- /*
- 7.18.4 Macros for integer constants
- */
-
- /* INTn_C for n=8 and 16 were at one point unimplementable
- on most platforms, so they're treated as "optional": */
-#ifdef INT8_C
- if ( INT8_C(-123) != -123 )
- printf("*** INT8_C(-123) produced %"PRIdMAX" ***\n",
- (__Q8_MT)INT8_C(-123)
- );
- if ( UINT8_C(123) != 123 )
- printf("*** UINT8_C(123) produced %"PRIuMAX" ***\n",
- (U__Q8_MT)UINT8_C(123)
- );
-#endif
-#ifdef INT16_C
- if ( INT16_C(-12345) != -12345 )
- printf("*** INT16_C(-12345) produced %"PRIdMAX" ***\n",
- (__Q8_MT)INT16_C(-12345)
- );
- if ( UINT16_C(12345) != 12345 )
- printf("*** UINT16_C(12345) produced %"PRIuMAX" ***\n",
- (U__Q8_MT)UINT16_C(12345)
- );
-#endif
- if ( INT32_C(-123456789) != -123456789 )
- printf("*** INT32_C(-123456789) produced %"PRIdMAX" ***\n",
- (__Q8_MT)INT32_C(-123456789)
- );
- if ( UINT32_C(123456789) != 123456789 )
- printf("*** UINT32_C(123456789) produced %"PRIuMAX" ***\n",
- (U__Q8_MT)UINT32_C(123456789)
- );
-#ifdef INT_LEAST64_MAX
- if ( INT64_C(-1234567890123456789) != -1234567890123456789 )
- printf("*** INT64_C(-1234567890123456789) produced %"PRIdMAX
- " ***\n",
- (__Q8_MT)INT64_C(-1234567890123456789)
- );
- if ( UINT64_C(1234567890123456789) != 1234567890123456789 )
- printf("*** UINT64_C(1234567890123456789) produced %"PRIuMAX
- " ***\n",
- (U__Q8_MT)UINT64_C(1234567890123456789)
- );
-#endif
-#ifdef INTMAX_MAX
- if ( INTMAX_C(-1234567890123456789) != -1234567890123456789 )
- printf("*** INTMAX_C(-1234567890123456789) produced %"PRIdMAX
- " ***\n",
- (__Q8_MT)INTMAX_C(-1234567890123456789)
- );
- if ( UINTMAX_C(1234567890123456789) != 1234567890123456789 )
- printf("*** UINTMAX_C(1234567890123456789) produced %"PRIuMAX
- " ***\n",
- (U__Q8_MT)UINTMAX_C(1234567890123456789)
- );
-#endif
-
- /* <inttypes.h> features: */
-
-#if __STDC_VERSION__ >= 199901
- printf("sizeof(imaxdiv_t)=%u\n", (unsigned)sizeof(imaxdiv_t));
-#endif
-
- /*
- 7.8.1 Macros for format specifiers
- */
-
- {
- /* scanf these strings */
- static const char in_dn[] = "Z119bZ";
- static const char in_dmo[] = "Z-0119bZ";
- static const char in_dspx[] = "Z \t\n +0X119bZ";
- static const char in_dsmx[] = "Z \t\n -0x119bZ";
- static const char in_dsn[] = "Z \t\n 119bZ";
- static const char in_dp[] = "Z+119bZ";
- static const char in_dpx[] = "Z+0X119bz";
-
- /* sprintf into this */
- static char buffer[1024];
-
-#define SCAN(buf,fs,var,exp) if ( sscanf(buf, "Z%" fs, &var) != 1 ) \
- { \
- printf("*** " #fs "=" STR_SUB(fs) \
- " failed ***\n" \
- ); \
- status = EXIT_FAILURE; \
- } \
- else if ( var != (exp) ) \
- { \
- printf("*** " #fs "=" STR_SUB(fs) \
- " should be: " STR_SUB(exp) \
- ", was: %" fs " ***\n", var \
- ); \
- status = EXIT_FAILURE; \
- } \
- else
-
-#define PRINT(fs,var,exp) if ( sprintf(buffer, "%" fs, var ) <= 0 ) \
- { \
- printf("*** " #fs "=" STR_SUB(fs) \
- " failed ***\n" \
- ); \
- status = EXIT_FAILURE; \
- } \
- else if ( strcmp(buffer, STR_SUB(exp)) != 0 ) \
- { \
- printf("*** " #fs "=" STR_SUB(fs) \
- " should be: " STR_SUB(exp) \
- ", was: %s ***\n", buffer \
- ); \
- status = EXIT_FAILURE; \
- } \
- else
-
-#ifdef SCNo32
- SCAN(in_dn, SCNo32, int32, 9);
-#endif
-#ifdef PRIo32
- PRINT(PRIo32, int32, 11);
-#endif
- SCAN(in_dmo, SCNiLEAST16, intl16, -9);
- SCAN(in_dspx, SCNdLEAST16, intl16, 0);
- SCAN(in_dsmx, SCNiLEAST16, intl16, -4507);
- PRINT(PRIdLEAST16, intl16, -4507);
- PRINT(PRIiLEAST16, intl16, -4507);
- SCAN(in_dsn, SCNxLEAST16, uintl16, 4507);
- PRINT(PRIoLEAST16, uintl16, 10633);
- PRINT(PRIuLEAST16, uintl16, 4507);
- PRINT(PRIxLEAST16, uintl16, 119b);
- PRINT(PRIXLEAST16, uintl16, 119B);
- SCAN(in_dp, SCNxFAST16, uintf16, 4507);
- PRINT(PRIxFAST16, uintf16, 119b);
-#ifdef SCNdMAX
- SCAN(in_dp, SCNdMAX, intmax, 119);
-#endif
-#ifdef PRIiMAX
- PRINT(PRIiMAX, intmax, 119);
-#endif
-#ifdef SCNoMAX
- SCAN(in_dpx, SCNoMAX, uintmax, 0);
-#endif
-#ifdef PRIxMAX
- PRINT(PRIxMAX, uintmax, 0);
-#endif
- /* Obviously there should be a much larger battery of such tests. */
- }
-
-#if defined(INTMAX_MAX) /* <inttypes.h> has C99 features */
- /*
- 7.8.2 Functions for greatest-width integer types
- */
-
- {
- static struct
- {
- intmax_t input;
- intmax_t expect;
- } abs_data[] =
- {
-#ifdef INT8_MAX
- {INT8_MAX, INT8_MAX},
- {-INT8_MAX, INT8_MAX},
- {UINT8_MAX, UINT8_MAX},
-#endif
-
-#ifdef INT16_MAX
- { INT16_MAX, INT16_MAX},
- { -INT16_MAX, INT16_MAX},
- { UINT16_MAX, UINT16_MAX},
-#endif
-#ifdef INT32_MAX
- { INT32_MAX, INT32_MAX},
- { -INT32_MAX, INT32_MAX},
-#ifdef INT_LEAST64_MAX
- { UINT32_MAX, UINT32_MAX},
-#endif
-#endif
-#ifdef INT64_MAX
- { INT64_MAX, INT64_MAX},
- { -INT64_MAX, INT64_MAX},
-#endif
- { INT_LEAST8_MAX, INT_LEAST8_MAX},
- { -INT_LEAST8_MAX, INT_LEAST8_MAX},
- { UINT_LEAST8_MAX, UINT_LEAST8_MAX},
- { INT_LEAST16_MAX, INT_LEAST16_MAX},
- { -INT_LEAST16_MAX, INT_LEAST16_MAX},
- { UINT_LEAST16_MAX, UINT_LEAST16_MAX},
- { INT_LEAST32_MAX, INT_LEAST32_MAX},
- { -INT_LEAST32_MAX, INT_LEAST32_MAX},
-#ifdef INT_LEAST64_MAX
- { UINT_LEAST32_MAX, UINT_LEAST32_MAX},
- { INT_LEAST64_MAX, INT_LEAST64_MAX},
- { -INT_LEAST64_MAX, INT_LEAST64_MAX},
-#endif
- { INT_FAST8_MAX, INT_FAST8_MAX},
- { -INT_FAST8_MAX, INT_FAST8_MAX},
- { UINT_FAST8_MAX, UINT_FAST8_MAX},
- { INT_FAST16_MAX, INT_FAST16_MAX},
- { -INT_FAST16_MAX, INT_FAST16_MAX},
- { UINT_FAST16_MAX, UINT_FAST16_MAX},
- { INT_FAST32_MAX, INT_FAST32_MAX},
- { -INT_FAST32_MAX, INT_FAST32_MAX},
-#ifdef INT_FAST64_MAX
- { UINT_FAST32_MAX, UINT_FAST32_MAX},
- { INT_FAST64_MAX, INT_FAST64_MAX},
- { -INT_FAST64_MAX, INT_FAST64_MAX},
-#endif
-#ifdef INTPTR_MAX
- { INTPTR_MAX, INTPTR_MAX},
- { -INTPTR_MAX, INTPTR_MAX},
-#endif
-#ifdef UINTPTR_MAX
- { UINTPTR_MAX, UINTPTR_MAX},
-#endif
- { INTMAX_MAX, INTMAX_MAX},
-#ifdef PTRDIFF_MAX
- { PTRDIFF_MAX, PTRDIFF_MAX},
-#endif
-#ifdef SIG_ATOMIC_MAX
- { SIG_ATOMIC_MAX, SIG_ATOMIC_MAX},
-#if SIG_ATOMIC_MIN < 0
- { -SIG_ATOMIC_MAX, SIG_ATOMIC_MAX},
-#endif
-#endif
-#ifdef SIZE_MAX
- { SIZE_MAX, SIZE_MAX},
-#endif
-#ifdef WCHAR_MAX
- { WCHAR_MAX, WCHAR_MAX},
-#if WCHAR_MIN < 0
- { -WCHAR_MAX, WCHAR_MAX},
-#endif
-#endif
-#ifdef WINT_MAX
- { WINT_MAX, WINT_MAX},
-#if WINT_MIN < 0
- { -WINT_MAX, WINT_MAX},
-#endif
-#endif
- { 127, 127},
- { -127, 127},
- { 128, 128},
- { -127-1, 128},
- { 255, 255},
- { -256+1, 255},
- { 256, 256},
- { -256, 256},
- { 32767, 32767},
- { -32767, 32767},
- { 32768, 32768},
- { -32767-1, 32768},
- { 65535, 65535},
- { -65536+1, 65535},
- { 65536, 65536},
- { -65536, 65536},
- { 2147483647, 2147483647},
- { -2147483647, 2147483647},
- { 2147483648LL, 2147483648LL},
- { -2147483647LL-1, 2147483648LL},
-#ifdef INT_LEAST64_MAX
- { 4294967295LL, 4294967295LL},
- { -4294967296LL+1, 4294967295LL},
- { 4294967296LL, 4294967296LL},
- { -4294967296LL, 4294967296LL},
- { 9223372036854775807LL, 9223372036854775807LL},
- { -9223372036854775807LL, 9223372036854775807LL},
- { 1234567890123456789LL, 1234567890123456789LL},
- { -1234567890123456789LL, 1234567890123456789LL},
-#endif
- { 1, 1},
- { -1, 1},
- { 2, 2},
- { -2, 2},
- { 10, 10},
- { -10, 10},
- { 16, 16},
- { -16, 16},
- /* Other test cases can be added here. */
- {0, 0} /* terminates the list */
- }, *adp=abs_data;
- int count=0;
- do{
- intmax = imaxabs(adp->input);
- count++;
- if (intmax != adp->expect )
- {
-
- printf("*** imaxabs(%"PRIdMAX") failed; should be: %"
- PRIdMAX", was: %"PRIdMAX" ***\n",
- adp->input, adp->expect, intmax
- );
- status = EXIT_FAILURE;
- }
- }
- while ( adp++->input != 0 );
- }
-
- {
- imaxdiv_t result;
- static struct
- {
- intmax_t numer;
- intmax_t denom;
- intmax_t exp_quot;
- intmax_t exp_rem;
- } div_data[] =
- {
- { 0, 1, 0, 0},
- { 0, -1, 0, 0},
- { 0, 2, 0, 0},
- { 0, -2, 0, 0},
- { 0, 5, 0, 0},
- { 0, -5, 0, 0},
- { 1, 1, 1, 0},
- { 1, -1, -1, 0},
- { 1, 2, 0, 1},
- { 1, -2, 0, 1},
- { 1, 5, 0, 1},
- { 1, -5, 0, 1},
- { -1, 1, -1, 0},
- { -1, -1, 1, 0},
- { -1, 2, 0, -1},
- { -1, -2, 0, -1},
- { -1, 5, 0, -1},
- { -1, -5, 0, -1},
- { 2, 1, 2, 0},
- { 2, -1, -2, 0},
- { 2, 2, 1, 0},
- { 2, -2, -1, 0},
- { 2, 5, 0, 2},
- { 2, -5, 0, 2},
- { -2, 1, -2, 0},
- { -2, -1, 2, 0},
- { -2, 2, -1, 0},
- { -2, -2, 1, 0},
- { -2, 5, 0, -2},
- { -2, -5, 0, -2},
- { 17, 5, 3, 2},
- { -17, -5, 3, -2},
- { 17, -5, -3, 2},
- { -17, 5, -3, -2},
- { 2147483647, 1, 2147483647, 0},
- { -2147483647LL, 1, -2147483647LL, 0},
- { 2147483648LL, 1LL, 2147483648LL, 0LL},
- { -2147483647-1LL, 1LL, -2147483647-1LL, 0LL},
- { 2147483647LL, 2LL, 1073741823LL, 1LL},
- { -2147483647LL, 2LL, -1073741823LL, -1LL},
- { 2147483648LL, 2LL, 1073741824LL, 0LL},
- { -2147483647-1LL, 2LL, -1073741824LL, 0LL},
-#ifdef INT_LEAST64_MAX /* else might support only 32 bits */
- { 4294967295LL, 1LL, 4294967295LL, 0LL},
- { -4294967296LL+1LL, 1LL, -4294967296LL+1, 0},
- { 4294967296LL, 1, 4294967296LL, 0},
- { -4294967296LL, 1LL, -4294967296LL, 0LL},
- { 4294967295LL, -1LL, -4294967296+1LL, 0LL},
- { -4294967296+1LL, -1LL, 4294967295LL, 0LL},
- { 4294967296LL, -1LL, -4294967296LL, 0LL},
- { -4294967296LL, -1LL, 4294967296LL, 0LL},
- { 4294967295LL, 2LL, 2147483647LL, 1LL},
- { -4294967296+1LL, 2LL, -2147483647LL, -1LL},
- { 4294967296LL, 2LL, 2147483648LL, 0LL},
- { -4294967296LL, 2LL, -2147483647-1LL, 0LL},
- { 4294967295LL, 2147483647LL, 2LL, 1LL},
- { -4294967296+1LL, 2147483647LL, -2LL, -1LL},
- { 4294967296LL, 2147483647LL, 2LL, 2LL},
- { -4294967296LL, 2147483647LL, -2LL, -2LL},
- { 4294967295LL, -2147483647LL, -2LL, 1LL},
- { -4294967296+1LL, -2147483647LL, 2LL, -1LL},
- { 4294967296LL, -2147483647LL, -2LL, 2LL},
- { -4294967296LL, -2147483647LL, 2LL, -2LL},
- { 4294967295LL, 2147483648LL, 1LL, 2147483647LL},
- { -4294967296+1LL, 2147483648LL, -1LL, -2147483647LL},
- { 4294967296LL, 2147483648LL, 2LL, 0LL},
- { -4294967296LL, 2147483648LL, -2LL, 0LL},
- { 4294967295LL, -2147483647-1LL, -1LL, 2147483647LL},
- { -4294967296+1LL, -2147483647-1LL, 1LL, -2147483647LL},
- { 4294967296LL, -2147483647-1LL, -2LL, 0LL},
- { -4294967296LL, -2147483647-1LL, 2LL, 0LL},
- { 9223372036854775807LL, 1LL, 9223372036854775807LL, 0LL},
- { -9223372036854775807LL, 1LL, -9223372036854775807LL, 0LL},
- { 9223372036854775807LL, 2LL, 4611686018427387903LL, 1LL},
- { -9223372036854775807LL, 2LL, -4611686018427387903LL, -1LL},
-#endif
- /* There should be a much larger battery of such tests. */
- { 0, 0, 0, 0} /* 0 denom terminates the list */
- }, *ddp;
-
- for ( ddp = div_data; ddp->denom != 0; ++ddp )
- if ( (result = imaxdiv(ddp->numer, ddp->denom)).quot
- != ddp->exp_quot || result.rem != ddp->exp_rem
- ) {
- printf("*** imaxdiv(%"PRIdMAX",%"PRIdMAX
- ") failed; should be: (%"PRIdMAX",%"PRIdMAX
- "), was: (%"PRIdMAX",%"PRIdMAX") ***\n",
- ddp->numer, ddp->denom, ddp->exp_quot,
- ddp->exp_rem, result.quot, result.rem
- );
- status = EXIT_FAILURE;
- }
- }
-
- {
- char *endptr;
- wchar_t *wendptr;
- static char saved[64]; /* holds copy of input string */
- static wchar_t wnptr[64]; /* holds wide copy of test string */
- static int warned; /* "warned for null endptr" flag */
- register int i;
- static struct
- {
- char * nptr;
- int base;
- intmax_t exp_val;
- int exp_len;
- } str_data[] =
- {
- { "", 0, 0, 0},
- { "", 2, 0, 0},
- { "", 8, 0, 0},
- { "", 9, 0, 0},
- { "", 10, 0, 0},
- { "", 16, 0, 0},
- { "", 36, 0, 0},
- { "0", 0, 0, 1},
- { "0", 2, 0, 1},
- { "0", 8, 0, 1},
- { "0", 9, 0, 1},
- { "0", 10, 0, 1},
- { "0", 16, 0, 1},
- { "0", 36, 0, 1},
- { "+0", 0, 0, 2},
- { "+0", 2, 0, 2},
- { "+0", 8, 0, 2},
- { "+0", 9, 0, 2},
- { "+0", 10, 0, 2},
- { "+0", 16, 0, 2},
- { "+0", 36, 0, 2},
- { "-0", 0, 0, 2},
- { "-0", 2, 0, 2},
- { "-0", 8, 0, 2},
- { "-0", 9, 0, 2},
- { "-0", 10, 0, 2},
- { "-0", 16, 0, 2},
- { "-0", 36, 0, 2},
- { "Inf", 0, 0, 0},
- { "Inf", 2, 0, 0},
- { "Inf", 8, 0, 0},
- { "Inf", 9, 0, 0},
- { "Inf", 10, 0, 0},
- { "Inf", 16, 0, 0},
- { "Inf", 36, 24171, 3},
- { "+Inf", 0, 0, 0},
- { "+Inf", 2, 0, 0},
- { "+Inf", 8, 0, 0},
- { "+Inf", 9, 0, 0},
- { "+Inf", 10, 0, 0},
- { "+Inf", 16, 0, 0},
- { "+Inf", 36, 24171, 4},
- { "-Inf", 0, 0, 0},
- { "-Inf", 2, 0, 0},
- { "-Inf", 8, 0, 0},
- { "-Inf", 9, 0, 0},
- { "-Inf", 10, 0, 0},
- { "-Inf", 16, 0, 0},
- { "-Inf", 36, -24171, 4},
- { "inf", 0, 0, 0},
- { "inf", 2, 0, 0},
- { "inf", 8, 0, 0},
- { "inf", 9, 0, 0},
- { "inf", 10, 0, 0},
- { "inf", 16, 0, 0},
- { "inf", 36, 24171, 3},
- { "+inf", 0, 0, 0},
- { "+inf", 2, 0, 0},
- { "+inf", 8, 0, 0},
- { "+inf", 9, 0, 0},
- { "+inf", 10, 0, 0},
- { "+inf", 16, 0, 0},
- { "+inf", 36, 24171, 4},
- { "-inf", 0, 0, 0},
- { "-inf", 2, 0, 0},
- { "-inf", 8, 0, 0},
- { "-inf", 9, 0, 0},
- { "-inf", 10, 0, 0},
- { "-inf", 16, 0, 0},
- { "-inf", 36, -24171, 4},
- { "119b8Z", 0, 119, 3},
- { "119bZ", 0, 119, 3},
- { "-0119bZ", 0, -9, 4},
- { " \t\n 0X119bZ", 0, 4507, 10},
- { " \t\n +0X119bZ", 0, 4507, 11},
- { " \t\n -0x119bZ", 0, -4507, 11},
- { " \t\n 119bZ", 0, 119, 7},
- { "+119bZ", 0, 119, 4},
- { "+0X119bz", 0, 4507, 7},
- { "119b8Z", 2, 3, 2},
- { "119bZ", 2, 3, 2},
- { "-0119bZ", 2, -3, 4},
- { " \t\n 0X119bZ", 2, 0, 5},
- { " \t\n +0X119bZ", 2, 0, 6},
- { " \t\n -0x119bZ", 2, 0, 6},
- { " \t\n 119bZ", 2, 3, 6},
- { "+119bZ", 2, 3, 3},
- { "+0X119bz", 2, 0, 2},
- { "119b8Z", 8, 9, 2},
- { "119bZ", 8, 9, 2},
- { "-0119bZ", 8, -9, 4},
- { " \t\n 0X119bZ", 8, 0, 5},
- { " \t\n +0X119bZ", 8, 0, 6},
- { " \t\n -0x119bZ", 8, 0, 6},
- { " \t\n 119bZ", 8, 9, 6},
- { "+119bZ", 8, 9, 3},
- { "+0X119bz", 8, 0, 2},
- { "119b8Z", 9, 10, 2},
- { "119bZ", 9, 10, 2},
- { "-0119bZ", 9, -10, 4},
- { " \t\n 0X119bZ", 9, 0, 5},
- { " \t\n +0X119bZ", 9, 0, 6},
- { " \t\n -0x119bZ", 9, 0, 6},
- { " \t\n 119bZ", 9, 10, 6},
- { "+119bZ", 9, 10, 3},
- { "+0X119bz", 9, 0, 2},
- { "119b8Z", 10, 119, 3},
- { "119bZ", 10, 119, 3},
- { "-0119bZ", 10, -119, 5},
- { " \t\n 0X119bZ", 10, 0, 5},
- { " \t\n +0X119bZ", 10, 0, 6},
- { " \t\n -0x119bZ", 10, 0, 6},
- { " \t\n 119bZ", 10, 119, 7},
- { "+119bZ", 10, 119, 4},
- { "+0X119bz", 10, 0, 2},
- { "119b8Z", 16, 72120, 5},
- { "119bZ", 16, 4507, 4},
- { "-0119bZ", 16, -4507, 6},
- { " \t\n 0X119bZ", 16, 4507, 10},
- { " \t\n +0X119bZ", 16, 4507, 11},
- { " \t\n -0x119bZ", 16, -4507, 11},
- { " \t\n 119bZ", 16, 4507,8},
- { "+119bZ", 16, 4507, 5},
- { "+0X119bz", 16, 4507, 7},
- { "119b8Z", 36, 62580275, 6},
- { "119bZ", 36, 1738367, 5},
- { "-0119bZ", 36, -1738367, 7},
- { " \t\n 0X119bZ", 36, 1997122175, 11},
- { " \t\n +0X119bZ", 36, 1997122175, 12},
- { " \t\n -0x119bZ", 36, -1997122175, 12},
- { " \t\n 119bZ", 36, 1738367, 9},
- { "+119bZ", 36, 1738367, 6},
- { "+0X119bz", 36, 1997122175, 8},
- /* There should be a much larger battery of such tests. */
- { "127", 0, 127, 3},
- { "-127", 0, -127, 4},
- { "128", 0, 128, 3},
- { "-128", 0, -127-1, 4},
- { "255", 0, 255, 3},
- { "-255", 0, -255, 4},
- { "256", 0, 256, 3},
- { "-256", 0, -255-1, 4},
- { "32767", 0, 32767, 5},
- { "-32767", 0, -32767, 6},
- { "32768", 0, 32768, 5},
- { "-32768", 0, -32767-1, 6},
- { "65535", 0, 65535, 5},
- { "-65535", 0, -65536+1, 6},
- { "65536", 0, 65536, 5},
- { "-65536", 0, -65536, 6},
- { "2147483647", 0, 2147483647, 10},
- { "-2147483647", 0, -2147483647, 11},
- { "2147483648", 0, 2147483648LL, 10},
- { "-2147483648", 0, -2147483647LL-1, 11},
- { "4294967295", 0, 4294967295LL, 10},
- { "-4294967295", 0, -4294967296LL+1, 11},
- { "4294967296", 0, 4294967296LL, 10},
- { "-4294967296", 0, -4294967296L, 11},
- { "9223372036854775807", 0, 9223372036854775807LL, 19},
- { "-9223372036854775807", 0, -9223372036854775807LL, 20},
- { "1234567890123456789", 0, 1234567890123456789LL, 19},
- { "-1234567890123456789", 0, -1234567890123456789LL, 20},
- { "1", 0, 1, 1},
- { "-1", 0, -1, 2},
- { "2", 0, 2, 1},
- { "-2", 0, -2, 2},
- { "10", 0, 10, 2},
- { "-10", 0, -10, 3},
- { "16", 0, 16, 2},
- { "-16", 0, -16, 3},
- /* Other test cases can be added here. */
- { NULL, 0, 0, 0 } /* terminates the list */
- }, *sdp;
-
- for ( sdp = str_data; sdp->nptr != NULL ; ++sdp )
- {
- /*
- 7.8.2.3 The strtoimax and strtoumax functions
- */
-
- strcpy(saved, sdp->nptr);
-
- errno = 0; /* shouldn't be changed */
-
- if ( (intmax = strtoimax(sdp->nptr, &endptr, sdp->base))
- != sdp->exp_val
- ) {
- int save = errno;
-
- printf("*** strtoimax(%s,,%d) failed; should be: %"
- PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
- sdp->base, sdp->exp_val, intmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
- else if ( endptr != sdp->nptr + sdp->exp_len )
- {
- int save = errno;
-
- printf("*** strtoimax(%s,,%d) returned wrong endptr"
- " ***\n", sdp->nptr, sdp->base
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- printf("*** strtoimax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( strcmp(sdp->nptr, saved) != 0 )
- {
- printf("*** strtoimax modified its input ***\n");
- status = EXIT_FAILURE;
- strcpy(saved, sdp->nptr);
- }
-
- if ( sdp->exp_val >= 0 ) /* else some sign extension */
- {
- errno = 0; /* shouldn't be changed */
-
- if ( (uintmax = strtoumax(sdp->nptr, &endptr, sdp->base
- )
- ) != sdp->exp_val
- ) {
- int save = errno;
-
- printf("*** strtoumax(%s,,%d) failed; "
- "should be: %"PRIuMAX", was: %"PRIuMAX
- " ***\n", sdp->nptr, sdp->base,
- sdp->exp_val, uintmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
- else if ( endptr != sdp->nptr + sdp->exp_len )
- {
- int save = errno;
-
- printf("*** strtoumax(%s,,%d) returned wrong "
- "endptr ***\n", sdp->nptr, sdp->base
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- printf("*** strtoumax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( strcmp(sdp->nptr, saved) != 0 )
- {
- printf("*** strtoumax"
- " modified its input ***\n"
- );
- status = EXIT_FAILURE;
- strcpy(saved, sdp->nptr);
- }
- }
-
- /* tests for null endptr */
-
-#define WARN() if (!warned) warned = 1, printf("*** Using null endptr: ***\n")
-
- warned = 0;
- errno = 0; /* shouldn't be changed */
-
- if ( (intmax = strtoimax(sdp->nptr, (char **)NULL, sdp->base))
- != sdp->exp_val
- ) {
- int save = errno;
-
- WARN();
- printf("*** strtoimax(%s,NULL,%d) failed; "
- "should be: %"PRIdMAX", was: %"PRIdMAX" ***\n",
- sdp->nptr, sdp->base, sdp->exp_val, intmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- WARN();
- printf("*** strtoimax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( strcmp(sdp->nptr, saved) != 0 )
- {
- WARN();
- printf("*** strtoimax modified its input ***\n");
- status = EXIT_FAILURE;
- strcpy(saved, sdp->nptr);
- }
-
- if ( sdp->exp_val >= 0 ) /* else some sign extension */
- {
- errno = 0; /* shouldn't be changed */
-
- if ( (uintmax = strtoumax(sdp->nptr, (char **)NULL,
- sdp->base
- )
- ) != sdp->exp_val
- ) {
- int save = errno;
-
- WARN();
- printf("*** strtoumax(%s,NULL,%d) failed; "
- "should be: %"PRIuMAX", was: %"PRIuMAX
- " ***\n", sdp->nptr, sdp->base,
- sdp->exp_val, uintmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- WARN();
- printf("*** strtoumax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( strcmp(sdp->nptr, saved) != 0 )
- {
- WARN();
- printf("*** strtoumax"
- " modified its input ***\n"
- );
- status = EXIT_FAILURE;
- strcpy(saved, sdp->nptr);
- }
- }
-
- /*
- 7.8.2.4 The wcstoimax and wcstoumax functions
- */
-
- for ( i = 0; i < 64; ++i )
- if ( (wnptr[i] = sdp->nptr[i]) == '\0' )
- break;
-
- errno = 0; /* shouldn't be changed */
-
- if ( (intmax = wcstoimax(wnptr, &wendptr, sdp->base))
- != sdp->exp_val
- ) {
- int save = errno;
-
- printf("*** wcstoimax(%s,,%d) failed; should be: %"
- PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
- sdp->base, sdp->exp_val, intmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
- else if ( wendptr != wnptr + sdp->exp_len )
- {
- int save = errno;
-
- printf("*** wcstoimax(%s,,%d) returned wrong endptr"
- " ***\n", sdp->nptr, sdp->base
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- printf("*** wcstoimax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- for ( i = 0; i < 64; ++i )
- if ( wnptr[i] != sdp->nptr[i] )
- {
- printf("*** wcstoimax modified its input ***\n"
- );
- status = EXIT_FAILURE;
-
- for ( ; i < 64; ++i )
- if ( (wnptr[i] = sdp->nptr[i]) == '\0' )
- break;
-
- break;
- }
- else if ( wnptr[i] == '\0' )
- break;
-
- if ( sdp->exp_val >= 0 ) /* else some sign extension */
- {
- errno = 0; /* shouldn't be changed */
-
- if ( (uintmax = wcstoumax(wnptr, &wendptr, sdp->base)
- ) != sdp->exp_val
- ) {
- int save = errno;
-
- printf("*** wcstoumax(%s,,%d) failed; "
- "should be: %"PRIuMAX", was: %"PRIuMAX
- " ***\n", sdp->nptr, sdp->base,
- sdp->exp_val, uintmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
- else if ( wendptr != wnptr + sdp->exp_len )
- {
- int save = errno;
-
- printf("*** wcstoumax(%s,,%d) returned wrong "
- "endptr ***\n", sdp->nptr, sdp->base
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- printf("*** wcstoumax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- for ( i = 0; i < 64; ++i )
- if ( wnptr[i] != sdp->nptr[i] )
- {
- printf("*** wcstoumax"
- " modified its input ***\n"
- );
- status = EXIT_FAILURE;
-
- for ( ; i < 64; ++i )
- if ( (wnptr[i] = sdp->nptr[i])
- == '\0'
- )
- break;
-
- break;
- }
- else if ( wnptr[i] == '\0' )
- break;
- }
-
- /* tests for null endptr */
-
- warned = 0;
- errno = 0; /* shouldn't be changed */
-
- if ( (intmax = wcstoimax(wnptr, (wchar_t **)NULL, sdp->base))
- != sdp->exp_val
- ) {
- int save = errno;
-
- WARN();
- printf("*** wcstoimax(%s,NULL,%d) failed; should be: %"
- PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
- sdp->base, sdp->exp_val, intmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- WARN();
- printf("*** wcstoimax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- for ( i = 0; i < 64; ++i )
- if ( wnptr[i] != sdp->nptr[i] )
- {
- WARN();
- printf("*** wcstoimax modified its input ***\n"
- );
- status = EXIT_FAILURE;
-
- for ( ; i < 64; ++i )
- if ( (wnptr[i] = sdp->nptr[i])
- == '\0'
- )
- break;
-
- break;
- }
- else if ( wnptr[i] == '\0' )
- break;
-
- if ( sdp->exp_val >= 0 ) /* else some sign extension */
- {
- errno = 0; /* shouldn't be changed */
-
- if ( (uintmax = wcstoumax(wnptr, (wchar_t **)NULL,
- sdp->base
- )
- ) != sdp->exp_val
- ) {
- int save = errno;
-
- WARN();
- printf("*** wcstoumax(%s,NULL,%d) failed; "
- "should be: %"PRIuMAX", was: %"PRIuMAX
- " ***\n", sdp->nptr, sdp->base,
- sdp->exp_val, uintmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- WARN();
- printf("*** wcstoumax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- for ( i = 0; i < 64; ++i )
- if ( wnptr[i] != sdp->nptr[i] )
- {
- WARN();
- printf("*** wcstoumax"
- " modified its input ***\n"
- );
- status = EXIT_FAILURE;
-
- for ( ; i < 64; ++i )
- if ( (wnptr[i] = sdp->nptr[i])
- == '\0'
- )
- break;
-
- break;
- }
- else if ( wnptr[i] == '\0' )
- break;
- }
- }
-
- /*
- 7.8.2.3 The strtoimax and strtoumax functions (continued)
- */
-
- if ( (intmax = strtoimax("1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != INTMAX_MAX || errno != ERANGE
- ) {
- printf("*** strtoimax failed overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (intmax = strtoimax("+1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != INTMAX_MAX || errno != ERANGE
- ) {
- printf("*** strtoimax failed +overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (intmax = strtoimax("-1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != INTMAX_MIN || errno != ERANGE
- ) {
- printf("*** strtoimax failed -overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = strtoumax("1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** strtoumax failed overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = strtoumax("+1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** strtoumax failed +overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = strtoumax("-1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** strtoumax failed -overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- /*
- 7.8.2.4 The wcstoimax and wcstoumax functions (continued)
- */
-
- if ( (intmax = wcstoimax(L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != INTMAX_MAX || errno != ERANGE
- ) {
- printf("*** wcstoimax failed overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (intmax = wcstoimax(L"+1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != INTMAX_MAX || errno != ERANGE
- ) {
- printf("*** wcstoimax failed +overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (intmax = wcstoimax(L"-1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != INTMAX_MIN || errno != ERANGE
- ) {
- printf("*** wcstoimax failed -overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = wcstoumax(L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** wcstoumax failed overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = wcstoumax(L"+1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** wcstoumax failed +overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = wcstoumax(L"-1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** wcstoumax failed -overflow test ***\n");
- status = EXIT_FAILURE;
- }
- }
-#endif /* defined(INTMAX_MAX) */
-
- if ( status != 0 )
- fprintf(stderr, "sitest failed; see stdout for details\n");
-
- return status;
- }
diff --git a/winsup/mingw/mingwex/stdio/fopen64.c b/winsup/mingw/mingwex/stdio/fopen64.c
deleted file mode 100755
index d1dca885b..000000000
--- a/winsup/mingw/mingwex/stdio/fopen64.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-FILE* __cdecl
-fopen64 (const char* filename, const char* mode)
-{
- return fopen (filename, mode);
-}
diff --git a/winsup/mingw/mingwex/stdio/fprintf.c b/winsup/mingw/mingwex/stdio/fprintf.c
deleted file mode 100644
index 8e0582cb8..000000000
--- a/winsup/mingw/mingwex/stdio/fprintf.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* fprintf.c
- *
- * $Id$
- *
- * Provides an implementation of the "fprintf" function, conforming
- * generally to C99 and SUSv3/POSIX specifications, with extensions
- * to support Microsoft's non-standard format specifications. This
- * is included in libmingwex.a, whence it may replace the Microsoft
- * function of the same name.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This implementation of "fprintf" will normally be invoked by calling
- * "__mingw_fprintf()" in preference to a direct reference to "fprintf()"
- * itself; this leaves the MSVCRT implementation as the default, which
- * will be deployed when user code invokes "fprint()". Users who then
- * wish to use this implementation may either call "__mingw_fprintf()"
- * directly, or may use conditional preprocessor defines, to redirect
- * references to "fprintf()" to "__mingw_fprintf()".
- *
- * Compiling this module with "-D INSTALL_AS_DEFAULT" will change this
- * recommended convention, such that references to "fprintf()" in user
- * code will ALWAYS be redirected to "__mingw_fprintf()"; if this option
- * is adopted, then users wishing to use the MSVCRT implementation of
- * "fprintf()" will be forced to use a "back-door" mechanism to do so.
- * Such a "back-door" mechanism is provided with MinGW, allowing the
- * MSVCRT implementation to be called as "__msvcrt_fprintf()"; however,
- * since users may not expect this behaviour, a standard libmingwex.a
- * installation does not employ this option.
- *
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-#include <stdio.h>
-#include <stdarg.h>
-
-#include "pformat.h"
-
-int __cdecl __fprintf (FILE *, const char *, ...) __MINGW_NOTHROW;
-
-#ifdef INSTALL_AS_DEFAULT
-/*
- * This implementation is to become the default for calls to fprintf();
- * establish the alias to make this so, forcing users to use the back-door
- * __msvcrt_fprintf() reference, to access the original MSVCRT function.
- */
-int __cdecl __mingw_alias(fprintf) (FILE *, const char *, ...) __MINGW_NOTHROW;
-
-#endif
-
-int __cdecl __fprintf( FILE *stream, const char *fmt, ... )
-{
- register int retval;
- va_list argv; va_start( argv, fmt );
- retval = __pformat( PFORMAT_TO_FILE | PFORMAT_NOLIMIT, stream, 0, fmt, argv );
- va_end( argv );
- return retval;
-}
-
-/* $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/stdio/fseeko64.c b/winsup/mingw/mingwex/stdio/fseeko64.c
deleted file mode 100755
index d8dcc0c44..000000000
--- a/winsup/mingw/mingwex/stdio/fseeko64.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <stdio.h>
-#include <io.h>
-#include <errno.h>
-
-int __cdecl
-fseeko64 (FILE* stream, off64_t offset, int whence)
-{
- fpos_t pos;
- if (whence == SEEK_CUR)
- {
- /* If stream is invalid, fgetpos sets errno. */
- if (fgetpos (stream, &pos))
- return (-1);
- pos += (fpos_t) offset;
- }
- else if (whence == SEEK_END)
- {
- /* If writing, we need to flush before getting file length. */
- fflush (stream);
- pos = (fpos_t) (_filelengthi64 (_fileno (stream)) + offset);
- }
- else if (whence == SEEK_SET)
- pos = (fpos_t) offset;
- else
- {
- errno = EINVAL;
- return (-1);
- }
- return fsetpos (stream, &pos);
-}
diff --git a/winsup/mingw/mingwex/stdio/ftello64.c b/winsup/mingw/mingwex/stdio/ftello64.c
deleted file mode 100755
index 97a388cd6..000000000
--- a/winsup/mingw/mingwex/stdio/ftello64.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <stdio.h>
-
-off64_t __cdecl
-ftello64 (FILE * stream)
-{
- fpos_t pos;
- if (fgetpos(stream, &pos))
- return -1LL;
- else
- return ((off64_t) pos);
-}
diff --git a/winsup/mingw/mingwex/stdio/lseek64.c b/winsup/mingw/mingwex/stdio/lseek64.c
deleted file mode 100755
index 8f8bfa5e4..000000000
--- a/winsup/mingw/mingwex/stdio/lseek64.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <io.h>
-
-off64_t lseek64
-(int fd, off64_t offset, int whence)
-{
- return _lseeki64(fd, (__int64) offset, whence);
-}
-
diff --git a/winsup/mingw/mingwex/stdio/pformat.c b/winsup/mingw/mingwex/stdio/pformat.c
deleted file mode 100644
index de1daa91f..000000000
--- a/winsup/mingw/mingwex/stdio/pformat.c
+++ /dev/null
@@ -1,2488 +0,0 @@
-/* FIXME: to be removed one day; for now we explicitly are not
- * prepared to support the POSIX-XSI additions to the C99 standard.
- */
-#undef WITH_XSI_FEATURES
-
-/* pformat.c
- *
- * $Id$
- *
- * Provides a core implementation of the formatting capabilities
- * common to the entire `printf()' family of functions; it conforms
- * generally to C99 and SUSv3/POSIX specifications, with extensions
- * to support Microsoft's non-standard format specifications.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- * The elements of this implementation which deal with the formatting
- * of floating point numbers, (i.e. the `%e', `%E', `%f', `%F', `%g'
- * and `%G' format specifiers, but excluding the hexadecimal floating
- * point `%a' and `%A' specifiers), make use of the `__gdtoa' function
- * written by David M. Gay, and are modelled on his sample code, which
- * has been deployed under its accompanying terms of use:--
- *
- ******************************************************************
- * Copyright (C) 1997, 1999, 2001 Lucent Technologies
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice appear in all
- * copies and that both that the copyright notice and this
- * permission notice and warranty disclaimer appear in supporting
- * documentation, and that the name of Lucent or any of its entities
- * not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission.
- *
- * LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
- * IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- ******************************************************************
- *
- */
-#include <stdio.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <locale.h>
-#include <wchar.h>
-#include <math.h>
-
-/* FIXME: The following belongs in values.h, but current MinGW
- * has nothing useful there! OTOH, values.h is not a standard
- * header, and it's use may be considered obsolete; perhaps it
- * is better to just keep these definitions here.
- */
-#ifndef _VALUES_H
-/*
- * values.h
- *
- */
-#define _VALUES_H
-
-#include <limits.h>
-
-#define _TYPEBITS(type) (sizeof(type) * CHAR_BIT)
-
-#define LLONGBITS _TYPEBITS(long long)
-
-#endif /* !defined _VALUES_H -- end of file */
-
-#include "pformat.h"
-
-/* Bit-map constants, defining the internal format control
- * states, which propagate through the flags.
- */
-#define PFORMAT_HASHED 0x0800
-#define PFORMAT_LJUSTIFY 0x0400
-#define PFORMAT_ZEROFILL 0x0200
-
-#define PFORMAT_JUSTIFY (PFORMAT_LJUSTIFY | PFORMAT_ZEROFILL)
-#define PFORMAT_IGNORE -1
-
-#define PFORMAT_SIGNED 0x01C0
-#define PFORMAT_POSITIVE 0x0100
-#define PFORMAT_NEGATIVE 0x0080
-#define PFORMAT_ADDSPACE 0x0040
-
-#define PFORMAT_XCASE 0x0020
-
-#define PFORMAT_LDOUBLE 0x0004
-
-/* `%o' format digit extraction mask, and shift count...
- * (These are constant, and do not propagate through the flags).
- */
-#define PFORMAT_OMASK 0x0007
-#define PFORMAT_OSHIFT 0x0003
-
-/* `%x' and `%X' format digit extraction mask, and shift count...
- * (These are constant, and do not propagate through the flags).
- */
-#define PFORMAT_XMASK 0x000F
-#define PFORMAT_XSHIFT 0x0004
-
-/* The radix point character, used in floating point formats, is
- * localised on the basis of the active LC_NUMERIC locale category.
- * It is stored locally, as a `wchar_t' entity, which is converted
- * to a (possibly multibyte) character on output. Initialisation
- * of the stored `wchar_t' entity, together with a record of its
- * effective multibyte character length, is required each time
- * `__pformat()' is entered, (static storage would not be thread
- * safe), but this initialisation is deferred until it is actually
- * needed; on entry, the effective character length is first set to
- * the following value, (and the `wchar_t' entity is zeroed), to
- * indicate that a call of `localeconv()' is needed, to complete
- * the initialisation.
- */
-#define PFORMAT_RPINIT -3
-
-/* The floating point format handlers return the following value
- * for the radix point position index, when the argument value is
- * infinite, or not a number.
- */
-#define PFORMAT_INFNAN -32768
-
-#ifdef _WIN32
-/*
- * The Microsoft standard for printing `%e' format exponents is
- * with a minimum of three digits, unless explicitly set otherwise,
- * by a prior invocation of the `_set_output_format()' function.
- *
- * The following macro allows us to replicate this behaviour.
- */
-# define PFORMAT_MINEXP __pformat_exponent_digits()
- /*
- * However, this feature is unsupported for versions of the
- * MSVC runtime library prior to msvcr80.dll, and by default,
- * MinGW uses an earlier version, (equivalent to msvcr60.dll),
- * for which `_TWO_DIGIT_EXPONENT' will be undefined.
- */
-# ifndef _TWO_DIGIT_EXPONENT
- /*
- * This hack works around the lack of the `_set_output_format()'
- * feature, when supporting versions of the MSVC runtime library
- * prior to msvcr80.dll; it simply enforces Microsoft's original
- * convention, for all cases where the feature is unsupported.
- */
-# define _get_output_format() 0
-# define _TWO_DIGIT_EXPONENT 1
-# endif
-/*
- * Irrespective of the MSVCRT version supported, *we* will add
- * an additional capability, through the following inline function,
- * which will allow the user to choose his own preferred default
- * for `PRINTF_EXPONENT_DIGITS', through the simple expedient
- * of defining it as an environment variable.
- */
-static __inline__ __attribute__((__always_inline__))
-int __pformat_exponent_digits( void )
-{
- char *exponent_digits = getenv( "PRINTF_EXPONENT_DIGITS" );
- return ((exponent_digits != NULL) && ((unsigned)(*exponent_digits - '0') < 3))
- || (_get_output_format() & _TWO_DIGIT_EXPONENT)
- ? 2
- : 3
- ;
-}
-#else
-/*
- * When we don't care to mimic Microsoft's standard behaviour,
- * we adopt the C99/POSIX standard of two digit exponents.
- */
-# define PFORMAT_MINEXP 2
-#endif
-
-typedef union
-{
- /* A data type agnostic representation,
- * for printf arguments of any integral data type...
- */
- signed long __pformat_long_t;
- signed long long __pformat_llong_t;
- unsigned long __pformat_ulong_t;
- unsigned long long __pformat_ullong_t;
- unsigned short __pformat_ushort_t;
- unsigned char __pformat_uchar_t;
- signed short __pformat_short_t;
- signed char __pformat_char_t;
- void * __pformat_ptr_t;
-} __pformat_intarg_t;
-
-typedef enum
-{
- /* Format interpreter state indices...
- * (used to identify the active phase of format string parsing).
- */
- PFORMAT_INIT = 0,
- PFORMAT_SET_WIDTH,
- PFORMAT_GET_PRECISION,
- PFORMAT_SET_PRECISION,
- PFORMAT_END
-} __pformat_state_t;
-
-typedef enum
-{
- /* Argument length classification indices...
- * (used for arguments representing integer data types).
- */
- PFORMAT_LENGTH_INT = 0,
- PFORMAT_LENGTH_SHORT,
- PFORMAT_LENGTH_LONG,
- PFORMAT_LENGTH_LLONG,
- PFORMAT_LENGTH_CHAR
-} __pformat_length_t;
-/*
- * And a macro to map any arbitrary data type to an appropriate
- * matching index, selected from those above; the compiler should
- * collapse this to a simple assignment.
- */
-#define __pformat_arg_length( type ) \
- sizeof( type ) == sizeof( long long ) ? PFORMAT_LENGTH_LLONG : \
- sizeof( type ) == sizeof( long ) ? PFORMAT_LENGTH_LONG : \
- sizeof( type ) == sizeof( short ) ? PFORMAT_LENGTH_SHORT : \
- sizeof( type ) == sizeof( char ) ? PFORMAT_LENGTH_CHAR : \
- /* should never need this default */ PFORMAT_LENGTH_INT
-
-typedef struct
-{
- /* Formatting and output control data...
- * An instance of this control block is created, (on the stack),
- * for each call to `__pformat()', and is passed by reference to
- * each of the output handlers, as required.
- */
- void * dest;
- int flags;
- int width;
- int precision;
- int rplen;
- wchar_t rpchr;
- int count;
- int quota;
- int expmin;
-} __pformat_t;
-
-static
-void __pformat_putc( int c, __pformat_t *stream )
-{
- /* Place a single character into the `__pformat()' output queue,
- * provided any specified output quota has not been exceeded.
- */
- if( (stream->flags & PFORMAT_NOLIMIT) || (stream->quota > stream->count) )
- {
- /* Either there was no quota specified,
- * or the active quota has not yet been reached.
- */
- if( stream->flags & PFORMAT_TO_FILE )
- /*
- * This is single character output to a FILE stream...
- */
- fputc( c, (FILE *)(stream->dest) );
-
- else
- /* Whereas, this is to an internal memory buffer...
- */
- ((char *)(stream->dest))[stream->count] = c;
- }
- ++stream->count;
-}
-
-static
-void __pformat_putchars( const char *s, int count, __pformat_t *stream )
-{
- /* Handler for `%c' and (indirectly) `%s' conversion specifications.
- *
- * Transfer characters from the string buffer at `s', character by
- * character, up to the number of characters specified by `count', or
- * if `precision' has been explicitly set to a value less than `count',
- * stopping after the number of characters specified for `precision',
- * to the `__pformat()' output stream.
- *
- * Characters to be emitted are passed through `__pformat_putc()', to
- * ensure that any specified output quota is honoured.
- */
- if( (stream->precision >= 0) && (count > stream->precision) )
- /*
- * Ensure that the maximum number of characters transferred doesn't
- * exceed any explicitly set `precision' specification.
- */
- count = stream->precision;
-
- /* Establish the width of any field padding required...
- */
- if( stream->width > count )
- /*
- * as the number of spaces equivalent to the number of characters
- * by which those to be emitted is fewer than the field width...
- */
- stream->width -= count;
-
- else
- /* ignoring any width specification which is insufficient.
- */
- stream->width = PFORMAT_IGNORE;
-
- if( (stream->width > 0) && ((stream->flags & PFORMAT_LJUSTIFY) == 0) )
- /*
- * When not doing flush left justification, (i.e. the `-' flag
- * is not set), any residual unreserved field width must appear
- * as blank padding, to the left of the output string.
- */
- while( stream->width-- )
- __pformat_putc( '\x20', stream );
-
- /* Emit the data...
- */
- while( count-- )
- /*
- * copying the requisite number of characters from the input.
- */
- __pformat_putc( *s++, stream );
-
- /* If we still haven't consumed the entire specified field width,
- * we must be doing flush left justification; any residual width
- * must be filled with blanks, to the right of the output value.
- */
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
-}
-
-static __inline__
-void __pformat_puts( const char *s, __pformat_t *stream )
-{
- /* Handler for `%s' conversion specifications.
- *
- * Transfer a NUL terminated character string, character by character,
- * stopping when the end of the string is encountered, or if `precision'
- * has been explicitly set, when the specified number of characters has
- * been emitted, if that is less than the length of the input string,
- * to the `__pformat()' output stream.
- *
- * This is implemented as a trivial call to `__pformat_putchars()',
- * passing the length of the input string as the character count,
- * (after first verifying that the input pointer is not NULL).
- */
- if( s == NULL ) s = "(null)";
- __pformat_putchars( s, strlen( s ), stream );
-}
-
-static
-void __pformat_wputchars( const wchar_t *s, int count, __pformat_t *stream )
-{
- /* Handler for `%C'(`%lc') and `%S'(`%ls') conversion specifications;
- * (this is a wide character variant of `__pformat_putchars()').
- *
- * Each multibyte character sequence to be emitted is passed, byte
- * by byte, through `__pformat_putc()', to ensure that any specified
- * output quota is honoured.
- */
- char buf[16]; mbstate_t state; int len = wcrtomb( buf, L'\0', &state );
-
- if( (stream->precision >= 0) && (count > stream->precision) )
- /*
- * Ensure that the maximum number of characters transferred doesn't
- * exceed any explicitly set `precision' specification.
- */
- count = stream->precision;
-
- /* Establish the width of any field padding required...
- */
- if( stream->width > count )
- /*
- * as the number of spaces equivalent to the number of characters
- * by which those to be emitted is fewer than the field width...
- */
- stream->width -= count;
-
- else
- /* ignoring any width specification which is insufficient.
- */
- stream->width = PFORMAT_IGNORE;
-
- if( (stream->width > 0) && ((stream->flags & PFORMAT_LJUSTIFY) == 0) )
- /*
- * When not doing flush left justification, (i.e. the `-' flag
- * is not set), any residual unreserved field width must appear
- * as blank padding, to the left of the output string.
- */
- while( stream->width-- )
- __pformat_putc( '\x20', stream );
-
- /* Emit the data, converting each character from the wide
- * to the multibyte domain as we go...
- */
- while( (count-- > 0) && ((len = wcrtomb( buf, *s++, &state )) > 0) )
- {
- char *p = buf;
- while( len-- > 0 )
- __pformat_putc( *p++, stream );
- }
-
- /* If we still haven't consumed the entire specified field width,
- * we must be doing flush left justification; any residual width
- * must be filled with blanks, to the right of the output value.
- */
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
-}
-
-static __inline__ __attribute__((__always_inline__))
-void __pformat_wcputs( const wchar_t *s, __pformat_t *stream )
-{
- /* Handler for `%S' (`%ls') conversion specifications.
- *
- * Transfer a NUL terminated wide character string, character by
- * character, converting to its equivalent multibyte representation
- * on output, and stopping when the end of the string is encountered,
- * or if `precision' has been explicitly set, when the specified number
- * of characters has been emitted, if that is less than the length of
- * the input string, to the `__pformat()' output stream.
- *
- * This is implemented as a trivial call to `__pformat_wputchars()',
- * passing the length of the input string as the character count,
- * (after first verifying that the input pointer is not NULL).
- */
- if( s == NULL ) s = L"(null)";
- __pformat_wputchars( s, wcslen( s ), stream );
-}
-
-static __inline__
-int __pformat_int_bufsiz( int bias, int size, __pformat_t *stream )
-{
- /* Helper to establish the size of the internal buffer, which
- * is required to queue the ASCII decomposition of an integral
- * data value, prior to transfer to the output stream.
- */
- size = ((size - 1 + LLONGBITS) / size) + bias;
- size += (stream->precision > 0) ? stream->precision : 0;
- return (size > stream->width) ? size : stream->width;
-}
-
-static
-void __pformat_int( __pformat_intarg_t value, __pformat_t *stream )
-{
- /* Handler for `%d', `%i' and `%u' conversion specifications.
- *
- * Transfer the ASCII representation of an integer value parameter,
- * formatted as a decimal number, to the `__pformat()' output queue;
- * output will be truncated, if any specified quota is exceeded.
- */
- char buf[__pformat_int_bufsiz(1, PFORMAT_OSHIFT, stream)];
- char *p = buf; int precision;
-
- if( stream->flags & PFORMAT_NEGATIVE )
- {
- /* The input value might be negative, (i.e. it is a signed value)...
- */
- if( value.__pformat_llong_t < 0LL )
- /*
- * It IS negative, but we want to encode it as unsigned,
- * displayed with a leading minus sign, so convert it...
- */
- value.__pformat_llong_t = -value.__pformat_llong_t;
-
- else
- /* It is unequivocally a POSITIVE value, so turn off the
- * request to prefix it with a minus sign...
- */
- stream->flags &= ~PFORMAT_NEGATIVE;
- }
-
- /* Encode the input value for display...
- */
- while( value.__pformat_ullong_t )
- {
- /* decomposing it into its constituent decimal digits,
- * in order from least significant to most significant, using
- * the local buffer as a LIFO queue in which to store them.
- */
- *p++ = '0' + (unsigned char)(value.__pformat_ullong_t % 10LL);
- value.__pformat_ullong_t /= 10LL;
- }
-
- if( (stream->precision > 0)
- && ((precision = stream->precision - (p - buf)) > 0) )
- /*
- * We have not yet queued sufficient digits to fill the field width
- * specified for minimum `precision'; pad with zeros to achieve this.
- */
- while( precision-- > 0 )
- *p++ = '0';
-
- if( (p == buf) && (stream->precision != 0) )
- /*
- * Input value was zero; make sure we print at least one digit,
- * unless the precision is also explicitly zero.
- */
- *p++ = '0';
-
- if( (stream->width > 0) && ((stream->width -= p - buf) > 0) )
- {
- /* We have now queued sufficient characters to display the input value,
- * at the desired precision, but this will not fill the output field...
- */
- if( stream->flags & PFORMAT_SIGNED )
- /*
- * We will fill one additional space with a sign...
- */
- stream->width--;
-
- if( (stream->precision < 0)
- && ((stream->flags & PFORMAT_JUSTIFY) == PFORMAT_ZEROFILL) )
- /*
- * and the `0' flag is in effect, so we pad the remaining spaces,
- * to the left of the displayed value, with zeros.
- */
- while( stream->width-- > 0 )
- *p++ = '0';
-
- else if( (stream->flags & PFORMAT_LJUSTIFY) == 0 )
- /*
- * the `0' flag is not in effect, and neither is the `-' flag,
- * so we pad to the left of the displayed value with spaces, so that
- * the value appears right justified within the output field.
- */
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
- }
-
- if( stream->flags & PFORMAT_NEGATIVE )
- /*
- * A negative value needs a sign...
- */
- *p++ = '-';
-
- else if( stream->flags & PFORMAT_POSITIVE )
- /*
- * A positive value may have an optionally displayed sign...
- */
- *p++ = '+';
-
- else if( stream->flags & PFORMAT_ADDSPACE )
- /*
- * Space was reserved for displaying a sign, but none was emitted...
- */
- *p++ = '\x20';
-
- while( p > buf )
- /*
- * Emit the accumulated constituent digits,
- * in order from most significant to least significant...
- */
- __pformat_putc( *--p, stream );
-
- while( stream->width-- > 0 )
- /*
- * The specified output field has not yet been completely filled;
- * the `-' flag must be in effect, resulting in a displayed value which
- * appears left justified within the output field; we must pad the field
- * to the right of the displayed value, by emitting additional spaces,
- * until we reach the rightmost field boundary.
- */
- __pformat_putc( '\x20', stream );
-}
-
-static
-void __pformat_xint( int fmt, __pformat_intarg_t value, __pformat_t *stream )
-{
- /* Handler for `%o', `%p', `%x' and `%X' conversions.
- *
- * These can be implemented using a simple `mask and shift' strategy;
- * set up the mask and shift values appropriate to the conversion format,
- * and allocate a suitably sized local buffer, in which to queue encoded
- * digits of the formatted value, in preparation for output.
- */
- int width;
- int mask = (fmt == 'o') ? PFORMAT_OMASK : PFORMAT_XMASK;
- int shift = (fmt == 'o') ? PFORMAT_OSHIFT : PFORMAT_XSHIFT;
- char buf[__pformat_int_bufsiz(2, shift, stream)];
- char *p = buf;
-
- while( value.__pformat_ullong_t )
- {
- /* Encode the specified non-zero input value as a sequence of digits,
- * in the appropriate `base' encoding and in reverse digit order, each
- * encoded in its printable ASCII form, with no leading zeros, using
- * the local buffer as a LIFO queue in which to store them.
- */
- char *q;
- if( (*(q = p++) = '0' + (value.__pformat_ullong_t & mask)) > '9' )
- *q = (*q + 'A' - '9' - 1) | (fmt & PFORMAT_XCASE);
- value.__pformat_ullong_t >>= shift;
- }
-
- if( p == buf )
- /*
- * Nothing was queued; input value must be zero, which should never be
- * emitted in the `alternative' PFORMAT_HASHED style.
- */
- stream->flags &= ~PFORMAT_HASHED;
-
- if( ((width = stream->precision) > 0) && ((width -= p - buf) > 0) )
- /*
- * We have not yet queued sufficient digits to fill the field width
- * specified for minimum `precision'; pad with zeros to achieve this.
- */
- while( width-- > 0 )
- *p++ = '0';
-
- else if( (fmt == 'o') && (stream->flags & PFORMAT_HASHED) )
- /*
- * The field width specified for minimum `precision' has already
- * been filled, but the `alternative' PFORMAT_HASHED style for octal
- * output requires at least one initial zero; that will not have
- * been queued, so add it now.
- */
- *p++ = '0';
-
- if( (p == buf) && (stream->precision != 0) )
- /*
- * Still nothing queued for output, but the `precision' has not been
- * explicitly specified as zero, (which is necessary if no output for
- * an input value of zero is desired); queue exactly one zero digit.
- */
- *p++ = '0';
-
- if( stream->width > (width = p - buf) )
- /*
- * Specified field width exceeds the minimum required...
- * Adjust so that we retain only the additional padding width.
- */
- stream->width -= width;
-
- else
- /* Ignore any width specification which is insufficient.
- */
- stream->width = PFORMAT_IGNORE;
-
- if( ((width = stream->width) > 0)
- && (fmt != 'o') && (stream->flags & PFORMAT_HASHED) )
- /*
- * For `%#x' or `%#X' formats, (which have the `#' flag set),
- * further reduce the padding width to accommodate the radix
- * indicating prefix.
- */
- width -= 2;
-
- if( (width > 0) && (stream->precision < 0)
- && ((stream->flags & PFORMAT_JUSTIFY) == PFORMAT_ZEROFILL) )
- /*
- * When the `0' flag is set, and not overridden by the `-' flag,
- * or by a specified precision, add sufficient leading zeros to
- * consume the remaining field width.
- */
- while( width-- > 0 )
- *p++ = '0';
-
- if( (fmt != 'o') && (stream->flags & PFORMAT_HASHED) )
- {
- /* For formats other than octal, the PFORMAT_HASHED output style
- * requires the addition of a two character radix indicator, as a
- * prefix to the actual encoded numeric value.
- */
- *p++ = fmt;
- *p++ = '0';
- }
-
- if( (width > 0) && ((stream->flags & PFORMAT_LJUSTIFY) == 0) )
- /*
- * When not doing flush left justification, (i.e. the `-' flag
- * is not set), any residual unreserved field width must appear
- * as blank padding, to the left of the output value.
- */
- while( width-- > 0 )
- __pformat_putc( '\x20', stream );
-
- while( p > buf )
- /*
- * Move the queued output from the local buffer to the ultimate
- * destination, in LIFO order.
- */
- __pformat_putc( *--p, stream );
-
- /* If we still haven't consumed the entire specified field width,
- * we must be doing flush left justification; any residual width
- * must be filled with blanks, to the right of the output value.
- */
- while( width-- > 0 )
- __pformat_putc( '\x20', stream );
-}
-
-typedef union
-{
- /* A multifaceted representation of an IEEE extended precision,
- * (80-bit), floating point number, facilitating access to its
- * component parts.
- */
- double __pformat_fpreg_double_t;
- long double __pformat_fpreg_ldouble_t;
- struct
- { unsigned long long __pformat_fpreg_mantissa;
- signed short __pformat_fpreg_exponent;
- };
- unsigned short __pformat_fpreg_bitmap[5];
- unsigned long __pformat_fpreg_bits;
-} __pformat_fpreg_t;
-
-#ifdef _WIN32
-/* TODO: make this unconditional in final release...
- * (see note at head of associated `#else' block.
- */
-#include "gdtoa.h"
-
-static
-char *__pformat_cvt( int mode, __pformat_fpreg_t x, int nd, int *dp, int *sign )
-{
- /* Helper function, derived from David M. Gay's `g_xfmt()', calling
- * his `__gdtoa()' function in a manner to provide extended precision
- * replacements for `ecvt()' and `fcvt()'.
- */
- int k; unsigned int e = 0; char *ep;
- static FPI fpi = { 64, 1-16383-64+1, 32766-16383-64+1, FPI_Round_near, 0 };
-
- /* Classify the argument into an appropriate `__gdtoa()' category...
- */
- if( (k = __fpclassifyl( x.__pformat_fpreg_ldouble_t )) & FP_NAN )
- /*
- * identifying infinities or not-a-number...
- */
- k = (k & FP_NORMAL) ? STRTOG_Infinite : STRTOG_NaN;
-
- else if( k & FP_NORMAL )
- {
- /* normal and near-zero `denormals'...
- */
- if( k & FP_ZERO )
- {
- /* with appropriate exponent adjustment for a `denormal'...
- */
- k = STRTOG_Denormal;
- e = 1 - 0x3FFF - 63;
- }
- else
- {
- /* or with `normal' exponent adjustment...
- */
- k = STRTOG_Normal;
- e = (x.__pformat_fpreg_exponent & 0x7FFF) - 0x3FFF - 63;
- }
- }
-
- else
- /* or, if none of the above, it's a zero, (positive or negative).
- */
- k = STRTOG_Zero;
-
- /* Check for negative values, always treating NaN as unsigned...
- * (return value is zero for positive/unsigned; non-zero for negative).
- */
- *sign = (k == STRTOG_NaN) ? 0 : x.__pformat_fpreg_exponent & 0x8000;
-
- /* Finally, get the raw digit string, and radix point position index.
- */
- return __gdtoa( &fpi, e, &x.__pformat_fpreg_bits, &k, mode, nd, dp, &ep );
-}
-
-static __inline__ __attribute__((__always_inline__))
-char *__pformat_ecvt( long double x, int precision, int *dp, int *sign )
-{
- /* A convenience wrapper for the above...
- * it emulates `ecvt()', but takes a `long double' argument.
- */
- __pformat_fpreg_t z; z.__pformat_fpreg_ldouble_t = x;
- return __pformat_cvt( 2, z, precision, dp, sign );
-}
-
-static __inline__ __attribute__((__always_inline__))
-char *__pformat_fcvt( long double x, int precision, int *dp, int *sign )
-{
- /* A convenience wrapper for the above...
- * it emulates `fcvt()', but takes a `long double' argument.
- */
- __pformat_fpreg_t z; z.__pformat_fpreg_ldouble_t = x;
- return __pformat_cvt( 3, z, precision, dp, sign );
-}
-
-/* The following are required, to clean up the `__gdtoa()' memory pool,
- * after processing the data returned by the above.
- */
-#define __pformat_ecvt_release( value ) __freedtoa( value )
-#define __pformat_fcvt_release( value ) __freedtoa( value )
-
-#else
-/*
- * TODO: remove this before final release; it is included here as a
- * convenience for testing, without requiring a working `__gdtoa()'.
- */
-static __inline__
-char *__pformat_ecvt( long double x, int precision, int *dp, int *sign )
-{
- /* Define in terms of `ecvt()'...
- */
- char *retval = ecvt( (double)(x), precision, dp, sign );
- if( isinf( x ) || isnan( x ) )
- {
- /* emulating `__gdtoa()' reporting for infinities and NaN.
- */
- *dp = PFORMAT_INFNAN;
- if( *retval == '-' )
- {
- /* Need to force the `sign' flag, (particularly for NaN).
- */
- ++retval; *sign = 1;
- }
- }
- return retval;
-}
-
-static __inline__
-char *__pformat_fcvt( long double x, int precision, int *dp, int *sign )
-{
- /* Define in terms of `fcvt()'...
- */
- char *retval = fcvt( (double)(x), precision, dp, sign );
- if( isinf( x ) || isnan( x ) )
- {
- /* emulating `__gdtoa()' reporting for infinities and NaN.
- */
- *dp = PFORMAT_INFNAN;
- if( *retval == '-' )
- {
- /* Need to force the `sign' flag, (particularly for NaN).
- */
- ++retval; *sign = 1;
- }
- }
- return retval;
-}
-
-/* No memory pool clean up needed, for these emulated cases...
- */
-#define __pformat_ecvt_release( value ) /* nothing to be done */
-#define __pformat_fcvt_release( value ) /* nothing to be done */
-
-/* TODO: end of conditional to be removed. */
-#endif
-
-static __inline__
-void __pformat_emit_radix_point( __pformat_t *stream )
-{
- /* Helper to place a localised representation of the radix point
- * character at the ultimate destination, when formatting fixed or
- * floating point numbers.
- */
- if( stream->rplen == PFORMAT_RPINIT )
- {
- /* Radix point initialisation not yet completed;
- * establish a multibyte to `wchar_t' converter...
- */
- int len; wchar_t rpchr; mbstate_t state;
-
- /* Initialise the conversion state...
- */
- memset( &state, 0, sizeof( state ) );
-
- /* Fetch and convert the localised radix point representation...
- */
- if( (len = mbrtowc( &rpchr, localeconv()->decimal_point, 16, &state )) > 0 )
- /*
- * and store it, if valid.
- */
- stream->rpchr = rpchr;
-
- /* In any case, store the reported effective multibyte length,
- * (or the error flag), marking initialisation as `done'.
- */
- stream->rplen = len;
- }
-
- if( stream->rpchr != (wchar_t)(0) )
- {
- /* We have a localised radix point mark;
- * establish a converter to make it a multibyte character...
- */
- int len; char buf[len = stream->rplen]; mbstate_t state;
-
- /* Initialise the conversion state...
- */
- memset( &state, 0, sizeof( state ) );
-
- /* Convert the `wchar_t' representation to multibyte...
- */
- if( (len = wcrtomb( buf, stream->rpchr, &state )) > 0 )
- {
- /* and copy to the output destination, when valid...
- */
- char *p = buf;
- while( len-- > 0 )
- __pformat_putc( *p++, stream );
- }
-
- else
- /* otherwise fall back to plain ASCII '.'...
- */
- __pformat_putc( '.', stream );
- }
-
- else
- /* No localisation: just use ASCII '.'...
- */
- __pformat_putc( '.', stream );
-}
-
-static __inline__ __attribute__((__always_inline__))
-void __pformat_emit_numeric_value( int c, __pformat_t *stream )
-{
- /* Convenience helper to transfer numeric data from an internal
- * formatting buffer to the ultimate destination...
- */
- if( c == '.' )
- /*
- * converting this internal representation of the the radix
- * point to the appropriately localised representation...
- */
- __pformat_emit_radix_point( stream );
-
- else
- /* and passing all other characters through, unmodified.
- */
- __pformat_putc( c, stream );
-}
-
-static
-void __pformat_emit_inf_or_nan( int sign, char *value, __pformat_t *stream )
-{
- /* Helper to emit INF or NAN where a floating point value
- * resolves to one of these special states.
- */
- int i;
- char buf[4];
- char *p = buf;
-
- /* We use the string formatting helper to display INF/NAN,
- * but we don't want truncation if the precision set for the
- * original floating point output request was insufficient;
- * ignore it!
- */
- stream->precision = PFORMAT_IGNORE;
-
- if( sign )
- /*
- * Negative infinity: emit the sign...
- */
- *p++ = '-';
-
- else if( stream->flags & PFORMAT_POSITIVE )
- /*
- * Not negative infinity, but '+' flag is in effect;
- * thus, we emit a positive sign...
- */
- *p++ = '+';
-
- else if( stream->flags & PFORMAT_ADDSPACE )
- /*
- * No sign required, but space was reserved for it...
- */
- *p++ = '\x20';
-
- /* Copy the appropriate status indicator, up to a maximum of
- * three characters, transforming to the case corresponding to
- * the format specification...
- */
- for( i = 3; i > 0; --i )
- *p++ = (*value++ & ~PFORMAT_XCASE) | (stream->flags & PFORMAT_XCASE);
-
- /* and emit the result.
- */
- __pformat_putchars( buf, p - buf, stream );
-}
-
-static
-void __pformat_emit_float( int sign, char *value, int len, __pformat_t *stream )
-{
- /* Helper to emit a fixed point representation of numeric data,
- * as encoded by a prior call to `ecvt()' or `fcvt()'; (this does
- * NOT include the exponent, for floating point format).
- */
- if( len > 0 )
- {
- /* The magnitude of `x' is greater than or equal to 1.0...
- * reserve space in the output field, for the required number of
- * decimal digits to be placed before the decimal point...
- */
- if( stream->width > len )
- /*
- * adjusting as appropriate, when width is sufficient...
- */
- stream->width -= len;
-
- else
- /* or simply ignoring the width specification, if not.
- */
- stream->width = PFORMAT_IGNORE;
- }
-
- else if( stream->width > 0 )
- /*
- * The magnitude of `x' is less than 1.0...
- * reserve space for exactly one zero before the decimal point.
- */
- stream->width--;
-
- /* Reserve additional space for the digits which will follow the
- * decimal point...
- */
- if( (stream->width >= 0) && (stream->width > stream->precision) )
- /*
- * adjusting appropriately, when sufficient width remains...
- * (note that we must check both of these conditions, because
- * precision may be more negative than width, as a result of
- * adjustment to provide extra padding when trailing zeros
- * are to be discarded from "%g" format conversion with a
- * specified field width, but if width itself is negative,
- * then there is explicitly to be no padding anyway).
- */
- stream->width -= stream->precision;
-
- else
- /* or again, ignoring the width specification, if not.
- */
- stream->width = PFORMAT_IGNORE;
-
- /* Reserve space in the output field, for display of the decimal point,
- * unless the precision is explicity zero, with the `#' flag not set.
- */
- if( (stream->width > 0)
- && ((stream->precision > 0) || (stream->flags & PFORMAT_HASHED)) )
- stream->width--;
-
- /* Reserve space in the output field, for display of the sign of the
- * formatted value, if required; (i.e. if the value is negative, or if
- * either the `space' or `+' formatting flags are set).
- */
- if( (stream->width > 0) && (sign || (stream->flags & PFORMAT_SIGNED)) )
- stream->width--;
-
- /* Emit any padding space, as required to correctly right justify
- * the output within the alloted field width.
- */
- if( (stream->width > 0) && ((stream->flags & PFORMAT_JUSTIFY) == 0) )
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
-
- /* Emit the sign indicator, as appropriate...
- */
- if( sign )
- /*
- * mandatory, for negative values...
- */
- __pformat_putc( '-', stream );
-
- else if( stream->flags & PFORMAT_POSITIVE )
- /*
- * optional, for positive values...
- */
- __pformat_putc( '+', stream );
-
- else if( stream->flags & PFORMAT_ADDSPACE )
- /*
- * or just fill reserved space, when the space flag is in effect.
- */
- __pformat_putc( '\x20', stream );
-
- /* If the `0' flag is in effect, and not overridden by the `-' flag,
- * then zero padding, to fill out the field, goes here...
- */
- if( (stream->width > 0)
- && ((stream->flags & PFORMAT_JUSTIFY) == PFORMAT_ZEROFILL) )
- while( stream->width-- > 0 )
- __pformat_putc( '0', stream );
-
- /* Emit the digits of the encoded numeric value...
- */
- if( len > 0 )
- /*
- * ...beginning with those which precede the radix point,
- * and appending any necessary significant trailing zeros.
- */
- do __pformat_putc( *value ? *value++ : '0', stream );
- while( --len > 0 );
-
- else
- /* The magnitude of the encoded value is less than 1.0, so no
- * digits precede the radix point; we emit a mandatory initial
- * zero, followed immediately by the radix point.
- */
- __pformat_putc( '0', stream );
-
- /* Unless the encoded value is integral, AND the radix point
- * is not expressly demanded by the `#' flag, we must insert
- * the appropriately localised radix point mark here...
- */
- if( (stream->precision > 0) || (stream->flags & PFORMAT_HASHED) )
- __pformat_emit_radix_point( stream );
-
- /* When the radix point offset, `len', is negative, this implies
- * that additional zeros must appear, following the radix point,
- * and preceding the first significant digit...
- */
- if( len < 0 )
- {
- /* To accommodate these, we adjust the precision, (reducing it
- * by adding a negative value), and then we emit as many zeros
- * as are required.
- */
- stream->precision += len;
- do __pformat_putc( '0', stream );
- while( ++len < 0 );
- }
-
- /* Now we emit any remaining significant digits, or trailing zeros,
- * until the required precision has been achieved.
- */
- while( stream->precision-- > 0 )
- __pformat_putc( *value ? *value++ : '0', stream );
-}
-
-static
-void __pformat_emit_efloat( int sign, char *value, int e, __pformat_t *stream )
-{
- /* Helper to emit a floating point representation of numeric data,
- * as encoded by a prior call to `ecvt()' or `fcvt()'; (this DOES
- * include the following exponent).
- */
- int exp_width = 1;
- __pformat_intarg_t exponent; exponent.__pformat_llong_t = e -= 1;
-
- /* Determine how many digit positions are required for the exponent.
- */
- while( (e /= 10) != 0 )
- exp_width++;
-
- /* Ensure that this is at least as many as the standard requirement.
- */
- if( exp_width < stream->expmin )
- exp_width = stream->expmin;
-
- /* Adjust the residual field width allocation, to allow for the
- * number of exponent digits to be emitted, together with a sign
- * and exponent separator...
- */
- if( stream->width > (exp_width += 2) )
- stream->width -= exp_width;
-
- else
- /* ignoring the field width specification, if insufficient.
- */
- stream->width = PFORMAT_IGNORE;
-
- /* Emit the significand, as a fixed point value with one digit
- * preceding the radix point.
- */
- __pformat_emit_float( sign, value, 1, stream );
-
- /* Reset precision, to ensure the mandatory minimum number of
- * exponent digits will be emitted, and set the flags to ensure
- * the sign is displayed.
- */
- stream->precision = stream->expmin;
- stream->flags |= PFORMAT_SIGNED;
-
- /* Emit the exponent separator.
- */
- __pformat_putc( ('E' | (stream->flags & PFORMAT_XCASE)), stream );
-
- /* Readjust the field width setting, such that it again allows
- * for the digits of the exponent, (which had been discounted when
- * computing any left side padding requirement), so that they are
- * correctly included in the computation of any right side padding
- * requirement, (but here we exclude the exponent separator, which
- * has been emitted, and so counted already).
- */
- stream->width += exp_width - 1;
-
- /* And finally, emit the exponent itself, as a signed integer,
- * with any padding required to achieve flush left justification,
- * (which will be added automatically, by `__pformat_int()').
- */
- __pformat_int( exponent, stream );
-}
-
-static
-void __pformat_float( long double x, __pformat_t *stream )
-{
- /* Handler for `%f' and `%F' format specifiers.
- *
- * This wraps calls to `__pformat_cvt()', `__pformat_emit_float()'
- * and `__pformat_emit_inf_or_nan()', as appropriate, to achieve
- * output in fixed point format.
- */
- int sign, intlen; char *value;
-
- /* Establish the precision for the displayed value, defaulting to six
- * digits following the decimal point, if not explicitly specified.
- */
- if( stream->precision < 0 )
- stream->precision = 6;
-
- /* Encode the input value as ASCII, for display...
- */
- value = __pformat_fcvt( x, stream->precision, &intlen, &sign );
-
- if( intlen == PFORMAT_INFNAN )
- /*
- * handle cases of `infinity' or `not-a-number'...
- */
- __pformat_emit_inf_or_nan( sign, value, stream );
-
- else
- { /* or otherwise, emit the formatted result.
- */
- __pformat_emit_float( sign, value, intlen, stream );
-
- /* and, if there is any residual field width as yet unfilled,
- * then we must be doing flush left justification, so pad out to
- * the right hand field boundary.
- */
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
- }
-
- /* Clean up `__pformat_fcvt()' memory allocation for `value'...
- */
- __pformat_fcvt_release( value );
-}
-
-static
-void __pformat_efloat( long double x, __pformat_t *stream )
-{
- /* Handler for `%e' and `%E' format specifiers.
- *
- * This wraps calls to `__pformat_cvt()', `__pformat_emit_efloat()'
- * and `__pformat_emit_inf_or_nan()', as appropriate, to achieve
- * output in floating point format.
- */
- int sign, intlen; char *value;
-
- /* Establish the precision for the displayed value, defaulting to six
- * digits following the decimal point, if not explicitly specified.
- */
- if( stream->precision < 0 )
- stream->precision = 6;
-
- /* Encode the input value as ASCII, for display...
- */
- value = __pformat_ecvt( x, stream->precision + 1, &intlen, &sign );
-
- if( intlen == PFORMAT_INFNAN )
- /*
- * handle cases of `infinity' or `not-a-number'...
- */
- __pformat_emit_inf_or_nan( sign, value, stream );
-
- else
- /* or otherwise, emit the formatted result.
- */
- __pformat_emit_efloat( sign, value, intlen, stream );
-
- /* Clean up `__pformat_ecvt()' memory allocation for `value'...
- */
- __pformat_ecvt_release( value );
-}
-
-static
-void __pformat_gfloat( long double x, __pformat_t *stream )
-{
- /* Handler for `%g' and `%G' format specifiers.
- *
- * This wraps calls to `__pformat_cvt()', `__pformat_emit_float()',
- * `__pformat_emit_efloat()' and `__pformat_emit_inf_or_nan()', as
- * appropriate, to achieve output in the more suitable of either
- * fixed or floating point format.
- */
- int sign, intlen; char *value;
-
- /* Establish the precision for the displayed value, defaulting to
- * six significant digits, if not explicitly specified...
- */
- if( stream->precision < 0 )
- stream->precision = 6;
-
- /* or to a minimum of one digit, otherwise...
- */
- else if( stream->precision == 0 )
- stream->precision = 1;
-
- /* Encode the input value as ASCII, for display.
- */
- value = __pformat_ecvt( x, stream->precision, &intlen, &sign );
-
- if( intlen == PFORMAT_INFNAN )
- /*
- * Handle cases of `infinity' or `not-a-number'.
- */
- __pformat_emit_inf_or_nan( sign, value, stream );
-
- else if( (-4 < intlen) && (intlen <= stream->precision) )
- {
- /* Value lies in the acceptable range for fixed point output,
- * (i.e. the exponent is no less than minus four, and the number
- * of significant digits which precede the radix point is fewer
- * than the least number which would overflow the field width,
- * specified or implied by the established precision).
- */
- if( (stream->flags & PFORMAT_HASHED) == PFORMAT_HASHED )
- /*
- * The `#' flag is in effect...
- * Adjust precision to retain the specified number of significant
- * digits, with the proper number preceding the radix point, and
- * the balance following it...
- */
- stream->precision -= intlen;
-
- else
- /* The `#' flag is not in effect...
- * Here we adjust the precision to accommodate all digits which
- * precede the radix point, but we truncate any balance following
- * it, to suppress output of non-significant trailing zeros...
- */
- if( ((stream->precision = strlen( value ) - intlen) < 0)
- /*
- * This may require a compensating adjustment to the field
- * width, to accommodate significant trailing zeros, which
- * precede the radix point...
- */
- && (stream->width > 0) )
- stream->width += stream->precision;
-
- /* Now, we format the result as any other fixed point value.
- */
- __pformat_emit_float( sign, value, intlen, stream );
-
- /* If there is any residual field width as yet unfilled, then
- * we must be doing flush left justification, so pad out to the
- * right hand field boundary.
- */
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
- }
-
- else
- { /* Value lies outside the acceptable range for fixed point;
- * one significant digit will precede the radix point, so we
- * decrement the precision to retain only the appropriate number
- * of additional digits following it, when we emit the result
- * in floating point format.
- */
- if( (stream->flags & PFORMAT_HASHED) == PFORMAT_HASHED )
- /*
- * The `#' flag is in effect...
- * Adjust precision to emit the specified number of significant
- * digits, with one preceding the radix point, and the balance
- * following it, retaining any non-significant trailing zeros
- * which are required to exactly match the requested precision...
- */
- stream->precision--;
-
- else
- /* The `#' flag is not in effect...
- * Adjust precision to emit only significant digits, with one
- * preceding the radix point, and any others following it, but
- * suppressing non-significant trailing zeros...
- */
- stream->precision = strlen( value ) - 1;
-
- /* Now, we format the result as any other floating point value.
- */
- __pformat_emit_efloat( sign, value, intlen, stream );
- }
-
- /* Clean up `__pformat_ecvt()' memory allocation for `value'.
- */
- __pformat_ecvt_release( value );
-}
-
-static
-void __pformat_emit_xfloat( __pformat_fpreg_t value, __pformat_t *stream )
-{
- /* Helper for emitting floating point data, originating as
- * either `double' or `long double' type, as a hexadecimal
- * representation of the argument value.
- */
- char buf[18], *p = buf;
- __pformat_intarg_t exponent; short exp_width = 2;
-
- /* The mantissa field of the argument value representation can
- * accommodate at most 16 hexadecimal digits, of which one will
- * be placed before the radix point, leaving at most 15 digits
- * to satisfy any requested precision; thus...
- */
- if( (stream->precision >= 0) && (stream->precision < 15) )
- {
- /* When the user specifies a precision within this range,
- * we want to adjust the mantissa, to retain just the number
- * of digits required, rounding up when the high bit of the
- * leftmost discarded digit is set; (mask of 0x08 accounts
- * for exactly one digit discarded, shifting 4 bits per
- * digit, with up to 14 additional digits, to consume the
- * full availability of 15 precision digits).
- *
- * However, before we perform the rounding operation, we
- * normalise the mantissa, shifting it to the left by as many
- * bit positions may be necessary, until its highest order bit
- * is set, thus preserving the maximum number of bits in the
- * rounded result as possible.
- */
- while( value.__pformat_fpreg_mantissa < (LLONG_MAX + 1ULL) )
- value.__pformat_fpreg_mantissa <<= 1;
-
- /* We then shift the mantissa one bit position back to the
- * right, to guard against possible overflow when the rounding
- * adjustment is added.
- */
- value.__pformat_fpreg_mantissa >>= 1;
-
- /* We now add the rounding adjustment, noting that to keep the
- * 0x08 mask aligned with the shifted mantissa, we also need to
- * shift it right by one bit initially, changing its starting
- * value to 0x04...
- */
- value.__pformat_fpreg_mantissa += 0x04LL << (4 * (14 - stream->precision));
- if( (value.__pformat_fpreg_mantissa & (LLONG_MAX + 1ULL)) == 0ULL )
- /*
- * When the rounding adjustment would not have overflowed,
- * then we shift back to the left again, to fill the vacated
- * bit we reserved to accommodate the carry.
- */
- value.__pformat_fpreg_mantissa <<= 1;
-
- else
- /* Otherwise the rounding adjustment would have overflowed,
- * so the carry has already filled the vacated bit; the effect
- * of this is equivalent to an increment of the exponent.
- */
- value.__pformat_fpreg_exponent++;
-
- /* We now complete the rounding to the required precision, by
- * shifting the unwanted digits out, from the right hand end of
- * the mantissa.
- */
- value.__pformat_fpreg_mantissa >>= 4 * (15 - stream->precision);
- }
-
- /* Encode the significant digits of the mantissa in hexadecimal
- * ASCII notation, ready for transfer to the output stream...
- */
- while( value.__pformat_fpreg_mantissa )
- {
- /* taking the rightmost digit in each pass...
- */
- int c = value.__pformat_fpreg_mantissa & 0xF;
- if( c == value.__pformat_fpreg_mantissa )
- {
- /* inserting the radix point, when we reach the last,
- * (i.e. the most significant digit), unless we found no
- * less significant digits, with no mandatory radix point
- * inclusion, and no additional required precision...
- */
- if( (p > buf)
- || (stream->flags & PFORMAT_HASHED) || (stream->precision > 0) )
- /*
- * Internally, we represent the radix point as an ASCII '.';
- * we will replace it with any locale specific alternative,
- * at the time of transfer to the ultimate destination.
- */
- *p++ = '.';
-
- /* If the most significant hexadecimal digit of the encoded
- * output value is greater than one, then the indicated value
- * will appear too large, by an additional binary exponent
- * corresponding to the number of higher order bit positions
- * which it occupies...
- */
- while( value.__pformat_fpreg_mantissa > 1 )
- {
- /* so reduce the exponent value to compensate...
- */
- value.__pformat_fpreg_exponent--;
- value.__pformat_fpreg_mantissa >>= 1;
- }
- }
-
- else if( stream->precision > 0 )
- /*
- * we have not yet fulfilled the desired precision,
- * and we have not yet found the most significant digit,
- * so account for the current digit, within the field
- * width required to meet the specified precision.
- */
- stream->precision--;
-
- if( (c > 0) || (p > buf) || (stream->precision >= 0) )
- /*
- * Ignoring insignificant trailing zeros, (unless required to
- * satisfy specified precision), store the current encoded digit
- * into the pending output buffer, in LIFO order, and using the
- * appropriate case for digits in the `A'..`F' range.
- */
- *p++ = c > 9 ? (c - 10 + 'A') | (stream->flags & PFORMAT_XCASE) : c + '0';
-
- /* Shift out the current digit, (4-bit logical shift right),
- * to align the next more significant digit to be extracted,
- * and encoded in the next pass.
- */
- value.__pformat_fpreg_mantissa >>= 4;
- }
-
- if( p == buf )
- {
- /* Nothing has been queued for output...
- * We need at least one zero, and possibly a radix point.
- */
- if( (stream->precision > 0) || (stream->flags & PFORMAT_HASHED) )
- *p++ = '.';
-
- *p++ = '0';
- }
-
- if( stream->width > 0 )
- {
- /* Adjust the user specified field width, to account for the
- * number of digits minimally required, to display the encoded
- * value, at the requested precision.
- *
- * FIXME: this uses the minimum number of digits possible for
- * representation of the binary exponent, in strict conformance
- * with C99 and POSIX specifications. Although there appears to
- * be no Microsoft precedent for doing otherwise, we may wish to
- * relate this to the `_get_output_format()' result, to maintain
- * consistency with `%e', `%f' and `%g' styles.
- */
- int min_width = p - buf;
- int exponent = value.__pformat_fpreg_exponent;
-
- /* If we have not yet queued sufficient digits to fulfil the
- * requested precision, then we must adjust the minimum width
- * specification, to accommodate the additional digits which
- * are required to do so.
- */
- if( stream->precision > 0 )
- min_width += stream->precision;
-
- /* Adjust the minimum width requirement, to accomodate the
- * sign, radix indicator and at least one exponent digit...
- */
- min_width += stream->flags & PFORMAT_SIGNED ? 6 : 5;
- while( (exponent = exponent / 10) != 0 )
- {
- /* and increase as required, if additional exponent digits
- * are needed, also saving the exponent field width adjustment,
- * for later use when that is emitted.
- */
- min_width++;
- exp_width++;
- }
-
- if( stream->width > min_width )
- {
- /* When specified field width exceeds the minimum required,
- * adjust to retain only the excess...
- */
- stream->width -= min_width;
-
- /* and then emit any required left side padding spaces.
- */
- if( (stream->flags & PFORMAT_JUSTIFY) == 0 )
- while( stream->width-- > 0 )
- __pformat_putc( '\x20', stream );
- }
-
- else
- /* Specified field width is insufficient; just ignore it!
- */
- stream->width = PFORMAT_IGNORE;
- }
-
- /* Emit the sign of the encoded value, as required...
- */
- if( stream->flags & PFORMAT_NEGATIVE )
- /*
- * this is mandatory, to indicate a negative value...
- */
- __pformat_putc( '-', stream );
-
- else if( stream->flags & PFORMAT_POSITIVE )
- /*
- * but this is optional, for a positive value...
- */
- __pformat_putc( '+', stream );
-
- else if( stream->flags & PFORMAT_ADDSPACE )
- /*
- * with this optional alternative.
- */
- __pformat_putc( '\x20', stream );
-
- /* Prefix a `0x' or `0X' radix indicator to the encoded value,
- * with case appropriate to the format specification.
- */
- __pformat_putc( '0', stream );
- __pformat_putc( 'X' | (stream->flags & PFORMAT_XCASE), stream );
-
- /* If the `0' flag is in effect...
- * Zero padding, to fill out the field, goes here...
- */
- if( (stream->width > 0) && (stream->flags & PFORMAT_ZEROFILL) )
- while( stream->width-- > 0 )
- __pformat_putc( '0', stream );
-
- /* Next, we emit the encoded value, without its exponent...
- */
- while( p > buf )
- __pformat_emit_numeric_value( *--p, stream );
-
- /* followed by any additional zeros needed to satisfy the
- * precision specification...
- */
- while( stream->precision-- > 0 )
- __pformat_putc( '0', stream );
-
- /* then the exponent prefix, (C99 and POSIX specify `p'),
- * in the case appropriate to the format specification...
- */
- __pformat_putc( 'P' | (stream->flags & PFORMAT_XCASE), stream );
-
- /* and finally, the decimal representation of the binary exponent,
- * as a signed value with mandatory sign displayed, in a field width
- * adjusted to accommodate it, LEFT justified, with any additional
- * right side padding remaining from the original field width.
- */
- stream->width += exp_width;
- stream->flags |= PFORMAT_SIGNED;
- exponent.__pformat_llong_t = value.__pformat_fpreg_exponent;
- __pformat_int( exponent, stream );
-}
-
-static
-void __pformat_xldouble( long double x, __pformat_t *stream )
-{
- /* Handler for `%La' and `%LA' format specifiers, (with argument
- * value specified as `long double' type).
- */
- unsigned sign_bit = 0;
- __pformat_fpreg_t z; z.__pformat_fpreg_ldouble_t = x;
-
- /* First check for NaN; it is emitted unsigned...
- */
- if( isnan( x ) )
- __pformat_emit_inf_or_nan( sign_bit, "NaN", stream );
-
- else
- { /* Capture the sign bit up-front, so we can show it correctly
- * even when the argument value is zero or infinite.
- */
- if( (sign_bit = (z.__pformat_fpreg_exponent & 0x8000)) != 0 )
- stream->flags |= PFORMAT_NEGATIVE;
-
- /* Check for infinity, (positive or negative)...
- */
- if( isinf( x ) )
- /*
- * displaying the appropriately signed indicator,
- * when appropriate.
- */
- __pformat_emit_inf_or_nan( sign_bit, "Inf", stream );
-
- else
- { /* The argument value is a representable number...
- * extract the effective value of the biased exponent...
- */
- z.__pformat_fpreg_exponent &= 0x7FFF;
- if( z.__pformat_fpreg_exponent == 0 )
- {
- /* A biased exponent value of zero means either a
- * true zero value, if the mantissa field also has
- * a zero value, otherwise...
- */
- if( z.__pformat_fpreg_mantissa != 0 )
- {
- /* ...this mantissa represents a subnormal value;
- * adjust the exponent, while shifting the mantissa
- * to the left, until its leading bit is 1.
- */
- z.__pformat_fpreg_exponent = 1-0x3FFF;
- while( (z.__pformat_fpreg_mantissa & (LLONG_MAX + 1ULL)) == 0 )
- {
- z.__pformat_fpreg_mantissa <<= 1;
- --z.__pformat_fpreg_exponent;
- }
- }
- }
- else
- /* This argument represents a non-zero normal number;
- * eliminate the bias from the exponent...
- */
- z.__pformat_fpreg_exponent -= 0x3FFF;
-
- /* Finally, hand the adjusted representation off to the
- * generalised hexadecimal floating point format handler...
- */
- __pformat_emit_xfloat( z, stream );
- }
- }
-}
-
-int __pformat( int flags, void *dest, int max, const char *fmt, va_list argv )
-{
- int c;
-
- __pformat_t stream =
- {
- /* Create and initialise a format control block
- * for this output request.
- */
- dest, /* output goes to here */
- flags &= PFORMAT_TO_FILE | PFORMAT_NOLIMIT, /* only these valid initially */
- PFORMAT_IGNORE, /* no field width yet */
- PFORMAT_IGNORE, /* nor any precision spec */
- PFORMAT_RPINIT, /* radix point uninitialised */
- (wchar_t)(0), /* leave it unspecified */
- 0, /* zero output char count */
- max, /* establish output limit */
- PFORMAT_MINEXP /* exponent chars preferred */
- };
-
- format_scan: while( (c = *fmt++) != 0 )
- {
- /* Format string parsing loop...
- * The entry point is labelled, so that we can return to the start state
- * from within the inner `conversion specification' interpretation loop,
- * as soon as a conversion specification has been resolved.
- */
- if( c == '%' )
- {
- /* Initiate parsing of a `conversion specification'...
- */
- __pformat_intarg_t argval;
- __pformat_state_t state = PFORMAT_INIT;
- __pformat_length_t length = PFORMAT_LENGTH_INT;
-
- /* Save the current format scan position, so that we can backtrack
- * in the event of encountering an invalid format specification...
- */
- const char *backtrack = fmt;
-
- /* Restart capture for dynamic field width and precision specs...
- */
- int *width_spec = &stream.width;
-
- /* Reset initial state for flags, width and precision specs...
- */
- stream.flags = flags;
- stream.width = stream.precision = PFORMAT_IGNORE;
-
- while( *fmt )
- {
- switch( c = *fmt++ )
- {
- /* Data type specifiers...
- * All are terminal, so exit the conversion spec parsing loop
- * with a `goto format_scan', thus resuming at the outer level
- * in the regular format string parser.
- */
- case '%':
- /*
- * Not strictly a data type specifier...
- * it simply converts as a literal `%' character.
- *
- * FIXME: should we require this to IMMEDIATELY follow the
- * initial `%' of the "conversion spec"? (glibc `printf()'
- * on GNU/Linux does NOT appear to require this, but POSIX
- * and SUSv3 do seem to demand it).
- */
- __pformat_putc( c, &stream );
- goto format_scan;
-
- case 'C':
- /*
- * Equivalent to `%lc'; set `length' accordingly,
- * and simply fall through.
- */
- length = PFORMAT_LENGTH_LONG;
-
- case 'c':
- /*
- * Single, (or single multibyte), character output...
- *
- * We handle these by copying the argument into our local
- * `argval' buffer, and then we pass the address of that to
- * either `__pformat_putchars()' or `__pformat_wputchars()',
- * as appropriate, effectively formatting it as a string of
- * the appropriate type, with a length of one.
- *
- * A side effect of this method of handling character data
- * is that, if the user sets a precision of zero, then no
- * character is actually emitted; we don't want that, so we
- * forcibly override any user specified precision.
- */
- stream.precision = PFORMAT_IGNORE;
-
- /* Now we invoke the appropriate format handler...
- */
- if( (length == PFORMAT_LENGTH_LONG)
- || (length == PFORMAT_LENGTH_LLONG) )
- {
- /* considering any `long' type modifier as a reference to
- * `wchar_t' data, (which is promoted to an `int' argument)...
- */
- wchar_t argval = (wchar_t)(va_arg( argv, int ));
- __pformat_wputchars( &argval, 1, &stream );
- }
-
- else
- { /* while anything else is simply taken as `char', (which
- * is also promoted to an `int' argument)...
- */
- argval.__pformat_uchar_t = (unsigned char)(va_arg( argv, int ));
- __pformat_putchars( (char *)(&argval), 1, &stream );
- }
- goto format_scan;
-
- case 'S':
- /*
- * Equivalent to `%ls'; set `length' accordingly,
- * and simply fall through.
- */
- length = PFORMAT_LENGTH_LONG;
-
- case 's':
- if( (length == PFORMAT_LENGTH_LONG)
- || (length == PFORMAT_LENGTH_LLONG) )
- {
- /* considering any `long' type modifier as a reference to
- * a `wchar_t' string...
- */
- __pformat_wcputs( va_arg( argv, wchar_t * ), &stream );
- }
-
- else
- /* This is normal string output;
- * we simply invoke the appropriate handler...
- */
- __pformat_puts( va_arg( argv, char * ), &stream );
-
- goto format_scan;
-
- case 'o':
- case 'u':
- case 'x':
- case 'X':
- /*
- * Unsigned integer values; octal, decimal or hexadecimal format...
- */
- if( length == PFORMAT_LENGTH_LLONG )
- /*
- * with an `unsigned long long' argument, which we
- * process `as is'...
- */
- argval.__pformat_ullong_t = va_arg( argv, unsigned long long );
-
- else if( length == PFORMAT_LENGTH_LONG )
- /*
- * or with an `unsigned long', which we promote to
- * `unsigned long long'...
- */
- argval.__pformat_ullong_t = va_arg( argv, unsigned long );
-
- else
- { /* or for any other size, which will have been promoted
- * to `unsigned int', we select only the appropriately sized
- * least significant segment, and again promote to the same
- * size as `unsigned long long'...
- */
- argval.__pformat_ullong_t = va_arg( argv, unsigned int );
- if( length == PFORMAT_LENGTH_SHORT )
- /*
- * from `unsigned short'...
- */
- argval.__pformat_ullong_t = argval.__pformat_ushort_t;
-
- else if( length == PFORMAT_LENGTH_CHAR )
- /*
- * or even from `unsigned char'...
- */
- argval.__pformat_ullong_t = argval.__pformat_uchar_t;
- }
-
- /* so we can pass any size of argument to either of two
- * common format handlers...
- */
- if( c == 'u' )
- /*
- * depending on whether output is to be encoded in
- * decimal format...
- */
- __pformat_int( argval, &stream );
-
- else
- /* or in octal or hexadecimal format...
- */
- __pformat_xint( c, argval, &stream );
-
- goto format_scan;
-
- case 'd':
- case 'i':
- /*
- * Signed integer values; decimal format...
- * This is similar to `u', but must process `argval' as signed,
- * and be prepared to handle negative numbers.
- */
- stream.flags |= PFORMAT_NEGATIVE;
-
- if( length == PFORMAT_LENGTH_LLONG )
- /*
- * The argument is a `long long' type...
- */
- argval.__pformat_llong_t = va_arg( argv, long long );
-
- else if( length == PFORMAT_LENGTH_LONG )
- /*
- * or here, a `long' type...
- */
- argval.__pformat_llong_t = va_arg( argv, long );
-
- else
- { /* otherwise, it's an `int' type...
- */
- argval.__pformat_llong_t = va_arg( argv, int );
- if( length == PFORMAT_LENGTH_SHORT )
- /*
- * but it was promoted from a `short' type...
- */
- argval.__pformat_llong_t = argval.__pformat_short_t;
- else if( length == PFORMAT_LENGTH_CHAR )
- /*
- * or even from a `char' type...
- */
- argval.__pformat_llong_t = argval.__pformat_char_t;
- }
-
- /* In any case, all share a common handler...
- */
- __pformat_int( argval, &stream );
- goto format_scan;
-
- case 'p':
- /*
- * Pointer argument; format as hexadecimal, subject to...
- */
- if( (state == PFORMAT_INIT) && (stream.flags == flags) )
- {
- /* Here, the user didn't specify any particular
- * formatting attributes. We must choose a default
- * which will be compatible with Microsoft's (broken)
- * scanf() implementation, (i.e. matching the default
- * used by MSVCRT's printf(), which appears to resemble
- * "%0.8X" for 32-bit pointers); in particular, we MUST
- * NOT adopt a GNU-like format resembling "%#x", because
- * Microsoft's scanf() will choke on the "0x" prefix.
- */
- stream.flags |= PFORMAT_ZEROFILL;
- stream.precision = 2 * sizeof( uintptr_t );
- }
- argval.__pformat_ullong_t = va_arg( argv, uintptr_t );
- __pformat_xint( 'x', argval, &stream );
- goto format_scan;
-
- case 'e':
- /*
- * Floating point format, with lower case exponent indicator
- * and lower case `inf' or `nan' representation when required;
- * select lower case mode, and simply fall through...
- */
- stream.flags |= PFORMAT_XCASE;
-
- case 'E':
- /*
- * Floating point format, with upper case exponent indicator
- * and upper case `INF' or `NAN' representation when required,
- * (or lower case for all of these, on fall through from above);
- * select lower case mode, and simply fall through...
- */
- if( stream.flags & PFORMAT_LDOUBLE )
- /*
- * for a `long double' argument...
- */
- __pformat_efloat( va_arg( argv, long double ), &stream );
-
- else
- /* or just a `double', which we promote to `long double',
- * so the two may share a common format handler.
- */
- __pformat_efloat( (long double)(va_arg( argv, double )), &stream );
-
- goto format_scan;
-
- case 'f':
- /*
- * Fixed point format, using lower case for `inf' and
- * `nan', when appropriate; select lower case mode, and
- * simply fall through...
- */
- stream.flags |= PFORMAT_XCASE;
-
- case 'F':
- /*
- * Fixed case format using upper case, or lower case on
- * fall through from above, for `INF' and `NAN'...
- */
- if( stream.flags & PFORMAT_LDOUBLE )
- /*
- * for a `long double' argument...
- */
- __pformat_float( va_arg( argv, long double ), &stream );
-
- else
- /* or just a `double', which we promote to `long double',
- * so the two may share a common format handler.
- */
- __pformat_float( (long double)(va_arg( argv, double )), &stream );
-
- goto format_scan;
-
- case 'g':
- /*
- * Generalised floating point format, with lower case
- * exponent indicator when required; select lower case
- * mode, and simply fall through...
- */
- stream.flags |= PFORMAT_XCASE;
-
- case 'G':
- /*
- * Generalised floating point format, with upper case,
- * or on fall through from above, with lower case exponent
- * indicator when required...
- */
- if( stream.flags & PFORMAT_LDOUBLE )
- /*
- * for a `long double' argument...
- */
- __pformat_gfloat( va_arg( argv, long double ), &stream );
-
- else
- /* or just a `double', which we promote to `long double',
- * so the two may share a common format handler.
- */
- __pformat_gfloat( (long double)(va_arg( argv, double )), &stream );
-
- goto format_scan;
-
- case 'a':
- /*
- * Hexadecimal floating point format, with lower case radix
- * and exponent indicators; select the lower case mode, and
- * fall through...
- */
- stream.flags |= PFORMAT_XCASE;
-
- case 'A':
- /*
- * Hexadecimal floating point format; handles radix and
- * exponent indicators in either upper or lower case...
- */
- if( stream.flags & PFORMAT_LDOUBLE )
- /*
- * with a `long double' argument...
- */
- __pformat_xldouble( va_arg( argv, long double ), &stream );
-
- else
- /* or just a `double'.
- */
- __pformat_xldouble( (long double)(va_arg( argv, double )), &stream );
-
- goto format_scan;
-
- case 'n':
- /*
- * Save current output character count...
- */
- if( length == PFORMAT_LENGTH_CHAR )
- /*
- * to a signed `char' destination...
- */
- *va_arg( argv, char * ) = stream.count;
-
- else if( length == PFORMAT_LENGTH_SHORT )
- /*
- * or to a signed `short'...
- */
- *va_arg( argv, short * ) = stream.count;
-
- else if( length == PFORMAT_LENGTH_LONG )
- /*
- * or to a signed `long'...
- */
- *va_arg( argv, long * ) = stream.count;
-
- else if( length == PFORMAT_LENGTH_LLONG )
- /*
- * or to a signed `long long'...
- */
- *va_arg( argv, long long * ) = stream.count;
-
- else
- /*
- * or, by default, to a signed `int'.
- */
- *va_arg( argv, int * ) = stream.count;
-
- goto format_scan;
-
- /* Argument length modifiers...
- * These are non-terminal; each sets the format parser
- * into the PFORMAT_END state, and ends with a `break'.
- */
- case 'h':
- /*
- * Interpret the argument as explicitly of a `short'
- * or `char' data type, truncated from the standard
- * length defined for integer promotion.
- */
- if( *fmt == 'h' )
- {
- /* Modifier is `hh'; data type is `char' sized...
- * Skip the second `h', and set length accordingly.
- */
- ++fmt;
- length = PFORMAT_LENGTH_CHAR;
- }
-
- else
- /* Modifier is `h'; data type is `short' sized...
- */
- length = PFORMAT_LENGTH_SHORT;
-
- state = PFORMAT_END;
- break;
-
- case 'j':
- /*
- * Interpret the argument as being of the same size as
- * a `intmax_t' entity...
- */
- length = __pformat_arg_length( intmax_t );
- state = PFORMAT_END;
- break;
-
-# ifdef _WIN32
-
- case 'I':
- /*
- * The MSVCRT implementation of the printf() family of
- * functions explicitly uses...
- */
- if( (fmt[0] == '6') && (fmt[1] == '4') )
- {
- /* I64' instead of `ll',
- * when referring to `long long' integer types...
- */
- length = PFORMAT_LENGTH_LLONG;
- fmt += 2;
- }
-
- else if( (fmt[0] == '3') && (fmt[1] == '2') )
- {
- /* and `I32' instead of `l',
- * when referring to `long' integer types...
- */
- length = PFORMAT_LENGTH_LONG;
- fmt += 2;
- }
-
- else
- /* or unqualified `I' instead of `t' or `z',
- * when referring to `ptrdiff_t' or `size_t' entities;
- * (we will choose to map it to `ptrdiff_t').
- */
- length = __pformat_arg_length( ptrdiff_t );
-
- state = PFORMAT_END;
- break;
-
-# endif
-
- case 'l':
- /*
- * Interpret the argument as explicitly of a
- * `long' or `long long' data type.
- */
- if( *fmt == 'l' )
- {
- /* Modifier is `ll'; data type is `long long' sized...
- * Skip the second `l', and set length accordingly.
- */
- ++fmt;
- length = PFORMAT_LENGTH_LLONG;
- }
-
- else
- /* Modifier is `l'; data type is `long' sized...
- */
- length = PFORMAT_LENGTH_LONG;
-
-# ifndef _WIN32
- /*
- * Microsoft's MSVCRT implementation also uses `l'
- * as a modifier for `long double'; if we don't want
- * to support that, we end this case here...
- */
- state = PFORMAT_END;
- break;
-
- /* otherwise, we simply fall through...
- */
-# endif
-
- case 'L':
- /*
- * Identify the appropriate argument as a `long double',
- * when associated with `%a', `%A', `%e', `%E', `%f', `%F',
- * `%g' or `%G' format specifications.
- */
- stream.flags |= PFORMAT_LDOUBLE;
- state = PFORMAT_END;
- break;
-
- case 't':
- /*
- * Interpret the argument as being of the same size as
- * a `ptrdiff_t' entity...
- */
- length = __pformat_arg_length( ptrdiff_t );
- state = PFORMAT_END;
- break;
-
- case 'z':
- /*
- * Interpret the argument as being of the same size as
- * a `size_t' entity...
- */
- length = __pformat_arg_length( size_t );
- state = PFORMAT_END;
- break;
-
- /* Precision indicator...
- * May appear once only; it must precede any modifier
- * for argument length, or any data type specifier.
- */
- case '.':
- if( state < PFORMAT_GET_PRECISION )
- {
- /* We haven't seen a precision specification yet,
- * so initialise it to zero, (in case no digits follow),
- * and accept any following digits as the precision.
- */
- stream.precision = 0;
- width_spec = &stream.precision;
- state = PFORMAT_GET_PRECISION;
- }
-
- else
- /* We've already seen a precision specification,
- * so this is just junk; proceed to end game.
- */
- state = PFORMAT_END;
-
- /* Either way, we must not fall through here.
- */
- break;
-
- /* Variable field width, or precision specification,
- * derived from the argument list...
- */
- case '*':
- /*
- * When this appears...
- */
- if( width_spec
- && ((state == PFORMAT_INIT) || (state == PFORMAT_GET_PRECISION)) )
- {
- /* in proper context; assign to field width
- * or precision, as appropriate.
- */
- if( (*width_spec = va_arg( argv, int )) < 0 )
- {
- /* Assigned value was negative...
- */
- if( state == PFORMAT_INIT )
- {
- /* For field width, this is equivalent to
- * a positive value with the `-' flag...
- */
- stream.flags |= PFORMAT_LJUSTIFY;
- stream.width = -stream.width;
- }
-
- else
- /* while as a precision specification,
- * it should simply be ignored.
- */
- stream.precision = PFORMAT_IGNORE;
- }
- }
-
- else
- /* out of context; give up on width and precision
- * specifications for this conversion.
- */
- state = PFORMAT_END;
-
- /* Mark as processed...
- * we must not see `*' again, in this context.
- */
- width_spec = NULL;
- break;
-
- /* Formatting flags...
- * Must appear while in the PFORMAT_INIT state,
- * and are non-terminal, so again, end with `break'.
- */
- case '#':
- /*
- * Select alternate PFORMAT_HASHED output style.
- */
- if( state == PFORMAT_INIT )
- stream.flags |= PFORMAT_HASHED;
- break;
-
- case '+':
- /*
- * Print a leading sign with numeric output,
- * for both positive and negative values.
- */
- if( state == PFORMAT_INIT )
- stream.flags |= PFORMAT_POSITIVE;
- break;
-
- case '-':
- /*
- * Select left justification of displayed output
- * data, within the output field width, instead of
- * the default flush right justification.
- */
- if( state == PFORMAT_INIT )
- stream.flags |= PFORMAT_LJUSTIFY;
- break;
-
-# ifdef WITH_XSI_FEATURES
-
- case '\'':
- /*
- * This is an XSI extension to the POSIX standard,
- * which we do not support, at present.
- */
- if( state == PFORMAT_INIT )
- stream.flags |= PFORMAT_GROUPED;
- break;
-
-# endif
-
- case '\x20':
- /*
- * Reserve a single space, within the output field,
- * for display of the sign of signed data; this will
- * be occupied by the minus sign, if the data value
- * is negative, or by a plus sign if the data value
- * is positive AND the `+' flag is also present, or
- * by a space otherwise. (Technically, this flag
- * is redundant, if the `+' flag is present).
- */
- if( state == PFORMAT_INIT )
- stream.flags |= PFORMAT_ADDSPACE;
- break;
-
- case '0':
- /*
- * May represent a flag, to activate the `pad with zeros'
- * option, or it may simply be a digit in a width or in a
- * precision specification...
- */
- if( state == PFORMAT_INIT )
- {
- /* This is the flag usage...
- */
- stream.flags |= PFORMAT_ZEROFILL;
- break;
- }
-
- default:
- /*
- * If we didn't match anything above, then we will check
- * for digits, which we may accumulate to generate field
- * width or precision specifications...
- */
- if( (state < PFORMAT_END) && ('9' >= c) && (c >= '0') )
- {
- if( state == PFORMAT_INIT )
- /*
- * Initial digits explicitly relate to field width...
- */
- state = PFORMAT_SET_WIDTH;
-
- else if( state == PFORMAT_GET_PRECISION )
- /*
- * while those following a precision indicator
- * explicitly relate to precision.
- */
- state = PFORMAT_SET_PRECISION;
-
- if( width_spec )
- {
- /* We are accepting a width or precision specification...
- */
- if( *width_spec < 0 )
- /*
- * and accumulation hasn't started yet; we simply
- * initialise the accumulator with the current digit
- * value, converting from ASCII to decimal.
- */
- *width_spec = c - '0';
-
- else
- /* Accumulation has already started; we perform a
- * `leftwise decimal digit shift' on the accumulator,
- * (i.e. multiply it by ten), then add the decimal
- * equivalent value of the current digit.
- */
- *width_spec = *width_spec * 10 + c - '0';
- }
- }
-
- else
- {
- /* We found a digit out of context, or some other character
- * with no designated meaning; reject this format specification,
- * backtrack, and emit it as literal text...
- */
- fmt = backtrack;
- __pformat_putc( '%', &stream );
- goto format_scan;
- }
- }
- }
- }
-
- else
- /* We just parsed a character which is not included within any format
- * specification; we simply emit it as a literal.
- */
- __pformat_putc( c, &stream );
- }
-
- /* When we have fully dispatched the format string, the return value is the
- * total number of bytes we transferred to the output destination.
- */
- return stream.count;
-}
-
-/* $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/stdio/pformat.h b/winsup/mingw/mingwex/stdio/pformat.h
deleted file mode 100644
index a2ace696c..000000000
--- a/winsup/mingw/mingwex/stdio/pformat.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef PFORMAT_H
-/*
- * pformat.h
- *
- * $Id$
- *
- * A private header, defining the `pformat' API; it is to be included
- * in each compilation unit implementing any of the `printf' family of
- * functions, but serves no useful purpose elsewhere.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- */
-#define PFORMAT_H
-
-/* The following macros reproduce definitions from _mingw.h,
- * so that compilation will not choke, if using any compiler
- * other than the MinGW implementation of GCC.
- */
-#ifndef __cdecl
-# ifdef __GNUC__
-# define __cdecl __attribute__((__cdecl__))
-# else
-# define __cdecl
-# endif
-#endif
-
-#ifndef __MINGW_GNUC_PREREQ
-# if defined __GNUC__ && defined __GNUC_MINOR__
-# define __MINGW_GNUC_PREREQ( major, minor )\
- (__GNUC__ > (major) || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
-# else
-# define __MINGW_GNUC_PREREQ( major, minor )
-# endif
-#endif
-
-#ifndef __MINGW_NOTHROW
-# if __MINGW_GNUC_PREREQ( 3, 3 )
-# define __MINGW_NOTHROW __attribute__((__nothrow__))
-# else
-# define __MINGW_NOTHROW
-# endif
-#endif
-
-/* This isn't currently defined therein,
- * but is a potential candidate for inclusion in _mingw.h
- */
-#ifdef __MINGW32__
-# define __stringify__(NAME) #NAME
-# define __mingw_quoted(NAME) __stringify__(__mingw_##NAME)
-# define __mingw_alias(NAME) __attribute__((alias(__mingw_quoted(NAME)))) NAME
-#else
-# define __mingw_alias(NAME) NAME
-#endif
-
-/* The following are the declarations specific to the `pformat' API...
- */
-#define PFORMAT_TO_FILE 0x1000
-#define PFORMAT_NOLIMIT 0x2000
-
-#ifdef __MINGW32__
- /*
- * Map MinGW specific function names, for use in place of the generic
- * implementation defined equivalent function names.
- */
-# define __pformat __mingw_pformat
-
-# define __printf __mingw_printf
-# define __fprintf __mingw_fprintf
-# define __sprintf __mingw_sprintf
-# define __snprintf __mingw_snprintf
-
-# define __vprintf __mingw_vprintf
-# define __vfprintf __mingw_vfprintf
-# define __vsprintf __mingw_vsprintf
-# define __vsnprintf __mingw_vsnprintf
-
-#endif
-
-int __cdecl __pformat( int, void *, int, const char *, va_list ) __MINGW_NOTHROW;
-
-#endif /* !defined PFORMAT_H: $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/stdio/printf.c b/winsup/mingw/mingwex/stdio/printf.c
deleted file mode 100644
index 98b4e62e3..000000000
--- a/winsup/mingw/mingwex/stdio/printf.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* printf.c
- *
- * $Id$
- *
- * Provides an implementation of the "printf" function, conforming
- * generally to C99 and SUSv3/POSIX specifications, with extensions
- * to support Microsoft's non-standard format specifications. This
- * is included in libmingwex.a, whence it may replace the Microsoft
- * function of the same name.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This implementation of "printf" will normally be invoked by calling
- * "__mingw_printf()" in preference to a direct reference to "printf()"
- * itself; this leaves the MSVCRT implementation as the default, which
- * will be deployed when user code invokes "print()". Users who then
- * wish to use this implementation may either call "__mingw_printf()"
- * directly, or may use conditional preprocessor defines, to redirect
- * references to "printf()" to "__mingw_printf()".
- *
- * Compiling this module with "-D INSTALL_AS_DEFAULT" will change this
- * recommended convention, such that references to "printf()" in user
- * code will ALWAYS be redirected to "__mingw_printf()"; if this option
- * is adopted, then users wishing to use the MSVCRT implementation of
- * "printf()" will be forced to use a "back-door" mechanism to do so.
- * Such a "back-door" mechanism is provided with MinGW, allowing the
- * MSVCRT implementation to be called as "__msvcrt_printf()"; however,
- * since users may not expect this behaviour, a standard libmingwex.a
- * installation does not employ this option.
- *
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-#include <stdio.h>
-#include <stdarg.h>
-
-#include "pformat.h"
-
-int __cdecl __printf( const char *, ... ) __MINGW_NOTHROW;
-
-#ifdef INSTALL_AS_DEFAULT
-/*
- * This implementation is to become the default for calls to printf();
- * establish the alias to make this so, forcing users to use the back-door
- * __msvcrt_printf() reference, to access the original MSVCRT function.
- */
-int __cdecl __mingw_alias(printf) (const char *, ...) __MINGW_NOTHROW;
-
-#endif
-
-int __cdecl __printf( const char *fmt, ... )
-{
- register int retval;
- va_list argv; va_start( argv, fmt );
- retval = __pformat( PFORMAT_TO_FILE | PFORMAT_NOLIMIT, stdout, 0, fmt, argv );
- va_end( argv );
- return retval;
-}
-
-/* $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/stdio/snprintf.c b/winsup/mingw/mingwex/stdio/snprintf.c
deleted file mode 100644
index 4d022e7dc..000000000
--- a/winsup/mingw/mingwex/stdio/snprintf.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* snprintf.c
- *
- * $Id$
- *
- * Provides an implementation of the "snprintf" function, conforming
- * generally to C99 and SUSv3/POSIX specifications, with extensions
- * to support Microsoft's non-standard format specifications. This
- * is included in libmingwex.a, replacing the redirection through
- * libmoldnames.a, to the MSVCRT standard "_snprintf" function; (the
- * standard MSVCRT function remains available, and may be invoked
- * directly, using this fully qualified form of its name).
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-
-#include <stdio.h>
-#include <stdarg.h>
-
-#include "pformat.h"
-
-int __cdecl __snprintf (char *, size_t, const char *fmt, ...) __MINGW_NOTHROW;
-int __cdecl __mingw_alias(snprintf) (char *, size_t, const char *, ...) __MINGW_NOTHROW;
-
-int __cdecl __vsnprintf (char *, size_t, const char *fmt, va_list) __MINGW_NOTHROW;
-
-int __cdecl __snprintf( char *buf, size_t length, const char *fmt, ... )
-{
- va_list argv; va_start( argv, fmt );
- register int retval = __vsnprintf( buf, length, fmt, argv );
- va_end( argv );
- return retval;
-}
-
-/* $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/stdio/snwprintf.c b/winsup/mingw/mingwex/stdio/snwprintf.c
deleted file mode 100644
index 42b05b292..000000000
--- a/winsup/mingw/mingwex/stdio/snwprintf.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <stdarg.h>
-#include <wchar.h>
-
-int snwprintf(wchar_t* buffer, size_t n, const wchar_t* format, ...)
-{
- int retval;
- va_list argptr;
-
- va_start( argptr, format );
- retval = _vsnwprintf( buffer, n, format, argptr );
- va_end( argptr );
- return retval;
-}
diff --git a/winsup/mingw/mingwex/stdio/sprintf.c b/winsup/mingw/mingwex/stdio/sprintf.c
deleted file mode 100644
index c3381d3ef..000000000
--- a/winsup/mingw/mingwex/stdio/sprintf.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* sprintf.c
- *
- * $Id$
- *
- * Provides an implementation of the "sprintf" function, conforming
- * generally to C99 and SUSv3/POSIX specifications, with extensions
- * to support Microsoft's non-standard format specifications. This
- * is included in libmingwex.a, whence it may replace the Microsoft
- * function of the same name.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This implementation of "sprintf" will normally be invoked by calling
- * "__mingw_sprintf()" in preference to a direct reference to "sprintf()"
- * itself; this leaves the MSVCRT implementation as the default, which
- * will be deployed when user code invokes "sprint()". Users who then
- * wish to use this implementation may either call "__mingw_sprintf()"
- * directly, or may use conditional preprocessor defines, to redirect
- * references to "sprintf()" to "__mingw_sprintf()".
- *
- * Compiling this module with "-D INSTALL_AS_DEFAULT" will change this
- * recommended convention, such that references to "sprintf()" in user
- * code will ALWAYS be redirected to "__mingw_sprintf()"; if this option
- * is adopted, then users wishing to use the MSVCRT implementation of
- * "sprintf()" will be forced to use a "back-door" mechanism to do so.
- * Such a "back-door" mechanism is provided with MinGW, allowing the
- * MSVCRT implementation to be called as "__msvcrt_sprintf()"; however,
- * since users may not expect this behaviour, a standard libmingwex.a
- * installation does not employ this option.
- *
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-#include <stdio.h>
-#include <stdarg.h>
-
-#include "pformat.h"
-
-int __cdecl __sprintf (char *, const char *, ...) __MINGW_NOTHROW;
-
-#ifdef INSTALL_AS_DEFAULT
-/*
- * This implementation is to become the default for calls to sprintf();
- * establish the alias to make this so, forcing users to use the back-door
- * __msvcrt_sprintf() reference, to access the original MSVCRT function.
- */
-int __cdecl __mingw_alias(sprintf) (char *, const char *, ...) __MINGW_NOTHROW;
-
-#endif
-
-int __cdecl __sprintf( char *buf, const char *fmt, ... )
-{
- register int retval;
- va_list argv; va_start( argv, fmt );
- buf[retval = __pformat( PFORMAT_NOLIMIT, buf, 0, fmt, argv )] = '\0';
- va_end( argv );
- return retval;
-}
-
-/* $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/stdio/vfprintf.c b/winsup/mingw/mingwex/stdio/vfprintf.c
deleted file mode 100644
index 19de7ae8c..000000000
--- a/winsup/mingw/mingwex/stdio/vfprintf.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* vfprintf.c
- *
- * $Id$
- *
- * Provides an implementation of the "vfprintf" function, conforming
- * generally to C99 and SUSv3/POSIX specifications, with extensions
- * to support Microsoft's non-standard format specifications. This
- * is included in libmingwex.a, whence it may replace the Microsoft
- * function of the same name.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This implementation of "vfprintf" will normally be invoked by calling
- * "__mingw_vfprintf()" in preference to a direct reference to "vfprintf()"
- * itself; this leaves the MSVCRT implementation as the default, which
- * will be deployed when user code invokes "vfprint()". Users who then
- * wish to use this implementation may either call "__mingw_vfprintf()"
- * directly, or may use conditional preprocessor defines, to redirect
- * references to "vfprintf()" to "__mingw_vfprintf()".
- *
- * Compiling this module with "-D INSTALL_AS_DEFAULT" will change this
- * recommended convention, such that references to "vfprintf()" in user
- * code will ALWAYS be redirected to "__mingw_vfprintf()"; if this option
- * is adopted, then users wishing to use the MSVCRT implementation of
- * "vfprintf()" will be forced to use a "back-door" mechanism to do so.
- * Such a "back-door" mechanism is provided with MinGW, allowing the
- * MSVCRT implementation to be called as "__msvcrt_vfprintf()"; however,
- * since users may not expect this behaviour, a standard libmingwex.a
- * installation does not employ this option.
- *
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-#include <stdio.h>
-#include <stdarg.h>
-
-#include "pformat.h"
-
-int __cdecl __vfprintf (FILE *, const char *, va_list) __MINGW_NOTHROW;
-
-#ifdef INSTALL_AS_DEFAULT
-/*
- * This implementation is to become the default for calls to vfprintf();
- * establish the alias to make this so, forcing users to use the back-door
- * __msvcrt_vfprintf() reference, to access the original MSVCRT function.
- */
-int __cdecl __mingw_alias(vfprintf) (FILE *, const char *, va_list) __MINGW_NOTHROW;
-
-#endif
-
-int __cdecl __vfprintf( FILE *stream, const char *fmt, va_list argv )
-{
- return __pformat( PFORMAT_TO_FILE | PFORMAT_NOLIMIT, stream, 0, fmt, argv );
-}
-
-/* $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/stdio/vfscanf.c b/winsup/mingw/mingwex/stdio/vfscanf.c
deleted file mode 100644
index 3c1b137a8..000000000
--- a/winsup/mingw/mingwex/stdio/vfscanf.c
+++ /dev/null
@@ -1,40 +0,0 @@
-// By aaronwl 2003-01-28 for mingw-msvcrt
-// Public domain: all copyrights disclaimed, absolutely no warranties */
-
-#include <stdarg.h>
-#include <stdio.h>
-
-int vfscanf(FILE * __restrict__ stream, const char * __restrict__ format, va_list arg) {
- int ret;
-
- __asm__(
-
- /* allocate stack (esp += frame - arg3 - (8[arg1,2] + 12)) */
- "movl %%esp, %%ebx\n\t"
- "lea 0xFFFFFFEC(%%esp, %6), %%esp\n\t"
- "subl %5, %%esp\n\t"
-
- // set up stack
- "movl %1, 0xC(%%esp)\n\t" // stream
- "movl %2, 0x10(%%esp)\n\t" // format
- "lea 0x14(%%esp), %%edi\n\t"
- "movl %%edi, (%%esp)\n\t" // memcpy dest
- "movl %5, 0x4(%%esp)\n\t" // memcpy src
- "movl %5, 0x8(%%esp)\n\t"
- "subl %6, 0x8(%%esp)\n\t" // memcpy len
- "call _memcpy\n\t"
- "addl $12, %%esp\n\t"
-
- // call fscanf
- "call _fscanf\n\t"
-
- // restore stack
- "movl %%ebx, %%esp\n\t"
-
- : "=a"(ret), "=c"(stream), "=d"(format)
- : "1"(stream), "2"(format), "S"(arg),
- "a"(&ret)
- : "ebx", "edi");
-
- return ret;
-}
diff --git a/winsup/mingw/mingwex/stdio/vfwscanf.c b/winsup/mingw/mingwex/stdio/vfwscanf.c
deleted file mode 100644
index 2a1d095bc..000000000
--- a/winsup/mingw/mingwex/stdio/vfwscanf.c
+++ /dev/null
@@ -1,42 +0,0 @@
-// By aaronwl 2003-01-28 for mingw-msvcrt.
-// Public domain: all copyrights disclaimed, absolutely no warranties.
-
-#include <stdarg.h>
-#include <wchar.h>
-
-int vfwscanf(FILE * __restrict__ stream, const wchar_t * __restrict__ format,
- va_list arg) {
-
- int ret;
-
- __asm__(
-
- // allocate stack (esp += frame - arg3 - (8[arg1,2] + 12))
- "movl %%esp, %%ebx\n\t"
- "lea 0xFFFFFFEC(%%esp, %6), %%esp\n\t"
- "subl %5, %%esp\n\t"
-
- // set up stack
- "movl %1, 0xC(%%esp)\n\t" // stream
- "movl %2, 0x10(%%esp)\n\t" // format
- "lea 0x14(%%esp), %%edi\n\t"
- "movl %%edi, (%%esp)\n\t" // memcpy dest
- "movl %5, 0x4(%%esp)\n\t" // memcpy src
- "movl %5, 0x8(%%esp)\n\t"
- "subl %6, 0x8(%%esp)\n\t" // memcpy len
- "call _memcpy\n\t"
- "addl $12, %%esp\n\t"
-
- // call fscanf
- "call _fwscanf\n\t"
-
- // restore stack
- "movl %%ebx, %%esp\n\t"
-
- : "=a"(ret), "=c"(stream), "=d"(format)
- : "1"(stream), "2"(format), "S"(arg),
- "a"(&ret)
- : "ebx", "edi");
-
- return ret;
-}
diff --git a/winsup/mingw/mingwex/stdio/vprintf.c b/winsup/mingw/mingwex/stdio/vprintf.c
deleted file mode 100644
index 20d4385ae..000000000
--- a/winsup/mingw/mingwex/stdio/vprintf.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* vprintf.c
- *
- * $Id$
- *
- * Provides an implementation of the "vprintf" function, conforming
- * generally to C99 and SUSv3/POSIX specifications, with extensions
- * to support Microsoft's non-standard format specifications. This
- * is included in libmingwex.a, whence it may replace the Microsoft
- * function of the same name.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This implementation of "vprintf" will normally be invoked by calling
- * "__mingw_vprintf()" in preference to a direct reference to "vprintf()"
- * itself; this leaves the MSVCRT implementation as the default, which
- * will be deployed when user code invokes "vprint()". Users who then
- * wish to use this implementation may either call "__mingw_vprintf()"
- * directly, or may use conditional preprocessor defines, to redirect
- * references to "vprintf()" to "__mingw_vprintf()".
- *
- * Compiling this module with "-D INSTALL_AS_DEFAULT" will change this
- * recommended convention, such that references to "vprintf()" in user
- * code will ALWAYS be redirected to "__mingw_vprintf()"; if this option
- * is adopted, then users wishing to use the MSVCRT implementation of
- * "vprintf()" will be forced to use a "back-door" mechanism to do so.
- * Such a "back-door" mechanism is provided with MinGW, allowing the
- * MSVCRT implementation to be called as "__msvcrt_vprintf()"; however,
- * since users may not expect this behaviour, a standard libmingwex.a
- * installation does not employ this option.
- *
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-#include <stdio.h>
-#include <stdarg.h>
-
-#include "pformat.h"
-
-int __cdecl __vprintf (const char *, va_list) __MINGW_NOTHROW;
-
-#ifdef INSTALL_AS_DEFAULT
-/*
- * This implementation is to become the default for calls to vprintf();
- * establish the alias to make this so, forcing users to use the back-door
- * __msvcrt_vprintf() reference, to access the original MSVCRT function.
- */
-int __cdecl __mingw_alias(vprintf) (const char *, va_list) __MINGW_NOTHROW;
-
-#endif
-
-int __cdecl __vprintf( const char *fmt, va_list argv )
-{
- return __pformat( PFORMAT_TO_FILE | PFORMAT_NOLIMIT, stdout, 0, fmt, argv );
-}
-
-/* $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/stdio/vscanf.c b/winsup/mingw/mingwex/stdio/vscanf.c
deleted file mode 100644
index 53f543442..000000000
--- a/winsup/mingw/mingwex/stdio/vscanf.c
+++ /dev/null
@@ -1,9 +0,0 @@
-// By aaronwl 2003-01-28 for mingw-msvcrt
-// Public domain: all copyrights disclaimed, absolutely no warranties
-
-#include <stdarg.h>
-#include <stdio.h>
-
-int vscanf(const char * __restrict__ format, va_list arg) {
- return vfscanf(stdin, format, arg);
-}
diff --git a/winsup/mingw/mingwex/stdio/vsnprintf.c b/winsup/mingw/mingwex/stdio/vsnprintf.c
deleted file mode 100644
index a9722c235..000000000
--- a/winsup/mingw/mingwex/stdio/vsnprintf.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* vsnprintf.c
- *
- * $Id$
- *
- * Provides an implementation of the "vsnprintf" function, conforming
- * generally to C99 and SUSv3/POSIX specifications, with extensions
- * to support Microsoft's non-standard format specifications. This
- * is included in libmingwex.a, replacing the redirection through
- * libmoldnames.a, to the MSVCRT standard "_vsnprintf" function; (the
- * standard MSVCRT function remains available, and may be invoked
- * directly, using this fully qualified form of its name).
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-
-#include <stdio.h>
-#include <stdarg.h>
-
-#include "pformat.h"
-
-int __cdecl __vsnprintf (char *, size_t, const char *fmt, va_list) __MINGW_NOTHROW;
-int __cdecl __mingw_alias(vsnprintf) (char *, size_t, const char *, va_list) __MINGW_NOTHROW;
-
-int __cdecl __vsnprintf( char *buf, size_t length, const char *fmt, va_list argv )
-{
- register int retval;
-
- if( length == (size_t)(0) )
- /*
- * No buffer; simply compute and return the size required,
- * without actually emitting any data.
- */
- return __pformat( 0, buf, 0, fmt, argv );
-
- /* If we get to here, then we have a buffer...
- * Emit data up to the limit of buffer length less one,
- * then add the requisite NUL terminator.
- */
- retval = __pformat( 0, buf, --length, fmt, argv );
- buf[retval < length ? retval : length] = '\0';
-
- return retval;
-}
-
-/* $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/stdio/vsnwprintf.c b/winsup/mingw/mingwex/stdio/vsnwprintf.c
deleted file mode 100644
index 1b59a078b..000000000
--- a/winsup/mingw/mingwex/stdio/vsnwprintf.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <stdarg.h>
-#include <wchar.h>
-
-int vsnwprintf(wchar_t *buffer, size_t n, const wchar_t * format, va_list argptr)
- { return _vsnwprintf( buffer, n, format, argptr );}
diff --git a/winsup/mingw/mingwex/stdio/vsprintf.c b/winsup/mingw/mingwex/stdio/vsprintf.c
deleted file mode 100644
index babfebd4e..000000000
--- a/winsup/mingw/mingwex/stdio/vsprintf.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* vsprintf.c
- *
- * $Id$
- *
- * Provides an implementation of the "vsprintf" function, conforming
- * generally to C99 and SUSv3/POSIX specifications, with extensions
- * to support Microsoft's non-standard format specifications. This
- * is included in libmingwex.a, whence it may replace the Microsoft
- * function of the same name.
- *
- * Written by Keith Marshall <keithmarshall@users.sourceforge.net>
- *
- * This implementation of "vsprintf" will normally be invoked by calling
- * "__mingw_vsprintf()" in preference to a direct reference to "vsprintf()"
- * itself; this leaves the MSVCRT implementation as the default, which
- * will be deployed when user code invokes "vsprint()". Users who then
- * wish to use this implementation may either call "__mingw_vsprintf()"
- * directly, or may use conditional preprocessor defines, to redirect
- * references to "vsprintf()" to "__mingw_vsprintf()".
- *
- * Compiling this module with "-D INSTALL_AS_DEFAULT" will change this
- * recommended convention, such that references to "vsprintf()" in user
- * code will ALWAYS be redirected to "__mingw_vsprintf()"; if this option
- * is adopted, then users wishing to use the MSVCRT implementation of
- * "vsprintf()" will be forced to use a "back-door" mechanism to do so.
- * Such a "back-door" mechanism is provided with MinGW, allowing the
- * MSVCRT implementation to be called as "__msvcrt_vsprintf()"; however,
- * since users may not expect this behaviour, a standard libmingwex.a
- * installation does not employ this option.
- *
- *
- * This is free software. You may redistribute and/or modify it as you
- * see fit, without restriction of copyright.
- *
- * This software is provided "as is", in the hope that it may be useful,
- * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of
- * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no
- * time will the author accept any form of liability for any damages,
- * however caused, resulting from the use of this software.
- *
- */
-#include <stdio.h>
-#include <stdarg.h>
-
-#include "pformat.h"
-
-int __cdecl __vsprintf (char *, const char *, va_list) __MINGW_NOTHROW;
-
-#ifdef INSTALL_AS_DEFAULT
-/*
- * This implementation is to become the default for calls to vsprintf();
- * establish the alias to make this so, forcing users to use the back-door
- * __msvcrt_vsprintf() reference, to access the original MSVCRT function.
- */
-int __cdecl __mingw_alias(vsprintf) (char *, const char *, va_list) __MINGW_NOTHROW;
-
-#endif
-
-int __cdecl __vsprintf( char *buf, const char *fmt, va_list argv )
-{
- register int retval;
- buf[retval = __pformat( PFORMAT_NOLIMIT, buf, 0, fmt, argv )] = '\0';
- return retval;
-}
-
-/* $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/mingwex/stdio/vsscanf.c b/winsup/mingw/mingwex/stdio/vsscanf.c
deleted file mode 100644
index f59490d3b..000000000
--- a/winsup/mingw/mingwex/stdio/vsscanf.c
+++ /dev/null
@@ -1,41 +0,0 @@
-// By aaronwl 2003-01-28 for mingw-msvcrt.
-// Public domain: all copyrights disclaimed, absolutely no warranties.
-
-#include <stdarg.h>
-#include <stdio.h>
-
-
-int vsscanf(const char * __restrict__ s, const char * __restrict__ format, va_list arg) {
- int ret;
-
- __asm__(
-
- // allocate stack (esp += frame - arg3 - (8[arg1,2] + 12))
- "movl %%esp, %%ebx\n\t"
- "lea 0xFFFFFFEC(%%esp, %6), %%esp\n\t"
- "subl %5, %%esp\n\t"
-
- // set up stack
- "movl %1, 0xC(%%esp)\n\t" // s
- "movl %2, 0x10(%%esp)\n\t" // format
- "lea 0x14(%%esp), %%edi\n\t"
- "movl %%edi, (%%esp)\n\t" // memcpy dest
- "movl %5, 0x4(%%esp)\n\t" // memcpy src
- "movl %5, 0x8(%%esp)\n\t"
- "subl %6, 0x8(%%esp)\n\t" // memcpy len
- "call _memcpy\n\t"
- "addl $12, %%esp\n\t"
-
- // call sscanf
- "call _sscanf\n\t"
-
- // restore stack
- "movl %%ebx, %%esp\n\t"
-
- : "=a"(ret), "=c"(s), "=d"(format)
- : "1"(s), "2"(format), "S"(arg),
- "a"(&ret)
- : "ebx", "edi");
-
- return ret;
-}
diff --git a/winsup/mingw/mingwex/stdio/vswscanf.c b/winsup/mingw/mingwex/stdio/vswscanf.c
deleted file mode 100644
index ea359f3e6..000000000
--- a/winsup/mingw/mingwex/stdio/vswscanf.c
+++ /dev/null
@@ -1,43 +0,0 @@
-// By aaronwl 2003-01-28 for mingw-msvcrt
-// Public domain: all copyrights disclaimed, absolutely no warranties */
-
-#include <stdarg.h>
-#include <wchar.h>
-
-
-int vswscanf(const wchar_t * __restrict__ s, const wchar_t * __restrict__ format,
- va_list arg) {
-
- int ret;
-
- __asm__(
-
- // allocate stack (esp += frame - arg3 - (8[arg1,2] + 12))
- "movl %%esp, %%ebx\n\t"
- "lea 0xFFFFFFEC(%%esp, %6), %%esp\n\t"
- "subl %5, %%esp\n\t"
-
- // set up stack
- "movl %1, 0xC(%%esp)\n\t" // s
- "movl %2, 0x10(%%esp)\n\t" // format
- "lea 0x14(%%esp), %%edi\n\t"
- "movl %%edi, (%%esp)\n\t" // memcpy dest
- "movl %5, 0x4(%%esp)\n\t" // memcpy src
- "movl %5, 0x8(%%esp)\n\t"
- "subl %6, 0x8(%%esp)\n\t" // memcpy len
- "call _memcpy\n\t"
- "addl $12, %%esp\n\t"
-
- // call sscanf
- "call _swscanf\n\t"
-
- // restore stack
- "movl %%ebx, %%esp\n\t"
-
- : "=a"(ret), "=c"(s), "=d"(format)
- : "1"(s), "2"(format), "S"(arg),
- "a"(&ret)
- : "ebx", "edi");
-
- return ret;
-}
diff --git a/winsup/mingw/mingwex/stdio/vwscanf.c b/winsup/mingw/mingwex/stdio/vwscanf.c
deleted file mode 100644
index 0b20e2ee4..000000000
--- a/winsup/mingw/mingwex/stdio/vwscanf.c
+++ /dev/null
@@ -1,10 +0,0 @@
-// By aaronwl 2003-01-28 for mingw-msvcrt.
-// Public domain: all copyrights disclaimed, absolutely no warranties.
-
-#include <stdarg.h>
-#include <wchar.h>
-#include <stdio.h>
-
-int vwscanf(const wchar_t * __restrict__ format, va_list arg) {
- return vfwscanf(stdin, format, arg);
-}
diff --git a/winsup/mingw/mingwex/strtoimax.c b/winsup/mingw/mingwex/strtoimax.c
deleted file mode 100644
index 9072d4bbb..000000000
--- a/winsup/mingw/mingwex/strtoimax.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- This source code was extracted from the Q8 package created and
- placed in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E).
-
- This particular implementation requires the matching <inttypes.h>.
- It also assumes that character codes for A..Z and a..z are in
- contiguous ascending order; this is true for ASCII but not EBCDIC.
-*/
-#include <stdlib.h>
-#include <errno.h>
-#include <ctype.h>
-#include <inttypes.h>
-
-/* Helper macros */
-
-/* convert digit character to number, in any base */
-#define ToNumber(c) (isdigit(c) ? (c) - '0' : \
- isupper(c) ? (c) - 'A' + 10 : \
- islower(c) ? (c) - 'a' + 10 : \
- -1 /* "invalid" flag */ \
- )
-/* validate converted digit character for specific base */
-#define valid(n, b) ((n) >= 0 && (n) < (b))
-
-intmax_t
-strtoimax(nptr, endptr, base)
- register const char * __restrict__ nptr;
- char ** __restrict__ endptr;
- register int base;
- {
- register uintmax_t accum; /* accumulates converted value */
- register int n; /* numeral from digit character */
- int minus; /* set iff minus sign seen */
- int toobig; /* set iff value overflows */
-
- if ( endptr != NULL )
- *endptr = (char *)nptr; /* in case no conversion's performed */
-
- if ( base < 0 || base == 1 || base > 36 )
- {
- errno = EDOM;
- return 0; /* unspecified behavior */
- }
-
- /* skip initial, possibly empty sequence of white-space characters */
-
- while ( isspace(*nptr) )
- ++nptr;
-
- /* process subject sequence: */
-
- /* optional sign */
- if ( (minus = *nptr == '-') || *nptr == '+' )
- ++nptr;
-
- if ( base == 0 ) {
- if ( *nptr == '0' ) {
- if ( nptr[1] == 'X' || nptr[1] == 'x' )
- base = 16;
- else
- base = 8;
- }
- else
- base = 10;
- }
- /* optional "0x" or "0X" for base 16 */
-
- if ( base == 16 && *nptr == '0' && (nptr[1] == 'X' || nptr[1] == 'x') )
- nptr += 2; /* skip past this prefix */
-
- /* check whether there is at least one valid digit */
-
- n = ToNumber(*nptr);
- ++nptr;
-
- if ( !valid(n, base) )
- return 0; /* subject seq. not of expected form */
-
- accum = n;
-
- for ( toobig = 0; n = ToNumber(*nptr), valid(n, base); ++nptr )
- if ( accum > (uintmax_t)(INTMAX_MAX / base + 2) ) /* major wrap-around */
- toobig = 1; /* but keep scanning */
- else
- accum = base * accum + n;
-
- if ( endptr != NULL )
- *endptr = (char *)nptr; /* points to first not-valid-digit */
-
- if ( minus )
- {
- if ( accum > (uintmax_t)INTMAX_MAX + 1 )
- toobig = 1;
- }
- else
- if ( accum > (uintmax_t)INTMAX_MAX )
- toobig = 1;
-
- if ( toobig )
- {
- errno = ERANGE;
- return minus ? INTMAX_MIN : INTMAX_MAX;
- }
- else
- return (intmax_t)(minus ? -accum : accum);
- }
-
-long long __attribute__ ((alias ("strtoimax")))
-strtoll (const char* __restrict__ nptr, char ** __restrict__ endptr, int base);
diff --git a/winsup/mingw/mingwex/strtoumax.c b/winsup/mingw/mingwex/strtoumax.c
deleted file mode 100644
index 2c052ac06..000000000
--- a/winsup/mingw/mingwex/strtoumax.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- This source code was extracted from the Q8 package created and
- placed in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E).
-
- This particular implementation requires the matching <inttypes.h>.
- It also assumes that character codes for A..Z and a..z are in
- contiguous ascending order; this is true for ASCII but not EBCDIC.
-*/
-#include <stdlib.h>
-#include <errno.h>
-#include <ctype.h>
-#include <inttypes.h>
-
-/* Helper macros */
-
-/* convert digit character to number, in any base */
-#define ToNumber(c) (isdigit(c) ? (c) - '0' : \
- isupper(c) ? (c) - 'A' + 10 : \
- islower(c) ? (c) - 'a' + 10 : \
- -1 /* "invalid" flag */ \
- )
-/* validate converted digit character for specific base */
-#define valid(n, b) ((n) >= 0 && (n) < (b))
-
-uintmax_t
-strtoumax(nptr, endptr, base)
- register const char * __restrict__ nptr;
- char ** __restrict__ endptr;
- register int base;
- {
- register uintmax_t accum; /* accumulates converted value */
- register uintmax_t next; /* for computing next value of accum */
- register int n; /* numeral from digit character */
- int minus; /* set iff minus sign seen (yes!) */
- int toobig; /* set iff value overflows */
-
- if ( endptr != NULL )
- *endptr = (char *)nptr; /* in case no conversion's performed */
-
- if ( base < 0 || base == 1 || base > 36 )
- {
- errno = EDOM;
- return 0; /* unspecified behavior */
- }
-
- /* skip initial, possibly empty sequence of white-space characters */
-
- while ( isspace(*nptr) )
- ++nptr;
-
- /* process subject sequence: */
-
- /* optional sign (yes!) */
-
- if ( (minus = *nptr == '-') || *nptr == '+' )
- ++nptr;
-
- if ( base == 0 )
- {
- if ( *nptr == '0' )
- {
- if ( nptr[1] == 'X' || nptr[1] == 'x' )
- base = 16;
- else
- base = 8;
- }
- else
- base = 10;
- }
-
- /* optional "0x" or "0X" for base 16 */
-
- if ( base == 16 && *nptr == '0' && (nptr[1] == 'X' || nptr[1] == 'x') )
- nptr += 2; /* skip past this prefix */
-
- /* check whether there is at least one valid digit */
-
- n = ToNumber(*nptr);
- ++nptr;
-
- if ( !valid(n, base) )
- return 0; /* subject seq. not of expected form */
-
- accum = n;
-
- for ( toobig = 0; n = ToNumber(*nptr), valid(n, base); ++nptr )
- if ( accum > UINTMAX_MAX / base + 1 /* major wrap-around */
- || (next = base * accum + n) < accum /* minor wrap-around */
- )
- toobig = 1; /* but keep scanning */
- else
- accum = next;
-
- if ( endptr != NULL )
- *endptr = (char *)nptr; /* points to first not-valid-digit */
-
- if ( toobig )
- {
- errno = ERANGE;
- return UINTMAX_MAX;
- }
- else
- return minus ? -accum : accum; /* (yes!) */
- }
-
-unsigned long long __attribute__ ((alias ("strtoumax")))
-strtoull (const char* __restrict__ nptr, char ** __restrict__ endptr, int base);
diff --git a/winsup/mingw/mingwex/tdelete.c b/winsup/mingw/mingwex/tdelete.c
deleted file mode 100755
index 4de3897db..000000000
--- a/winsup/mingw/mingwex/tdelete.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* $NetBSD: tdelete.c,v 1.3 1999/09/20 04:39:43 lukem Exp $ */
-
-/*
- * Tree search generalized from Knuth (6.2.2) Algorithm T just like
- * the AT&T man page says.
- *
- * The node_t structure is for internal use only, lint doesn't grok it.
- *
- * Written by reading the System V Interface Definition, not the code.
- *
- * Totally public domain.
- */
-
-#include <assert.h>
-#define _SEARCH_PRIVATE
-#include <search.h>
-#include <stdlib.h>
-
-#define _DIAGASSERT assert
-
-
-
-/* delete node with given key */
-void *
-tdelete(const void *vkey, /* key to be deleted */
- void **vrootp, /* address of the root of tree */
- int (*compar)(const void *, const void *))
-{
- node_t **rootp = (node_t **)vrootp;
- node_t *p, *q, *r;
- int cmp;
-
- _DIAGASSERT(vkey != NULL);
- _DIAGASSERT(compar != NULL);
-
- if (rootp == NULL || (p = *rootp) == NULL)
- return NULL;
-
- while ((cmp = (*compar)(vkey, (*rootp)->key)) != 0) {
- p = *rootp;
- rootp = (cmp < 0) ?
- &(*rootp)->llink : /* follow llink branch */
- &(*rootp)->rlink; /* follow rlink branch */
- if (*rootp == NULL)
- return NULL; /* key not found */
- }
- r = (*rootp)->rlink; /* D1: */
- if ((q = (*rootp)->llink) == NULL) /* Left NULL? */
- q = r;
- else if (r != NULL) { /* Right link is NULL? */
- if (r->llink == NULL) { /* D2: Find successor */
- r->llink = q;
- q = r;
- } else { /* D3: Find NULL link */
- for (q = r->llink; q->llink != NULL; q = r->llink)
- r = q;
- r->llink = q->rlink;
- q->llink = (*rootp)->llink;
- q->rlink = (*rootp)->rlink;
- }
- }
- free(*rootp); /* D4: Free node */
- *rootp = q; /* link parent to new node */
- return p;
-}
diff --git a/winsup/mingw/mingwex/testwmem.c b/winsup/mingw/mingwex/testwmem.c
deleted file mode 100644
index 1310718c9..000000000
--- a/winsup/mingw/mingwex/testwmem.c
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <memory.h>
-#include <wchar.h>
-#include <stdio.h>
-
-wchar_t fmt1[] = L" 1 2 3 4 5";
-wchar_t fmt2[] = L"12345678901234567890123456789012345678901234567890";
-
-void test_wmemchr( void )
-{
- wchar_t* dest;
- wint_t result;
- wint_t ch = L'r';
- wchar_t str[] = L"lazy";
- wchar_t string1[60] = L"The quick brown dog jumps over the lazy fox";
-
- wprintf( L"Wmemchr\n" );
- wprintf( L"String to be searched:\n\t\t%s\n", string1 );
- wprintf( L"\t\t%s\n\t\t%s\n\n", fmt1, fmt2 );
-
- wprintf( L"Search char:\t%c\n", ch );
- dest = wmemchr( string1, ch, sizeof( string1 ) );
- result = dest - string1 + 1;
- if( dest != NULL )
- wprintf( L"Result:\t\t%c found at position %d\n\n", ch, result );
- else
- wprintf( L"Result:\t\t%c not found\n\n" );
-return;
-}
-void test_wmemset( void )
-{/* 1 2
- 0123456789012345678901234567890 */
- wchar_t buffer[] = L"This is a test of the wmemset function";
- wprintf( L"Before: %s\n", buffer );
- wmemset( buffer+22, L'*', 7 );
- wprintf( L"After: %s\n\n", buffer );
-return;
-}
-
-void test_wmemmove( void )
-{
- wchar_t string1[60] = L"The quick brown dog jumps over the lazy fox";
- wchar_t string2[60] = L"The quick brown fox jumps over the lazy dog";
-
- wprintf( L"Wmemcpy without overlap\n" );
- wprintf( L"Source:\t\t%s\n", string1 + 40 );
- wprintf( L"Destination:\t%s\n", string1 + 16 );
- wmemcpy( string1 + 16, string1 + 40, 3 );
- wprintf( L"Result:\t\t%s\n", string1 );
- wprintf( L"Length:\t\t%d characters\n\n", wcslen( string1 ) );
- wmemcpy( string1 + 16, string2 + 40, 3 );
-
- wprintf( L"Wmemmove with overlap\n" );
- wprintf( L"Source:\t\t%s\n", string2 + 4 );
- wprintf( L"Destination:\t%s\n", string2 + 10 );
- wmemmove( string2 + 10, string2 + 4, 40 );
- wprintf( L"Result:\t\t%s\n", string2 );
- wprintf( L"Length:\t\t%d characters\n\n", wcslen( string2 ) );
-
- wprintf( L"Wmemcpy with overlap\n" );
- wprintf( L"Source:\t\t%s\n", string1 + 4 );
- wprintf( L"Destination:\t%s\n", string1 + 10 );
- wmemcpy( string1 + 10, string1 + 4, 40 );
- wprintf( L"Result:\t\t%s\n", string1 );
- wprintf( L"Length:\t\t%d characters\n\n", wcslen( string1 ) );
-}
-
-
-void test_wmemcmp( void )
-{
- wchar_t first[] = L"12345678901234567890";
- wchar_t second[] = L"12345678901234567891";
- wint_t result;
- wprintf(L"Wmemcmp\n");
- wprintf( L"Compare '%.19s' to '%.19s':\n", first, second );
- result = wmemcmp( first, second, 19 );
- if( result < 0 )
- wprintf( L"First is less than second.\n" );
- else if( result == 0 )
- wprintf( L"First is equal to second.\n" );
- else if( result > 0 )
- wprintf( L"First is greater than second.\n" );
- wprintf( L"\nCompare '%.20s' to '%.20s':\n", first, second );
- result = wmemcmp( first, second, 20 );
- if( result < 0 )
- wprintf( L"First is less than second.\n\n" );
- else if( result == 0 )
- wprintf( L"First is equal to second.\n\n" );
- else if( result > 0 )
- wprintf( L"First is greater than second.\n\n" );
-}
-
-
-
-int main(){
-test_wmemset();
-test_wmemmove();
-test_wmemchr();
-test_wmemcmp();
-return 0;
-}
-
-
-
-
diff --git a/winsup/mingw/mingwex/tfind.c b/winsup/mingw/mingwex/tfind.c
deleted file mode 100755
index e8ffe657a..000000000
--- a/winsup/mingw/mingwex/tfind.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* $NetBSD: tfind.c,v 1.3.18.2 2005/03/23 11:12:21 tron Exp $ */
-
-/*
- * Tree search generalized from Knuth (6.2.2) Algorithm T just like
- * the AT&T man page says.
- *
- * The node_t structure is for internal use only, lint doesn't grok it.
- *
- * Written by reading the System V Interface Definition, not the code.
- *
- * Totally public domain.
- */
-
-#include <assert.h>
-#define _SEARCH_PRIVATE
-#include <stdlib.h>
-#include <search.h>
-
-
-/* find a node, or return 0 */
-void *
-tfind(const void *vkey,
- void * const *vrootp,
- int (*compar) (const void *, const void *))
-{
- node_t * const *rootp = (node_t * const*)vrootp;
-
- if (rootp == NULL)
- return NULL;
-
- while (*rootp != NULL) { /* T1: */
- int r;
-
- if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
- return *rootp; /* key found */
- rootp = (r < 0) ?
- &(*rootp)->llink : /* T3: follow left branch */
- &(*rootp)->rlink; /* T4: follow right branch */
- }
- return NULL;
-}
diff --git a/winsup/mingw/mingwex/tsearch.c b/winsup/mingw/mingwex/tsearch.c
deleted file mode 100755
index a0aa0eb36..000000000
--- a/winsup/mingw/mingwex/tsearch.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* $NetBSD: tsearch.c,v 1.4 1999/09/20 04:39:43 lukem Exp $ */
-
-/*
- * Tree search generalized from Knuth (6.2.2) Algorithm T just like
- * the AT&T man page says.
- *
- * The node_t structure is for internal use only, lint doesn't grok it.
- *
- * Written by reading the System V Interface Definition, not the code.
- *
- * Totally public domain.
- */
-
-#include <assert.h>
-#define _SEARCH_PRIVATE
-#include <search.h>
-#include <stdlib.h>
-
-
-/* find or insert datum into search tree */
-void *
-tsearch(const void * __restrict__ vkey, /* key to be located */
- void ** __restrict__ vrootp, /* address of tree root */
- int (*compar) (const void *, const void *))
-{
- node_t *q;
- node_t **rootp = (node_t **)vrootp;
-
- if (rootp == NULL)
- return NULL;
-
- while (*rootp != NULL) { /* Knuth's T1: */
- int r;
-
- if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
- return *rootp; /* we found it! */
-
- rootp = (r < 0) ?
- &(*rootp)->llink : /* T3: follow left branch */
- &(*rootp)->rlink; /* T4: follow right branch */
- }
-
- q = malloc(sizeof(node_t)); /* T5: key not found */
- if (q != 0) { /* make new node */
- *rootp = q; /* link new node to old */
- /* LINTED const castaway ok */
- q->key = (void *)vkey; /* initialize new node */
- q->llink = q->rlink = NULL;
- }
- return q;
-}
diff --git a/winsup/mingw/mingwex/tst-aligned-malloc.c b/winsup/mingw/mingwex/tst-aligned-malloc.c
deleted file mode 100755
index 43ee734bc..000000000
--- a/winsup/mingw/mingwex/tst-aligned-malloc.c
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <string.h>
-#include <errno.h>
-#include <malloc.h>
-
-#ifdef HAVE_STDINT_H
-# include <stdint.h> /* uintptr_t */
-#else
-# define uintptr_t size_t
-#endif
-
-#define NELEM(a) (sizeof(a) / sizeof(a[0]))
-
-static int
-is_aligned (void *p, size_t alignment, size_t offset)
-{
- return !((((uintptr_t) p) + offset) & (alignment - 1));
-}
-
-#define MAX_SIZE (1 << sizeof(unsigned char))
-#define NP 1000
-#define NTST 100000U
-
-#define ERRMSG fprintf(stderr, "Iteration %u, align = %u, offset = %u, size = %u (oldsize = %u), errno = %d (%s)\n", i, align[j % NELEM(align)], offset[j % NELEM(offset)], size[j], oldsize, errno, strerror(errno))
-
-int
-main (void)
-{
- unsigned char *p[NP];
- size_t size[NP];
- size_t align[] = { 2, 4, 8, 16, 32, 64 };
- size_t offset[20];
- unsigned i;
-
- srand (time (NULL));
-
- for (i = 0; i < NELEM (p); ++i)
- {
- p[i] = 0;
- size[i] = 0;
- }
-
- for (i = 0; i < NELEM (offset); ++i)
- offset[i] = rand () % 512;
-
- for (i = 0; i < NTST; ++i)
- {
- size_t oldsize;
- unsigned j, k;
- j = rand () % NELEM (p);
- oldsize = size[j];
- p[j] = __mingw_aligned_offset_realloc (p[j],
- size[j] = rand () % MAX_SIZE,
- align[j % NELEM (align)],
- offset[j % NELEM (offset)]);
-
- if (size[j] && !p[j])
- {
- fprintf (stderr, "Returned NULL!\n");
- ERRMSG;
- return EXIT_FAILURE;
- }
- if (size[j] && !is_aligned (p[j],
- align[j % NELEM (align)],
- offset[j % NELEM (offset)]))
- {
- fprintf (stderr, "Misaligned block!\n");
- ERRMSG;
- return EXIT_FAILURE;
- }
- if (oldsize > size[j])
- oldsize = size[j];
- for (k = 0; k < oldsize; ++k)
- if (p[j][k] != k)
- {
- fprintf (stderr, "Miscopied block!\n");
- ERRMSG;
- return EXIT_FAILURE;
- }
- for (k = 0; k < size[j]; ++k)
- p[j][k] = k;
- }
-
- for (i = 0; i < NELEM (p); ++i)
- __mingw_aligned_free (p[i]);
-
- return EXIT_SUCCESS;
-}
diff --git a/winsup/mingw/mingwex/twalk.c b/winsup/mingw/mingwex/twalk.c
deleted file mode 100755
index aa7909c8a..000000000
--- a/winsup/mingw/mingwex/twalk.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* $NetBSD: twalk.c,v 1.2 1999/09/16 11:45:37 lukem Exp $ */
-
-/*
- * Tree search generalized from Knuth (6.2.2) Algorithm T just like
- * the AT&T man page says.
- *
- * The node_t structure is for internal use only, lint doesn't grok it.
- *
- * Written by reading the System V Interface Definition, not the code.
- *
- * Totally public domain.
- */
-
-#include <assert.h>
-#define _SEARCH_PRIVATE
-#include <search.h>
-#include <stdlib.h>
-
-static void trecurse (const node_t *, void (*action)(const void *, VISIT, int),
- int level) __MINGW_ATTRIB_NONNULL (1)
- __MINGW_ATTRIB_NONNULL (2);
-/* Walk the nodes of a tree */
-static void
-trecurse( const node_t *root, /* Root of the tree to be walked */
- void (*action)(const void *, VISIT, int),
- int level)
-{
- if (root->llink == NULL && root->rlink == NULL)
- (*action)(root, leaf, level);
- else {
- (*action)(root, preorder, level);
- if (root->llink != NULL)
- trecurse(root->llink, action, level + 1);
- (*action)(root, postorder, level);
- if (root->rlink != NULL)
- trecurse(root->rlink, action, level + 1);
- (*action)(root, endorder, level);
- }
-}
-
-/* Walk the nodes of a tree */
-void
-twalk( const void *vroot, /* Root of the tree to be walked */
- void (*action) (const void *, VISIT, int))
-{
- if (vroot != NULL && action != NULL)
- trecurse(vroot, action, 0);
-}
diff --git a/winsup/mingw/mingwex/ulltoa.c b/winsup/mingw/mingwex/ulltoa.c
deleted file mode 100644
index 8e90de764..000000000
--- a/winsup/mingw/mingwex/ulltoa.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <stdlib.h>
-char* ulltoa(unsigned long long _n, char * _c, int _i)
- { return _ui64toa (_n, _c, _i); }
diff --git a/winsup/mingw/mingwex/ulltow.c b/winsup/mingw/mingwex/ulltow.c
deleted file mode 100644
index 8e4f228f1..000000000
--- a/winsup/mingw/mingwex/ulltow.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <stdlib.h>
-wchar_t* ulltow(unsigned long long _n, wchar_t * _w, int _i)
- { return _ui64tow (_n, _w, _i); }
diff --git a/winsup/mingw/mingwex/usleep.c b/winsup/mingw/mingwex/usleep.c
deleted file mode 100755
index c059c0691..000000000
--- a/winsup/mingw/mingwex/usleep.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * usleep
- * Implementation according to:
- * The Open Group Base Specifications Issue 6
- * IEEE Std 1003.1, 2004 Edition
- */
-
-/*
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Contributed by:
- * Ramiro Polla <ramiro@lisha.ufsc.br>
- */
-
-#include <sys/types.h>
-#include <errno.h>
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-int __cdecl usleep(useconds_t useconds)
-{
- if(useconds == 0)
- return 0;
-
- if(useconds >= 1000000)
- return EINVAL;
-
- Sleep((useconds + 999) / 1000);
-
- return 0;
-}
diff --git a/winsup/mingw/mingwex/wcrtomb.c b/winsup/mingw/mingwex/wcrtomb.c
deleted file mode 100755
index 61ae6d677..000000000
--- a/winsup/mingw/mingwex/wcrtomb.c
+++ /dev/null
@@ -1,94 +0,0 @@
-#include "mb_wc_common.h"
-#include <wchar.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <limits.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-
-static int __MINGW_ATTRIB_NONNULL(1)
- __wcrtomb_cp (char *dst, wchar_t wc, const unsigned int cp,
- const unsigned int mb_max)
-{
- if (cp == 0)
- {
- if (wc > 255)
- {
- errno = EILSEQ;
- return -1;
- }
- *dst = (char) wc;
- return 1;
- }
- else
- {
- int invalid_char = 0;
-
- int size = WideCharToMultiByte (cp, 0 /* Is this correct flag? */,
- &wc, 1, dst, mb_max,
- NULL, &invalid_char);
- if (size == 0 || invalid_char)
- {
- errno = EILSEQ;
- return -1;
- }
- return size;
- }
-}
-
-size_t
-wcrtomb (char *dst, wchar_t wc, mbstate_t * __UNUSED_PARAM (ps))
-{
- char byte_bucket [MB_LEN_MAX];
- char* tmp_dst = dst ? dst : byte_bucket;
- return (size_t)__wcrtomb_cp (tmp_dst, wc, get_codepage (),
- MB_CUR_MAX);
-}
-
-size_t wcsrtombs (char *dst, const wchar_t **src, size_t len,
- mbstate_t * __UNUSED_PARAM (ps))
-{
- int ret = 0;
- size_t n = 0;
- const unsigned int cp = get_codepage();
- const unsigned int mb_max = MB_CUR_MAX;
- const wchar_t *pwc = *src;
-
- if (src == NULL || *src == NULL) /* undefined behavior */
- return 0;
-
- if (dst != NULL)
- {
- while (n < len)
- {
- if ((ret = __wcrtomb_cp (dst, *pwc, cp, mb_max)) <= 0)
- return (size_t) -1;
- n += ret;
- dst += ret;
- if (*(dst - 1) == '\0')
- {
- *src = (wchar_t*) NULL;;
- return (n - 1);
- }
- pwc++;
- }
- *src = pwc;
- }
- else
- {
- char byte_bucket [MB_LEN_MAX];
- while (n < len)
- {
- if ((ret = __wcrtomb_cp (byte_bucket, *pwc, cp, mb_max))
- <= 0)
- return (size_t) -1;
- n += ret;
- if (byte_bucket [ret - 1] == '\0')
- return (n - 1);
- pwc++;
- }
- }
-
- return n;
-}
diff --git a/winsup/mingw/mingwex/wcstof.c b/winsup/mingw/mingwex/wcstof.c
deleted file mode 100644
index c08e7f128..000000000
--- a/winsup/mingw/mingwex/wcstof.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Wide char wrapper for strtof
- * Revision history:
- * 25 Aug 2006 Initial version.
- *
- * Contributor: Danny Smith <dannysmith@users.sourceforege.net>
- */
-
- /* This routine has been placed in the public domain.*/
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <locale.h>
-#include <wchar.h>
-#include <stdlib.h>
-#include <string.h>
-#include <mbstring.h>
-
-#include "mb_wc_common.h"
-
-float wcstof (const wchar_t * __restrict__ wcs, wchar_t ** __restrict__ wcse)
-{
- char * cs;
- char * cse;
- unsigned int i;
- float ret;
- const unsigned int cp = get_codepage ();
-
- /* Allocate enough room for (possibly) mb chars */
- cs = (char *) malloc ((wcslen(wcs)+1) * MB_CUR_MAX);
-
- if (cp == 0) /* C locale */
- {
- for (i = 0; (wcs[i] != 0) && wcs[i] <= 255; i++)
- cs[i] = (char) wcs[i];
- cs[i] = '\0';
- }
- else
- {
- int nbytes = -1;
- int mb_len = 0;
- /* loop through till we hit null or invalid character */
- for (i = 0; (wcs[i] != 0) && (nbytes != 0); i++)
- {
- nbytes = WideCharToMultiByte(cp, WC_COMPOSITECHECK | WC_SEPCHARS,
- wcs + i, 1, cs + mb_len, MB_CUR_MAX,
- NULL, NULL);
- mb_len += nbytes;
- }
- cs[mb_len] = '\0';
- }
-
- ret = strtof (cs, &cse);
-
- if (wcse)
- {
- /* Make sure temp mbstring cs has 0 at cse. */
- *cse = '\0';
- i = _mbslen ((unsigned char*) cs); /* Number of chars, not bytes */
- *wcse = (wchar_t *) wcs + i;
- }
- free (cs);
-
- return ret;
-}
diff --git a/winsup/mingw/mingwex/wcstoimax.c b/winsup/mingw/mingwex/wcstoimax.c
deleted file mode 100644
index 99bacf463..000000000
--- a/winsup/mingw/mingwex/wcstoimax.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- This source code was extracted from the Q8 package created and
- placed in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
-
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E).
-
- This particular implementation requires the matching <inttypes.h>.
- It also assumes that character codes for A..Z and a..z are in
- contiguous ascending order; this is true for ASCII but not EBCDIC.
-*/
-
-#include <wchar.h>
-#include <errno.h>
-#include <ctype.h>
-#include <inttypes.h>
-
-/* convert digit wide character to number, in any base */
-
-#define ToWNumber(c) (iswdigit(c) ? (c) - L'0' : \
- iswupper(c) ? (c) - L'A' + 10 : \
- iswlower(c) ? (c) - L'a' + 10 : \
- -1 /* "invalid" flag */ \
- )
-
-/* validate converted digit character for specific base */
-#define valid(n, b) ((n) >= 0 && (n) < (b))
-
-intmax_t
-wcstoimax(nptr, endptr, base)
- register const wchar_t * __restrict__ nptr;
- wchar_t ** __restrict__ endptr;
- register int base;
- {
- register uintmax_t accum; /* accumulates converted value */
- register int n; /* numeral from digit character */
- int minus; /* set iff minus sign seen */
- int toobig; /* set iff value overflows */
-
- if ( endptr != NULL )
- *endptr = (wchar_t *)nptr; /* in case no conv performed */
-
- if ( base < 0 || base == 1 || base > 36 )
- {
- errno = EDOM;
- return 0; /* unspecified behavior */
- }
-
- /* skip initial, possibly empty sequence of white-space w.characters */
-
- while ( iswspace(*nptr) )
- ++nptr;
-
- /* process subject sequence: */
-
- /* optional sign */
-
- if ( (minus = *nptr == L'-') || *nptr == L'+' )
- ++nptr;
-
- if ( base == 0 )
- {
- if ( *nptr == L'0' )
- {
- if ( nptr[1] == L'X' || nptr[1] == L'x' )
- base = 16;
- else
- base = 8;
- }
- else
- base = 10;
- }
- /* optional "0x" or "0X" for base 16 */
-
- if ( base == 16 && *nptr == L'0'
- && (nptr[1] == L'X' || nptr[1] == L'x')
- )
- nptr += 2; /* skip past this prefix */
-
- /* check whether there is at least one valid digit */
-
- n = ToWNumber(*nptr);
- ++nptr;
-
- if ( !valid(n, base) )
- return 0; /* subject seq. not of expected form */
-
- accum = n;
-
- for ( toobig = 0; n = ToWNumber(*nptr), valid(n, base); ++nptr )
- if ( accum > (uintmax_t)(INTMAX_MAX / base + 2) ) /* major wrap-around */
- toobig = 1; /* but keep scanning */
- else
- accum = base * accum + n;
-
- if ( endptr != NULL )
- *endptr = (wchar_t *)nptr; /* -> first not-valid-digit */
-
- if ( minus )
- {
- if ( accum > (uintmax_t)INTMAX_MAX + 1 )
- toobig = 1;
- }
- else
- if ( accum > (uintmax_t)INTMAX_MAX )
- toobig = 1;
-
- if ( toobig )
- {
- errno = ERANGE;
- return minus ? INTMAX_MIN : INTMAX_MAX;
- }
- else
- return (intmax_t)(minus ? -accum : accum);
- }
-
-long long __attribute__ ((alias ("wcstoimax")))
-wcstoll (const wchar_t* __restrict__ nptr, wchar_t ** __restrict__ endptr, int base);
diff --git a/winsup/mingw/mingwex/wcstold.c b/winsup/mingw/mingwex/wcstold.c
deleted file mode 100644
index b2fdd742e..000000000
--- a/winsup/mingw/mingwex/wcstold.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Wide char wrapper for strtold
- * Revision history:
- * 6 Nov 2002 Initial version.
- * 25 Aug 2006 Don't use strtold internal functions.
- *
- * Contributor: Danny Smith <dannysmith@users.sourceforege.net>
- */
-
- /* This routine has been placed in the public domain.*/
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <locale.h>
-#include <wchar.h>
-#include <stdlib.h>
-#include <string.h>
-#include <mbstring.h>
-
-#include "mb_wc_common.h"
-
-long double wcstold (const wchar_t * __restrict__ wcs, wchar_t ** __restrict__ wcse)
-{
- char * cs;
- char * cse;
- unsigned int i;
- long double ret;
- const unsigned int cp = get_codepage ();
-
- /* Allocate enough room for (possibly) mb chars */
- cs = (char *) malloc ((wcslen(wcs)+1) * MB_CUR_MAX);
-
- if (cp == 0) /* C locale */
- {
- for (i = 0; (wcs[i] != 0) && wcs[i] <= 255; i++)
- cs[i] = (char) wcs[i];
- cs[i] = '\0';
- }
- else
- {
- int nbytes = -1;
- int mb_len = 0;
- /* loop through till we hit null or invalid character */
- for (i = 0; (wcs[i] != 0) && (nbytes != 0); i++)
- {
- nbytes = WideCharToMultiByte(cp, WC_COMPOSITECHECK | WC_SEPCHARS,
- wcs + i, 1, cs + mb_len, MB_CUR_MAX,
- NULL, NULL);
- mb_len += nbytes;
- }
- cs[mb_len] = '\0';
- }
-
- ret = strtold (cs, &cse);
-
- if (wcse)
- {
- /* Make sure temp mbstring has 0 at cse. */
- *cse = '\0';
- i = _mbslen ((unsigned char*) cs); /* Number of chars, not bytes */
- *wcse = (wchar_t *) wcs + i;
- }
- free (cs);
-
- return ret;
-}
diff --git a/winsup/mingw/mingwex/wcstoumax.c b/winsup/mingw/mingwex/wcstoumax.c
deleted file mode 100644
index 9bd6cd704..000000000
--- a/winsup/mingw/mingwex/wcstoumax.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- This source code was extracted from the Q8 package created and
- placed in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
-
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.8.2 of ISO/IEC 9899:1999 (E).
-
- This particular implementation requires the matching <inttypes.h>.
- It also assumes that character codes for A..Z and a..z are in
- contiguous ascending order; this is true for ASCII but not EBCDIC.
-*/
-
-#include <wchar.h>
-#include <errno.h>
-#include <ctype.h>
-#include <inttypes.h>
-
-/* convert digit wide character to number, in any base */
-
-#define ToWNumber(c) (iswdigit(c) ? (c) - L'0' : \
- iswupper(c) ? (c) - L'A' + 10 : \
- iswlower(c) ? (c) - L'a' + 10 : \
- -1 /* "invalid" flag */ \
- )
-
-/* validate converted digit character for specific base */
-#define valid(n, b) ((n) >= 0 && (n) < (b))
-
-uintmax_t
-wcstoumax(nptr, endptr, base)
- register const wchar_t * __restrict__ nptr;
- wchar_t ** __restrict__ endptr;
- register int base;
- {
- register uintmax_t accum; /* accumulates converted value */
- register uintmax_t next; /* for computing next value of accum */
- register int n; /* numeral from digit character */
- int minus; /* set iff minus sign seen (yes!) */
- int toobig; /* set iff value overflows */
-
- if ( endptr != NULL )
- *endptr = (wchar_t *)nptr; /* in case no conv performed */
-
- if ( base < 0 || base == 1 || base > 36 )
- {
- errno = EDOM;
- return 0; /* unspecified behavior */
- }
-
- /* skip initial, possibly empty sequence of white-space w.characters */
-
- while ( iswspace(*nptr) )
- ++nptr;
-
- /* process subject sequence: */
-
- /* optional sign */
-
- if ( (minus = *nptr == L'-') || *nptr == L'+' )
- ++nptr;
-
- if ( base == 0 )
- {
- if ( *nptr == L'0' )
- {
- if ( nptr[1] == L'X' || nptr[1] == L'x' )
- base = 16;
- else
- base = 8;
- }
- else
- base = 10;
- }
- /* optional "0x" or "0X" for base 16 */
-
- if ( base == 16 && *nptr == L'0'
- && (nptr[1] == L'X' || nptr[1] == L'x')
- )
- nptr += 2; /* skip past this prefix */
-
- /* check whether there is at least one valid digit */
-
- n = ToWNumber(*nptr);
- ++nptr;
-
- if ( !valid(n, base) )
- return 0; /* subject seq. not of expected form */
-
- accum = n;
-
- for ( toobig = 0; n = ToWNumber(*nptr), valid(n, base); ++nptr )
- if ( accum > UINTMAX_MAX / base + 1 /* major wrap-around */
- || (next = base * accum + n) < accum /* minor wrap-around */
- )
- toobig = 1; /* but keep scanning */
- else
- accum = next;
-
- if ( endptr != NULL )
- *endptr = (wchar_t *)nptr; /* -> first not-valid-digit */
-
- if ( toobig )
- {
- errno = ERANGE;
- return UINTMAX_MAX;
- }
- else
- return minus ? -accum : accum; /* (yes!) */
- }
-
-unsigned long long __attribute__ ((alias ("wcstoumax")))
-wcstoull (const wchar_t* __restrict__ nptr, wchar_t ** __restrict__ endptr, int base);
diff --git a/winsup/mingw/mingwex/wctob.c b/winsup/mingw/mingwex/wctob.c
deleted file mode 100755
index 01a57bf3a..000000000
--- a/winsup/mingw/mingwex/wctob.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "mb_wc_common.h"
-#include <wchar.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-/* Return just the first byte after translating to multibyte. */
-int wctob (wint_t wc )
-{
- wchar_t w = wc;
- char c;
- int invalid_char = 0;
- if (!WideCharToMultiByte (get_codepage(),
- 0 /* Is this correct flag? */,
- &w, 1, &c, 1, NULL, &invalid_char)
- || invalid_char)
- return EOF;
- return (int) c;
-}
diff --git a/winsup/mingw/mingwex/wctrans.c b/winsup/mingw/mingwex/wctrans.c
deleted file mode 100755
index e129af471..000000000
--- a/winsup/mingw/mingwex/wctrans.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- wctrans.c
- 7.25.3.2 Extensible wide-character case mapping functions
-
- Contributed by: Danny Smith <dannysmith@usesr.sourcefoge.net>
- 2005-02-24
-
- This source code is placed in the PUBLIC DOMAIN. It is modified
- from the Q8 package created by Doug Gwyn <gwyn@arl.mil>
-
- */
-
-#include <string.h>
-#include <wctype.h>
-
-/*
- This differs from the MS implementation of wctrans which
- returns 0 for tolower and 1 for toupper. According to
- C99, a 0 return value indicates invalid input.
-
- These two function go in the same translation unit so that we
- can ensure that
- towctrans(wc, wctrans("tolower")) == towlower(wc)
- towctrans(wc, wctrans("toupper")) == towupper(wc)
- It also ensures that
- towctrans(wc, wctrans("")) == wc
- which is not required by standard.
-*/
-
-static const struct {
- const char *name;
- wctrans_t val; } tmap[] = {
- {"tolower", _LOWER},
- {"toupper", _UPPER}
- };
-
-#define NTMAP (sizeof tmap / sizeof tmap[0])
-
-wctrans_t
-wctrans (const char* property)
-{
- int i;
- for ( i = 0; i < NTMAP; ++i )
- if (strcmp (property, tmap[i].name) == 0)
- return tmap[i].val;
- return 0;
-}
-
-wint_t towctrans (wint_t wc, wctrans_t desc)
-{
- switch (desc)
- {
- case _LOWER:
- return towlower (wc);
- case _UPPER:
- return towupper (wc);
- default:
- return wc;
- }
-}
diff --git a/winsup/mingw/mingwex/wctype.c b/winsup/mingw/mingwex/wctype.c
deleted file mode 100755
index 197fde5f7..000000000
--- a/winsup/mingw/mingwex/wctype.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- wctype.c
- 7.25.2.2.2 The wctype function
-
- Contributed by: Danny Smith <dannysmith@usesr.sourcefoge.net>
- 2005-02-24
-
- This source code is placed in the PUBLIC DOMAIN. It is modified
- from the Q8 package created by Doug Gwyn <gwyn@arl.mil>
-
- The wctype function constructs a value with type wctype_t that
- describes a class of wide characters identified by the string
- argument property.
-
- In particular, we map the property strings so that:
-
- iswctype(wc, wctype("alnum")) == iswalnum(wc)
- iswctype(wc, wctype("alpha")) == iswalpha(wc)
- iswctype(wc, wctype("cntrl")) == iswcntrl(wc)
- iswctype(wc, wctype("digit")) == iswdigit(wc)
- iswctype(wc, wctype("graph")) == iswgraph(wc)
- iswctype(wc, wctype("lower")) == iswlower(wc)
- iswctype(wc, wctype("print")) == iswprint(wc)
- iswctype(wc, wctype("punct")) == iswpunct(wc)
- iswctype(wc, wctype("space")) == iswspace(wc)
- iswctype(wc, wctype("upper")) == iswupper(wc)
- iswctype(wc, wctype("xdigit")) == iswxdigit(wc)
-
-*/
-
-#include <string.h>
-#include <wctype.h>
-
-/* Using the bit-OR'd ctype character classification flags as return
- values achieves compatibility with MS iswctype(). */
-static const struct {
- const char *name;
- wctype_t flags;} cmap[] = {
- {"alnum", _ALPHA|_DIGIT},
- {"alpha", _ALPHA},
- {"cntrl", _CONTROL},
- {"digit", _DIGIT},
- {"graph", _PUNCT|_ALPHA|_DIGIT},
- {"lower", _LOWER},
- {"print", _BLANK|_PUNCT|_ALPHA|_DIGIT},
- {"punct", _PUNCT},
- {"space", _SPACE},
- {"upper", _UPPER},
- {"xdigit", _HEX}
- };
-
-#define NCMAP (sizeof cmap / sizeof cmap[0])
-wctype_t wctype (const char *property)
-{
- int i;
- for (i = 0; i < NCMAP; ++i)
- if (strcmp (property, cmap[i].name) == 0)
- return cmap[i].flags;
- return 0;
-}
diff --git a/winsup/mingw/mingwex/wdirent.c b/winsup/mingw/mingwex/wdirent.c
deleted file mode 100644
index 6dcf42bd5..000000000
--- a/winsup/mingw/mingwex/wdirent.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#define _UNICODE 1
-#define UNICODE 1
-
-#include <wchar.h>
-#include "dirent.c"
diff --git a/winsup/mingw/mingwex/wmemchr.c b/winsup/mingw/mingwex/wmemchr.c
deleted file mode 100644
index dc5cedd23..000000000
--- a/winsup/mingw/mingwex/wmemchr.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* This source code was extracted from the Q8 package created and placed
- in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.24 of ISO/IEC 9899:1999 (E).
-
- It supports an encoding where all char codes are mapped
- to the *same* code values within a wchar_t or wint_t,
- so long as no other wchar_t codes are used by the program.
-
-*/
-
-#include <wchar.h>
-
-wchar_t*
-wmemchr(s, c, n)
- register const wchar_t *s;
- register wchar_t c;
- register size_t n;
- {
- if ( s != NULL )
- for ( ; n > 0; ++s, --n )
- if ( *s == c )
- return (wchar_t *)s;
-
- return NULL;
- }
-
diff --git a/winsup/mingw/mingwex/wmemcmp.c b/winsup/mingw/mingwex/wmemcmp.c
deleted file mode 100644
index e1e034c7b..000000000
--- a/winsup/mingw/mingwex/wmemcmp.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* This source code was extracted from the Q8 package created and placed
- in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.24 of ISO/IEC 9899:1999 (E).
-
- It supports an encoding where all char codes are mapped
- to the *same* code values within a wchar_t or wint_t,
- so long as no other wchar_t codes are used by the program.
-
-*/
-
-#include <wchar.h>
-
-int
-wmemcmp(s1, s2, n)
- register const wchar_t *s1;
- register const wchar_t *s2;
- size_t n;
- {
- if ( n == 0 || s1 == s2 )
- return 0; /* even for NULL pointers */
-
- if ( (s1 != NULL) != (s2 != NULL) )
- return s2 == NULL ? 1 : -1; /* robust */
-
- for ( ; n > 0; ++s1, ++s2, --n )
- if ( *s1 != *s2 )
- return *s1 - *s2;
-
- return 0;
- }
diff --git a/winsup/mingw/mingwex/wmemcpy.c b/winsup/mingw/mingwex/wmemcpy.c
deleted file mode 100644
index d7e7b4cb3..000000000
--- a/winsup/mingw/mingwex/wmemcpy.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* This source code was extracted from the Q8 package created and placed
- in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.24 of ISO/IEC 9899:1999 (E).
-
- It supports an encoding where all char codes are mapped
- to the *same* code values within a wchar_t or wint_t,
- so long as no other wchar_t codes are used by the program.
-
-*/
-
-#include <wchar.h>
-
-
-wchar_t *
-wmemcpy(s1, s2, n)
- register wchar_t * __restrict__ s1;
- register const wchar_t * __restrict__ s2;
- register size_t n;
- {
- wchar_t *orig_s1 = s1;
-
- if ( s1 == NULL || s2 == NULL || n == 0 )
- return orig_s1; /* robust */
-
- for ( ; n > 0; --n )
- *s1++ = *s2++;
-
- return orig_s1;
- }
-
diff --git a/winsup/mingw/mingwex/wmemmove.c b/winsup/mingw/mingwex/wmemmove.c
deleted file mode 100644
index 3c545ac32..000000000
--- a/winsup/mingw/mingwex/wmemmove.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* This source code was extracted from the Q8 package created and placed
- in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.24 of ISO/IEC 9899:1999 (E).
-
- It supports an encoding where all char codes are mapped
- to the *same* code values within a wchar_t or wint_t,
- so long as no other wchar_t codes are used by the program.
-
-*/
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <wchar.h>
-
-wchar_t *
-wmemmove(s1, s2, n)
- register wchar_t *s1;
- register const wchar_t *s2;
- register size_t n;
- {
- wchar_t *orig_s1 = s1;
-
- if ( s1 == NULL || s2 == NULL || n == 0 )
- return orig_s1; /* robust */
-
- /* XXX -- The following test works only within a flat address space! */
- if ( s2 >= s1 )
- for ( ; n > 0; --n )
- *s1++ = *s2++;
- else {
- s1 += n;
- s2 += n;
-
- for ( ; n > 0; --n )
- *--s1 = *--s2;
- }
-
- return orig_s1;
- }
-
diff --git a/winsup/mingw/mingwex/wmemset.c b/winsup/mingw/mingwex/wmemset.c
deleted file mode 100644
index dadd9fb07..000000000
--- a/winsup/mingw/mingwex/wmemset.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* This source code was extracted from the Q8 package created and placed
- in the PUBLIC DOMAIN by Doug Gwyn <gwyn@arl.mil>
- last edit: 1999/11/05 gwyn@arl.mil
-
- Implements subclause 7.24 of ISO/IEC 9899:1999 (E).
-
- It supports an encoding where all char codes are mapped
- to the *same* code values within a wchar_t or wint_t,
- so long as no other wchar_t codes are used by the program.
-
-*/
-
-#include <wchar.h>
-
-
-wchar_t *
-wmemset(s, c, n)
- register wchar_t *s;
- register wchar_t c;
- register size_t n;
- {
- wchar_t *orig_s = s;
-
- if ( s != NULL )
- for ( ; n > 0; --n )
- *s++ = c;
-
- return orig_s;
- }
-
diff --git a/winsup/mingw/mingwex/wtoll.c b/winsup/mingw/mingwex/wtoll.c
deleted file mode 100644
index 0bff278d1..000000000
--- a/winsup/mingw/mingwex/wtoll.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <stdlib.h>
-long long wtoll(const wchar_t * _w)
- { return _wtoi64 (_w); }