summaryrefslogtreecommitdiff
path: root/sysdeps/i386/fpu
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/i386/fpu')
-rw-r--r--sysdeps/i386/fpu/Implies1
-rw-r--r--sysdeps/i386/fpu/Versions6
-rw-r--r--sysdeps/i386/fpu/doasin.c1
-rw-r--r--sysdeps/i386/fpu/e_acos.S25
-rw-r--r--sysdeps/i386/fpu/e_acosf.S24
-rw-r--r--sysdeps/i386/fpu/e_acosh.S101
-rw-r--r--sysdeps/i386/fpu/e_acoshf.S101
-rw-r--r--sysdeps/i386/fpu/e_acoshl.S107
-rw-r--r--sysdeps/i386/fpu/e_acosl.c29
-rw-r--r--sysdeps/i386/fpu/e_asin.S38
-rw-r--r--sysdeps/i386/fpu/e_asinf.S39
-rw-r--r--sysdeps/i386/fpu/e_atan2.S30
-rw-r--r--sysdeps/i386/fpu/e_atan2f.S30
-rw-r--r--sysdeps/i386/fpu/e_atan2l.c19
-rw-r--r--sysdeps/i386/fpu/e_atanh.S112
-rw-r--r--sysdeps/i386/fpu/e_atanhf.S109
-rw-r--r--sysdeps/i386/fpu/e_atanhl.S127
-rw-r--r--sysdeps/i386/fpu/e_exp.S73
-rw-r--r--sysdeps/i386/fpu/e_exp10.S53
-rw-r--r--sysdeps/i386/fpu/e_exp10f.S53
-rw-r--r--sysdeps/i386/fpu/e_exp10l.S2
-rw-r--r--sysdeps/i386/fpu/e_exp2.S52
-rw-r--r--sysdeps/i386/fpu/e_exp2f.S52
-rw-r--r--sysdeps/i386/fpu/e_exp2l.S60
-rw-r--r--sysdeps/i386/fpu/e_expf.S74
-rw-r--r--sysdeps/i386/fpu/e_expl.S226
-rw-r--r--sysdeps/i386/fpu/e_fmod.S18
-rw-r--r--sysdeps/i386/fpu/e_fmodf.S19
-rw-r--r--sysdeps/i386/fpu/e_fmodl.c23
-rw-r--r--sysdeps/i386/fpu/e_hypot.S75
-rw-r--r--sysdeps/i386/fpu/e_hypotf.S64
-rw-r--r--sysdeps/i386/fpu/e_ilogb.S42
-rw-r--r--sysdeps/i386/fpu/e_ilogbf.S42
-rw-r--r--sysdeps/i386/fpu/e_ilogbl.S43
-rw-r--r--sysdeps/i386/fpu/e_log.S92
-rw-r--r--sysdeps/i386/fpu/e_log10.S68
-rw-r--r--sysdeps/i386/fpu/e_log10f.S69
-rw-r--r--sysdeps/i386/fpu/e_log10l.S71
-rw-r--r--sysdeps/i386/fpu/e_log2.S69
-rw-r--r--sysdeps/i386/fpu/e_log2f.S69
-rw-r--r--sysdeps/i386/fpu/e_log2l.S70
-rw-r--r--sysdeps/i386/fpu/e_logf.S93
-rw-r--r--sysdeps/i386/fpu/e_logl.S97
-rw-r--r--sysdeps/i386/fpu/e_pow.S456
-rw-r--r--sysdeps/i386/fpu/e_powf.S392
-rw-r--r--sysdeps/i386/fpu/e_powl.S459
-rw-r--r--sysdeps/i386/fpu/e_rem_pio2.c3
-rw-r--r--sysdeps/i386/fpu/e_remainder.S18
-rw-r--r--sysdeps/i386/fpu/e_remainderf.S18
-rw-r--r--sysdeps/i386/fpu/e_remainderl.S20
-rw-r--r--sysdeps/i386/fpu/e_scalb.S100
-rw-r--r--sysdeps/i386/fpu/e_scalbf.S102
-rw-r--r--sysdeps/i386/fpu/e_scalbl.S90
-rw-r--r--sysdeps/i386/fpu/e_sqrt.S23
-rw-r--r--sysdeps/i386/fpu/e_sqrtf.S13
-rw-r--r--sysdeps/i386/fpu/e_sqrtl.c20
-rw-r--r--sysdeps/i386/fpu/fclrexcpt.c69
-rw-r--r--sysdeps/i386/fpu/fedisblxcpt.c54
-rw-r--r--sysdeps/i386/fpu/feenablxcpt.c54
-rw-r--r--sysdeps/i386/fpu/fegetenv.c49
-rw-r--r--sysdeps/i386/fpu/fegetexcept.c31
-rw-r--r--sysdeps/i386/fpu/fegetmode.c32
-rw-r--r--sysdeps/i386/fpu/fegetround.c33
-rw-r--r--sysdeps/i386/fpu/feholdexcpt.c50
-rw-r--r--sysdeps/i386/fpu/fenv_private.h501
-rw-r--r--sysdeps/i386/fpu/fesetenv.c131
-rw-r--r--sysdeps/i386/fpu/fesetexcept.c31
-rw-r--r--sysdeps/i386/fpu/fesetmode.c54
-rw-r--r--sysdeps/i386/fpu/fesetround.c54
-rw-r--r--sysdeps/i386/fpu/feupdateenv.c60
-rw-r--r--sysdeps/i386/fpu/fgetexcptflg.c57
-rw-r--r--sysdeps/i386/fpu/fraiseexcpt.c124
-rw-r--r--sysdeps/i386/fpu/fsetexcptflg.c69
-rw-r--r--sysdeps/i386/fpu/ftestexcept.c40
-rw-r--r--sysdeps/i386/fpu/halfulp.c1
-rw-r--r--sysdeps/i386/fpu/i386-math-asm.h340
-rw-r--r--sysdeps/i386/fpu/libm-test-ulps2202
-rw-r--r--sysdeps/i386/fpu/libm-test-ulps-name1
-rw-r--r--sysdeps/i386/fpu/math-tests.h27
-rw-r--r--sysdeps/i386/fpu/math_private.h7
-rw-r--r--sysdeps/i386/fpu/mpatan.c1
-rw-r--r--sysdeps/i386/fpu/mpatan2.c1
-rw-r--r--sysdeps/i386/fpu/mpexp.c1
-rw-r--r--sysdeps/i386/fpu/mplog.c1
-rw-r--r--sysdeps/i386/fpu/mpsqrt.c1
-rw-r--r--sysdeps/i386/fpu/s_asinh.S139
-rw-r--r--sysdeps/i386/fpu/s_asinhf.S139
-rw-r--r--sysdeps/i386/fpu/s_asinhl.S144
-rw-r--r--sysdeps/i386/fpu/s_atan.S30
-rw-r--r--sysdeps/i386/fpu/s_atanf.S30
-rw-r--r--sysdeps/i386/fpu/s_atanl.c22
-rw-r--r--sysdeps/i386/fpu/s_cbrt.S200
-rw-r--r--sysdeps/i386/fpu/s_cbrtf.S177
-rw-r--r--sysdeps/i386/fpu/s_cbrtl.S229
-rw-r--r--sysdeps/i386/fpu/s_ceil.S34
-rw-r--r--sysdeps/i386/fpu/s_ceilf.S34
-rw-r--r--sysdeps/i386/fpu/s_ceill.S40
-rw-r--r--sysdeps/i386/fpu/s_copysign.S20
-rw-r--r--sysdeps/i386/fpu/s_copysignf.S20
-rw-r--r--sysdeps/i386/fpu/s_copysignl.S21
-rw-r--r--sysdeps/i386/fpu/s_expm1.S113
-rw-r--r--sysdeps/i386/fpu/s_expm1f.S113
-rw-r--r--sysdeps/i386/fpu/s_expm1l.S2
-rw-r--r--sysdeps/i386/fpu/s_fabs.S9
-rw-r--r--sysdeps/i386/fpu/s_fabsf.S9
-rw-r--r--sysdeps/i386/fpu/s_fabsl.S9
-rw-r--r--sysdeps/i386/fpu/s_fdim.c50
-rw-r--r--sysdeps/i386/fpu/s_finite.S17
-rw-r--r--sysdeps/i386/fpu/s_finitef.S16
-rw-r--r--sysdeps/i386/fpu/s_finitel.S15
-rw-r--r--sysdeps/i386/fpu/s_floor.S34
-rw-r--r--sysdeps/i386/fpu/s_floorf.S34
-rw-r--r--sysdeps/i386/fpu/s_floorl.S40
-rw-r--r--sysdeps/i386/fpu/s_fmax.S43
-rw-r--r--sysdeps/i386/fpu/s_fmaxf.S43
-rw-r--r--sysdeps/i386/fpu/s_fmaxl.S71
-rw-r--r--sysdeps/i386/fpu/s_fmin.S43
-rw-r--r--sysdeps/i386/fpu/s_fminf.S43
-rw-r--r--sysdeps/i386/fpu/s_fminl.S71
-rw-r--r--sysdeps/i386/fpu/s_fpclassifyl.c42
-rw-r--r--sysdeps/i386/fpu/s_frexp.S83
-rw-r--r--sysdeps/i386/fpu/s_frexpf.S80
-rw-r--r--sysdeps/i386/fpu/s_frexpl.S92
-rw-r--r--sysdeps/i386/fpu/s_isinfl.c32
-rw-r--r--sysdeps/i386/fpu/s_isnanl.c43
-rw-r--r--sysdeps/i386/fpu/s_llrint.S36
-rw-r--r--sysdeps/i386/fpu/s_llrintf.S36
-rw-r--r--sysdeps/i386/fpu/s_llrintl.S36
-rw-r--r--sysdeps/i386/fpu/s_log1p.S67
-rw-r--r--sysdeps/i386/fpu/s_log1pf.S67
-rw-r--r--sysdeps/i386/fpu/s_log1pl.S76
-rw-r--r--sysdeps/i386/fpu/s_logb.S16
-rw-r--r--sysdeps/i386/fpu/s_logbf.S16
-rw-r--r--sysdeps/i386/fpu/s_logbl.c19
-rw-r--r--sysdeps/i386/fpu/s_lrint.S34
-rw-r--r--sysdeps/i386/fpu/s_lrintf.S34
-rw-r--r--sysdeps/i386/fpu/s_lrintl.S34
-rw-r--r--sysdeps/i386/fpu/s_nearbyint.S20
-rw-r--r--sysdeps/i386/fpu/s_nearbyintf.S20
-rw-r--r--sysdeps/i386/fpu/s_nearbyintl.S23
-rw-r--r--sysdeps/i386/fpu/s_nextafterl.c125
-rw-r--r--sysdeps/i386/fpu/s_nexttoward.c93
-rw-r--r--sysdeps/i386/fpu/s_nexttowardf.c77
-rw-r--r--sysdeps/i386/fpu/s_remquo.S45
-rw-r--r--sysdeps/i386/fpu/s_remquof.S45
-rw-r--r--sysdeps/i386/fpu/s_remquol.S45
-rw-r--r--sysdeps/i386/fpu/s_rint.S15
-rw-r--r--sysdeps/i386/fpu/s_rintf.S15
-rw-r--r--sysdeps/i386/fpu/s_rintl.c18
-rw-r--r--sysdeps/i386/fpu/s_scalbln.c2
-rw-r--r--sysdeps/i386/fpu/s_scalblnf.c2
-rw-r--r--sysdeps/i386/fpu/s_scalblnl.c2
-rw-r--r--sysdeps/i386/fpu/s_scalbn.S24
-rw-r--r--sysdeps/i386/fpu/s_scalbnf.S24
-rw-r--r--sysdeps/i386/fpu/s_scalbnl.S23
-rw-r--r--sysdeps/i386/fpu/s_significand.S16
-rw-r--r--sysdeps/i386/fpu/s_significandf.S16
-rw-r--r--sysdeps/i386/fpu/s_significandl.c19
-rw-r--r--sysdeps/i386/fpu/s_trunc.S37
-rw-r--r--sysdeps/i386/fpu/s_truncf.S37
-rw-r--r--sysdeps/i386/fpu/s_truncl.S40
-rw-r--r--sysdeps/i386/fpu/slowexp.c1
-rw-r--r--sysdeps/i386/fpu/slowpow.c1
-rw-r--r--sysdeps/i386/fpu/t_exp.c1
-rw-r--r--sysdeps/i386/fpu/w_sqrt_compat.c8
165 files changed, 0 insertions, 12049 deletions
diff --git a/sysdeps/i386/fpu/Implies b/sysdeps/i386/fpu/Implies
deleted file mode 100644
index 2b745a34fb..0000000000
--- a/sysdeps/i386/fpu/Implies
+++ /dev/null
@@ -1 +0,0 @@
-x86/fpu
diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
deleted file mode 100644
index a2eec371f1..0000000000
--- a/sysdeps/i386/fpu/Versions
+++ /dev/null
@@ -1,6 +0,0 @@
-libm {
- GLIBC_2.2 {
- # functions used in inline functions or macros
- __expl; __expm1l;
- }
-}
diff --git a/sysdeps/i386/fpu/doasin.c b/sysdeps/i386/fpu/doasin.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/doasin.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/e_acos.S b/sysdeps/i386/fpu/e_acos.S
deleted file mode 100644
index 586c7fc406..0000000000
--- a/sysdeps/i386/fpu/e_acos.S
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: e_acos.S,v 1.4 1995/05/08 23:44:37 jtc Exp $")
-
-/* acos = atan (sqrt((1-x) (1+x)) / x) */
-ENTRY(__ieee754_acos)
- fldl 4(%esp) /* x */
- fld %st /* x : x */
- fld1 /* 1 : x : x */
- fsubp /* 1 - x : x */
- fld1 /* 1 : 1 - x : x */
- fadd %st(2) /* 1 + x : 1 - x : x */
- fmulp /* 1 - x^2 : x */
- fsqrt /* sqrt (1 - x^2) : x */
- fabs
- fxch %st(1) /* x : sqrt (1 - x^2) */
- fpatan /* atan (sqrt(1 - x^2) / x) */
- ret
-END (__ieee754_acos)
-strong_alias (__ieee754_acos, __acos_finite)
diff --git a/sysdeps/i386/fpu/e_acosf.S b/sysdeps/i386/fpu/e_acosf.S
deleted file mode 100644
index 54930af8b2..0000000000
--- a/sysdeps/i386/fpu/e_acosf.S
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: $")
-
-/* acos = atan (sqrt(1 - x^2) / x) */
-ENTRY(__ieee754_acosf)
- flds 4(%esp) /* x */
- fld %st
- fmul %st(0) /* x^2 */
- fld1
- fsubp /* 1 - x^2 */
- fsqrt /* sqrt (1 - x^2) */
- fabs
- fxch %st(1)
- fpatan
- ret
-END (__ieee754_acosf)
-strong_alias (__ieee754_acosf, __acosf_finite)
diff --git a/sysdeps/i386/fpu/e_acosh.S b/sysdeps/i386/fpu/e_acosh.S
deleted file mode 100644
index 9555ef8078..0000000000
--- a/sysdeps/i386/fpu/e_acosh.S
+++ /dev/null
@@ -1,101 +0,0 @@
-/* ix87 specific implementation of arcsinh.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_acosh)
- movl 8(%esp), %ecx
- cmpl $0x3ff00000, %ecx
- jl 5f // < 1 => invalid
- fldln2 // log(2)
- fldl 4(%esp) // x : log(2)
- cmpl $0x41b00000, %ecx
- ja 3f // x > 2^28
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- cmpl $0x40000000, %ecx
- ja 4f // x > 2
-
- // 1 <= x <= 2 => y = log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
- fsubl MO(one) // x-1 : log(2)
- fabs // acosh(1) is +0 in all rounding modes
- fld %st // x-1 : x-1 : log(2)
- fmul %st(1) // (x-1)^2 : x-1 : log(2)
- fadd %st(1) // x-1+(x-1)^2 : x-1 : log(2)
- fadd %st(1) // 2*(x-1)+(x-1)^2 : x-1 : log(2)
- fsqrt // sqrt(2*(x-1)+(x-1)^2) : x-1 : log(2)
- faddp // x-1+sqrt(2*(x-1)+(x-1)^2) : log(2)
- fcoml MO(limit)
- fnstsw
- sahf
- ja 2f
- fyl2xp1 // log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
- ret
-
-2: faddl MO(one) // x+sqrt(2*(x-1)+(x-1)^2) : log(2)
- fyl2x // log(x+sqrt(2*(x-1)+(x-1)^2))
- ret
-
- // x > 2^28 => y = log(x) + log(2)
- .align ALIGNARG(4)
-3: fyl2x // log(x)
- fldln2 // log(2) : log(x)
- faddp // log(x)+log(2)
- ret
-
- // 2^28 > x > 2 => y = log(2*x - 1/(x+sqrt(x*x-1)))
- .align ALIGNARG(4)
-4: fld %st // x : x : log(2)
- fadd %st, %st(1) // x : 2*x : log(2)
- fld %st // x : x : 2*x : log(2)
- fmul %st(1) // x^2 : x : 2*x : log(2)
- fsubl MO(one) // x^2-1 : x : 2*x : log(2)
- fsqrt // sqrt(x^2-1) : x : 2*x : log(2)
- faddp // x+sqrt(x^2-1) : 2*x : log(2)
- fdivrl MO(one) // 1/(x+sqrt(x^2-1)) : 2*x : log(2)
- fsubrp // 2*x+1/(x+sqrt(x^2)-1) : log(2)
- fyl2x // log(2*x+1/(x+sqrt(x^2-1)))
- ret
-
- // x < 1 (or -NaN) => NaN
- .align ALIGNARG(4)
-5: fldl 4(%esp)
- fsub %st
- fdiv %st, %st(0)
- ret
-END(__ieee754_acosh)
-strong_alias (__ieee754_acosh, __acosh_finite)
diff --git a/sysdeps/i386/fpu/e_acoshf.S b/sysdeps/i386/fpu/e_acoshf.S
deleted file mode 100644
index 662fda3c06..0000000000
--- a/sysdeps/i386/fpu/e_acoshf.S
+++ /dev/null
@@ -1,101 +0,0 @@
-/* ix87 specific implementation of arcsinh.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_acoshf)
- movl 4(%esp), %ecx
- cmpl $0x3f800000, %ecx
- jl 5f // < 1 => invalid
- fldln2 // log(2)
- flds 4(%esp) // x : log(2)
- cmpl $0x47000000, %ecx
- ja 3f // x > 2^14
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- cmpl $0x40000000, %ecx
- ja 4f // x > 2
-
- // 1 <= x <= 2 => y = log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
- fsubl MO(one) // x-1 : log(2)
- fabs // acosh(1) is +0 in all rounding modes
- fld %st // x-1 : x-1 : log(2)
- fmul %st(1) // (x-1)^2 : x-1 : log(2)
- fadd %st(1) // x-1+(x-1)^2 : x-1 : log(2)
- fadd %st(1) // 2*(x-1)+(x-1)^2 : x-1 : log(2)
- fsqrt // sqrt(2*(x-1)+(x-1)^2) : x-1 : log(2)
- faddp // x-1+sqrt(2*(x-1)+(x-1)^2) : log(2)
- fcoml MO(limit)
- fnstsw
- sahf
- ja 2f
- fyl2xp1 // log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
- ret
-
-2: faddl MO(one) // x+sqrt(2*(x-1)+(x-1)^2) : log(2)
- fyl2x // log(x+sqrt(2*(x-1)+(x-1)^2))
- ret
-
- // x > 2^14 => y = log(x) + log(2)
- .align ALIGNARG(4)
-3: fyl2x // log(x)
- fldln2 // log(2) : log(x)
- faddp // log(x)+log(2)
- ret
-
- // 2^28 > x > 2 => y = log(2*x - 1/(x+sqrt(x*x-1)))
- .align ALIGNARG(4)
-4: fld %st // x : x : log(2)
- fadd %st, %st(1) // x : 2*x : log(2)
- fld %st // x : x : 2*x : log(2)
- fmul %st(1) // x^2 : x : 2*x : log(2)
- fsubl MO(one) // x^2-1 : x : 2*x : log(2)
- fsqrt // sqrt(x^2-1) : x : 2*x : log(2)
- faddp // x+sqrt(x^2-1) : 2*x : log(2)
- fdivrl MO(one) // 1/(x+sqrt(x^2-1)) : 2*x : log(2)
- fsubrp // 2*x+1/(x+sqrt(x^2)-1) : log(2)
- fyl2x // log(2*x+1/(x+sqrt(x^2-1)))
- ret
-
- // x < 1 (or -NaN) => NaN
- .align ALIGNARG(4)
-5: flds 4(%esp)
- fsub %st
- fdiv %st, %st(0)
- ret
-END(__ieee754_acoshf)
-strong_alias (__ieee754_acoshf, __acoshf_finite)
diff --git a/sysdeps/i386/fpu/e_acoshl.S b/sysdeps/i386/fpu/e_acoshl.S
deleted file mode 100644
index e0d6466aac..0000000000
--- a/sysdeps/i386/fpu/e_acoshl.S
+++ /dev/null
@@ -1,107 +0,0 @@
-/* ix87 specific implementation of arcsinh.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- /* Please note that we use double value for 1.0. This number
- has an exact representation and so we don't get accuracy
- problems. The advantage is that the code is simpler. */
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_acoshl)
- movl 12(%esp), %ecx
- andl $0xffff, %ecx
- cmpl $0x3fff, %ecx
- jl 5f // < 1 => invalid
- fldln2 // log(2)
- fldt 4(%esp) // x : log(2)
- cmpl $0x4020, %ecx
- ja 3f // x > 2^34
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- cmpl $0x4000, %ecx
- ja 4f // x > 2
-
- // 1 <= x <= 2 => y = log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
- fsubl MO(one) // x-1 : log(2)
- fabs // acosh(1) is +0 in all rounding modes
- fld %st // x-1 : x-1 : log(2)
- fmul %st(1) // (x-1)^2 : x-1 : log(2)
- fadd %st(1) // x-1+(x-1)^2 : x-1 : log(2)
- fadd %st(1) // 2*(x-1)+(x-1)^2 : x-1 : log(2)
- fsqrt // sqrt(2*(x-1)+(x-1)^2) : x-1 : log(2)
- faddp // x-1+sqrt(2*(x-1)+(x-1)^2) : log(2)
- fcoml MO(limit)
- fnstsw
- sahf
- ja 2f
- fyl2xp1 // log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
- ret
-
-2: faddl MO(one) // x+sqrt(2*(x-1)+(x-1)^2) : log(2)
- fyl2x // log(x+sqrt(2*(x-1)+(x-1)^2))
- ret
-
- // x > 2^34 => y = log(x) + log(2)
- .align ALIGNARG(4)
-3: fyl2x // log(x)
- fldln2 // log(2) : log(x)
- faddp // log(x)+log(2)
- ret
-
- // 2^34 > x > 2 => y = log(2*x - 1/(x+sqrt(x*x-1)))
- .align ALIGNARG(4)
-4: fld %st // x : x : log(2)
- fadd %st, %st(1) // x : 2*x : log(2)
- fld %st // x : x : 2*x : log(2)
- fmul %st(1) // x^2 : x : 2*x : log(2)
- fsubl MO(one) // x^2-1 : x : 2*x : log(2)
- fsqrt // sqrt(x^2-1) : x : 2*x : log(2)
- faddp // x+sqrt(x^2-1) : 2*x : log(2)
- fdivrl MO(one) // 1/(x+sqrt(x^2-1)) : 2*x : log(2)
- fsubrp // 2*x+1/(x+sqrt(x^2)-1) : log(2)
- fyl2x // log(2*x+1/(x+sqrt(x^2-1)))
- ret
-
- // x < 1 => NaN
- .align ALIGNARG(4)
-5: fldz
- fdiv %st, %st(0)
- ret
-END(__ieee754_acoshl)
-strong_alias (__ieee754_acoshl, __acoshl_finite)
diff --git a/sysdeps/i386/fpu/e_acosl.c b/sysdeps/i386/fpu/e_acosl.c
deleted file mode 100644
index ab08931924..0000000000
--- a/sysdeps/i386/fpu/e_acosl.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <math_private.h>
-
-long double
-__ieee754_acosl (long double x)
-{
- long double res;
-
- /* acosl = atanl (sqrtl((1-x) (1+x)) / x) */
- asm ( "fld %%st\n"
- "fld1\n"
- "fsubp\n"
- "fld1\n"
- "fadd %%st(2)\n"
- "fmulp\n" /* 1 - x^2 */
- "fsqrt\n" /* sqrtl (1 - x^2) */
- "fabs\n"
- "fxch %%st(1)\n"
- "fpatan"
- : "=t" (res) : "0" (x) : "st(1)");
- return res;
-}
-strong_alias (__ieee754_acosl, __acosl_finite)
diff --git a/sysdeps/i386/fpu/e_asin.S b/sysdeps/i386/fpu/e_asin.S
deleted file mode 100644
index 39c8b47da4..0000000000
--- a/sysdeps/i386/fpu/e_asin.S
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-RCSID("$NetBSD: e_asin.S,v 1.4 1995/05/08 23:45:40 jtc Exp $")
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-
-/* asin = atan (x / sqrt((1-x) (1+x))) */
-ENTRY(__ieee754_asin)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- fldl 4(%esp) /* x */
- fld %st
- fld1 /* 1 : x : x */
- fsubp /* 1 - x : x */
- fld1 /* 1 : 1 - x : x */
- fadd %st(2) /* 1 + x : 1 - x : x */
- fmulp /* 1 - x^2 */
- fsqrt /* sqrt (1 - x^2) */
- fpatan
- DBL_CHECK_FORCE_UFLOW
- ret
-END (__ieee754_asin)
-strong_alias (__ieee754_asin, __asin_finite)
diff --git a/sysdeps/i386/fpu/e_asinf.S b/sysdeps/i386/fpu/e_asinf.S
deleted file mode 100644
index 1102bdedfd..0000000000
--- a/sysdeps/i386/fpu/e_asinf.S
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-RCSID("$NetBSD: $")
-
- .section .rodata.cst4,"aM",@progbits,4
-
-DEFINE_FLT_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-
-/* asin = atan (x / sqrt(1 - x^2)) */
-ENTRY(__ieee754_asinf)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- flds 4(%esp) /* x */
- fld %st
- fmul %st(0) /* x^2 */
- fld1
- fsubp /* 1 - x^2 */
- fsqrt /* sqrt (1 - x^2) */
- fpatan
- FLT_CHECK_FORCE_UFLOW
- ret
-END (__ieee754_asinf)
-strong_alias (__ieee754_asinf, __asinf_finite)
diff --git a/sysdeps/i386/fpu/e_atan2.S b/sysdeps/i386/fpu/e_atan2.S
deleted file mode 100644
index 25f43bb5a1..0000000000
--- a/sysdeps/i386/fpu/e_atan2.S
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-RCSID("$NetBSD: e_atan2.S,v 1.4 1995/05/08 23:46:28 jtc Exp $")
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_atan2)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- fldl 4(%esp)
- fldl 12(%esp)
- fpatan
- DBL_CHECK_FORCE_UFLOW_NARROW
- ret
-END (__ieee754_atan2)
-strong_alias (__ieee754_atan2, __atan2_finite)
diff --git a/sysdeps/i386/fpu/e_atan2f.S b/sysdeps/i386/fpu/e_atan2f.S
deleted file mode 100644
index 2bc909a762..0000000000
--- a/sysdeps/i386/fpu/e_atan2f.S
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-RCSID("$NetBSD: e_atan2f.S,v 1.1 1995/05/08 23:35:10 jtc Exp $")
-
-DEFINE_FLT_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_atan2f)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- flds 4(%esp)
- flds 8(%esp)
- fpatan
- FLT_CHECK_FORCE_UFLOW_NARROW
- ret
-END (__ieee754_atan2f)
-strong_alias (__ieee754_atan2f, __atan2f_finite)
diff --git a/sysdeps/i386/fpu/e_atan2l.c b/sysdeps/i386/fpu/e_atan2l.c
deleted file mode 100644
index 9f88bfcc08..0000000000
--- a/sysdeps/i386/fpu/e_atan2l.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_private.h>
-
-long double
-__ieee754_atan2l (long double y, long double x)
-{
- long double res;
-
- asm ("fpatan" : "=t" (res) : "u" (y), "0" (x) : "st(1)");
-
- return res;
-}
-strong_alias (__ieee754_atan2l, __atan2l_finite)
diff --git a/sysdeps/i386/fpu/e_atanh.S b/sysdeps/i386/fpu/e_atanh.S
deleted file mode 100644
index cbc93d5da2..0000000000
--- a/sysdeps/i386/fpu/e_atanh.S
+++ /dev/null
@@ -1,112 +0,0 @@
-/* ix87 specific implementation of arctanh function.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type half,@object
-half: .double 0.5
- ASM_SIZE_DIRECTIVE(half)
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
- .type ln2_2,@object
-ln2_2: .tfloat 0.3465735902799726547086160
- ASM_SIZE_DIRECTIVE(ln2_2)
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_atanh)
- movl 8(%esp), %ecx
-
- movl %ecx, %eax
- andl $0x7fffffff, %eax
- cmpl $0x7ff00000, %eax
- jae 5f
-7:
-
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
-
- andl $0x80000000, %ecx // ECX == 0 iff X >= 0
-
- fldt MO(ln2_2) // 0.5*ln2
- xorl %ecx, 8(%esp)
- fldl 4(%esp) // |x| : 0.5*ln2
- fcoml MO(half) // |x| : 0.5*ln2
- fld %st // |x| : |x| : 0.5*ln2
- fnstsw // |x| : |x| : 0.5*ln2
- sahf
- jae 2f
- fadd %st, %st(1) // |x| : 2*|x| : 0.5*ln2
- fld %st // |x| : |x| : 2*|x| : 0.5*ln2
- fsubrl MO(one) // 1-|x| : |x| : 2*|x| : 0.5*ln2
- fxch // |x| : 1-|x| : 2*|x| : 0.5*ln2
- fmul %st(2) // 2*|x|^2 : 1-|x| : 2*|x| : 0.5*ln2
- fdivp // (2*|x|^2)/(1-|x|) : 2*|x| : 0.5*ln2
- faddp // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- fcoml MO(limit) // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- fnstsw // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- sahf
- jae 4f
- fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
- DBL_CHECK_FORCE_UFLOW_NONNEG
- jecxz 3f
- fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
-3: ret
-
- .align ALIGNARG(4)
-4: faddl MO(one) // 1+2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- fyl2x // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
- jecxz 3f
- fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
-3: ret
-
- .align ALIGNARG(4)
-2: faddl MO(one) // 1+|x| : |x| : 0.5*ln2
- fxch // |x| : 1+|x| : 0.5*ln2
- fsubrl MO(one) // 1-|x| : 1+|x| : 0.5*ln2
- fdivrp // (1+|x|)/(1-|x|) : 0.5*ln2
- fyl2x // 0.5*ln2*ld((1+|x|)/(1-|x|))
- jecxz 3f
- fchs // 0.5*ln2*ld((1+x)/(1-x))
-3: ret
-
- // x == NaN or ħInf
-5: ja 6f
- cmpl $0, 4(%esp)
- je 7b
-6: fldl 4(%esp)
- ret
-END(__ieee754_atanh)
-strong_alias (__ieee754_atanh, __atanh_finite)
diff --git a/sysdeps/i386/fpu/e_atanhf.S b/sysdeps/i386/fpu/e_atanhf.S
deleted file mode 100644
index 92fda3fd82..0000000000
--- a/sysdeps/i386/fpu/e_atanhf.S
+++ /dev/null
@@ -1,109 +0,0 @@
-/* ix87 specific implementation of arctanh function.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type half,@object
-half: .double 0.5
- ASM_SIZE_DIRECTIVE(half)
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
- .align ALIGNARG(4)
- .type ln2_2,@object
-ln2_2: .tfloat 0.3465735902799726547086160
- ASM_SIZE_DIRECTIVE(ln2_2)
-
-DEFINE_FLT_MIN
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_atanhf)
- movl 4(%esp), %ecx
-
- movl %ecx, %eax
- andl $0x7fffffff, %eax
- cmpl $0x7f800000, %eax
- ja 5f
-
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
-
- andl $0x80000000, %ecx // ECX == 0 iff X >= 0
-
- fldt MO(ln2_2) // 0.5*ln2
- xorl %ecx, 4(%esp)
- flds 4(%esp) // |x| : 0.5*ln2
- fcoml MO(half) // |x| : 0.5*ln2
- fld %st(0) // |x| : |x| : 0.5*ln2
- fnstsw // |x| : |x| : 0.5*ln2
- sahf
- jae 2f
- fadd %st, %st(1) // |x| : 2*|x| : 0.5*ln2
- fld %st // |x| : |x| : 2*|x| : 0.5*ln2
- fsubrl MO(one) // 1-|x| : |x| : 2*|x| : 0.5*ln2
- fxch // |x| : 1-|x| : 2*|x| : 0.5*ln2
- fmul %st(2) // 2*|x|^2 : 1-|x| : 2*|x| : 0.5*ln2
- fdivp // (2*|x|^2)/(1-|x|) : 2*|x| : 0.5*ln2
- faddp // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- fcoml MO(limit) // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- fnstsw // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- sahf
- jae 4f
- fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
- FLT_CHECK_FORCE_UFLOW_NONNEG
- jecxz 3f
- fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
-3: ret
-
- .align ALIGNARG(4)
-4: faddl MO(one) // 1+2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- fyl2x // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
- jecxz 3f
- fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
-3: ret
-
- .align ALIGNARG(4)
-2: faddl MO(one) // 1+|x| : |x| : 0.5*ln2
- fxch // |x| : 1+|x| : 0.5*ln2
- fsubrl MO(one) // 1-|x| : 1+|x| : 0.5*ln2
- fdivrp // (1+|x|)/(1-|x|) : 0.5*ln2
- fyl2x // 0.5*ln2*ld((1+|x|)/(1-|x|))
- jecxz 3f
- fchs // 0.5*ln2*ld((1+x)/(1-x))
-3: ret
-
- // x == NaN
-5: flds 4(%esp)
- ret
-END(__ieee754_atanhf)
-strong_alias (__ieee754_atanhf, __atanhf_finite)
diff --git a/sysdeps/i386/fpu/e_atanhl.S b/sysdeps/i386/fpu/e_atanhl.S
deleted file mode 100644
index 31ff7e5182..0000000000
--- a/sysdeps/i386/fpu/e_atanhl.S
+++ /dev/null
@@ -1,127 +0,0 @@
-/* ix87 specific implementation of arctanh function.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- /* Please note that we use double values for 0.5 and 1.0. These
- numbers have exact representations and so we don't get accuracy
- problems. The advantage is that the code is simpler. */
- .type half,@object
-half: .double 0.5
- ASM_SIZE_DIRECTIVE(half)
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
- .align ALIGNARG(4)
- .type ln2_2,@object
-ln2_2: .tfloat 0.3465735902799726547086160
- ASM_SIZE_DIRECTIVE(ln2_2)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_atanhl)
- movl 12(%esp), %ecx
-
- movl %ecx, %eax
- andl $0x7fff, %eax
- cmpl $0x7fff, %eax
- je 5f
- cmpl $0x3fdf, %eax
- jge 7f
- // Exponent below -32; return x, with underflow if subnormal.
- fldt 4(%esp)
- cmpl $0, %eax
- jne 8f
- fld %st(0)
- fmul %st(0)
- fstp %st(0)
-8: ret
-7:
-
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
-
- andl $0x8000, %ecx // ECX == 0 iff X >= 0
-
- fldt MO(ln2_2) // 0.5*ln2
- xorl %ecx, 12(%esp)
- fldt 4(%esp) // |x| : 0.5*ln2
- fcoml MO(half) // |x| : 0.5*ln2
- fld %st(0) // |x| : |x| : 0.5*ln2
- fnstsw // |x| : |x| : 0.5*ln2
- sahf
- jae 2f
- fadd %st, %st(1) // |x| : 2*|x| : 0.5*ln2
- fld %st // |x| : |x| : 2*|x| : 0.5*ln2
- fsubrl MO(one) // 1-|x| : |x| : 2*|x| : 0.5*ln2
- fxch // |x| : 1-|x| : 2*|x| : 0.5*ln2
- fmul %st(2) // 2*|x|^2 : 1-|x| : 2*|x| : 0.5*ln2
- fdivp // (2*|x|^2)/(1-|x|) : 2*|x| : 0.5*ln2
- faddp // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- fcoml MO(limit) // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- fnstsw // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- sahf
- jae 4f
- fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
- jecxz 3f
- fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
-3: ret
-
- .align ALIGNARG(4)
-4: faddl MO(one) // 1+2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
- fyl2x // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
- jecxz 3f
- fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
-3: ret
-
- .align ALIGNARG(4)
-2: faddl MO(one) // 1+|x| : |x| : 0.5*ln2
- fxch // |x| : 1+|x| : 0.5*ln2
- fsubrl MO(one) // 1-|x| : 1+|x| : 0.5*ln2
- fdivrp // (1+|x|)/(1-|x|) : 0.5*ln2
- fyl2x // 0.5*ln2*ld((1+|x|)/(1-|x|))
- jecxz 3f
- fchs // 0.5*ln2*ld((1+x)/(1-x))
-3: ret
-
- // x == NaN or ħInf
-5: cmpl $0x80000000, 8(%esp)
- ja 6f
- cmpl $0, 4(%esp)
- je 7b
-6: fldt 4(%esp)
- fadd %st(0)
- ret
-END(__ieee754_atanhl)
-strong_alias (__ieee754_atanhl, __atanhl_finite)
diff --git a/sysdeps/i386/fpu/e_exp.S b/sysdeps/i386/fpu/e_exp.S
deleted file mode 100644
index a7e7f13f6f..0000000000
--- a/sysdeps/i386/fpu/e_exp.S
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-/* e^x = 2^(x * log2(e)) */
-ENTRY(__ieee754_exp)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- 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. */
- fldl2e
- fmulp /* x * log2(e) */
- fld %st
- frndint /* int(x * log2(e)) */
- fsubr %st,%st(1) /* fract(x * log2(e)) */
- fxch
- f2xm1 /* 2^(fract(x * log2(e))) - 1 */
- fld1
- faddp /* 2^(fract(x * log2(e))) */
- fscale /* e^x */
- fstp %st(1)
- DBL_NARROW_EVAL_UFLOW_NONNEG_NAN
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
-END (__ieee754_exp)
-
-
-ENTRY(__exp_finite)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- fldl2e
- fmull 4(%esp) /* x * log2(e) */
- fld %st
- frndint /* int(x * log2(e)) */
- fsubr %st,%st(1) /* fract(x * log2(e)) */
- fxch
- f2xm1 /* 2^(fract(x * log2(e))) - 1 */
- fld1
- faddp /* 2^(fract(x * log2(e))) */
- fscale /* e^x */
- fstp %st(1)
- DBL_NARROW_EVAL_UFLOW_NONNEG
- ret
-END(__exp_finite)
diff --git a/sysdeps/i386/fpu/e_exp10.S b/sysdeps/i386/fpu/e_exp10.S
deleted file mode 100644
index acb5160a3f..0000000000
--- a/sysdeps/i386/fpu/e_exp10.S
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Written by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-/* 10^x = 2^(x * log2(10)) */
-ENTRY(__ieee754_exp10)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- 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. */
- fldl2t
- fmulp /* x * log2(10) */
- fld %st
- frndint /* int(x * log2(10)) */
- fsubr %st,%st(1) /* fract(x * log2(10)) */
- fxch
- f2xm1 /* 2^(fract(x * log2(10))) - 1 */
- fld1
- faddp /* 2^(fract(x * log2(10))) */
- fscale /* e^x */
- fstp %st(1)
- DBL_NARROW_EVAL_UFLOW_NONNEG_NAN
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
-END (__ieee754_exp10)
-strong_alias (__ieee754_exp10, __exp10_finite)
diff --git a/sysdeps/i386/fpu/e_exp10f.S b/sysdeps/i386/fpu/e_exp10f.S
deleted file mode 100644
index 1812b34398..0000000000
--- a/sysdeps/i386/fpu/e_exp10f.S
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Written by Ulrich Drepper.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-DEFINE_FLT_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-/* 10^x = 2^(x * log2(10)) */
-ENTRY(__ieee754_exp10f)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- 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. */
- fldl2t
- fmulp /* x * log2(10) */
- fld %st
- frndint /* int(x * log2(10)) */
- fsubr %st,%st(1) /* fract(x * log2(10)) */
- fxch
- f2xm1 /* 2^(fract(x * log2(10))) - 1 */
- fld1
- faddp /* 2^(fract(x * log2(10))) */
- fscale /* e^x */
- fstp %st(1)
- FLT_NARROW_EVAL_UFLOW_NONNEG_NAN
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
-END (__ieee754_exp10f)
-strong_alias (__ieee754_exp10f, __exp10f_finite)
diff --git a/sysdeps/i386/fpu/e_exp10l.S b/sysdeps/i386/fpu/e_exp10l.S
deleted file mode 100644
index d843e2b5e8..0000000000
--- a/sysdeps/i386/fpu/e_exp10l.S
+++ /dev/null
@@ -1,2 +0,0 @@
-#define USE_AS_EXP10L
-#include <e_expl.S>
diff --git a/sysdeps/i386/fpu/e_exp2.S b/sysdeps/i386/fpu/e_exp2.S
deleted file mode 100644
index fc16a96053..0000000000
--- a/sysdeps/i386/fpu/e_exp2.S
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_exp2)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- 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)
- DBL_NARROW_EVAL_UFLOW_NONNEG_NAN
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
-END (__ieee754_exp2)
-strong_alias (__ieee754_exp2, __exp2_finite)
diff --git a/sysdeps/i386/fpu/e_exp2f.S b/sysdeps/i386/fpu/e_exp2f.S
deleted file mode 100644
index 30623cd850..0000000000
--- a/sysdeps/i386/fpu/e_exp2f.S
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-DEFINE_FLT_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_exp2f)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- 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)
- FLT_NARROW_EVAL_UFLOW_NONNEG_NAN
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
-END (__ieee754_exp2f)
-strong_alias (__ieee754_exp2f, __exp2f_finite)
diff --git a/sysdeps/i386/fpu/e_exp2l.S b/sysdeps/i386/fpu/e_exp2l.S
deleted file mode 100644
index c4cb73d589..0000000000
--- a/sysdeps/i386/fpu/e_exp2l.S
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-DEFINE_LDBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_exp2l)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- 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. */
- movzwl 4+8(%esp), %eax
- andl $0x7fff, %eax
- cmpl $0x3fbe, %eax
- jge 3f
- /* Argument's exponent below -65, result rounds to 1. */
- fld1
- faddp
- ret
-3: 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)
- LDBL_CHECK_FORCE_UFLOW_NONNEG_NAN
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
-END (__ieee754_exp2l)
-strong_alias (__ieee754_exp2l, __exp2l_finite)
diff --git a/sysdeps/i386/fpu/e_expf.S b/sysdeps/i386/fpu/e_expf.S
deleted file mode 100644
index 65cb4ec204..0000000000
--- a/sysdeps/i386/fpu/e_expf.S
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-DEFINE_FLT_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-/* e^x = 2^(x * log2(e)) */
-ENTRY(__ieee754_expf)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- 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. */
- fldl2e
- fmulp /* x * log2(e) */
- fld %st
- frndint /* int(x * log2(e)) */
- fsubr %st,%st(1) /* fract(x * log2(e)) */
- fxch
- f2xm1 /* 2^(fract(x * log2(e))) - 1 */
- fld1
- faddp /* 2^(fract(x * log2(e))) */
- fscale /* e^x */
- fstp %st(1)
- FLT_NARROW_EVAL_UFLOW_NONNEG_NAN
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
-END (__ieee754_expf)
-
-
-ENTRY(__expf_finite)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- fldl2e
- fmuls 4(%esp) /* x * log2(e) */
- fld %st
- frndint /* int(x * log2(e)) */
- fsubr %st,%st(1) /* fract(x * log2(e)) */
- fxch
- f2xm1 /* 2^(fract(x * log2(e))) - 1 */
- fld1
- faddp /* 2^(fract(x * log2(e))) */
- fscale /* e^x */
- fstp %st(1)
- FLT_NARROW_EVAL_UFLOW_NONNEG
- ret
-END(__expf_finite)
diff --git a/sysdeps/i386/fpu/e_expl.S b/sysdeps/i386/fpu/e_expl.S
deleted file mode 100644
index 7d75fe22a1..0000000000
--- a/sysdeps/i386/fpu/e_expl.S
+++ /dev/null
@@ -1,226 +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 <machine/asm.h>
-#include <i386-math-asm.h>
-
-#ifdef USE_AS_EXP10L
-# define IEEE754_EXPL __ieee754_exp10l
-# define EXPL_FINITE __exp10l_finite
-# define FLDLOG fldl2t
-#elif defined USE_AS_EXPM1L
-# define IEEE754_EXPL __expm1l
-# undef EXPL_FINITE
-# define FLDLOG fldl2e
-#else
-# define IEEE754_EXPL __ieee754_expl
-# define EXPL_FINITE __expl_finite
-# define FLDLOG fldl2e
-#endif
-
- .section .rodata.cst16,"aM",@progbits,16
-
- .p2align 4
-#ifdef USE_AS_EXP10L
- .type c0,@object
-c0: .byte 0, 0, 0, 0, 0, 0, 0x9a, 0xd4, 0x00, 0x40
- .byte 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(c0)
- .type c1,@object
-c1: .byte 0x58, 0x92, 0xfc, 0x15, 0x37, 0x9a, 0x97, 0xf0, 0xef, 0x3f
- .byte 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(c1)
-#else
- .type c0,@object
-c0: .byte 0, 0, 0, 0, 0, 0, 0xaa, 0xb8, 0xff, 0x3f
- .byte 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(c0)
- .type c1,@object
-c1: .byte 0x20, 0xfa, 0xee, 0xc2, 0x5f, 0x70, 0xa5, 0xec, 0xed, 0x3f
- .byte 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(c1)
-#endif
-#ifndef USE_AS_EXPM1L
- .type csat,@object
-csat: .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x0e, 0x40
- .byte 0, 0, 0, 0, 0, 0
- ASM_SIZE_DIRECTIVE(csat)
-DEFINE_LDBL_MIN
-#endif
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(IEEE754_EXPL)
-#ifdef USE_AS_EXPM1L
- movzwl 4+8(%esp), %eax
- xorb $0x80, %ah // invert sign bit (now 1 is "positive")
- cmpl $0xc006, %eax // is num positive and exp >= 6 (number is >= 128.0)?
- jae HIDDEN_JUMPTARGET (__expl) // (if num is denormal, it is at least >= 64.0)
-#endif
- fldt 4(%esp)
-/* I added the following ugly construct because expl(+-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? */
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
-#ifdef USE_AS_EXPM1L
- xorb $0x80, %ah
- cmpl $0xc006, %eax
- fstsw %ax
- movb $0x45, %dh
- jb 4f
-
- /* Below -64.0 (may be -NaN or -Inf). */
- andb %ah, %dh
- cmpb $0x01, %dh
- je 6f /* Is +-NaN, jump. */
- jmp 1f /* -large, possibly -Inf. */
-
-4: /* In range -64.0 to 64.0 (may be +-0 but not NaN or +-Inf). */
- /* Test for +-0 as argument. */
- andb %ah, %dh
- cmpb $0x40, %dh
- je 2f
-
- /* Test for arguments that are small but not subnormal. */
- movzwl 4+8(%esp), %eax
- andl $0x7fff, %eax
- cmpl $0x3fbf, %eax
- jge 3f
- /* Argument's exponent below -64; avoid spurious underflow if
- normal. */
- cmpl $0x0001, %eax
- jge 2f
- /* Force underflow and return the argument, to avoid wrong signs
- of zero results from the code below in some rounding modes. */
- fld %st
- fmul %st
- fstp %st
- jmp 2f
-#else
- movzwl 4+8(%esp), %eax
- andl $0x7fff, %eax
- cmpl $0x400d, %eax
- jg 5f
- cmpl $0x3fbc, %eax
- jge 3f
- /* Argument's exponent below -67, result rounds to 1. */
- fld1
- faddp
- jmp 2f
-5: /* Overflow, underflow or infinity or NaN as argument. */
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 1f /* Is +-Inf, jump. */
- cmpb $0x01, %dh
- je 6f /* Is +-NaN, jump. */
- /* Overflow or underflow; saturate. */
- fstp %st
- fldt MO(csat)
- andb $2, %ah
- jz 3f
- fchs
-#endif
-3: FLDLOG /* 1 log2(base) */
- fmul %st(1), %st /* 1 x log2(base) */
- /* Set round-to-nearest temporarily. */
- subl $8, %esp
- cfi_adjust_cfa_offset (8)
- fstcw 4(%esp)
- movl $0xf3ff, %edx
- andl 4(%esp), %edx
- movl %edx, (%esp)
- fldcw (%esp)
- frndint /* 1 i */
- fld %st(1) /* 2 x */
- frndint /* 2 xi */
- fldcw 4(%esp)
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
- fld %st(1) /* 3 i */
- fldt MO(c0) /* 4 c0 */
- fld %st(2) /* 5 xi */
- fmul %st(1), %st /* 5 c0 xi */
- fsubp %st, %st(2) /* 4 f = c0 xi - i */
- fld %st(4) /* 5 x */
- fsub %st(3), %st /* 5 xf = x - xi */
- fmulp %st, %st(1) /* 4 c0 xf */
- faddp %st, %st(1) /* 3 f = f + c0 xf */
- fldt MO(c1) /* 4 */
- fmul %st(4), %st /* 4 c1 * x */
- faddp %st, %st(1) /* 3 f = f + c1 * x */
- f2xm1 /* 3 2^(fract(x * log2(base))) - 1 */
-#ifdef USE_AS_EXPM1L
- fstp %st(1) /* 2 */
- fscale /* 2 scale factor is st(1); base^x - 2^i */
- fxch /* 2 i */
- fld1 /* 3 1.0 */
- fscale /* 3 2^i */
- fld1 /* 4 1.0 */
- fsubrp %st, %st(1) /* 3 2^i - 1.0 */
- fstp %st(1) /* 2 */
- faddp %st, %st(1) /* 1 base^x - 1.0 */
-#else
- fld1 /* 4 1.0 */
- faddp /* 3 2^(fract(x * log2(base))) */
- fstp %st(1) /* 2 */
- fscale /* 2 scale factor is st(1); base^x */
- fstp %st(1) /* 1 */
- LDBL_CHECK_FORCE_UFLOW_NONNEG
-#endif
- fstp %st(1) /* 0 */
- jmp 2f
-1:
-#ifdef USE_AS_EXPM1L
- /* For expm1l, only negative sign gets here. */
- fstp %st
- fld1
- fchs
-#else
- testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-#endif
-2: ret
-6: /* NaN argument. */
- fadd %st
- ret
-END(IEEE754_EXPL)
-#ifdef USE_AS_EXPM1L
-libm_hidden_def (__expm1l)
-weak_alias (__expm1l, expm1l)
-#else
-strong_alias (IEEE754_EXPL, EXPL_FINITE)
-#endif
diff --git a/sysdeps/i386/fpu/e_fmod.S b/sysdeps/i386/fpu/e_fmod.S
deleted file mode 100644
index 26b3acc392..0000000000
--- a/sysdeps/i386/fpu/e_fmod.S
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-ENTRY(__ieee754_fmod)
- fldl 12(%esp)
- fldl 4(%esp)
-1: fprem
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- ret
-END (__ieee754_fmod)
-strong_alias (__ieee754_fmod, __fmod_finite)
diff --git a/sysdeps/i386/fpu/e_fmodf.S b/sysdeps/i386/fpu/e_fmodf.S
deleted file mode 100644
index ece4d98427..0000000000
--- a/sysdeps/i386/fpu/e_fmodf.S
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-
-ENTRY(__ieee754_fmodf)
- flds 8(%esp)
- flds 4(%esp)
-1: fprem
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- ret
-END(__ieee754_fmodf)
-strong_alias (__ieee754_fmodf, __fmodf_finite)
diff --git a/sysdeps/i386/fpu/e_fmodl.c b/sysdeps/i386/fpu/e_fmodl.c
deleted file mode 100644
index 49700ae8f6..0000000000
--- a/sysdeps/i386/fpu/e_fmodl.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <math_private.h>
-
-long double
-__ieee754_fmodl (long double x, long double y)
-{
- long double res;
-
- asm ("1:\tfprem\n"
- "fstsw %%ax\n"
- "sahf\n"
- "jp 1b\n"
- "fstp %%st(1)"
- : "=t" (res) : "0" (x), "u" (y) : "ax", "st(1)");
- return res;
-}
-strong_alias (__ieee754_fmodl, __fmodl_finite)
diff --git a/sysdeps/i386/fpu/e_hypot.S b/sysdeps/i386/fpu/e_hypot.S
deleted file mode 100644
index 7403566fd7..0000000000
--- a/sysdeps/i386/fpu/e_hypot.S
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Compute the hypothenuse of X and Y.
- Copyright (C) 1998-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#include <i386-math-asm.h>
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_hypot)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fldl 4(%esp) // x
- fxam
- fnstsw
- fldl 12(%esp) // y : x
- movb %ah, %ch
- fxam
- fnstsw
- movb %ah, %al
- orb %ch, %ah
- sahf
- jc 1f
- fmul %st(0) // y * y : x
- fxch // x : y * y
- fmul %st(0) // x * x : y * y
- faddp // x * x + y * y
- fsqrt
- DBL_NARROW_EVAL_UFLOW_NONNEG
-2: ret
-
- // We have to test whether any of the parameters is Inf.
- // In this case the result is infinity.
-1: andb $0x45, %al
- cmpb $5, %al
- je 3f // jump if y is Inf
- andb $0x45, %ch
- cmpb $5, %ch
- jne 4f // jump if x is not Inf
- fxch
-3: fstp %st(1)
- fabs
- jmp 2b
-
-4: testb $1, %al
- jnz 5f // y is NaN
- fxch
-5: fstp %st(1)
- jmp 2b
-
-END(__ieee754_hypot)
-strong_alias (__ieee754_hypot, __hypot_finite)
diff --git a/sysdeps/i386/fpu/e_hypotf.S b/sysdeps/i386/fpu/e_hypotf.S
deleted file mode 100644
index 6a2c7052b2..0000000000
--- a/sysdeps/i386/fpu/e_hypotf.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Compute the hypothenuse of X and Y.
- Copyright (C) 1998-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#include <i386-math-asm.h>
-
- .text
-ENTRY(__ieee754_hypotf)
- flds 4(%esp) // x
- fxam
- fnstsw
- flds 8(%esp) // y : x
- movb %ah, %ch
- fxam
- fnstsw
- movb %ah, %al
- orb %ch, %ah
- sahf
- jc 1f
- fmul %st(0) // y * y : x
- fxch // x : y * y
- fmul %st(0) // x * x : y * y
- faddp // x * x + y * y
- fsqrt
- FLT_NARROW_EVAL
-2: ret
-
- // We have to test whether any of the parameters is Inf.
- // In this case the result is infinity.
-1: andb $0x45, %al
- cmpb $5, %al
- je 3f // jump if y is Inf
- andb $0x45, %ch
- cmpb $5, %ch
- jne 4f // jump if x is not Inf
- fxch
-3: fstp %st(1)
- fabs
- jmp 2b
-
-4: testb $1, %al
- jnz 5f // y is NaN
- fxch
-5: fstp %st(1)
- jmp 2b
-
-END(__ieee754_hypotf)
-strong_alias (__ieee754_hypotf, __hypotf_finite)
diff --git a/sysdeps/i386/fpu/e_ilogb.S b/sysdeps/i386/fpu/e_ilogb.S
deleted file mode 100644
index 29ef2214e6..0000000000
--- a/sysdeps/i386/fpu/e_ilogb.S
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_ilogb.S,v 1.5 1995/10/12 15:53:09 jtc Exp $")
-
-ENTRY(__ieee754_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. */
- cmpb $0x40, %dh
- je 2f /* Is +-0, jump. */
-
- fxtract
- pushl %eax
- cfi_adjust_cfa_offset (4)
- fstp %st
-
- fistpl (%esp)
- fwait
- popl %eax
- cfi_adjust_cfa_offset (-4)
-
- ret
-
-1: fstp %st
- movl $0x7fffffff, %eax
- ret
-2: fstp %st
- movl $0x80000000, %eax /* FP_ILOGB0 */
- ret
-END (__ieee754_ilogb)
diff --git a/sysdeps/i386/fpu/e_ilogbf.S b/sysdeps/i386/fpu/e_ilogbf.S
deleted file mode 100644
index d72de6c84a..0000000000
--- a/sysdeps/i386/fpu/e_ilogbf.S
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_ilogbf.S,v 1.4 1995/10/22 20:32:43 pk Exp $")
-
-ENTRY(__ieee754_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. */
- cmpb $0x40, %dh
- je 2f /* Is +-0, jump. */
-
- fxtract
- pushl %eax
- cfi_adjust_cfa_offset (4)
- fstp %st
-
- fistpl (%esp)
- fwait
- popl %eax
- cfi_adjust_cfa_offset (-4)
-
- ret
-
-1: fstp %st
- movl $0x7fffffff, %eax
- ret
-2: fstp %st
- movl $0x80000000, %eax /* FP_ILOGB0 */
- ret
-END (__ieee754_ilogbf)
diff --git a/sysdeps/i386/fpu/e_ilogbl.S b/sysdeps/i386/fpu/e_ilogbl.S
deleted file mode 100644
index 60761dfa38..0000000000
--- a/sysdeps/i386/fpu/e_ilogbl.S
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: $")
-
-ENTRY(__ieee754_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. */
- cmpb $0x40, %dh
- je 2f /* Is +-0, jump. */
-
- fxtract
- pushl %eax
- cfi_adjust_cfa_offset (4)
- fstp %st
-
- fistpl (%esp)
- fwait
- popl %eax
- cfi_adjust_cfa_offset (-4)
-
- ret
-
-1: fstp %st
- movl $0x7fffffff, %eax
- ret
-2: fstp %st
- movl $0x80000000, %eax /* FP_ILOGB0 */
- ret
-END (__ieee754_ilogbl)
diff --git a/sysdeps/i386/fpu/e_log.S b/sysdeps/i386/fpu/e_log.S
deleted file mode 100644
index 335df22577..0000000000
--- a/sysdeps/i386/fpu/e_log.S
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_log)
- fldln2 // log(2)
- fldl 4(%esp) // x : log(2)
- fxam
- fnstsw
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fld %st // x : x : log(2)
- sahf
- jc 3f // in case x is NaN or +-Inf
-4: fsubl MO(one) // x-1 : x : log(2)
- fld %st // x-1 : x-1 : x : log(2)
- fabs // |x-1| : x-1 : x : log(2)
- fcompl MO(limit) // x-1 : x : log(2)
- fnstsw // x-1 : x : log(2)
- andb $0x45, %ah
- jz 2f
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 5f
- fabs // log(1) is +0 in all rounding modes.
-5: fstp %st(1) // x-1 : log(2)
- fyl2xp1 // log(x)
- ret
-
-2: fstp %st(0) // x : log(2)
- fyl2x // log(x)
- ret
-
-3: jp 4b // in case x is +-Inf
- fstp %st(1)
- fstp %st(1)
- ret
-END (__ieee754_log)
-
-ENTRY(__log_finite)
- fldln2 // log(2)
- fldl 4(%esp) // x : log(2)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fld %st // x : x : log(2)
- fsubl MO(one) // x-1 : x : log(2)
- fld %st // x-1 : x-1 : x : log(2)
- fabs // |x-1| : x-1 : x : log(2)
- fcompl MO(limit) // x-1 : x : log(2)
- fnstsw // x-1 : x : log(2)
- andb $0x45, %ah
- jz 2b
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 6f
- fabs // log(1) is +0 in all rounding modes.
-6: fstp %st(1) // x-1 : log(2)
- fyl2xp1 // log(x)
- ret
-END(__log_finite)
diff --git a/sysdeps/i386/fpu/e_log10.S b/sysdeps/i386/fpu/e_log10.S
deleted file mode 100644
index 17277084ca..0000000000
--- a/sysdeps/i386/fpu/e_log10.S
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_log10)
- fldlg2 // log10(2)
- fldl 4(%esp) // x : log10(2)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fxam
- fnstsw
- fld %st // x : x : log10(2)
- sahf
- jc 3f // in case x is NaN or ħInf
-4: fsubl MO(one) // x-1 : x : log10(2)
- fld %st // x-1 : x-1 : x : log10(2)
- fabs // |x-1| : x-1 : x : log10(2)
- fcompl MO(limit) // x-1 : x : log10(2)
- fnstsw // x-1 : x : log10(2)
- andb $0x45, %ah
- jz 2f
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 5f
- fabs // log10(1) is +0 in all rounding modes.
-5: 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
-END (__ieee754_log10)
-strong_alias (__ieee754_log10, __log10_finite)
diff --git a/sysdeps/i386/fpu/e_log10f.S b/sysdeps/i386/fpu/e_log10f.S
deleted file mode 100644
index 72a3b88251..0000000000
--- a/sysdeps/i386/fpu/e_log10f.S
+++ /dev/null
@@ -1,69 +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>.
- */
-
-#include <machine/asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_log10f)
- fldlg2 // log10(2)
- flds 4(%esp) // x : log10(2)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fxam
- fnstsw
- fld %st // x : x : log10(2)
- sahf
- jc 3f // in case x is NaN or ħInf
-4: fsubl MO(one) // x-1 : x : log10(2)
- fld %st // x-1 : x-1 : x : log10(2)
- fabs // |x-1| : x-1 : x : log10(2)
- fcompl MO(limit) // x-1 : x : log10(2)
- fnstsw // x-1 : x : log10(2)
- andb $0x45, %ah
- jz 2f
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 5f
- fabs // log10(1) is +0 in all rounding modes.
-5: 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
-END (__ieee754_log10f)
-strong_alias (__ieee754_log10f, __log10f_finite)
diff --git a/sysdeps/i386/fpu/e_log10l.S b/sysdeps/i386/fpu/e_log10l.S
deleted file mode 100644
index 9326b19796..0000000000
--- a/sysdeps/i386/fpu/e_log10l.S
+++ /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>.
- *
- * Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_log10l)
- fldlg2 // log10(2)
- fldt 4(%esp) // x : log10(2)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fxam
- fnstsw
- fld %st // x : x : log10(2)
- sahf
- jc 3f // in case x is NaN or ħInf
-4: fsubl MO(one) // x-1 : x : log10(2)
- fld %st // x-1 : x-1 : x : log10(2)
- fabs // |x-1| : x-1 : x : log10(2)
- fcompl MO(limit) // x-1 : x : log10(2)
- fnstsw // x-1 : x : log10(2)
- andb $0x45, %ah
- jz 2f
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 5f
- fabs // log10(1) is +0 in all rounding modes.
-5: 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)
- fadd %st(0)
- ret
-END(__ieee754_log10l)
-strong_alias (__ieee754_log10l, __log10l_finite)
diff --git a/sysdeps/i386/fpu/e_log2.S b/sysdeps/i386/fpu/e_log2.S
deleted file mode 100644
index 73ff0fffd3..0000000000
--- a/sysdeps/i386/fpu/e_log2.S
+++ /dev/null
@@ -1,69 +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>.
- */
-
-#include <machine/asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_log2)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fldl MO(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 MO(limit) // x-1 : x : 1
- fnstsw // x-1 : x : 1
- andb $0x45, %ah
- jz 2f
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 5f
- fabs // log2(1) is +0 in all rounding modes.
-5: 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
-END (__ieee754_log2)
-strong_alias (__ieee754_log2, __log2_finite)
diff --git a/sysdeps/i386/fpu/e_log2f.S b/sysdeps/i386/fpu/e_log2f.S
deleted file mode 100644
index 344eeb495e..0000000000
--- a/sysdeps/i386/fpu/e_log2f.S
+++ /dev/null
@@ -1,69 +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>.
- */
-
-#include <machine/asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_log2f)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fldl MO(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 MO(limit) // x-1 : x : 1
- fnstsw // x-1 : x : 1
- andb $0x45, %ah
- jz 2f
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 5f
- fabs // log2(1) is +0 in all rounding modes.
-5: 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
-END (__ieee754_log2f)
-strong_alias (__ieee754_log2f, __log2f_finite)
diff --git a/sysdeps/i386/fpu/e_log2l.S b/sysdeps/i386/fpu/e_log2l.S
deleted file mode 100644
index 73e62ea908..0000000000
--- a/sysdeps/i386/fpu/e_log2l.S
+++ /dev/null
@@ -1,70 +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>.
- */
-
-#include <machine/asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_log2l)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fldl MO(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 MO(limit) // x-1 : x : 1
- fnstsw // x-1 : x : 1
- andb $0x45, %ah
- jz 2f
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 5f
- fabs // log2(1) is +0 in all rounding modes.
-5: 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)
- fadd %st(0)
- ret
-END (__ieee754_log2l)
-strong_alias (__ieee754_log2l, __log2l_finite)
diff --git a/sysdeps/i386/fpu/e_logf.S b/sysdeps/i386/fpu/e_logf.S
deleted file mode 100644
index de967a31f5..0000000000
--- a/sysdeps/i386/fpu/e_logf.S
+++ /dev/null
@@ -1,93 +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>.
- */
-
-#include <machine/asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_logf)
- fldln2 // log(2)
- flds 4(%esp) // x : log(2)
- fxam
- fnstsw
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fld %st // x : x : log(2)
- sahf
- jc 3f // in case x is NaN or +-Inf
-4: fsubl MO(one) // x-1 : x : log(2)
- fld %st // x-1 : x-1 : x : log(2)
- fabs // |x-1| : x-1 : x : log(2)
- fcompl MO(limit) // x-1 : x : log(2)
- fnstsw // x-1 : x : log(2)
- andb $0x45, %ah
- jz 2f
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 5f
- fabs // log(1) is +0 in all rounding modes.
-5: fstp %st(1) // x-1 : log(2)
- fyl2xp1 // log(x)
- ret
-
-2: fstp %st(0) // x : log(2)
- fyl2x // log(x)
- ret
-
-3: jp 4b // in case x is +-Inf
- fstp %st(1)
- fstp %st(1)
- ret
-END (__ieee754_logf)
-
-ENTRY(__logf_finite)
- fldln2 // log(2)
- flds 4(%esp) // x : log(2)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fld %st // x : x : log(2)
- fsubl MO(one) // x-1 : x : log(2)
- fld %st // x-1 : x-1 : x : log(2)
- fabs // |x-1| : x-1 : x : log(2)
- fcompl MO(limit) // x-1 : x : log(2)
- fnstsw // x-1 : x : log(2)
- andb $0x45, %ah
- jz 2b
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 6f
- fabs // log(1) is +0 in all rounding modes.
-6: fstp %st(1) // x-1 : log(2)
- fyl2xp1 // log(x)
- ret
-END(__logf_finite)
diff --git a/sysdeps/i386/fpu/e_logl.S b/sysdeps/i386/fpu/e_logl.S
deleted file mode 100644
index 53127d704e..0000000000
--- a/sysdeps/i386/fpu/e_logl.S
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__ieee754_logl)
- fldln2 // log(2)
- fldt 4(%esp) // x : log(2)
- fxam
- fnstsw
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fld %st // x : x : log(2)
- sahf
- jc 3f // in case x is NaN or +-Inf
- movzwl 4+8(%esp), %eax
- cmpl $0xc000, %eax
- jae 6f // x <= -2, avoid overflow from -LDBL_MAX - 1.
-4: fsubl MO(one) // x-1 : x : log(2)
-6: fld %st // x-1 : x-1 : x : log(2)
- fabs // |x-1| : x-1 : x : log(2)
- fcompl MO(limit) // x-1 : x : log(2)
- fnstsw // x-1 : x : log(2)
- andb $0x45, %ah
- jz 2f
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 5f
- fabs // log(1) is +0 in all rounding modes.
-5: fstp %st(1) // x-1 : log(2)
- fyl2xp1 // log(x)
- ret
-
-2: fstp %st(0) // x : log(2)
- fyl2x // log(x)
- ret
-
-3: jp 4b // in case x is +-Inf
- fstp %st(1)
- fstp %st(1)
- fadd %st(0)
- ret
-END (__ieee754_logl)
-
-ENTRY(__logl_finite)
- fldln2 // log(2)
- fldt 4(%esp) // x : log(2)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fld %st // x : x : log(2)
- fsubl MO(one) // x-1 : x : log(2)
- fld %st // x-1 : x-1 : x : log(2)
- fabs // |x-1| : x-1 : x : log(2)
- fcompl MO(limit) // x-1 : x : log(2)
- fnstsw // x-1 : x : log(2)
- andb $0x45, %ah
- jz 2b
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x40, %ah
- jne 7f
- fabs // log(1) is +0 in all rounding modes.
-7: fstp %st(1) // x-1 : log(2)
- fyl2xp1 // log(x)
- ret
-END(__logl_finite)
diff --git a/sysdeps/i386/fpu/e_pow.S b/sysdeps/i386/fpu/e_pow.S
deleted file mode 100644
index 2edb9a9fbc..0000000000
--- a/sysdeps/i386/fpu/e_pow.S
+++ /dev/null
@@ -1,456 +0,0 @@
-/* ix87 specific implementation of pow function.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
- .type p63,@object
-p63: .byte 0, 0, 0, 0, 0, 0, 0xe0, 0x43
- ASM_SIZE_DIRECTIVE(p63)
- .type p10,@object
-p10: .byte 0, 0, 0, 0, 0, 0, 0x90, 0x40
- ASM_SIZE_DIRECTIVE(p10)
-
- .section .rodata.cst16,"aM",@progbits,16
-
- .p2align 3
- .type infinity,@object
-inf_zero:
-infinity:
- .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
- ASM_SIZE_DIRECTIVE(infinity)
- .type zero,@object
-zero: .double 0.0
- ASM_SIZE_DIRECTIVE(zero)
- .type minf_mzero,@object
-minf_mzero:
-minfinity:
- .byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff
-mzero:
- .byte 0, 0, 0, 0, 0, 0, 0, 0x80
- ASM_SIZE_DIRECTIVE(minf_mzero)
-DEFINE_DBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
-#else
-# define MO(op) op
-# define MOX(op,x,f) op(,x,f)
-#endif
-
- .text
-ENTRY(__ieee754_pow)
- fldl 12(%esp) // y
- fxam
-
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
-
- fnstsw
- movb %ah, %dl
- andb $0x45, %ah
- cmpb $0x40, %ah // is y == 0 ?
- je 11f
-
- cmpb $0x05, %ah // is y == ħinf ?
- je 12f
-
- cmpb $0x01, %ah // is y == NaN ?
- je 30f
-
- fldl 4(%esp) // x : y
-
- subl $8,%esp
- cfi_adjust_cfa_offset (8)
-
- fxam
- fnstsw
- movb %ah, %dh
- andb $0x45, %ah
- cmpb $0x40, %ah
- je 20f // x is ħ0
-
- cmpb $0x05, %ah
- je 15f // x is ħinf
-
- cmpb $0x01, %ah
- je 32f // x is NaN
-
- fxch // y : x
-
- /* fistpll raises invalid exception for |y| >= 1L<<63. */
- fld %st // y : y : x
- fabs // |y| : y : x
- fcompl MO(p63) // y : x
- fnstsw
- sahf
- jnc 2f
-
- /* First see whether `y' is a natural number. In this case we
- can use a more precise algorithm. */
- fld %st // y : y : x
- fistpll (%esp) // y : x
- fildll (%esp) // int(y) : y : x
- fucomp %st(1) // y : x
- fnstsw
- sahf
- jne 3f
-
- /* OK, we have an integer value for y. If large enough that
- errors may propagate out of the 11 bits excess precision, use
- the algorithm for real exponent instead. */
- fld %st // y : y : x
- fabs // |y| : y : x
- fcompl MO(p10) // y : x
- fnstsw
- sahf
- jnc 2f
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- orl $0, %edx
- fstp %st(0) // x
- jns 4f // y >= 0, jump
- fdivrl MO(one) // 1/x (now referred to as x)
- negl %eax
- adcl $0, %edx
- negl %edx
-4: fldl MO(one) // 1 : x
- fxch
-
- /* If y is even, take the absolute value of x. Otherwise,
- ensure all intermediate values that might overflow have the
- sign of x. */
- testb $1, %al
- jnz 6f
- fabs
-
-6: shrdl $1, %edx, %eax
- jnc 5f
- fxch
- fabs
- fmul %st(1) // x : ST*x
- fxch
-5: fld %st // x : x : ST*x
- fabs // |x| : x : ST*x
- fmulp // |x|*x : ST*x
- shrl $1, %edx
- movl %eax, %ecx
- orl %edx, %ecx
- jnz 6b
- fstp %st(0) // ST*x
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- DBL_NARROW_EVAL_UFLOW_NONNAN
- ret
-
- /* y is ħNAN */
-30: fldl 4(%esp) // x : y
- fldl MO(one) // 1.0 : x : y
- fucomp %st(1) // x : y
- fnstsw
- sahf
- je 31f
- fxch // y : x
-31: fstp %st(1)
- ret
-
- cfi_adjust_cfa_offset (8)
-32: addl $8, %esp
- cfi_adjust_cfa_offset (-8)
- fstp %st(1)
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
-2: // y is a large integer (absolute value at least 1L<<10), but
- // may be odd unless at least 1L<<64. So it may be necessary
- // to adjust the sign of a negative result afterwards.
- fxch // x : y
- fabs // |x| : y
- fxch // y : x
- .align ALIGNARG(4)
-3: /* y is a real number. */
- fxch // x : y
- fldl MO(one) // 1.0 : x : y
- fldl MO(limit) // 0.29 : 1.0 : x : y
- fld %st(2) // x : 0.29 : 1.0 : x : y
- fsub %st(2) // x-1 : 0.29 : 1.0 : x : y
- fabs // |x-1| : 0.29 : 1.0 : x : y
- fucompp // 1.0 : x : y
- fnstsw
- fxch // x : 1.0 : y
- sahf
- ja 7f
- fsub %st(1) // x-1 : 1.0 : y
- fyl2xp1 // log2(x) : y
- jmp 8f
-
-7: fyl2x // log2(x) : y
-8: fmul %st(1) // y*log2(x) : y
- fst %st(1) // y*log2(x) : y*log2(x)
- frndint // int(y*log2(x)) : y*log2(x)
- fsubr %st, %st(1) // int(y*log2(x)) : fract(y*log2(x))
- fxch // fract(y*log2(x)) : int(y*log2(x))
- f2xm1 // 2^fract(y*log2(x))-1 : int(y*log2(x))
- faddl MO(one) // 2^fract(y*log2(x)) : int(y*log2(x))
-
- // Before scaling, we must negate if x is negative and y is an
- // odd integer.
- testb $2, %dh
- jz 291f
- // x is negative. If y is an odd integer, negate the result.
- fldl 20(%esp) // y : 2^fract(y*log2(x)) : int(y*log2(x))
- fld %st // y : y : 2^fract(y*log2(x)) : int(y*log2(x))
- fabs // |y| : y : 2^fract(y*log2(x)) : int(y*log2(x))
- fcompl MO(p63) // y : 2^fract(y*log2(x)) : int(y*log2(x))
- fnstsw
- sahf
- jnc 290f
-
- // We must find out whether y is an odd integer.
- fld %st // y : y : 2^fract(y*log2(x)) : int(y*log2(x))
- fistpll (%esp) // y : 2^fract(y*log2(x)) : int(y*log2(x))
- fildll (%esp) // int(y) : y : 2^fract(y*log2(x)) : int(y*log2(x))
- fucompp // 2^fract(y*log2(x)) : int(y*log2(x))
- fnstsw
- sahf
- jne 291f
-
- // OK, the value is an integer, but is it odd?
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- andb $1, %al
- jz 292f // jump if not odd
- // It's an odd integer.
- fchs
- jmp 292f
-
- cfi_adjust_cfa_offset (8)
-290: fstp %st(0) // 2^fract(y*log2(x)) : int(y*log2(x))
-291: addl $8, %esp
- cfi_adjust_cfa_offset (-8)
-292: fscale // +/- 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x))
- fstp %st(1) // +/- 2^fract(y*log2(x))*2^int(y*log2(x))
- DBL_NARROW_EVAL_UFLOW_NONNAN
- ret
-
-
- // pow(x,ħ0) = 1
- .align ALIGNARG(4)
-11: fstp %st(0) // pop y
- fldl MO(one)
- ret
-
- // y == ħinf
- .align ALIGNARG(4)
-12: fstp %st(0) // pop y
- fldl MO(one) // 1
- fldl 4(%esp) // x : 1
- fabs // abs(x) : 1
- fucompp // < 1, == 1, or > 1
- fnstsw
- andb $0x45, %ah
- cmpb $0x45, %ah
- je 13f // jump if x is NaN
-
- cmpb $0x40, %ah
- je 14f // jump if |x| == 1
-
- shlb $1, %ah
- xorb %ah, %dl
- andl $2, %edx
- fldl MOX(inf_zero, %edx, 4)
- ret
-
- .align ALIGNARG(4)
-14: fldl MO(one)
- ret
-
- .align ALIGNARG(4)
-13: fldl 4(%esp) // load x == NaN
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
- // x is ħinf
-15: fstp %st(0) // y
- testb $2, %dh
- jz 16f // jump if x == +inf
-
- // fistpll raises invalid exception for |y| >= 1L<<63, so test
- // that (in which case y is certainly even) before testing
- // whether y is odd.
- fld %st // y : y
- fabs // |y| : y
- fcompl MO(p63) // y
- fnstsw
- sahf
- jnc 16f
-
- // We must find out whether y is an odd integer.
- fld %st // y : y
- fistpll (%esp) // y
- fildll (%esp) // int(y) : y
- fucompp // <empty>
- fnstsw
- sahf
- jne 17f
-
- // OK, the value is an integer.
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- andb $1, %al
- jz 18f // jump if not odd
- // It's an odd integer.
- shrl $31, %edx
- fldl MOX(minf_mzero, %edx, 8)
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
-16: fcompl MO(zero)
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
- fnstsw
- shrl $5, %eax
- andl $8, %eax
- fldl MOX(inf_zero, %eax, 1)
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
-17: shll $30, %edx // sign bit for y in right position
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
-18: shrl $31, %edx
- fldl MOX(inf_zero, %edx, 8)
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
- // x is ħ0
-20: fstp %st(0) // y
- testb $2, %dl
- jz 21f // y > 0
-
- // x is ħ0 and y is < 0. We must find out whether y is an odd integer.
- testb $2, %dh
- jz 25f
-
- // fistpll raises invalid exception for |y| >= 1L<<63, so test
- // that (in which case y is certainly even) before testing
- // whether y is odd.
- fld %st // y : y
- fabs // |y| : y
- fcompl MO(p63) // y
- fnstsw
- sahf
- jnc 25f
-
- fld %st // y : y
- fistpll (%esp) // y
- fildll (%esp) // int(y) : y
- fucompp // <empty>
- fnstsw
- sahf
- jne 26f
-
- // OK, the value is an integer.
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- andb $1, %al
- jz 27f // jump if not odd
- // It's an odd integer.
- // Raise divide-by-zero exception and get minus infinity value.
- fldl MO(one)
- fdivl MO(zero)
- fchs
- ret
-
- cfi_adjust_cfa_offset (8)
-25: fstp %st(0)
-26: addl $8, %esp
- cfi_adjust_cfa_offset (-8)
-27: // Raise divide-by-zero exception and get infinity value.
- fldl MO(one)
- fdivl MO(zero)
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
- // x is ħ0 and y is > 0. We must find out whether y is an odd integer.
-21: testb $2, %dh
- jz 22f
-
- // fistpll raises invalid exception for |y| >= 1L<<63, so test
- // that (in which case y is certainly even) before testing
- // whether y is odd.
- fcoml MO(p63) // y
- fnstsw
- sahf
- jnc 22f
-
- fld %st // y : y
- fistpll (%esp) // y
- fildll (%esp) // int(y) : y
- fucompp // <empty>
- fnstsw
- sahf
- jne 23f
-
- // OK, the value is an integer.
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- andb $1, %al
- jz 24f // jump if not odd
- // It's an odd integer.
- fldl MO(mzero)
- ret
-
- cfi_adjust_cfa_offset (8)
-22: fstp %st(0)
-23: addl $8, %esp // Don't use 2 x pop
- cfi_adjust_cfa_offset (-8)
-24: fldl MO(zero)
- ret
-
-END(__ieee754_pow)
-strong_alias (__ieee754_pow, __pow_finite)
diff --git a/sysdeps/i386/fpu/e_powf.S b/sysdeps/i386/fpu/e_powf.S
deleted file mode 100644
index 467ef2380b..0000000000
--- a/sysdeps/i386/fpu/e_powf.S
+++ /dev/null
@@ -1,392 +0,0 @@
-/* ix87 specific implementation of pow function.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
- .type p31,@object
-p31: .byte 0, 0, 0, 0, 0, 0, 0xe0, 0x41
- ASM_SIZE_DIRECTIVE(p31)
-
- .section .rodata.cst16,"aM",@progbits,16
-
- .p2align 3
- .type infinity,@object
-inf_zero:
-infinity:
- .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
- ASM_SIZE_DIRECTIVE(infinity)
- .type zero,@object
-zero: .double 0.0
- ASM_SIZE_DIRECTIVE(zero)
- .type minf_mzero,@object
-minf_mzero:
-minfinity:
- .byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff
-mzero:
- .byte 0, 0, 0, 0, 0, 0, 0, 0x80
- ASM_SIZE_DIRECTIVE(minf_mzero)
-DEFINE_FLT_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
-#else
-# define MO(op) op
-# define MOX(op,x,f) op(,x,f)
-#endif
-
- .text
-ENTRY(__ieee754_powf)
- flds 8(%esp) // y
- fxam
-
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
-
- fnstsw
- movb %ah, %dl
- andb $0x45, %ah
- cmpb $0x40, %ah // is y == 0 ?
- je 11f
-
- cmpb $0x05, %ah // is y == ħinf ?
- je 12f
-
- cmpb $0x01, %ah // is y == NaN ?
- je 30f
-
- flds 4(%esp) // x : y
-
- subl $4, %esp
- cfi_adjust_cfa_offset (4)
-
- fxam
- fnstsw
- movb %ah, %dh
- andb $0x45, %ah
- cmpb $0x40, %ah
- je 20f // x is ħ0
-
- cmpb $0x05, %ah
- je 15f // x is ħinf
-
- cmpb $0x01, %ah
- je 33f // x is NaN
-
- fxch // y : x
-
- /* fistpl raises invalid exception for |y| >= 1L<<31. */
- fld %st // y : y : x
- fabs // |y| : y : x
- fcompl MO(p31) // y : x
- fnstsw
- sahf
- jnc 2f
-
- /* First see whether `y' is a natural number. In this case we
- can use a more precise algorithm. */
- fld %st // y : y : x
- fistpl (%esp) // y : x
- fildl (%esp) // int(y) : y : x
- fucomp %st(1) // y : x
- fnstsw
- sahf
- jne 3f
-
- /* OK, we have an integer value for y. */
- popl %edx
- cfi_adjust_cfa_offset (-4)
- orl $0, %edx
- fstp %st(0) // x
- jns 4f // y >= 0, jump
- fdivrl MO(one) // 1/x (now referred to as x)
- negl %edx
-4: fldl MO(one) // 1 : x
- fxch
-
- /* If y is even, take the absolute value of x. Otherwise,
- ensure all intermediate values that might overflow have the
- sign of x. */
- testb $1, %dl
- jnz 6f
- fabs
-
-6: shrl $1, %edx
- jnc 5f
- fxch
- fabs
- fmul %st(1) // x : ST*x
- fxch
-5: fld %st // x : x : ST*x
- fabs // |x| : x : ST*x
- fmulp // |x|*x : ST*x
- testl %edx, %edx
- jnz 6b
- fstp %st(0) // ST*x
- FLT_NARROW_EVAL_UFLOW_NONNAN
- ret
-
- /* y is ħNAN */
-30: flds 4(%esp) // x : y
- fldl MO(one) // 1.0 : x : y
- fucomp %st(1) // x : y
- fnstsw
- sahf
- je 31f
- fxch // y : x
-31: fstp %st(1)
- ret
-
- cfi_adjust_cfa_offset (4)
- .align ALIGNARG(4)
-2: /* y is a large integer (so even). */
- fxch // x : y
- fabs // |x| : y
- fxch // y : x
- .align ALIGNARG(4)
-3: /* y is a real number. */
- fxch // x : y
- fldl MO(one) // 1.0 : x : y
- fldl MO(limit) // 0.29 : 1.0 : x : y
- fld %st(2) // x : 0.29 : 1.0 : x : y
- fsub %st(2) // x-1 : 0.29 : 1.0 : x : y
- fabs // |x-1| : 0.29 : 1.0 : x : y
- fucompp // 1.0 : x : y
- fnstsw
- fxch // x : 1.0 : y
- sahf
- ja 7f
- fsub %st(1) // x-1 : 1.0 : y
- fyl2xp1 // log2(x) : y
- jmp 8f
-
-7: fyl2x // log2(x) : y
-8: fmul %st(1) // y*log2(x) : y
- fst %st(1) // y*log2(x) : y*log2(x)
- frndint // int(y*log2(x)) : y*log2(x)
- fsubr %st, %st(1) // int(y*log2(x)) : fract(y*log2(x))
- fxch // fract(y*log2(x)) : int(y*log2(x))
- f2xm1 // 2^fract(y*log2(x))-1 : int(y*log2(x))
- faddl MO(one) // 2^fract(y*log2(x)) : int(y*log2(x))
- fscale // 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x))
-32: addl $4, %esp
- cfi_adjust_cfa_offset (-4)
- fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x))
- FLT_NARROW_EVAL_UFLOW_NONNAN
- ret
-
- /* x is NaN. */
- cfi_adjust_cfa_offset (4)
-33: addl $4, %esp
- cfi_adjust_cfa_offset (-4)
- fstp %st(1)
- ret
-
- // pow(x,ħ0) = 1
- .align ALIGNARG(4)
-11: fstp %st(0) // pop y
- fldl MO(one)
- ret
-
- // y == ħinf
- .align ALIGNARG(4)
-12: fstp %st(0) // pop y
- fldl MO(one) // 1
- flds 4(%esp) // x : 1
- fabs // abs(x) : 1
- fucompp // < 1, == 1, or > 1
- fnstsw
- andb $0x45, %ah
- cmpb $0x45, %ah
- je 13f // jump if x is NaN
-
- cmpb $0x40, %ah
- je 14f // jump if |x| == 1
-
- shlb $1, %ah
- xorb %ah, %dl
- andl $2, %edx
- fldl MOX(inf_zero, %edx, 4)
- ret
-
- .align ALIGNARG(4)
-14: fldl MO(one)
- ret
-
- .align ALIGNARG(4)
-13: flds 4(%esp) // load x == NaN
- ret
-
- cfi_adjust_cfa_offset (4)
- .align ALIGNARG(4)
- // x is ħinf
-15: fstp %st(0) // y
- testb $2, %dh
- jz 16f // jump if x == +inf
-
- // fistpl raises invalid exception for |y| >= 1L<<31, so test
- // that (in which case y is certainly even) before testing
- // whether y is odd.
- fld %st // y : y
- fabs // |y| : y
- fcompl MO(p31) // y
- fnstsw
- sahf
- jnc 16f
-
- // We must find out whether y is an odd integer.
- fld %st // y : y
- fistpl (%esp) // y
- fildl (%esp) // int(y) : y
- fucompp // <empty>
- fnstsw
- sahf
- jne 17f
-
- // OK, the value is an integer.
- popl %edx
- cfi_adjust_cfa_offset (-4)
- testb $1, %dl
- jz 18f // jump if not odd
- // It's an odd integer.
- shrl $31, %edx
- fldl MOX(minf_mzero, %edx, 8)
- ret
-
- cfi_adjust_cfa_offset (4)
- .align ALIGNARG(4)
-16: fcompl MO(zero)
- addl $4, %esp
- cfi_adjust_cfa_offset (-4)
- fnstsw
- shrl $5, %eax
- andl $8, %eax
- fldl MOX(inf_zero, %eax, 1)
- ret
-
- cfi_adjust_cfa_offset (4)
- .align ALIGNARG(4)
-17: shll $30, %edx // sign bit for y in right position
- addl $4, %esp
- cfi_adjust_cfa_offset (-4)
-18: shrl $31, %edx
- fldl MOX(inf_zero, %edx, 8)
- ret
-
- cfi_adjust_cfa_offset (4)
- .align ALIGNARG(4)
- // x is ħ0
-20: fstp %st(0) // y
- testb $2, %dl
- jz 21f // y > 0
-
- // x is ħ0 and y is < 0. We must find out whether y is an odd integer.
- testb $2, %dh
- jz 25f
-
- // fistpl raises invalid exception for |y| >= 1L<<31, so test
- // that (in which case y is certainly even) before testing
- // whether y is odd.
- fld %st // y : y
- fabs // |y| : y
- fcompl MO(p31) // y
- fnstsw
- sahf
- jnc 25f
-
- fld %st // y : y
- fistpl (%esp) // y
- fildl (%esp) // int(y) : y
- fucompp // <empty>
- fnstsw
- sahf
- jne 26f
-
- // OK, the value is an integer.
- popl %edx
- cfi_adjust_cfa_offset (-4)
- testb $1, %dl
- jz 27f // jump if not odd
- // It's an odd integer.
- // Raise divide-by-zero exception and get minus infinity value.
- fldl MO(one)
- fdivl MO(zero)
- fchs
- ret
-
- cfi_adjust_cfa_offset (4)
-25: fstp %st(0)
-26: addl $4, %esp
- cfi_adjust_cfa_offset (-4)
-27: // Raise divide-by-zero exception and get infinity value.
- fldl MO(one)
- fdivl MO(zero)
- ret
-
- cfi_adjust_cfa_offset (4)
- .align ALIGNARG(4)
- // x is ħ0 and y is > 0. We must find out whether y is an odd integer.
-21: testb $2, %dh
- jz 22f
-
- // fistpl raises invalid exception for |y| >= 1L<<31, so test
- // that (in which case y is certainly even) before testing
- // whether y is odd.
- fcoml MO(p31) // y
- fnstsw
- sahf
- jnc 22f
-
- fld %st // y : y
- fistpl (%esp) // y
- fildl (%esp) // int(y) : y
- fucompp // <empty>
- fnstsw
- sahf
- jne 23f
-
- // OK, the value is an integer.
- popl %edx
- cfi_adjust_cfa_offset (-4)
- testb $1, %dl
- jz 24f // jump if not odd
- // It's an odd integer.
- fldl MO(mzero)
- ret
-
- cfi_adjust_cfa_offset (4)
-22: fstp %st(0)
-23: addl $4, %esp // Don't use pop.
- cfi_adjust_cfa_offset (-4)
-24: fldl MO(zero)
- ret
-
-END(__ieee754_powf)
-strong_alias (__ieee754_powf, __powf_finite)
diff --git a/sysdeps/i386/fpu/e_powl.S b/sysdeps/i386/fpu/e_powl.S
deleted file mode 100644
index 9e162848e4..0000000000
--- a/sysdeps/i386/fpu/e_powl.S
+++ /dev/null
@@ -1,459 +0,0 @@
-/* ix87 specific implementation of pow function.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- .type p2,@object
-p2: .byte 0, 0, 0, 0, 0, 0, 0x10, 0x40
- ASM_SIZE_DIRECTIVE(p2)
- .type p63,@object
-p63: .byte 0, 0, 0, 0, 0, 0, 0xe0, 0x43
- ASM_SIZE_DIRECTIVE(p63)
- .type p64,@object
-p64: .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x43
- ASM_SIZE_DIRECTIVE(p64)
- .type p78,@object
-p78: .byte 0, 0, 0, 0, 0, 0, 0xd0, 0x44
- ASM_SIZE_DIRECTIVE(p78)
- .type pm79,@object
-pm79: .byte 0, 0, 0, 0, 0, 0, 0, 0x3b
- ASM_SIZE_DIRECTIVE(pm79)
-
- .section .rodata.cst16,"aM",@progbits,16
-
- .p2align 3
- .type infinity,@object
-inf_zero:
-infinity:
- .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
- ASM_SIZE_DIRECTIVE(infinity)
- .type zero,@object
-zero: .double 0.0
- ASM_SIZE_DIRECTIVE(zero)
- .type minf_mzero,@object
-minf_mzero:
-minfinity:
- .byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff
-mzero:
- .byte 0, 0, 0, 0, 0, 0, 0, 0x80
- ASM_SIZE_DIRECTIVE(minf_mzero)
-DEFINE_LDBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
-#else
-# define MO(op) op
-# define MOX(op,x,f) op(,x,f)
-#endif
-
- .text
-ENTRY(__ieee754_powl)
- fldt 16(%esp) // y
- fxam
-
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
-
- fnstsw
- movb %ah, %dl
- andb $0x45, %ah
- cmpb $0x40, %ah // is y == 0 ?
- je 11f
-
- cmpb $0x05, %ah // is y == ħinf ?
- je 12f
-
- cmpb $0x01, %ah // is y == NaN ?
- je 30f
-
- fldt 4(%esp) // x : y
-
- subl $8,%esp
- cfi_adjust_cfa_offset (8)
-
- fxam
- fnstsw
- movb %ah, %dh
- andb $0x45, %ah
- cmpb $0x40, %ah
- je 20f // x is ħ0
-
- cmpb $0x05, %ah
- je 15f // x is ħinf
-
- cmpb $0x01, %ah
- je 32f // x is NaN
-
- fxch // y : x
-
- /* fistpll raises invalid exception for |y| >= 1L<<63. */
- fld %st // y : y : x
- fabs // |y| : y : x
- fcompl MO(p63) // y : x
- fnstsw
- sahf
- jnc 2f
-
- /* First see whether `y' is a natural number. In this case we
- can use a more precise algorithm. */
- fld %st // y : y : x
- fistpll (%esp) // y : x
- fildll (%esp) // int(y) : y : x
- fucomp %st(1) // y : x
- fnstsw
- sahf
- je 9f
-
- // If y has absolute value at most 0x1p-79, then any finite
- // nonzero x will result in 1. Saturate y to those bounds to
- // avoid underflow in the calculation of y*log2(x).
- fld %st // y : y : x
- fabs // |y| : y : x
- fcompl MO(pm79) // y : x
- fnstsw
- sahf
- jnc 3f
- fstp %st(0) // pop y
- fldl MO(pm79) // 0x1p-79 : x
- testb $2, %dl
- jnz 3f // y > 0
- fchs // -0x1p-79 : x
- jmp 3f
-
-9: /* OK, we have an integer value for y. Unless very small
- (we use < 4), use the algorithm for real exponent to avoid
- accumulation of errors. */
- fld %st // y : y : x
- fabs // |y| : y : x
- fcompl MO(p2) // y : x
- fnstsw
- sahf
- jnc 3f
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- orl $0, %edx
- fstp %st(0) // x
- jns 4f // y >= 0, jump
- fdivrl MO(one) // 1/x (now referred to as x)
- negl %eax
- adcl $0, %edx
- negl %edx
-4: fldl MO(one) // 1 : x
- fxch
-
- /* If y is even, take the absolute value of x. Otherwise,
- ensure all intermediate values that might overflow have the
- sign of x. */
- testb $1, %al
- jnz 6f
- fabs
-
-6: shrdl $1, %edx, %eax
- jnc 5f
- fxch
- fabs
- fmul %st(1) // x : ST*x
- fxch
-5: fld %st // x : x : ST*x
- fabs // |x| : x : ST*x
- fmulp // |x|*x : ST*x
- shrl $1, %edx
- movl %eax, %ecx
- orl %edx, %ecx
- jnz 6b
- fstp %st(0) // ST*x
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- LDBL_CHECK_FORCE_UFLOW_NONNAN
- ret
-
- /* y is ħNAN */
-30: fldt 4(%esp) // x : y
- fldl MO(one) // 1.0 : x : y
- fucomp %st(1) // x : y
- fnstsw
- sahf
- je 33f
-31: /* At least one argument NaN, and result should be NaN. */
- faddp
- ret
-33: jp 31b
- /* pow (1, NaN); check if the NaN signaling. */
- testb $0x40, 23(%esp)
- jz 31b
- fstp %st(1)
- ret
-
- cfi_adjust_cfa_offset (8)
-32: addl $8, %esp
- cfi_adjust_cfa_offset (-8)
- faddp
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
-2: // y is a large integer (absolute value at least 1L<<63).
- // If y has absolute value at least 1L<<78, then any finite
- // nonzero x will result in 0 (underflow), 1 or infinity (overflow).
- // Saturate y to those bounds to avoid overflow in the calculation
- // of y*log2(x).
- fld %st // y : y : x
- fabs // |y| : y : x
- fcompl MO(p78) // y : x
- fnstsw
- sahf
- jc 3f
- fstp %st(0) // pop y
- fldl MO(p78) // 1L<<78 : x
- testb $2, %dl
- jz 3f // y > 0
- fchs // -(1L<<78) : x
- .align ALIGNARG(4)
-3: /* y is a real number. */
- subl $28, %esp
- cfi_adjust_cfa_offset (28)
- fstpt 12(%esp) // x
- fstpt (%esp) // <empty>
- call HIDDEN_JUMPTARGET (__powl_helper) // <result>
- addl $36, %esp
- cfi_adjust_cfa_offset (-36)
- ret
-
- // pow(x,ħ0) = 1, unless x is sNaN
- .align ALIGNARG(4)
-11: fstp %st(0) // pop y
- fldt 4(%esp) // x
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x01, %ah
- je 112f // x is NaN
-111: fstp %st(0)
- fldl MO(one)
- ret
-
-112: testb $0x40, 11(%esp)
- jnz 111b
- fadd %st(0)
- ret
-
- // y == ħinf
- .align ALIGNARG(4)
-12: fstp %st(0) // pop y
- fldl MO(one) // 1
- fldt 4(%esp) // x : 1
- fabs // abs(x) : 1
- fucompp // < 1, == 1, or > 1
- fnstsw
- andb $0x45, %ah
- cmpb $0x45, %ah
- je 13f // jump if x is NaN
-
- cmpb $0x40, %ah
- je 14f // jump if |x| == 1
-
- shlb $1, %ah
- xorb %ah, %dl
- andl $2, %edx
- fldl MOX(inf_zero, %edx, 4)
- ret
-
- .align ALIGNARG(4)
-14: fldl MO(one)
- ret
-
- .align ALIGNARG(4)
-13: fldt 4(%esp) // load x == NaN
- fadd %st(0)
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
- // x is ħinf
-15: fstp %st(0) // y
- testb $2, %dh
- jz 16f // jump if x == +inf
-
- // fistpll raises invalid exception for |y| >= 1L<<63, but y
- // may be odd unless we know |y| >= 1L<<64.
- fld %st // y : y
- fabs // |y| : y
- fcompl MO(p64) // y
- fnstsw
- sahf
- jnc 16f
- fldl MO(p63) // p63 : y
- fxch // y : p63
- fprem // y%p63 : p63
- fstp %st(1) // y%p63
-
- // We must find out whether y is an odd integer.
- fld %st // y : y
- fistpll (%esp) // y
- fildll (%esp) // int(y) : y
- fucompp // <empty>
- fnstsw
- sahf
- jne 17f
-
- // OK, the value is an integer, but is it odd?
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- andb $1, %al
- jz 18f // jump if not odd
- // It's an odd integer.
- shrl $31, %edx
- fldl MOX(minf_mzero, %edx, 8)
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
-16: fcompl MO(zero)
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
- fnstsw
- shrl $5, %eax
- andl $8, %eax
- fldl MOX(inf_zero, %eax, 1)
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
-17: shll $30, %edx // sign bit for y in right position
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
-18: shrl $31, %edx
- fldl MOX(inf_zero, %edx, 8)
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
- // x is ħ0
-20: fstp %st(0) // y
- testb $2, %dl
- jz 21f // y > 0
-
- // x is ħ0 and y is < 0. We must find out whether y is an odd integer.
- testb $2, %dh
- jz 25f
-
- // fistpll raises invalid exception for |y| >= 1L<<63, but y
- // may be odd unless we know |y| >= 1L<<64.
- fld %st // y : y
- fabs // |y| : y
- fcompl MO(p64) // y
- fnstsw
- sahf
- jnc 25f
- fldl MO(p63) // p63 : y
- fxch // y : p63
- fprem // y%p63 : p63
- fstp %st(1) // y%p63
-
- fld %st // y : y
- fistpll (%esp) // y
- fildll (%esp) // int(y) : y
- fucompp // <empty>
- fnstsw
- sahf
- jne 26f
-
- // OK, the value is an integer, but is it odd?
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- andb $1, %al
- jz 27f // jump if not odd
- // It's an odd integer.
- // Raise divide-by-zero exception and get minus infinity value.
- fldl MO(one)
- fdivl MO(zero)
- fchs
- ret
-
- cfi_adjust_cfa_offset (8)
-25: fstp %st(0)
-26: addl $8, %esp
- cfi_adjust_cfa_offset (-8)
-27: // Raise divide-by-zero exception and get infinity value.
- fldl MO(one)
- fdivl MO(zero)
- ret
-
- cfi_adjust_cfa_offset (8)
- .align ALIGNARG(4)
- // x is ħ0 and y is > 0. We must find out whether y is an odd integer.
-21: testb $2, %dh
- jz 22f
-
- // fistpll raises invalid exception for |y| >= 1L<<63, but y
- // may be odd unless we know |y| >= 1L<<64.
- fld %st // y : y
- fcompl MO(p64) // y
- fnstsw
- sahf
- jnc 22f
- fldl MO(p63) // p63 : y
- fxch // y : p63
- fprem // y%p63 : p63
- fstp %st(1) // y%p63
-
- fld %st // y : y
- fistpll (%esp) // y
- fildll (%esp) // int(y) : y
- fucompp // <empty>
- fnstsw
- sahf
- jne 23f
-
- // OK, the value is an integer, but is it odd?
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- andb $1, %al
- jz 24f // jump if not odd
- // It's an odd integer.
- fldl MO(mzero)
- ret
-
- cfi_adjust_cfa_offset (8)
-22: fstp %st(0)
-23: addl $8, %esp // Don't use 2 x pop
- cfi_adjust_cfa_offset (-8)
-24: fldl MO(zero)
- ret
-
-END(__ieee754_powl)
-strong_alias (__ieee754_powl, __powl_finite)
diff --git a/sysdeps/i386/fpu/e_rem_pio2.c b/sysdeps/i386/fpu/e_rem_pio2.c
deleted file mode 100644
index 1347b0468c..0000000000
--- a/sysdeps/i386/fpu/e_rem_pio2.c
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Empty. This file is only meant to avoid compiling the file with the
- same name in the libm-ieee754 directory. The code is not used since
- there is an assembler version for all users of this file. */
diff --git a/sysdeps/i386/fpu/e_remainder.S b/sysdeps/i386/fpu/e_remainder.S
deleted file mode 100644
index f7867aa90b..0000000000
--- a/sysdeps/i386/fpu/e_remainder.S
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-ENTRY(__ieee754_remainder)
- fldl 12(%esp)
- fldl 4(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- ret
-END (__ieee754_remainder)
-strong_alias (__ieee754_remainder, __remainder_finite)
diff --git a/sysdeps/i386/fpu/e_remainderf.S b/sysdeps/i386/fpu/e_remainderf.S
deleted file mode 100644
index cfd390bc69..0000000000
--- a/sysdeps/i386/fpu/e_remainderf.S
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-ENTRY(__ieee754_remainderf)
- flds 8(%esp)
- flds 4(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- ret
-END (__ieee754_remainderf)
-strong_alias (__ieee754_remainderf, __remainderf_finite)
diff --git a/sysdeps/i386/fpu/e_remainderl.S b/sysdeps/i386/fpu/e_remainderl.S
deleted file mode 100644
index 5ec23a37a3..0000000000
--- a/sysdeps/i386/fpu/e_remainderl.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-
-ENTRY(__ieee754_remainderl)
- fldt 16(%esp)
- fldt 4(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- ret
-END (__ieee754_remainderl)
-strong_alias (__ieee754_remainderl, __remainderl_finite)
diff --git a/sysdeps/i386/fpu/e_scalb.S b/sysdeps/i386/fpu/e_scalb.S
deleted file mode 100644
index 370924c29f..0000000000
--- a/sysdeps/i386/fpu/e_scalb.S
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Correct handling of y==-inf <drepper@gnu>
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type zero_nan,@object
-zero_nan:
- .double 0.0
-nan: .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
- .byte 0, 0, 0, 0, 0, 0, 0, 0x80
- .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
- ASM_SIZE_DIRECTIVE(zero_nan)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
-#else
-# define MO(op) op
-# define MOX(op,x,f) op(,x,f)
-#endif
-
- .text
-ENTRY(__ieee754_scalb)
- fldl 12(%esp)
- fxam
- fnstsw
- fldl 4(%esp)
- andl $0x4700, %eax
- cmpl $0x0700, %eax
- je 1f
- andl $0x4500, %eax
- cmpl $0x0100, %eax
- je 2f
- fxam
- fnstsw
- andl $0x4500, %eax
- cmpl $0x0100, %eax
- je 3f
- fld %st(1)
- frndint
- fcomp %st(2)
- fnstsw
- sahf
- jne 4f
- fscale
- fstp %st(1)
- DBL_NARROW_EVAL
- ret
-
- /* y is -inf */
-1: fxam
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- fnstsw
- movl 8(%esp), %edx
- shrl $5, %eax
- fstp %st
- fstp %st
- andl $0x80000000, %edx
- andl $0x0228, %eax
- cmpl $0x0028, %eax
- je 4f
- andl $8, %eax
- shrl $27, %edx
- addl %edx, %eax
- fldl MOX(zero_nan, %eax, 1)
- ret
-
- /* The result is NaN, but we must not raise an exception.
- So use a variable. */
-2: fstp %st
- fstp %st
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- fldl MO(nan)
- ret
-
- /* The first parameter is a NaN. Return it. */
-3: fstp %st(1)
- ret
-
- /* Return NaN and raise the invalid exception. */
-4: fstp %st
- fstp %st
- fldz
- fdiv %st
- ret
-END(__ieee754_scalb)
-strong_alias (__ieee754_scalb, __scalb_finite)
diff --git a/sysdeps/i386/fpu/e_scalbf.S b/sysdeps/i386/fpu/e_scalbf.S
deleted file mode 100644
index 4f2dfa3acf..0000000000
--- a/sysdeps/i386/fpu/e_scalbf.S
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- * Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Correct handling of y==-inf <drepper@gnu>
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type zero_nan,@object
-zero_nan:
- .double 0.0
-nan: .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
- .byte 0, 0, 0, 0, 0, 0, 0, 0x80
- .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
- ASM_SIZE_DIRECTIVE(zero_nan)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
-#else
-# define MO(op) op
-# define MOX(op,x,f) op(,x,f)
-#endif
-
-
- .text
-ENTRY(__ieee754_scalbf)
- flds 8(%esp)
- fxam
- fnstsw
- flds 4(%esp)
- andl $0x4700, %eax
- cmpl $0x0700, %eax
- je 1f
- andl $0x4500, %eax
- cmpl $0x0100, %eax
- je 2f
- fxam
- fnstsw
- andl $0x4500, %eax
- cmpl $0x0100, %eax
- je 3f
- fld %st(1)
- frndint
- fcomp %st(2)
- fnstsw
- sahf
- jne 4f
- fscale
- fstp %st(1)
- FLT_NARROW_EVAL
- ret
-
- /* y is -inf */
-1: fxam
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- fnstsw
- movl 4(%esp), %edx
- shrl $5, %eax
- fstp %st
- fstp %st
- andl $0x80000000, %edx
- andl $0x0228, %eax
- cmpl $0x0028, %eax
- je 4f
- andl $8, %eax
- shrl $27, %edx
- addl %edx, %eax
- fldl MOX(zero_nan, %eax, 1)
- ret
-
- /* The result is NaN, but we must not raise an exception.
- So use a variable. */
-2: fstp %st
- fstp %st
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- fldl MO(nan)
- ret
-
- /* The first parameter is a NaN. Return it. */
-3: fstp %st(1)
- ret
-
- /* Return NaN and raise the invalid exception. */
-4: fstp %st
- fstp %st
- fldz
- fdiv %st
- ret
-END(__ieee754_scalbf)
-strong_alias (__ieee754_scalbf, __scalbf_finite)
diff --git a/sysdeps/i386/fpu/e_scalbl.S b/sysdeps/i386/fpu/e_scalbl.S
deleted file mode 100644
index 896f599cb0..0000000000
--- a/sysdeps/i386/fpu/e_scalbl.S
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- *
- * Correct handling of y==-inf <drepper@gnu>
- */
-
-#include <machine/asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type zero_nan,@object
-zero_nan:
- .double 0.0
-nan: .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
- .byte 0, 0, 0, 0, 0, 0, 0, 0x80
- .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
- ASM_SIZE_DIRECTIVE(zero_nan)
-
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
-#else
-# define MO(op) op
-# define MOX(op,x,f) op(,x,f)
-#endif
-
- .text
-ENTRY(__ieee754_scalbl)
- fldt 16(%esp)
- fxam
- fnstsw
- fldt 4(%esp)
- andl $0x4700, %eax
- cmpl $0x0700, %eax
- je 1f
- andl $0x4500, %eax
- cmpl $0x0100, %eax
- je 2f
- fxam
- fnstsw
- andl $0x4500, %eax
- cmpl $0x0100, %eax
- je 2f
- fld %st(1)
- frndint
- fcomp %st(2)
- fnstsw
- sahf
- jne 4f
- fscale
- fstp %st(1)
- ret
-
- /* y is -inf */
-1: fxam
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- fnstsw
- movl 12(%esp), %edx
- shrl $5, %eax
- fstp %st
- fstp %st
- andl $0x8000, %edx
- andl $0x0228, %eax
- cmpl $0x0028, %eax
- je 4f
- andl $8, %eax
- shrl $11, %edx
- addl %edx, %eax
- fldl MOX(zero_nan, %eax, 1)
- ret
-
- /* The result is NaN; raise an exception for sNaN arguments. */
-2: faddp
- ret
-
- /* Return NaN and raise the invalid exception. */
-4: fstp %st
- fstp %st
- fldz
- fdiv %st
- ret
-END(__ieee754_scalbl)
-strong_alias (__ieee754_scalbl, __scalbl_finite)
diff --git a/sysdeps/i386/fpu/e_sqrt.S b/sysdeps/i386/fpu/e_sqrt.S
deleted file mode 100644
index fba5833a9a..0000000000
--- a/sysdeps/i386/fpu/e_sqrt.S
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-ENTRY(__ieee754_sqrt)
- fldl 4(%esp)
- subl $8, %esp
- cfi_adjust_cfa_offset (8)
- fstcw 4(%esp)
- movl $0xfeff, %edx
- andl 4(%esp), %edx
- movl %edx, (%esp)
- fldcw (%esp)
- fsqrt
- fldcw 4(%esp)
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
- ret
-END (__ieee754_sqrt)
-strong_alias (__ieee754_sqrt, __sqrt_finite)
diff --git a/sysdeps/i386/fpu/e_sqrtf.S b/sysdeps/i386/fpu/e_sqrtf.S
deleted file mode 100644
index 6f7e4b015f..0000000000
--- a/sysdeps/i386/fpu/e_sqrtf.S
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-ENTRY(__ieee754_sqrtf)
- flds 4(%esp)
- fsqrt
- ret
-END (__ieee754_sqrtf)
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
diff --git a/sysdeps/i386/fpu/e_sqrtl.c b/sysdeps/i386/fpu/e_sqrtl.c
deleted file mode 100644
index 41bcd7eeb7..0000000000
--- a/sysdeps/i386/fpu/e_sqrtl.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <math_private.h>
-
-#undef __ieee754_sqrtl
-long double
-__ieee754_sqrtl (long double x)
-{
- long double res;
-
- asm ("fsqrt" : "=t" (res) : "0" (x));
-
- return res;
-}
-strong_alias (__ieee754_sqrtl, __sqrtl_finite)
diff --git a/sysdeps/i386/fpu/fclrexcpt.c b/sysdeps/i386/fpu/fclrexcpt.c
deleted file mode 100644
index 5d8596964b..0000000000
--- a/sysdeps/i386/fpu/fclrexcpt.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Clear given exceptions in current floating-point environment.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-int
-__feclearexcept (int excepts)
-{
- fenv_t temp;
-
- /* Mask out unsupported bits/exceptions. */
- excepts &= FE_ALL_EXCEPT;
-
- /* Bah, we have to clear selected exceptions. Since there is no
- `fldsw' instruction we have to do it the hard way. */
- __asm__ ("fnstenv %0" : "=m" (*&temp));
-
- /* Clear the relevant bits. */
- temp.__status_word &= excepts ^ FE_ALL_EXCEPT;
-
- /* Put the new data in effect. */
- __asm__ ("fldenv %0" : : "m" (*&temp));
-
- /* If the CPU supports SSE, we clear the MXCSR as well. */
- if (HAS_CPU_FEATURE (SSE))
- {
- unsigned int xnew_exc;
-
- /* Get the current MXCSR. */
- __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc));
-
- /* Clear the relevant bits. */
- xnew_exc &= ~excepts;
-
- /* Put the new data in effect. */
- __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc));
- }
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__feclearexcept, __old_feclearexcept)
-compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
-#endif
-
-libm_hidden_ver (__feclearexcept, feclearexcept)
-versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
diff --git a/sysdeps/i386/fpu/fedisblxcpt.c b/sysdeps/i386/fpu/fedisblxcpt.c
deleted file mode 100644
index f8db665425..0000000000
--- a/sysdeps/i386/fpu/fedisblxcpt.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Disable floating-point exceptions.
- Copyright (C) 1999-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Andreas Jaeger <aj@suse.de>, 1999.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-int
-fedisableexcept (int excepts)
-{
- unsigned short int new_exc, old_exc;
-
- /* Get the current control word. */
- __asm__ ("fstcw %0" : "=m" (*&new_exc));
-
- old_exc = (~new_exc) & FE_ALL_EXCEPT;
-
- excepts &= FE_ALL_EXCEPT;
-
- new_exc |= excepts;
- __asm__ ("fldcw %0" : : "m" (*&new_exc));
-
- /* If the CPU supports SSE we set the MXCSR as well. */
- if (HAS_CPU_FEATURE (SSE))
- {
- unsigned int xnew_exc;
-
- /* Get the current control word. */
- __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc));
-
- xnew_exc |= excepts << 7;
-
- __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc));
- }
-
- return old_exc;
-}
diff --git a/sysdeps/i386/fpu/feenablxcpt.c b/sysdeps/i386/fpu/feenablxcpt.c
deleted file mode 100644
index f1c42d7c27..0000000000
--- a/sysdeps/i386/fpu/feenablxcpt.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Enable floating-point exceptions.
- Copyright (C) 1999-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Andreas Jaeger <aj@suse.de>, 1999.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-int
-feenableexcept (int excepts)
-{
- unsigned short int new_exc;
- unsigned short int old_exc;
-
- /* Get the current control word. */
- __asm__ ("fstcw %0" : "=m" (*&new_exc));
-
- excepts &= FE_ALL_EXCEPT;
- old_exc = (~new_exc) & FE_ALL_EXCEPT;
-
- new_exc &= ~excepts;
- __asm__ ("fldcw %0" : : "m" (*&new_exc));
-
- /* If the CPU supports SSE we set the MXCSR as well. */
- if (HAS_CPU_FEATURE (SSE))
- {
- unsigned int xnew_exc;
-
- /* Get the current control word. */
- __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc));
-
- xnew_exc &= ~(excepts << 7);
-
- __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc));
- }
-
- return old_exc;
-}
diff --git a/sysdeps/i386/fpu/fegetenv.c b/sysdeps/i386/fpu/fegetenv.c
deleted file mode 100644
index 983f6af25e..0000000000
--- a/sysdeps/i386/fpu/fegetenv.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Store current floating-point environment.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-int
-__fegetenv (fenv_t *envp)
-{
- __asm__ ("fnstenv %0" : "=m" (*envp));
- /* And load it right back since the processor changes the mask.
- Intel thought this opcode to be used in interrupt handlers which
- would block all exceptions. */
- __asm__ ("fldenv %0" : : "m" (*envp));
-
- if (HAS_CPU_FEATURE (SSE))
- __asm__ ("stmxcsr %0" : "=m" (envp->__eip));
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__fegetenv, __old_fegetenv)
-compat_symbol (libm, __old_fegetenv, fegetenv, GLIBC_2_1);
-#endif
-
-libm_hidden_def (__fegetenv)
-libm_hidden_ver (__fegetenv, fegetenv)
-versioned_symbol (libm, __fegetenv, fegetenv, GLIBC_2_2);
diff --git a/sysdeps/i386/fpu/fegetexcept.c b/sysdeps/i386/fpu/fegetexcept.c
deleted file mode 100644
index dc87b7a470..0000000000
--- a/sysdeps/i386/fpu/fegetexcept.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Get enabled floating-point exceptions.
- Copyright (C) 1999-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Andreas Jaeger <aj@suse.de>, 1999.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-
-int
-fegetexcept (void)
-{
- unsigned short int exc;
-
- /* Get the current control word. */
- __asm__ ("fstcw %0" : "=m" (*&exc));
-
- return (~exc) & FE_ALL_EXCEPT;
-}
diff --git a/sysdeps/i386/fpu/fegetmode.c b/sysdeps/i386/fpu/fegetmode.c
deleted file mode 100644
index abbce3075f..0000000000
--- a/sysdeps/i386/fpu/fegetmode.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Store current floating-point control modes. i386 version.
- Copyright (C) 2016-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-int
-fegetmode (femode_t *modep)
-{
- _FPU_GETCW (modep->__control_word);
- if (HAS_CPU_FEATURE (SSE))
- __asm__ ("stmxcsr %0" : "=m" (modep->__mxcsr));
- return 0;
-}
diff --git a/sysdeps/i386/fpu/fegetround.c b/sysdeps/i386/fpu/fegetround.c
deleted file mode 100644
index 8ce8b859d8..0000000000
--- a/sysdeps/i386/fpu/fegetround.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Return current rounding direction.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-
-int
-__fegetround (void)
-{
- int cw;
-
- __asm__ ("fnstcw %0" : "=m" (*&cw));
-
- return cw & 0xc00;
-}
-libm_hidden_def (__fegetround)
-weak_alias (__fegetround, fegetround)
-libm_hidden_weak (fegetround)
diff --git a/sysdeps/i386/fpu/feholdexcpt.c b/sysdeps/i386/fpu/feholdexcpt.c
deleted file mode 100644
index d327358913..0000000000
--- a/sysdeps/i386/fpu/feholdexcpt.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Store current floating-point environment and clear exceptions.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-int
-__feholdexcept (fenv_t *envp)
-{
- /* Store the environment. Recall that fnstenv has a side effect of
- masking all exceptions. Then clear all exceptions. */
- __asm__ volatile ("fnstenv %0; fnclex" : "=m" (*envp));
-
- /* If the CPU supports SSE we set the MXCSR as well. */
- if (HAS_CPU_FEATURE (SSE))
- {
- unsigned int xwork;
-
- /* Get the current control word. */
- __asm__ ("stmxcsr %0" : "=m" (envp->__eip));
-
- /* Set all exceptions to non-stop and clear them. */
- xwork = (envp->__eip | 0x1f80) & ~0x3f;
-
- __asm__ ("ldmxcsr %0" : : "m" (*&xwork));
- }
-
- return 0;
-}
-libm_hidden_def (__feholdexcept)
-weak_alias (__feholdexcept, feholdexcept)
-libm_hidden_weak (feholdexcept)
diff --git a/sysdeps/i386/fpu/fenv_private.h b/sysdeps/i386/fpu/fenv_private.h
deleted file mode 100644
index e20e1f1662..0000000000
--- a/sysdeps/i386/fpu/fenv_private.h
+++ /dev/null
@@ -1,501 +0,0 @@
-#ifndef FENV_PRIVATE_H
-#define FENV_PRIVATE_H 1
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-#ifdef __SSE2_MATH__
-# define math_opt_barrier(x) \
- ({ __typeof(x) __x; \
- if (sizeof (x) <= sizeof (double)) \
- __asm ("" : "=x" (__x) : "0" (x)); \
- else \
- __asm ("" : "=t" (__x) : "0" (x)); \
- __x; })
-# define math_force_eval(x) \
- do { \
- if (sizeof (x) <= sizeof (double)) \
- __asm __volatile ("" : : "x" (x)); \
- else \
- __asm __volatile ("" : : "f" (x)); \
- } while (0)
-#else
-# define math_opt_barrier(x) \
- ({ __typeof (x) __x; \
- __asm ("" : "=t" (__x) : "0" (x)); \
- __x; })
-# define math_force_eval(x) \
- do { \
- __typeof (x) __x = (x); \
- if (sizeof (x) <= sizeof (double)) \
- __asm __volatile ("" : : "m" (__x)); \
- else \
- __asm __volatile ("" : : "f" (__x)); \
- } while (0)
-#endif
-
-/* This file is used by both the 32- and 64-bit ports. The 64-bit port
- has a field in the fenv_t for the mxcsr; the 32-bit port does not.
- Instead, we (ab)use the only 32-bit field extant in the struct. */
-#ifndef __x86_64__
-# define __mxcsr __eip
-#endif
-
-
-/* All of these functions are private to libm, and are all used in pairs
- to save+change the fp state and restore the original state. Thus we
- need not care for both the 387 and the sse unit, only the one we're
- actually using. */
-
-#if defined __AVX__ || defined SSE2AVX
-# define STMXCSR "vstmxcsr"
-# define LDMXCSR "vldmxcsr"
-#else
-# define STMXCSR "stmxcsr"
-# define LDMXCSR "ldmxcsr"
-#endif
-
-static __always_inline void
-libc_feholdexcept_sse (fenv_t *e)
-{
- unsigned int mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
- e->__mxcsr = mxcsr;
- mxcsr = (mxcsr | 0x1f80) & ~0x3f;
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
-}
-
-static __always_inline void
-libc_feholdexcept_387 (fenv_t *e)
-{
- /* Recall that fnstenv has a side-effect of masking exceptions.
- Clobber all of the fp registers so that the TOS field is 0. */
- asm volatile ("fnstenv %0; fnclex"
- : "=m"(*e)
- : : "st", "st(1)", "st(2)", "st(3)",
- "st(4)", "st(5)", "st(6)", "st(7)");
-}
-
-static __always_inline void
-libc_fesetround_sse (int r)
-{
- unsigned int mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
- mxcsr = (mxcsr & ~0x6000) | (r << 3);
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
-}
-
-static __always_inline void
-libc_fesetround_387 (int r)
-{
- fpu_control_t cw;
- _FPU_GETCW (cw);
- cw = (cw & ~0xc00) | r;
- _FPU_SETCW (cw);
-}
-
-static __always_inline void
-libc_feholdexcept_setround_sse (fenv_t *e, int r)
-{
- unsigned int mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
- e->__mxcsr = mxcsr;
- mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | (r << 3);
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
-}
-
-/* Set both rounding mode and precision. A convenience function for use
- by libc_feholdexcept_setround and libc_feholdexcept_setround_53bit. */
-static __always_inline void
-libc_feholdexcept_setround_387_prec (fenv_t *e, int r)
-{
- libc_feholdexcept_387 (e);
-
- fpu_control_t cw = e->__control_word;
- cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED);
- cw |= r | 0x3f;
- _FPU_SETCW (cw);
-}
-
-static __always_inline void
-libc_feholdexcept_setround_387 (fenv_t *e, int r)
-{
- libc_feholdexcept_setround_387_prec (e, r | _FPU_EXTENDED);
-}
-
-static __always_inline void
-libc_feholdexcept_setround_387_53bit (fenv_t *e, int r)
-{
- libc_feholdexcept_setround_387_prec (e, r | _FPU_DOUBLE);
-}
-
-static __always_inline int
-libc_fetestexcept_sse (int e)
-{
- unsigned int mxcsr;
- asm volatile (STMXCSR " %0" : "=m" (*&mxcsr));
- return mxcsr & e & FE_ALL_EXCEPT;
-}
-
-static __always_inline int
-libc_fetestexcept_387 (int ex)
-{
- fexcept_t temp;
- asm volatile ("fnstsw %0" : "=a" (temp));
- return temp & ex & FE_ALL_EXCEPT;
-}
-
-static __always_inline void
-libc_fesetenv_sse (fenv_t *e)
-{
- asm volatile (LDMXCSR " %0" : : "m" (e->__mxcsr));
-}
-
-static __always_inline void
-libc_fesetenv_387 (fenv_t *e)
-{
- /* Clobber all fp registers so that the TOS value we saved earlier is
- compatible with the current state of the compiler. */
- asm volatile ("fldenv %0"
- : : "m" (*e)
- : "st", "st(1)", "st(2)", "st(3)",
- "st(4)", "st(5)", "st(6)", "st(7)");
-}
-
-static __always_inline int
-libc_feupdateenv_test_sse (fenv_t *e, int ex)
-{
- unsigned int mxcsr, old_mxcsr, cur_ex;
- asm volatile (STMXCSR " %0" : "=m" (*&mxcsr));
- cur_ex = mxcsr & FE_ALL_EXCEPT;
-
- /* Merge current exceptions with the old environment. */
- old_mxcsr = e->__mxcsr;
- mxcsr = old_mxcsr | cur_ex;
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
-
- /* Raise SIGFPE for any new exceptions since the hold. Expect that
- the normal environment has all exceptions masked. */
- if (__glibc_unlikely (~(old_mxcsr >> 7) & cur_ex))
- __feraiseexcept (cur_ex);
-
- /* Test for exceptions raised since the hold. */
- return cur_ex & ex;
-}
-
-static __always_inline int
-libc_feupdateenv_test_387 (fenv_t *e, int ex)
-{
- fexcept_t cur_ex;
-
- /* Save current exceptions. */
- asm volatile ("fnstsw %0" : "=a" (cur_ex));
- cur_ex &= FE_ALL_EXCEPT;
-
- /* Reload original environment. */
- libc_fesetenv_387 (e);
-
- /* Merge current exceptions. */
- __feraiseexcept (cur_ex);
-
- /* Test for exceptions raised since the hold. */
- return cur_ex & ex;
-}
-
-static __always_inline void
-libc_feupdateenv_sse (fenv_t *e)
-{
- libc_feupdateenv_test_sse (e, 0);
-}
-
-static __always_inline void
-libc_feupdateenv_387 (fenv_t *e)
-{
- libc_feupdateenv_test_387 (e, 0);
-}
-
-static __always_inline void
-libc_feholdsetround_sse (fenv_t *e, int r)
-{
- unsigned int mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
- e->__mxcsr = mxcsr;
- mxcsr = (mxcsr & ~0x6000) | (r << 3);
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
-}
-
-static __always_inline void
-libc_feholdsetround_387_prec (fenv_t *e, int r)
-{
- fpu_control_t cw;
-
- _FPU_GETCW (cw);
- e->__control_word = cw;
- cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED);
- cw |= r;
- _FPU_SETCW (cw);
-}
-
-static __always_inline void
-libc_feholdsetround_387 (fenv_t *e, int r)
-{
- libc_feholdsetround_387_prec (e, r | _FPU_EXTENDED);
-}
-
-static __always_inline void
-libc_feholdsetround_387_53bit (fenv_t *e, int r)
-{
- libc_feholdsetround_387_prec (e, r | _FPU_DOUBLE);
-}
-
-static __always_inline void
-libc_feresetround_sse (fenv_t *e)
-{
- unsigned int mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
- mxcsr = (mxcsr & ~0x6000) | (e->__mxcsr & 0x6000);
- asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr));
-}
-
-static __always_inline void
-libc_feresetround_387 (fenv_t *e)
-{
- _FPU_SETCW (e->__control_word);
-}
-
-#ifdef __SSE_MATH__
-# define libc_feholdexceptf libc_feholdexcept_sse
-# define libc_fesetroundf libc_fesetround_sse
-# define libc_feholdexcept_setroundf libc_feholdexcept_setround_sse
-# define libc_fetestexceptf libc_fetestexcept_sse
-# define libc_fesetenvf libc_fesetenv_sse
-# define libc_feupdateenv_testf libc_feupdateenv_test_sse
-# define libc_feupdateenvf libc_feupdateenv_sse
-# define libc_feholdsetroundf libc_feholdsetround_sse
-# define libc_feresetroundf libc_feresetround_sse
-#else
-# define libc_feholdexceptf libc_feholdexcept_387
-# define libc_fesetroundf libc_fesetround_387
-# define libc_feholdexcept_setroundf libc_feholdexcept_setround_387
-# define libc_fetestexceptf libc_fetestexcept_387
-# define libc_fesetenvf libc_fesetenv_387
-# define libc_feupdateenv_testf libc_feupdateenv_test_387
-# define libc_feupdateenvf libc_feupdateenv_387
-# define libc_feholdsetroundf libc_feholdsetround_387
-# define libc_feresetroundf libc_feresetround_387
-#endif /* __SSE_MATH__ */
-
-#ifdef __SSE2_MATH__
-# define libc_feholdexcept libc_feholdexcept_sse
-# define libc_fesetround libc_fesetround_sse
-# define libc_feholdexcept_setround libc_feholdexcept_setround_sse
-# define libc_fetestexcept libc_fetestexcept_sse
-# define libc_fesetenv libc_fesetenv_sse
-# define libc_feupdateenv_test libc_feupdateenv_test_sse
-# define libc_feupdateenv libc_feupdateenv_sse
-# define libc_feholdsetround libc_feholdsetround_sse
-# define libc_feresetround libc_feresetround_sse
-#else
-# define libc_feholdexcept libc_feholdexcept_387
-# define libc_fesetround libc_fesetround_387
-# define libc_feholdexcept_setround libc_feholdexcept_setround_387
-# define libc_fetestexcept libc_fetestexcept_387
-# define libc_fesetenv libc_fesetenv_387
-# define libc_feupdateenv_test libc_feupdateenv_test_387
-# define libc_feupdateenv libc_feupdateenv_387
-# define libc_feholdsetround libc_feholdsetround_387
-# define libc_feresetround libc_feresetround_387
-#endif /* __SSE2_MATH__ */
-
-#define libc_feholdexceptl libc_feholdexcept_387
-#define libc_fesetroundl libc_fesetround_387
-#define libc_feholdexcept_setroundl libc_feholdexcept_setround_387
-#define libc_fetestexceptl libc_fetestexcept_387
-#define libc_fesetenvl libc_fesetenv_387
-#define libc_feupdateenv_testl libc_feupdateenv_test_387
-#define libc_feupdateenvl libc_feupdateenv_387
-#define libc_feholdsetroundl libc_feholdsetround_387
-#define libc_feresetroundl libc_feresetround_387
-
-#ifndef __SSE2_MATH__
-# define libc_feholdexcept_setround_53bit libc_feholdexcept_setround_387_53bit
-# define libc_feholdsetround_53bit libc_feholdsetround_387_53bit
-#endif
-
-/* We have support for rounding mode context. */
-#define HAVE_RM_CTX 1
-
-static __always_inline void
-libc_feholdexcept_setround_sse_ctx (struct rm_ctx *ctx, int r)
-{
- unsigned int mxcsr, new_mxcsr;
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
- new_mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | (r << 3);
-
- ctx->env.__mxcsr = mxcsr;
- if (__glibc_unlikely (mxcsr != new_mxcsr))
- {
- asm volatile (LDMXCSR " %0" : : "m" (*&new_mxcsr));
- ctx->updated_status = true;
- }
- else
- ctx->updated_status = false;
-}
-
-/* Unconditional since we want to overwrite any exceptions that occurred in the
- context. This is also why all fehold* functions unconditionally write into
- ctx->env. */
-static __always_inline void
-libc_fesetenv_sse_ctx (struct rm_ctx *ctx)
-{
- libc_fesetenv_sse (&ctx->env);
-}
-
-static __always_inline void
-libc_feupdateenv_sse_ctx (struct rm_ctx *ctx)
-{
- if (__glibc_unlikely (ctx->updated_status))
- libc_feupdateenv_test_sse (&ctx->env, 0);
-}
-
-static __always_inline void
-libc_feholdexcept_setround_387_prec_ctx (struct rm_ctx *ctx, int r)
-{
- libc_feholdexcept_387 (&ctx->env);
-
- fpu_control_t cw = ctx->env.__control_word;
- fpu_control_t old_cw = cw;
- cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED);
- cw |= r | 0x3f;
-
- if (__glibc_unlikely (old_cw != cw))
- {
- _FPU_SETCW (cw);
- ctx->updated_status = true;
- }
- else
- ctx->updated_status = false;
-}
-
-static __always_inline void
-libc_feholdexcept_setround_387_ctx (struct rm_ctx *ctx, int r)
-{
- libc_feholdexcept_setround_387_prec_ctx (ctx, r | _FPU_EXTENDED);
-}
-
-static __always_inline void
-libc_feholdexcept_setround_387_53bit_ctx (struct rm_ctx *ctx, int r)
-{
- libc_feholdexcept_setround_387_prec_ctx (ctx, r | _FPU_DOUBLE);
-}
-
-static __always_inline void
-libc_feholdsetround_387_prec_ctx (struct rm_ctx *ctx, int r)
-{
- fpu_control_t cw, new_cw;
-
- _FPU_GETCW (cw);
- new_cw = cw;
- new_cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED);
- new_cw |= r;
-
- ctx->env.__control_word = cw;
- if (__glibc_unlikely (new_cw != cw))
- {
- _FPU_SETCW (new_cw);
- ctx->updated_status = true;
- }
- else
- ctx->updated_status = false;
-}
-
-static __always_inline void
-libc_feholdsetround_387_ctx (struct rm_ctx *ctx, int r)
-{
- libc_feholdsetround_387_prec_ctx (ctx, r | _FPU_EXTENDED);
-}
-
-static __always_inline void
-libc_feholdsetround_387_53bit_ctx (struct rm_ctx *ctx, int r)
-{
- libc_feholdsetround_387_prec_ctx (ctx, r | _FPU_DOUBLE);
-}
-
-static __always_inline void
-libc_feholdsetround_sse_ctx (struct rm_ctx *ctx, int r)
-{
- unsigned int mxcsr, new_mxcsr;
-
- asm (STMXCSR " %0" : "=m" (*&mxcsr));
- new_mxcsr = (mxcsr & ~0x6000) | (r << 3);
-
- ctx->env.__mxcsr = mxcsr;
- if (__glibc_unlikely (new_mxcsr != mxcsr))
- {
- asm volatile (LDMXCSR " %0" : : "m" (*&new_mxcsr));
- ctx->updated_status = true;
- }
- else
- ctx->updated_status = false;
-}
-
-static __always_inline void
-libc_feresetround_sse_ctx (struct rm_ctx *ctx)
-{
- if (__glibc_unlikely (ctx->updated_status))
- libc_feresetround_sse (&ctx->env);
-}
-
-static __always_inline void
-libc_feresetround_387_ctx (struct rm_ctx *ctx)
-{
- if (__glibc_unlikely (ctx->updated_status))
- _FPU_SETCW (ctx->env.__control_word);
-}
-
-static __always_inline void
-libc_feupdateenv_387_ctx (struct rm_ctx *ctx)
-{
- if (__glibc_unlikely (ctx->updated_status))
- libc_feupdateenv_test_387 (&ctx->env, 0);
-}
-
-#ifdef __SSE_MATH__
-# define libc_feholdexcept_setroundf_ctx libc_feholdexcept_setround_sse_ctx
-# define libc_fesetenvf_ctx libc_fesetenv_sse_ctx
-# define libc_feupdateenvf_ctx libc_feupdateenv_sse_ctx
-# define libc_feholdsetroundf_ctx libc_feholdsetround_sse_ctx
-# define libc_feresetroundf_ctx libc_feresetround_sse_ctx
-#else
-# define libc_feholdexcept_setroundf_ctx libc_feholdexcept_setround_387_ctx
-# define libc_feupdateenvf_ctx libc_feupdateenv_387_ctx
-# define libc_feholdsetroundf_ctx libc_feholdsetround_387_ctx
-# define libc_feresetroundf_ctx libc_feresetround_387_ctx
-#endif /* __SSE_MATH__ */
-
-#ifdef __SSE2_MATH__
-# define libc_feholdexcept_setround_ctx libc_feholdexcept_setround_sse_ctx
-# define libc_fesetenv_ctx libc_fesetenv_sse_ctx
-# define libc_feupdateenv_ctx libc_feupdateenv_sse_ctx
-# define libc_feholdsetround_ctx libc_feholdsetround_sse_ctx
-# define libc_feresetround_ctx libc_feresetround_sse_ctx
-#else
-# define libc_feholdexcept_setround_ctx libc_feholdexcept_setround_387_ctx
-# define libc_feupdateenv_ctx libc_feupdateenv_387_ctx
-# define libc_feholdsetround_ctx libc_feholdsetround_387_ctx
-# define libc_feresetround_ctx libc_feresetround_387_ctx
-#endif /* __SSE2_MATH__ */
-
-#define libc_feholdexcept_setroundl_ctx libc_feholdexcept_setround_387_ctx
-#define libc_feupdateenvl_ctx libc_feupdateenv_387_ctx
-#define libc_feholdsetroundl_ctx libc_feholdsetround_387_ctx
-#define libc_feresetroundl_ctx libc_feresetround_387_ctx
-
-#ifndef __SSE2_MATH__
-# define libc_feholdsetround_53bit_ctx libc_feholdsetround_387_53bit_ctx
-# define libc_feresetround_53bit_ctx libc_feresetround_387_ctx
-#endif
-
-#undef __mxcsr
-
-#endif /* FENV_PRIVATE_H */
diff --git a/sysdeps/i386/fpu/fesetenv.c b/sysdeps/i386/fpu/fesetenv.c
deleted file mode 100644
index a338e5d555..0000000000
--- a/sysdeps/i386/fpu/fesetenv.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* Install given floating-point environment.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-#include <assert.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-
-/* All exceptions, including the x86-specific "denormal operand"
- exception. */
-#define FE_ALL_EXCEPT_X86 (FE_ALL_EXCEPT | __FE_DENORM)
-
-
-int
-__fesetenv (const fenv_t *envp)
-{
- fenv_t temp;
-
- /* The memory block used by fstenv/fldenv has a size of 28 bytes. */
- assert (sizeof (fenv_t) == 28);
-
- /* Install the environment specified by ENVP. But there are a few
- values which we do not want to come from the saved environment.
- Therefore, we get the current environment and replace the values
- we want to use from the environment specified by the parameter. */
- __asm__ ("fnstenv %0" : "=m" (*&temp));
-
- if (envp == FE_DFL_ENV)
- {
- temp.__control_word |= FE_ALL_EXCEPT_X86;
- temp.__control_word &= ~FE_TOWARDZERO;
- temp.__control_word |= _FPU_EXTENDED;
- temp.__status_word &= ~FE_ALL_EXCEPT_X86;
- }
- else if (envp == FE_NOMASK_ENV)
- {
- temp.__control_word &= ~(FE_ALL_EXCEPT | FE_TOWARDZERO);
- /* Keep the "denormal operand" exception masked. */
- temp.__control_word |= __FE_DENORM;
- temp.__control_word |= _FPU_EXTENDED;
- temp.__status_word &= ~FE_ALL_EXCEPT_X86;
- }
- else
- {
- temp.__control_word &= ~(FE_ALL_EXCEPT_X86
- | FE_TOWARDZERO
- | _FPU_EXTENDED);
- temp.__control_word |= (envp->__control_word
- & (FE_ALL_EXCEPT_X86
- | FE_TOWARDZERO
- | _FPU_EXTENDED));
- temp.__status_word &= ~FE_ALL_EXCEPT_X86;
- temp.__status_word |= envp->__status_word & FE_ALL_EXCEPT_X86;
- }
- temp.__eip = 0;
- temp.__cs_selector = 0;
- temp.__opcode = 0;
- temp.__data_offset = 0;
- temp.__data_selector = 0;
-
- __asm__ ("fldenv %0" : : "m" (temp));
-
- if (HAS_CPU_FEATURE (SSE))
- {
- unsigned int mxcsr;
- __asm__ ("stmxcsr %0" : "=m" (mxcsr));
-
- if (envp == FE_DFL_ENV)
- {
- /* Clear SSE exceptions. */
- mxcsr &= ~FE_ALL_EXCEPT_X86;
- /* Set mask for SSE MXCSR. */
- mxcsr |= (FE_ALL_EXCEPT_X86 << 7);
- /* Set rounding to FE_TONEAREST. */
- mxcsr &= ~0x6000;
- mxcsr |= (FE_TONEAREST << 3);
- /* Clear the FZ and DAZ bits. */
- mxcsr &= ~0x8040;
- }
- else if (envp == FE_NOMASK_ENV)
- {
- /* Clear SSE exceptions. */
- mxcsr &= ~FE_ALL_EXCEPT_X86;
- /* Do not mask exceptions. */
- mxcsr &= ~(FE_ALL_EXCEPT << 7);
- /* Keep the "denormal operand" exception masked. */
- mxcsr |= (__FE_DENORM << 7);
- /* Set rounding to FE_TONEAREST. */
- mxcsr &= ~0x6000;
- mxcsr |= (FE_TONEAREST << 3);
- /* Clear the FZ and DAZ bits. */
- mxcsr &= ~0x8040;
- }
- else
- mxcsr = envp->__eip;
-
- __asm__ ("ldmxcsr %0" : : "m" (mxcsr));
- }
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__fesetenv, __old_fesetenv)
-compat_symbol (libm, __old_fesetenv, fesetenv, GLIBC_2_1);
-#endif
-
-libm_hidden_def (__fesetenv)
-libm_hidden_ver (__fesetenv, fesetenv)
-versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2);
diff --git a/sysdeps/i386/fpu/fesetexcept.c b/sysdeps/i386/fpu/fesetexcept.c
deleted file mode 100644
index adfcf17ba6..0000000000
--- a/sysdeps/i386/fpu/fesetexcept.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Set given exception flags. i386 version.
- Copyright (C) 2016-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-
-int
-fesetexcept (int excepts)
-{
- fenv_t temp;
-
- __asm__ ("fnstenv %0" : "=m" (*&temp));
- temp.__status_word |= excepts & FE_ALL_EXCEPT;
- __asm__ ("fldenv %0" : : "m" (*&temp));
-
- return 0;
-}
diff --git a/sysdeps/i386/fpu/fesetmode.c b/sysdeps/i386/fpu/fesetmode.c
deleted file mode 100644
index bd9f74cd97..0000000000
--- a/sysdeps/i386/fpu/fesetmode.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Install given floating-point control modes. i386 version.
- Copyright (C) 2016-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-/* All exceptions, including the x86-specific "denormal operand"
- exception. */
-#define FE_ALL_EXCEPT_X86 (FE_ALL_EXCEPT | __FE_DENORM)
-
-int
-fesetmode (const femode_t *modep)
-{
- fpu_control_t cw;
- if (modep == FE_DFL_MODE)
- cw = _FPU_DEFAULT;
- else
- cw = modep->__control_word;
- _FPU_SETCW (cw);
- if (HAS_CPU_FEATURE (SSE))
- {
- unsigned int mxcsr;
- __asm__ ("stmxcsr %0" : "=m" (mxcsr));
- /* Preserve SSE exception flags but restore other state in
- MXCSR. */
- mxcsr &= FE_ALL_EXCEPT_X86;
- if (modep == FE_DFL_MODE)
- /* Default MXCSR state has all bits zero except for those
- masking exceptions. */
- mxcsr |= FE_ALL_EXCEPT_X86 << 7;
- else
- mxcsr |= modep->__mxcsr & ~FE_ALL_EXCEPT_X86;
- __asm__ ("ldmxcsr %0" : : "m" (mxcsr));
- }
- return 0;
-}
diff --git a/sysdeps/i386/fpu/fesetround.c b/sysdeps/i386/fpu/fesetround.c
deleted file mode 100644
index a3fa6235c0..0000000000
--- a/sysdeps/i386/fpu/fesetround.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Set current rounding direction.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-int
-__fesetround (int round)
-{
- unsigned short int cw;
-
- if ((round & ~0xc00) != 0)
- /* ROUND is no valid rounding mode. */
- return 1;
-
- __asm__ ("fnstcw %0" : "=m" (*&cw));
- cw &= ~0xc00;
- cw |= round;
- __asm__ ("fldcw %0" : : "m" (*&cw));
-
- /* If the CPU supports SSE we set the MXCSR as well. */
- if (HAS_CPU_FEATURE (SSE))
- {
- unsigned int xcw;
-
- __asm__ ("stmxcsr %0" : "=m" (*&xcw));
- xcw &= ~0x6000;
- xcw |= round << 3;
- __asm__ ("ldmxcsr %0" : : "m" (*&xcw));
- }
-
- return 0;
-}
-libm_hidden_def (__fesetround)
-weak_alias (__fesetround, fesetround)
-libm_hidden_weak (fesetround)
diff --git a/sysdeps/i386/fpu/feupdateenv.c b/sysdeps/i386/fpu/feupdateenv.c
deleted file mode 100644
index b610289cd0..0000000000
--- a/sysdeps/i386/fpu/feupdateenv.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Install given floating-point environment and raise exceptions.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <unistd.h>
-#include <dl-procinfo.h>
-#include <ldsodefs.h>
-
-int
-__feupdateenv (const fenv_t *envp)
-{
- fexcept_t temp;
- unsigned int xtemp = 0;
-
- /* Save current exceptions. */
- __asm__ ("fnstsw %0" : "=m" (*&temp));
-
- /* If the CPU supports SSE we test the MXCSR as well. */
- if (HAS_CPU_FEATURE (SSE))
- __asm__ ("stmxcsr %0" : "=m" (*&xtemp));
-
- temp = (temp | xtemp) & FE_ALL_EXCEPT;
-
- /* Install new environment. */
- __fesetenv (envp);
-
- /* Raise the saved exception. Incidently for us the implementation
- defined format of the values in objects of type fexcept_t is the
- same as the ones specified using the FE_* constants. */
- __feraiseexcept ((int) temp);
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__feupdateenv, __old_feupdateenv)
-compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
-#endif
-
-libm_hidden_def (__feupdateenv)
-libm_hidden_ver (__feupdateenv, feupdateenv)
-versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
diff --git a/sysdeps/i386/fpu/fgetexcptflg.c b/sysdeps/i386/fpu/fgetexcptflg.c
deleted file mode 100644
index 954e5f69d8..0000000000
--- a/sysdeps/i386/fpu/fgetexcptflg.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Store current representation for exceptions.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-
-int
-__fegetexceptflag (fexcept_t *flagp, int excepts)
-{
- fexcept_t temp;
-
- /* Get the current exceptions. */
- __asm__ ("fnstsw %0" : "=m" (*&temp));
-
- *flagp = temp & excepts & FE_ALL_EXCEPT;
-
- /* If the CPU supports SSE, we clear the MXCSR as well. */
- if (HAS_CPU_FEATURE (SSE))
- {
- unsigned int sse_exc;
-
- /* Get the current MXCSR. */
- __asm__ ("stmxcsr %0" : "=m" (*&sse_exc));
-
- *flagp |= sse_exc & excepts & FE_ALL_EXCEPT;
- }
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__fegetexceptflag, __old_fegetexceptflag)
-compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1);
-#endif
-
-versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2);
diff --git a/sysdeps/i386/fpu/fraiseexcpt.c b/sysdeps/i386/fpu/fraiseexcpt.c
deleted file mode 100644
index 913d7b912c..0000000000
--- a/sysdeps/i386/fpu/fraiseexcpt.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Raise given exceptions.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <math.h>
-
-int
-__feraiseexcept (int excepts)
-{
- /* Raise exceptions represented by EXPECTS. But we must raise only
- one signal at a time. It is important that if the overflow/underflow
- exception and the inexact exception are given at the same time,
- the overflow/underflow exception follows the inexact exception. */
-
- /* First: invalid exception. */
- if ((FE_INVALID & excepts) != 0)
- {
- /* One example of an invalid operation is 0.0 / 0.0. */
- double d;
- __asm__ __volatile__ ("fldz; fdiv %%st, %%st(0); fwait" : "=t" (d));
- (void) &d;
- }
-
- /* Next: division by zero. */
- if ((FE_DIVBYZERO & excepts) != 0)
- {
- double d;
- __asm__ __volatile__ ("fldz; fld1; fdivp %%st, %%st(1); fwait"
- : "=t" (d));
- (void) &d;
- }
-
- /* Next: overflow. */
- if ((FE_OVERFLOW & excepts) != 0)
- {
- /* There is no way to raise only the overflow flag. Do it the
- hard way. */
- fenv_t temp;
-
- /* Bah, we have to clear selected exceptions. Since there is no
- `fldsw' instruction we have to do it the hard way. */
- __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
-
- /* Set the relevant bits. */
- temp.__status_word |= FE_OVERFLOW;
-
- /* Put the new data in effect. */
- __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
-
- /* And raise the exception. */
- __asm__ __volatile__ ("fwait");
- }
-
- /* Next: underflow. */
- if ((FE_UNDERFLOW & excepts) != 0)
- {
- /* There is no way to raise only the underflow flag. Do it the
- hard way. */
- fenv_t temp;
-
- /* Bah, we have to clear selected exceptions. Since there is no
- `fldsw' instruction we have to do it the hard way. */
- __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
-
- /* Set the relevant bits. */
- temp.__status_word |= FE_UNDERFLOW;
-
- /* Put the new data in effect. */
- __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
-
- /* And raise the exception. */
- __asm__ __volatile__ ("fwait");
- }
-
- /* Last: inexact. */
- if ((FE_INEXACT & excepts) != 0)
- {
- /* There is no way to raise only the inexact flag. Do it the
- hard way. */
- fenv_t temp;
-
- /* Bah, we have to clear selected exceptions. Since there is no
- `fldsw' instruction we have to do it the hard way. */
- __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp));
-
- /* Set the relevant bits. */
- temp.__status_word |= FE_INEXACT;
-
- /* Put the new data in effect. */
- __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp));
-
- /* And raise the exception. */
- __asm__ __volatile__ ("fwait");
- }
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__feraiseexcept, __old_feraiseexcept)
-compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1);
-#endif
-
-libm_hidden_def (__feraiseexcept)
-libm_hidden_ver (__feraiseexcept, feraiseexcept)
-versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2);
diff --git a/sysdeps/i386/fpu/fsetexcptflg.c b/sysdeps/i386/fpu/fsetexcptflg.c
deleted file mode 100644
index efa64aaefd..0000000000
--- a/sysdeps/i386/fpu/fsetexcptflg.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Set floating-point environment exception handling.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <math.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-int
-__fesetexceptflag (const fexcept_t *flagp, int excepts)
-{
- fenv_t temp;
-
- /* Get the current environment. We have to do this since we cannot
- separately set the status word. */
- __asm__ ("fnstenv %0" : "=m" (*&temp));
-
- temp.__status_word &= ~(excepts & FE_ALL_EXCEPT);
- temp.__status_word |= *flagp & excepts & FE_ALL_EXCEPT;
-
- /* Store the new status word (along with the rest of the environment.
- Possibly new exceptions are set but they won't get executed unless
- the next floating-point instruction. */
- __asm__ ("fldenv %0" : : "m" (*&temp));
-
- /* If the CPU supports SSE, we set the MXCSR as well. */
- if (HAS_CPU_FEATURE (SSE))
- {
- unsigned int xnew_exc;
-
- /* Get the current MXCSR. */
- __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc));
-
- /* Set the relevant bits. */
- xnew_exc &= ~(excepts & FE_ALL_EXCEPT);
- xnew_exc |= *flagp & excepts & FE_ALL_EXCEPT;
-
- /* Put the new data in effect. */
- __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc));
- }
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__fesetexceptflag, __old_fesetexceptflag)
-compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1);
-#endif
-
-versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2);
diff --git a/sysdeps/i386/fpu/ftestexcept.c b/sysdeps/i386/fpu/ftestexcept.c
deleted file mode 100644
index f523f9e709..0000000000
--- a/sysdeps/i386/fpu/ftestexcept.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Test exception in current environment.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <unistd.h>
-#include <dl-procinfo.h>
-#include <ldsodefs.h>
-
-int
-fetestexcept (int excepts)
-{
- short temp;
- int xtemp = 0;
-
- /* Get current exceptions. */
- __asm__ ("fnstsw %0" : "=a" (temp));
-
- /* If the CPU supports SSE we test the MXCSR as well. */
- if (HAS_CPU_FEATURE (SSE))
- __asm__ ("stmxcsr %0" : "=m" (*&xtemp));
-
- return (temp | xtemp) & excepts & FE_ALL_EXCEPT;
-}
-libm_hidden_def (fetestexcept)
diff --git a/sysdeps/i386/fpu/halfulp.c b/sysdeps/i386/fpu/halfulp.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/halfulp.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/i386-math-asm.h b/sysdeps/i386/fpu/i386-math-asm.h
deleted file mode 100644
index 6ffc8e6f64..0000000000
--- a/sysdeps/i386/fpu/i386-math-asm.h
+++ /dev/null
@@ -1,340 +0,0 @@
-/* Helper macros for x86 libm functions.
- Copyright (C) 2015-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _I386_MATH_ASM_H
-#define _I386_MATH_ASM_H 1
-
-/* Remove excess range and precision by storing a value on the stack
- and loading it back. */
-#define FLT_NARROW_EVAL \
- subl $4, %esp; \
- cfi_adjust_cfa_offset (4); \
- fstps (%esp); \
- flds (%esp); \
- addl $4, %esp; \
- cfi_adjust_cfa_offset (-4);
-#define DBL_NARROW_EVAL \
- subl $8, %esp; \
- cfi_adjust_cfa_offset (8); \
- fstpl (%esp); \
- fldl (%esp); \
- addl $8, %esp; \
- cfi_adjust_cfa_offset (-8);
-
-/* Define constants for the minimum value of a floating-point
- type. */
-#define DEFINE_FLT_MIN \
- .section .rodata.cst4,"aM",@progbits,4; \
- .p2align 2; \
- .type flt_min,@object; \
-flt_min: \
- .byte 0, 0, 0x80, 0; \
- .size flt_min, .-flt_min;
-#define DEFINE_DBL_MIN \
- .section .rodata.cst8,"aM",@progbits,8; \
- .p2align 3; \
- .type dbl_min,@object; \
-dbl_min: \
- .byte 0, 0, 0, 0, 0, 0, 0x10, 0; \
- .size dbl_min, .-dbl_min;
-#define DEFINE_LDBL_MIN \
- .section .rodata.cst16,"aM",@progbits,16; \
- .p2align 4; \
- .type ldbl_min,@object; \
-ldbl_min: \
- .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x1, 0; \
- .byte 0, 0, 0, 0, 0, 0; \
- .size ldbl_min, .-ldbl_min;
-
-/* Remove excess range and precision by storing a value on the stack
- and loading it back. The value is given to be nonnegative or NaN;
- if it is subnormal, also force an underflow exception. The
- relevant constant for the minimum of the type must have been
- defined, the MO macro must have been defined for access to memory
- operands, and, if PIC, the PIC register must have been loaded. */
-#define FLT_NARROW_EVAL_UFLOW_NONNEG_NAN \
- subl $4, %esp; \
- cfi_adjust_cfa_offset (4); \
- flds MO(flt_min); \
- fld %st(1); \
- fucompp; \
- fnstsw; \
- sahf; \
- jnc 6424f; \
- fld %st(0); \
- fmul %st(0); \
- fstps (%esp); \
-6424: fstps (%esp); \
- flds (%esp); \
- addl $4, %esp; \
- cfi_adjust_cfa_offset (-4);
-#define DBL_NARROW_EVAL_UFLOW_NONNEG_NAN \
- subl $8, %esp; \
- cfi_adjust_cfa_offset (8); \
- fldl MO(dbl_min); \
- fld %st(1); \
- fucompp; \
- fnstsw; \
- sahf; \
- jnc 6453f; \
- fld %st(0); \
- fmul %st(0); \
- fstpl (%esp); \
-6453: fstpl (%esp); \
- fldl (%esp); \
- addl $8, %esp; \
- cfi_adjust_cfa_offset (-8);
-
-/* Likewise, but the argument is not a NaN (so fcom instructions,
- which support memory operands, can be used). */
-#define FLT_NARROW_EVAL_UFLOW_NONNEG \
- subl $4, %esp; \
- cfi_adjust_cfa_offset (4); \
- fcoms MO(flt_min); \
- fnstsw; \
- sahf; \
- jnc 6424f; \
- fld %st(0); \
- fmul %st(0); \
- fstps (%esp); \
-6424: fstps (%esp); \
- flds (%esp); \
- addl $4, %esp; \
- cfi_adjust_cfa_offset (-4);
-#define DBL_NARROW_EVAL_UFLOW_NONNEG \
- subl $8, %esp; \
- cfi_adjust_cfa_offset (8); \
- fcoml MO(dbl_min); \
- fnstsw; \
- sahf; \
- jnc 6453f; \
- fld %st(0); \
- fmul %st(0); \
- fstpl (%esp); \
-6453: fstpl (%esp); \
- fldl (%esp); \
- addl $8, %esp; \
- cfi_adjust_cfa_offset (-8);
-
-/* Likewise, but the non-NaN argument may be negative. */
-#define FLT_NARROW_EVAL_UFLOW_NONNAN \
- subl $4, %esp; \
- cfi_adjust_cfa_offset (4); \
- fld %st(0); \
- fabs; \
- fcomps MO(flt_min); \
- fnstsw; \
- sahf; \
- jnc 6424f; \
- fld %st(0); \
- fmul %st(0); \
- fstps (%esp); \
-6424: fstps (%esp); \
- flds (%esp); \
- addl $4, %esp; \
- cfi_adjust_cfa_offset (-4);
-#define DBL_NARROW_EVAL_UFLOW_NONNAN \
- subl $8, %esp; \
- cfi_adjust_cfa_offset (8); \
- fld %st(0); \
- fabs; \
- fcompl MO(dbl_min); \
- fnstsw; \
- sahf; \
- jnc 6453f; \
- fld %st(0); \
- fmul %st(0); \
- fstpl (%esp); \
-6453: fstpl (%esp); \
- fldl (%esp); \
- addl $8, %esp; \
- cfi_adjust_cfa_offset (-8);
-
-/* Force an underflow exception if the given value is subnormal. The
- relevant constant for the minimum of the type must have been
- defined, the MO macro must have been defined for access to memory
- operands, and, if PIC, the PIC register must have been loaded. */
-#define FLT_CHECK_FORCE_UFLOW \
- flds MO(flt_min); \
- fld %st(1); \
- fabs; \
- fucompp; \
- fnstsw; \
- sahf; \
- jnc 6424f; \
- subl $4, %esp; \
- cfi_adjust_cfa_offset (4); \
- fld %st(0); \
- fmul %st(0); \
- fstps (%esp); \
- addl $4, %esp; \
- cfi_adjust_cfa_offset (-4); \
-6424:
-#define DBL_CHECK_FORCE_UFLOW \
- fldl MO(dbl_min); \
- fld %st(1); \
- fabs; \
- fucompp; \
- fnstsw; \
- sahf; \
- jnc 6453f; \
- subl $8, %esp; \
- cfi_adjust_cfa_offset (8); \
- fld %st(0); \
- fmul %st(0); \
- fstpl (%esp); \
- addl $8, %esp; \
- cfi_adjust_cfa_offset (-8); \
-6453:
-
-/* Likewise, but also remove excess range and precision if the value
- is subnormal. */
-#define FLT_CHECK_FORCE_UFLOW_NARROW \
- flds MO(flt_min); \
- fld %st(1); \
- fabs; \
- fucompp; \
- fnstsw; \
- sahf; \
- jnc 6424f; \
- subl $4, %esp; \
- cfi_adjust_cfa_offset (4); \
- fld %st(0); \
- fmul %st(0); \
- fstps (%esp); \
- fstps (%esp); \
- flds (%esp); \
- addl $4, %esp; \
- cfi_adjust_cfa_offset (-4); \
-6424:
-#define DBL_CHECK_FORCE_UFLOW_NARROW \
- fldl MO(dbl_min); \
- fld %st(1); \
- fabs; \
- fucompp; \
- fnstsw; \
- sahf; \
- jnc 6453f; \
- subl $8, %esp; \
- cfi_adjust_cfa_offset (8); \
- fld %st(0); \
- fmul %st(0); \
- fstpl (%esp); \
- fstpl (%esp); \
- fldl (%esp); \
- addl $8, %esp; \
- cfi_adjust_cfa_offset (-8); \
-6453:
-
-/* Likewise, but the argument is nonnegative or NaN. */
-#define LDBL_CHECK_FORCE_UFLOW_NONNEG_NAN \
- fldt MO(ldbl_min); \
- fld %st(1); \
- fucompp; \
- fnstsw; \
- sahf; \
- jnc 6464f; \
- fld %st(0); \
- fmul %st(0); \
- fstp %st(0); \
-6464:
-
-/* Likewise, but the argument is not a NaN. */
-#define FLT_CHECK_FORCE_UFLOW_NONNAN \
- fld %st(0); \
- fabs; \
- fcomps MO(flt_min); \
- fnstsw; \
- sahf; \
- jnc 6424f; \
- subl $4, %esp; \
- cfi_adjust_cfa_offset (4); \
- fld %st(0); \
- fmul %st(0); \
- fstps (%esp); \
- addl $4, %esp; \
- cfi_adjust_cfa_offset (-4); \
-6424:
-#define DBL_CHECK_FORCE_UFLOW_NONNAN \
- fld %st(0); \
- fabs; \
- fcompl MO(dbl_min); \
- fnstsw; \
- sahf; \
- jnc 6453f; \
- subl $8, %esp; \
- cfi_adjust_cfa_offset (8); \
- fld %st(0); \
- fmul %st(0); \
- fstpl (%esp); \
- addl $8, %esp; \
- cfi_adjust_cfa_offset (-8); \
-6453:
-#define LDBL_CHECK_FORCE_UFLOW_NONNAN \
- fldt MO(ldbl_min); \
- fld %st(1); \
- fabs; \
- fcompp; \
- fnstsw; \
- sahf; \
- jnc 6464f; \
- fld %st(0); \
- fmul %st(0); \
- fstp %st(0); \
-6464:
-
-/* Likewise, but the argument is nonnegative and not a NaN. */
-#define FLT_CHECK_FORCE_UFLOW_NONNEG \
- fcoms MO(flt_min); \
- fnstsw; \
- sahf; \
- jnc 6424f; \
- subl $4, %esp; \
- cfi_adjust_cfa_offset (4); \
- fld %st(0); \
- fmul %st(0); \
- fstps (%esp); \
- addl $4, %esp; \
- cfi_adjust_cfa_offset (-4); \
-6424:
-#define DBL_CHECK_FORCE_UFLOW_NONNEG \
- fcoml MO(dbl_min); \
- fnstsw; \
- sahf; \
- jnc 6453f; \
- subl $8, %esp; \
- cfi_adjust_cfa_offset (8); \
- fld %st(0); \
- fmul %st(0); \
- fstpl (%esp); \
- addl $8, %esp; \
- cfi_adjust_cfa_offset (-8); \
-6453:
-#define LDBL_CHECK_FORCE_UFLOW_NONNEG \
- fldt MO(ldbl_min); \
- fld %st(1); \
- fcompp; \
- fnstsw; \
- sahf; \
- jnc 6464f; \
- fld %st(0); \
- fmul %st(0); \
- fstp %st(0); \
-6464:
-
-#endif /* i386-math-asm.h. */
diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps
deleted file mode 100644
index 0fc50907ad..0000000000
--- a/sysdeps/i386/fpu/libm-test-ulps
+++ /dev/null
@@ -1,2202 +0,0 @@
-# Begin of automatic generation
-
-# Maximal error of functions:
-Function: "acos":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "acos_downward":
-ildouble: 2
-ldouble: 2
-
-Function: "acos_towardzero":
-ildouble: 2
-ldouble: 2
-
-Function: "acos_upward":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "acosh":
-double: 1
-idouble: 1
-ildouble: 4
-ldouble: 2
-
-Function: "acosh_downward":
-double: 1
-idouble: 1
-ildouble: 6
-ldouble: 4
-
-Function: "acosh_towardzero":
-double: 1
-idouble: 1
-ildouble: 6
-ldouble: 4
-
-Function: "acosh_upward":
-double: 1
-idouble: 1
-ildouble: 4
-ldouble: 3
-
-Function: "asin":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "asin_downward":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "asin_towardzero":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "asin_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "asinh":
-double: 1
-idouble: 1
-ildouble: 3
-ldouble: 3
-
-Function: "asinh_downward":
-double: 1
-float: 1
-idouble: 1
-ildouble: 5
-ldouble: 5
-
-Function: "asinh_towardzero":
-double: 1
-float: 1
-idouble: 1
-ildouble: 4
-ldouble: 4
-
-Function: "asinh_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 5
-ldouble: 5
-
-Function: "atan":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "atan2":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "atan2_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "atan2_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "atan2_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "atan_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "atan_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "atan_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "atanh":
-double: 1
-idouble: 1
-ildouble: 3
-ldouble: 3
-
-Function: "atanh_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 4
-
-Function: "atanh_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 5
-ldouble: 3
-
-Function: "atanh_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 5
-ldouble: 5
-
-Function: "cabs":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cabs_downward":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cabs_towardzero":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cabs_upward":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "cacos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "cacos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "cacos_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "cacos_downward":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "cacos_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "cacos_towardzero":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: Real part of "cacos_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "cacos_upward":
-double: 7
-float: 7
-idouble: 7
-ifloat: 7
-ildouble: 7
-ldouble: 7
-
-Function: Real part of "cacosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "cacosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "cacosh_downward":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "cacosh_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "cacosh_towardzero":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "cacosh_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "cacosh_upward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "cacosh_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: "carg":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "carg_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "carg_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "carg_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "casin":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "casin":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "casin_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "casin_downward":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "casin_towardzero":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "casin_towardzero":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: Real part of "casin_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "casin_upward":
-double: 7
-float: 7
-idouble: 7
-ifloat: 7
-ildouble: 7
-ldouble: 7
-
-Function: Real part of "casinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "casinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "casinh_downward":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "casinh_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "casinh_towardzero":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "casinh_towardzero":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "casinh_upward":
-double: 7
-float: 7
-idouble: 7
-ifloat: 7
-ildouble: 7
-ldouble: 7
-
-Function: Imaginary part of "casinh_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "catan":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "catan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "catan_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "catan_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "catan_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "catan_towardzero":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "catan_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "catan_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "catanh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "catanh":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "catanh_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "catanh_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "catanh_towardzero":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "catanh_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "catanh_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "catanh_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cbrt":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "cbrt_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: "cbrt_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "cbrt_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "ccos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ccos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "ccos_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "ccos_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "ccos_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "ccos_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "ccos_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "ccos_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "ccosh_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "ccosh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "ccosh_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "ccosh_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "ccosh_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "ccosh_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "cexp":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "cexp":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "cexp_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "cexp_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "cexp_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "cexp_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "cexp_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "cexp_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "clog":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "clog":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "clog10":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "clog10":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "clog10_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Imaginary part of "clog10_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "clog10_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Imaginary part of "clog10_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "clog10_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 7
-ldouble: 7
-
-Function: Imaginary part of "clog10_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "clog_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "clog_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "clog_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "clog_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "clog_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "clog_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cos":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cos_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "cos_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "cos_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "cosh":
-double: 1
-float: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "cosh_downward":
-double: 2
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 3
-
-Function: "cosh_towardzero":
-double: 2
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "cosh_upward":
-double: 4
-float: 2
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 3
-
-Function: Real part of "cpow":
-double: 2
-float: 5
-idouble: 2
-ifloat: 5
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "cpow":
-float: 2
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "cpow_downward":
-double: 5
-float: 8
-idouble: 5
-ifloat: 8
-ildouble: 7
-ldouble: 7
-
-Function: Imaginary part of "cpow_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "cpow_towardzero":
-double: 5
-float: 8
-idouble: 5
-ifloat: 8
-ildouble: 7
-ldouble: 7
-
-Function: Imaginary part of "cpow_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "cpow_upward":
-double: 4
-float: 1
-idouble: 4
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "cpow_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "csin":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "csin":
-float: 1
-ifloat: 1
-
-Function: Real part of "csin_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "csin_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "csin_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "csin_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "csin_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "csin_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "csinh":
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "csinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "csinh_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "csinh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "csinh_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "csinh_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "csinh_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "csinh_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "csqrt":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "csqrt":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "csqrt_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "csqrt_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "csqrt_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "csqrt_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "csqrt_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "csqrt_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "ctan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "ctan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "ctan_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "ctan_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "ctan_towardzero":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "ctan_towardzero":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "ctan_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "ctan_upward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "ctanh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ctanh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "ctanh_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "ctanh_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "ctanh_towardzero":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "ctanh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "ctanh_upward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "ctanh_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: "erf":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "erf_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "erf_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "erf_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "erfc":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "erfc_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: "erfc_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "erfc_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: "exp":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "exp10":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "exp10_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "exp10_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "exp10_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "exp2":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "exp2_downward":
-ildouble: 1
-ldouble: 1
-
-Function: "exp2_towardzero":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "exp2_upward":
-ildouble: 1
-ldouble: 1
-
-Function: "exp_downward":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "exp_towardzero":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "exp_upward":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "expm1":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "expm1_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: "expm1_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: "expm1_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: "gamma":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "gamma_downward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-ildouble: 7
-ldouble: 7
-
-Function: "gamma_towardzero":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: "gamma_upward":
-double: 3
-float: 4
-idouble: 3
-ifloat: 4
-ildouble: 5
-ldouble: 5
-
-Function: "hypot":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "hypot_downward":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "hypot_towardzero":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "hypot_upward":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "j0":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "j0_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "j0_towardzero":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 5
-ldouble: 5
-
-Function: "j0_upward":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: "j1":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "j1_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "j1_towardzero":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: "j1_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: "jn":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: "jn_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: "jn_towardzero":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: "jn_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: "lgamma":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "lgamma_downward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-ildouble: 7
-ldouble: 7
-
-Function: "lgamma_towardzero":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: "lgamma_upward":
-double: 3
-float: 4
-idouble: 3
-ifloat: 4
-ildouble: 5
-ldouble: 5
-
-Function: "log":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log10":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log10_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "log10_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "log10_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log1p":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "log1p_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: "log1p_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: "log1p_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "log2":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log2_downward":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log2_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log2_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log_downward":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "log_towardzero":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "log_upward":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "pow":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "pow10":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "pow10_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "pow10_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "pow10_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "pow_downward":
-double: 1
-idouble: 1
-ildouble: 4
-ldouble: 4
-
-Function: "pow_towardzero":
-double: 1
-idouble: 1
-ildouble: 4
-ldouble: 4
-
-Function: "pow_upward":
-double: 1
-idouble: 1
-ildouble: 4
-ldouble: 4
-
-Function: "sin":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sin_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "sin_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "sin_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "sincos":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sincos_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "sincos_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "sincos_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "sinh":
-double: 1
-ildouble: 2
-ldouble: 2
-
-Function: "sinh_downward":
-double: 2
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 5
-
-Function: "sinh_towardzero":
-double: 2
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 4
-
-Function: "sinh_upward":
-double: 4
-float: 2
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 5
-
-Function: "tan":
-float: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "tan_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: "tan_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: "tan_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "tanh":
-double: 1
-idouble: 1
-ildouble: 3
-ldouble: 3
-
-Function: "tanh_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 7
-ldouble: 4
-
-Function: "tanh_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "tanh_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 5
-ldouble: 4
-
-Function: "tgamma":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: "tgamma_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: "tgamma_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: "tgamma_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: "y0":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "y0_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: "y0_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: "y0_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: "y1":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "y1_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: "y1_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: "y1_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: "yn":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: "yn_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: "yn_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: "yn_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-# end of automatic generation
diff --git a/sysdeps/i386/fpu/libm-test-ulps-name b/sysdeps/i386/fpu/libm-test-ulps-name
deleted file mode 100644
index 54ca0d8295..0000000000
--- a/sysdeps/i386/fpu/libm-test-ulps-name
+++ /dev/null
@@ -1 +0,0 @@
-ix86
diff --git a/sysdeps/i386/fpu/math-tests.h b/sysdeps/i386/fpu/math-tests.h
deleted file mode 100644
index 26d0633dc0..0000000000
--- a/sysdeps/i386/fpu/math-tests.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Configuration for math tests. 32-bit x86 version.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* On 32-bit x86, versions of GCC up to at least 4.8 are happy to use FPU load
- instructions for sNaN values, and loading a float or double sNaN value will
- already raise an INVALID exception as well as turn the sNaN into a qNaN,
- rendering certain tests infeasible in this scenario.
- <http://gcc.gnu.org/PR56831>. */
-#define SNAN_TESTS_float 0
-#define SNAN_TESTS_double 0
-
-#include_next <math-tests.h>
diff --git a/sysdeps/i386/fpu/math_private.h b/sysdeps/i386/fpu/math_private.h
deleted file mode 100644
index 485214391f..0000000000
--- a/sysdeps/i386/fpu/math_private.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef I386_MATH_PRIVATE_H
-#define I386_MATH_PRIVATE_H 1
-
-#include "fenv_private.h"
-#include_next <math_private.h>
-
-#endif
diff --git a/sysdeps/i386/fpu/mpatan.c b/sysdeps/i386/fpu/mpatan.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/mpatan.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/mpatan2.c b/sysdeps/i386/fpu/mpatan2.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/mpatan2.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/mpexp.c b/sysdeps/i386/fpu/mpexp.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/mpexp.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/mplog.c b/sysdeps/i386/fpu/mplog.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/mplog.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/mpsqrt.c b/sysdeps/i386/fpu/mpsqrt.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/mpsqrt.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/s_asinh.S b/sysdeps/i386/fpu/s_asinh.S
deleted file mode 100644
index 1a60f7de2c..0000000000
--- a/sysdeps/i386/fpu/s_asinh.S
+++ /dev/null
@@ -1,139 +0,0 @@
-/* ix87 specific implementation of arcsinh.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type huge,@object
-huge: .double 1e+300
- ASM_SIZE_DIRECTIVE(huge)
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
- .text
-ENTRY(__asinh)
- movl 8(%esp), %ecx
- movl $0x7fffffff, %eax
- andl %ecx, %eax
- andl $0x80000000, %ecx
- movl %eax, %edx
- orl $0x800fffff, %edx
- incl %edx
- jz 7f // x in ħInf or NaN
- xorl %ecx, 8(%esp)
- fldl 4(%esp) // |x|
- cmpl $0x3e300000, %eax
- jb 2f // |x| < 2^-28
- fldln2 // log(2) : |x|
- cmpl $0x41b00000, %eax
- fxch // |x| : log(2)
- ja 3f // |x| > 2^28
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- cmpl $0x40000000, %eax
- ja 5f // |x| > 2
-
- // 2^-28 <= |x| <= 2 => y = sign(x)*log1p(|x|+|x|^2/(1+sqrt(1+|x|^2)))
- fld %st // |x| : |x| : log(2)
- fmul %st(1) // |x|^2 : |x| : log(2)
- fld %st // |x|^2 : |x|^2 : |x| : log(2)
- faddl MO(one) // 1+|x|^2 : |x|^2 : |x| : log(2)
- fsqrt // sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
- faddl MO(one) // 1+sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
- fdivrp // |x|^2/(1+sqrt(1+|x|^2)) : |x| : log(2)
- faddp // |x|+|x|^2/(1+sqrt(1+|x|^2)) : log(2)
- fcoml MO(limit)
- fnstsw
- sahf
- ja 6f
- fyl2xp1
- jecxz 4f
- fchs
-4: ret
-
-7: fldl 4(%esp)
- ret
-
-6: faddl MO(one)
- fyl2x
- jecxz 4f
- fchs
-4: ret
-
- // |x| < 2^-28 => y = x (inexact iff |x| != 0.0)
- .align ALIGNARG(4)
-2:
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- jecxz 4f
- fchs // x
-4: fld %st // x : x
- faddl MO(huge) // huge+x : x
- fstp %st(0) // x
- cmpl $0x00100000, %eax
- jae 8f
- subl $8, %esp
- cfi_adjust_cfa_offset (8)
- fld %st(0)
- fmul %st(0)
- fstpl (%esp)
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
-8: ret
-
- // |x| > 2^28 => y = sign(x) * (log(|x|) + log(2))
- .align ALIGNARG(4)
-3: fyl2x // log(|x|)
- fldln2 // log(2) : log(|x|)
- faddp // log(|x|)+log(2)
- jecxz 4f
- fchs
-4: ret
-
- // |x| > 2 => y = sign(x) * log(2*|x| + 1/(|x|+sqrt(x*x+1)))
- .align ALIGNARG(4)
-5: fld %st // |x| : |x| : log(2)
- fadd %st, %st(1) // |x| : 2*|x| : log(2)
- fld %st // |x| : |x| : 2*|x| : log(2)
- fmul %st(1) // |x|^2 : |x| : 2*|x| : log(2)
- faddl MO(one) // 1+|x|^2 : |x| : 2*|x| : log(2)
- fsqrt // sqrt(1+|x|^2) : |x| : 2*|x| : log(2)
- faddp // |x|+sqrt(1+|x|^2) : 2*|x| : log(2)
- fdivrl MO(one) // 1/(|x|+sqrt(1+|x|^2)) : 2*|x| : log(2)
- faddp // 2*|x|+1/(|x|+sqrt(1+|x|^2)) : log(2)
- fyl2x // log(2*|x|+1/(|x|+sqrt(1+|x|^2)))
- jecxz 4f
- fchs
-4: ret
-END(__asinh)
-weak_alias (__asinh, asinh)
diff --git a/sysdeps/i386/fpu/s_asinhf.S b/sysdeps/i386/fpu/s_asinhf.S
deleted file mode 100644
index 12bcfef934..0000000000
--- a/sysdeps/i386/fpu/s_asinhf.S
+++ /dev/null
@@ -1,139 +0,0 @@
-/* ix87 specific implementation of arcsinh.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type huge,@object
-huge: .double 1e+36
- ASM_SIZE_DIRECTIVE(huge)
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
- .text
-ENTRY(__asinhf)
- movl 4(%esp), %ecx
- movl $0x7fffffff, %eax
- andl %ecx, %eax
- andl $0x80000000, %ecx
- movl %eax, %edx
- orl $0x807fffff, %edx
- incl %edx
- jz 7f // x in ħInf or NaN
- xorl %ecx, 4(%esp)
- flds 4(%esp) // |x|
- cmpl $0x38000000, %eax
- jb 2f // |x| < 2^-14
- fldln2 // log(2) : |x|
- cmpl $0x47000000, %eax
- fxch // |x| : log(2)
- ja 3f // |x| > 2^14
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- cmpl $0x40000000, %eax
- ja 5f // |x| > 2
-
- // 2^-14 <= |x| <= 2 => y = sign(x)*log1p(|x|+|x|^2/(1+sqrt(1+|x|^2)))
- fld %st // |x| : |x| : log(2)
- fmul %st(1) // |x|^2 : |x| : log(2)
- fld %st // |x|^2 : |x|^2 : |x| : log(2)
- faddl MO(one) // 1+|x|^2 : |x|^2 : |x| : log(2)
- fsqrt // sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
- faddl MO(one) // 1+sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
- fdivrp // |x|^2/(1+sqrt(1+|x|^2)) : |x| : log(2)
- faddp // |x|+|x|^2/(1+sqrt(1+|x|^2)) : log(2)
- fcoml MO(limit)
- fnstsw
- sahf
- ja 6f
- fyl2xp1
- jecxz 4f
- fchs
-4: ret
-
-7: flds 4(%esp)
- ret
-
-6: faddl MO(one)
- fyl2x
- jecxz 4f
- fchs
-4: ret
-
- // |x| < 2^-14 => y = x (inexact iff |x| != 0.0)
- .align ALIGNARG(4)
-2:
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- jecxz 4f
- fchs // x
-4: fld %st // x : x
- faddl MO(huge) // huge+x : x
- fstp %st(0) // x
- cmpl $0x00800000, %eax
- jae 8f
- subl $4, %esp
- cfi_adjust_cfa_offset (4)
- fld %st(0)
- fmul %st(0)
- fstps (%esp)
- addl $4, %esp
- cfi_adjust_cfa_offset (-4)
-8: ret
-
- // |x| > 2^14 => y = sign(x) * (log(|x|) + log(2))
- .align ALIGNARG(4)
-3: fyl2x // log(|x|)
- fldln2 // log(2) : log(|x|)
- faddp // log(|x|)+log(2)
- jecxz 4f
- fchs
-4: ret
-
- // |x| > 2 => y = sign(x) * log(2*|x| + 1/(|x|+sqrt(x*x+1)))
- .align ALIGNARG(4)
-5: fld %st // |x| : |x| : log(2)
- fadd %st, %st(1) // |x| : 2*|x| : log(2)
- fld %st // |x| : |x| : 2*|x| : log(2)
- fmul %st(1) // |x|^2 : |x| : 2*|x| : log(2)
- faddl MO(one) // 1+|x|^2 : |x| : 2*|x| : log(2)
- fsqrt // sqrt(1+|x|^2) : |x| : 2*|x| : log(2)
- faddp // |x|+sqrt(1+|x|^2) : 2*|x| : log(2)
- fdivrl MO(one) // 1/(|x|+sqrt(1+|x|^2)) : 2*|x| : log(2)
- faddp // 2*|x|+1/(|x|+sqrt(1+|x|^2)) : log(2)
- fyl2x // log(2*|x|+1/(|x|+sqrt(1+|x|^2)))
- jecxz 4f
- fchs
-4: ret
-END(__asinhf)
-weak_alias (__asinhf, asinhf)
diff --git a/sysdeps/i386/fpu/s_asinhl.S b/sysdeps/i386/fpu/s_asinhl.S
deleted file mode 100644
index f31a267e78..0000000000
--- a/sysdeps/i386/fpu/s_asinhl.S
+++ /dev/null
@@ -1,144 +0,0 @@
-/* ix87 specific implementation of arcsinh.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type huge,@object
-huge: .tfloat 1e+4930
- ASM_SIZE_DIRECTIVE(huge)
- .align ALIGNARG(4)
- /* Please note that we use double value for 1.0. This number
- has an exact representation and so we don't get accuracy
- problems. The advantage is that the code is simpler. */
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- /* 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. */
- .type limit,@object
-limit: .double 0.29
- ASM_SIZE_DIRECTIVE(limit)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
- .text
-ENTRY(__asinhl)
- movl 12(%esp), %ecx
- movl $0x7fff, %eax
- andl %ecx, %eax
- andl $0x8000, %ecx
- movl %eax, %edx
- orl $0xffff8000, %edx
- incl %edx
- jz 7f // x in ħInf or NaN
- xorl %ecx, 12(%esp)
- fldt 4(%esp) // |x|
- cmpl $0x3fde, %eax
- jb 2f // |x| < 2^-34
- fldln2 // log(2) : |x|
- cmpl $0x4020, %eax
- fxch // |x| : log(2)
- ja 3f // |x| > 2^34
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- cmpl $0x4000, %eax
- ja 5f // |x| > 2
-
- // 2^-34 <= |x| <= 2 => y = sign(x)*log1p(|x|+|x|^2/(1+sqrt(1+|x|^2)))
- fld %st // |x| : |x| : log(2)
- fmul %st(1) // |x|^2 : |x| : log(2)
- fld %st // |x|^2 : |x|^2 : |x| : log(2)
- faddl MO(one) // 1+|x|^2 : |x|^2 : |x| : log(2)
- fsqrt // sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
- faddl MO(one) // 1+sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
- fdivrp // |x|^2/(1+sqrt(1+|x|^2)) : |x| : log(2)
- faddp // |x|+|x|^2/(1+sqrt(1+|x|^2)) : log(2)
- fcoml MO(limit)
- fnstsw
- sahf
- ja 6f
- fyl2xp1
- jecxz 4f
- fchs
-4: ret
-
-7: fldt 4(%esp)
- fadd %st
- ret
-
-6: faddl MO(one)
- fyl2x
- jecxz 4f
- fchs
-4: ret
-
- // |x| < 2^-34 => y = x (inexact iff |x| != 0.0)
- .align ALIGNARG(4)
-2:
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- jecxz 4f
- fchs // x
-4: fld %st // x : x
- fldt MO(huge) // huge : x : x
- faddp // huge+x : x
- fstp %st(0) // x
- cmpl $0x0001, %eax
- jae 8f
- fld %st(0)
- fmul %st(0)
- fstp %st(0)
-8: ret
-
- // |x| > 2^34 => y = sign(x) * (log(|x|) + log(2))
- .align ALIGNARG(4)
-3: fyl2x // log(|x|)
- fldln2 // log(2) : log(|x|)
- faddp // log(|x|)+log(2)
- jecxz 4f
- fchs
-4: ret
-
- // |x| > 2 => y = sign(x) * log(2*|x| + 1/(|x|+sqrt(x*x+1)))
- .align ALIGNARG(4)
-5: fld %st // |x| : |x| : log(2)
- fadd %st, %st(1) // |x| : 2*|x| : log(2)
- fld %st // |x| : |x| : 2*|x| : log(2)
- fmul %st(1) // |x|^2 : |x| : 2*|x| : log(2)
- faddl MO(one) // 1+|x|^2 : |x| : 2*|x| : log(2)
- fsqrt // sqrt(1+|x|^2) : |x| : 2*|x| : log(2)
- faddp // |x|+sqrt(1+|x|^2) : 2*|x| : log(2)
- fdivrl MO(one) // 1/(|x|+sqrt(1+|x|^2)) : 2*|x| : log(2)
- faddp // 2*|x|+1/(|x|+sqrt(1+|x|^2)) : log(2)
- fyl2x // log(2*|x|+1/(|x|+sqrt(1+|x|^2)))
- jecxz 4f
- fchs
-4: ret
-END(__asinhl)
-weak_alias (__asinhl, asinhl)
diff --git a/sysdeps/i386/fpu/s_atan.S b/sysdeps/i386/fpu/s_atan.S
deleted file mode 100644
index 644de78feb..0000000000
--- a/sysdeps/i386/fpu/s_atan.S
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-RCSID("$NetBSD: s_atan.S,v 1.4 1995/05/08 23:50:41 jtc Exp $")
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__atan)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- fldl 4(%esp)
- fld1
- fpatan
- DBL_CHECK_FORCE_UFLOW
- ret
-END (__atan)
-weak_alias (__atan, atan)
diff --git a/sysdeps/i386/fpu/s_atanf.S b/sysdeps/i386/fpu/s_atanf.S
deleted file mode 100644
index 0589c1135e..0000000000
--- a/sysdeps/i386/fpu/s_atanf.S
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-RCSID("$NetBSD: s_atanf.S,v 1.3 1995/05/08 23:51:33 jtc Exp $")
-
-DEFINE_FLT_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
- .text
-ENTRY(__atanf)
-#ifdef PIC
- LOAD_PIC_REG (cx)
-#endif
- flds 4(%esp)
- fld1
- fpatan
- FLT_CHECK_FORCE_UFLOW
- ret
-END (__atanf)
-weak_alias (__atanf, atanf)
diff --git a/sysdeps/i386/fpu/s_atanl.c b/sysdeps/i386/fpu/s_atanl.c
deleted file mode 100644
index b7dba88aad..0000000000
--- a/sysdeps/i386/fpu/s_atanl.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_private.h>
-
-long double
-__atanl (long double x)
-{
- long double res;
-
- asm ("fld1\n"
- "fpatan"
- : "=t" (res) : "0" (x));
-
- return res;
-}
-
-weak_alias (__atanl, atanl)
diff --git a/sysdeps/i386/fpu/s_cbrt.S b/sysdeps/i386/fpu/s_cbrt.S
deleted file mode 100644
index 7f01659eae..0000000000
--- a/sysdeps/i386/fpu/s_cbrt.S
+++ /dev/null
@@ -1,200 +0,0 @@
-/* Compute cubic root of double value.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Dirk Alboth <dirka@uni-paderborn.de> and
- Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type f7,@object
-f7: .double -0.145263899385486377
- ASM_SIZE_DIRECTIVE(f7)
- .type f6,@object
-f6: .double 0.784932344976639262
- ASM_SIZE_DIRECTIVE(f6)
- .type f5,@object
-f5: .double -1.83469277483613086
- ASM_SIZE_DIRECTIVE(f5)
- .type f4,@object
-f4: .double 2.44693122563534430
- ASM_SIZE_DIRECTIVE(f4)
- .type f3,@object
-f3: .double -2.11499494167371287
- ASM_SIZE_DIRECTIVE(f3)
- .type f2,@object
-f2: .double 1.50819193781584896
- ASM_SIZE_DIRECTIVE(f2)
- .type f1,@object
-f1: .double 0.354895765043919860
- ASM_SIZE_DIRECTIVE(f1)
-
-#define CBRT2 1.2599210498948731648
-#define ONE_CBRT2 0.793700525984099737355196796584
-#define SQR_CBRT2 1.5874010519681994748
-#define ONE_SQR_CBRT2 0.629960524947436582364439673883
-
- .type factor,@object
-factor: .double ONE_SQR_CBRT2
- .double ONE_CBRT2
- .double 1.0
- .double CBRT2
- .double SQR_CBRT2
- ASM_SIZE_DIRECTIVE(factor)
-
- .type two54,@object
-two54: .byte 0, 0, 0, 0, 0, 0, 0x50, 0x43
- ASM_SIZE_DIRECTIVE(two54)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%ebx)
-#define MOX(op,x) op##@GOTOFF(%ebx,x,1)
-#else
-#define MO(op) op
-#define MOX(op,x) op(x)
-#endif
-
- .text
-ENTRY(__cbrt)
- movl 4(%esp), %ecx
- movl 8(%esp), %eax
- movl %eax, %edx
- andl $0x7fffffff, %eax
- orl %eax, %ecx
- jz 1f
- xorl %ecx, %ecx
- cmpl $0x7ff00000, %eax
- jae 1f
-
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
-#endif
-
- cmpl $0x00100000, %eax
- jae 2f
-
-#ifdef PIC
- fldl 8(%esp)
-#else
- fldl 4(%esp)
-#endif
- fmull MO(two54)
- movl $-54, %ecx
-#ifdef PIC
- fstpl 8(%esp)
- movl 12(%esp), %eax
-#else
- fstpl 4(%esp)
- movl 8(%esp), %eax
-#endif
- movl %eax, %edx
- andl $0x7fffffff, %eax
-
-2: shrl $20, %eax
- andl $0x800fffff, %edx
- subl $1022, %eax
- orl $0x3fe00000, %edx
- addl %eax, %ecx
-#ifdef PIC
- movl %edx, 12(%esp)
-
- fldl 8(%esp) /* xm */
-#else
- movl %edx, 8(%esp)
-
- fldl 4(%esp) /* xm */
-#endif
- fabs
-
- /* The following code has two tracks:
- a) compute the normalized cbrt value
- b) compute xe/3 and xe%3
- The right track computes the value for b) and this is done
- in an optimized way by avoiding division.
-
- But why two tracks at all? Very easy: efficiency. Some FP
- instruction can overlap with a certain amount of integer (and
- FP) instructions. So we get (except for the imull) all
- instructions for free. */
-
- fld %st(0) /* xm : xm */
-
- fmull MO(f7) /* f7*xm : xm */
- movl $1431655766, %eax
- faddl MO(f6) /* f6+f7*xm : xm */
- imull %ecx
- fmul %st(1) /* (f6+f7*xm)*xm : xm */
- movl %ecx, %eax
- faddl MO(f5) /* f5+(f6+f7*xm)*xm : xm */
- sarl $31, %eax
- fmul %st(1) /* (f5+(f6+f7*xm)*xm)*xm : xm */
- subl %eax, %edx
- faddl MO(f4) /* f4+(f5+(f6+f7*xm)*xm)*xm : xm */
- fmul %st(1) /* (f4+(f5+(f6+f7*xm)*xm)*xm)*xm : xm */
- faddl MO(f3) /* f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm : xm */
- fmul %st(1) /* (f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm : xm */
- faddl MO(f2) /* f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm : xm */
- fmul %st(1) /* (f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm)*xm : xm */
- faddl MO(f1) /* u:=f1+(f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm)*xm : xm */
-
- fld %st /* u : u : xm */
- fmul %st(1) /* u*u : u : xm */
- fld %st(2) /* xm : u*u : u : xm */
- fadd %st /* 2*xm : u*u : u : xm */
- fxch %st(1) /* u*u : 2*xm : u : xm */
- fmul %st(2) /* t2:=u*u*u : 2*xm : u : xm */
- movl %edx, %eax
- fadd %st, %st(1) /* t2 : t2+2*xm : u : xm */
- leal (%edx,%edx,2),%edx
- fadd %st(0) /* 2*t2 : t2+2*xm : u : xm */
- subl %edx, %ecx
- faddp %st, %st(3) /* t2+2*xm : u : 2*t2+xm */
- shll $3, %ecx
- fmulp /* u*(t2+2*xm) : 2*t2+xm */
- fdivp %st, %st(1) /* u*(t2+2*xm)/(2*t2+xm) */
- fmull MOX(16+factor,%ecx) /* u*(t2+2*xm)/(2*t2+xm)*FACT */
- pushl %eax
- cfi_adjust_cfa_offset (4)
- fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */
- fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */
- fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */
- popl %edx
- cfi_adjust_cfa_offset (-4)
-#ifdef PIC
- movl 12(%esp), %eax
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- movl 8(%esp), %eax
-#endif
- testl %eax, %eax
- fstp %st(1)
- jns 4f
- fchs
-4: ret
-
- /* Return the argument. */
-1: fldl 4(%esp)
- ret
-END(__cbrt)
-weak_alias (__cbrt, cbrt)
diff --git a/sysdeps/i386/fpu/s_cbrtf.S b/sysdeps/i386/fpu/s_cbrtf.S
deleted file mode 100644
index 645d24372d..0000000000
--- a/sysdeps/i386/fpu/s_cbrtf.S
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Compute cubic root of float value.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Dirk Alboth <dirka@uni-paderborn.de> and
- Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type f3,@object
-f3: .double 0.191502161678719066
- ASM_SIZE_DIRECTIVE(f3)
- .type f2,@object
-f2: .double 0.697570460207922770
- ASM_SIZE_DIRECTIVE(f2)
- .type f1,@object
-f1: .double 0.492659620528969547
- ASM_SIZE_DIRECTIVE(f1)
-
-#define CBRT2 1.2599210498948731648
-#define ONE_CBRT2 0.793700525984099737355196796584
-#define SQR_CBRT2 1.5874010519681994748
-#define ONE_SQR_CBRT2 0.629960524947436582364439673883
-
- .type factor,@object
- .align ALIGNARG(4)
-factor: .double ONE_SQR_CBRT2
- .double ONE_CBRT2
- .double 1.0
- .double CBRT2
- .double SQR_CBRT2
- ASM_SIZE_DIRECTIVE(factor)
-
- .type two25,@object
-two25: .byte 0, 0, 0, 0x4c
- ASM_SIZE_DIRECTIVE(two25)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%ebx)
-#define MOX(op,x) op##@GOTOFF(%ebx,x,1)
-#else
-#define MO(op) op
-#define MOX(op,x) op(x)
-#endif
-
- .text
-ENTRY(__cbrtf)
- movl 4(%esp), %eax
- xorl %ecx, %ecx
- movl %eax, %edx
- andl $0x7fffffff, %eax
- jz 1f
- cmpl $0x7f800000, %eax
- jae 1f
-
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
-#endif
-
- cmpl $0x00800000, %eax
- jae 2f
-
-#ifdef PIC
- flds 8(%esp)
-#else
- flds 4(%esp)
-#endif
- fmuls MO(two25)
- movl $-25, %ecx
-#ifdef PIC
- fstps 8(%esp)
- movl 8(%esp), %eax
-#else
- fstps 4(%esp)
- movl 4(%esp), %eax
-#endif
- movl %eax, %edx
- andl $0x7fffffff, %eax
-
-2: shrl $23, %eax
- andl $0x807fffff, %edx
- subl $126, %eax
- orl $0x3f000000, %edx
- addl %eax, %ecx
-#ifdef PIC
- movl %edx, 8(%esp)
-
- flds 8(%esp) /* xm */
-#else
- movl %edx, 4(%esp)
-
- flds 4(%esp) /* xm */
-#endif
- fabs
-
- /* The following code has two tracks:
- a) compute the normalized cbrt value
- b) compute xe/3 and xe%3
- The right track computes the value for b) and this is done
- in an optimized way by avoiding division.
-
- But why two tracks at all? Very easy: efficiency. Some FP
- instruction can overlap with a certain amount of integer (and
- FP) instructions. So we get (except for the imull) all
- instructions for free. */
-
- fld %st(0) /* xm : xm */
- fmull MO(f3) /* f3*xm : xm */
- movl $1431655766, %eax
- fsubrl MO(f2) /* f2-f3*xm : xm */
- imull %ecx
- fmul %st(1) /* (f2-f3*xm)*xm : xm */
- movl %ecx, %eax
- faddl MO(f1) /* u:=f1+(f2-f3*xm)*xm : xm */
- sarl $31, %eax
- fld %st /* u : u : xm */
- subl %eax, %edx
- fmul %st(1) /* u*u : u : xm */
- fld %st(2) /* xm : u*u : u : xm */
- fadd %st /* 2*xm : u*u : u : xm */
- fxch %st(1) /* u*u : 2*xm : u : xm */
- fmul %st(2) /* t2:=u*u*u : 2*xm : u : xm */
- movl %edx, %eax
- fadd %st, %st(1) /* t2 : t2+2*xm : u : xm */
- leal (%edx,%edx,2),%edx
- fadd %st(0) /* 2*t2 : t2+2*xm : u : xm */
- subl %edx, %ecx
- faddp %st, %st(3) /* t2+2*xm : u : 2*t2+xm */
- shll $3, %ecx
- fmulp /* u*(t2+2*xm) : 2*t2+xm */
- fdivp %st, %st(1) /* u*(t2+2*xm)/(2*t2+xm) */
- fmull MOX(16+factor,%ecx) /* u*(t2+2*xm)/(2*t2+xm)*FACT */
- pushl %eax
- cfi_adjust_cfa_offset (4)
- fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */
- fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */
- fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */
- popl %edx
- cfi_adjust_cfa_offset (-4)
-#ifdef PIC
- movl 8(%esp), %eax
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- movl 4(%esp), %eax
-#endif
- testl %eax, %eax
- fstp %st(1)
- jns 4f
- fchs
-4: ret
-
- /* Return the argument. */
-1: flds 4(%esp)
- ret
-END(__cbrtf)
-weak_alias (__cbrtf, cbrtf)
diff --git a/sysdeps/i386/fpu/s_cbrtl.S b/sysdeps/i386/fpu/s_cbrtl.S
deleted file mode 100644
index e4a72d29c6..0000000000
--- a/sysdeps/i386/fpu/s_cbrtl.S
+++ /dev/null
@@ -1,229 +0,0 @@
-/* Compute cubic root of long double value.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Dirk Alboth <dirka@uni-paderborn.de> and
- Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type f8,@object
-f8: .tfloat 0.161617097923756032
- ASM_SIZE_DIRECTIVE(f8)
- .align ALIGNARG(4)
- .type f7,@object
-f7: .tfloat -0.988553671195413709
- ASM_SIZE_DIRECTIVE(f7)
- .align ALIGNARG(4)
- .type f6,@object
-f6: .tfloat 2.65298938441952296
- ASM_SIZE_DIRECTIVE(f6)
- .align ALIGNARG(4)
- .type f5,@object
-f5: .tfloat -4.11151425200350531
- ASM_SIZE_DIRECTIVE(f5)
- .align ALIGNARG(4)
- .type f4,@object
-f4: .tfloat 4.09559907378707839
- ASM_SIZE_DIRECTIVE(f4)
- .align ALIGNARG(4)
- .type f3,@object
-f3: .tfloat -2.82414939754975962
- ASM_SIZE_DIRECTIVE(f3)
- .align ALIGNARG(4)
- .type f2,@object
-f2: .tfloat 1.67595307700780102
- ASM_SIZE_DIRECTIVE(f2)
- .align ALIGNARG(4)
- .type f1,@object
-f1: .tfloat 0.338058687610520237
- ASM_SIZE_DIRECTIVE(f1)
-
-#define CBRT2 1.2599210498948731648
-#define ONE_CBRT2 0.793700525984099737355196796584
-#define SQR_CBRT2 1.5874010519681994748
-#define ONE_SQR_CBRT2 0.629960524947436582364439673883
-
- /* We make the entries in the following table all 16 bytes
- wide to avoid having to implement a multiplication by 10. */
- .type factor,@object
- .align ALIGNARG(4)
-factor: .tfloat ONE_SQR_CBRT2
- .byte 0, 0, 0, 0, 0, 0
- .tfloat ONE_CBRT2
- .byte 0, 0, 0, 0, 0, 0
- .tfloat 1.0
- .byte 0, 0, 0, 0, 0, 0
- .tfloat CBRT2
- .byte 0, 0, 0, 0, 0, 0
- .tfloat SQR_CBRT2
- ASM_SIZE_DIRECTIVE(factor)
-
- .type two64,@object
- .align ALIGNARG(4)
-two64: .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x43
- ASM_SIZE_DIRECTIVE(two64)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%ebx)
-#define MOX(op,x) op##@GOTOFF(%ebx,x,1)
-#else
-#define MO(op) op
-#define MOX(op,x) op(x)
-#endif
-
- .text
-ENTRY(__cbrtl)
- movl 4(%esp), %ecx
- movl 12(%esp), %eax
- orl 8(%esp), %ecx
- movl %eax, %edx
- andl $0x7fff, %eax
- orl %eax, %ecx
- jz 1f
- xorl %ecx, %ecx
- cmpl $0x7fff, %eax
- je 1f
-
-#ifdef PIC
- pushl %ebx
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (ebx, 0)
- LOAD_PIC_REG (bx)
-#endif
-
- cmpl $0, %eax
- jne 2f
-
-#ifdef PIC
- fldt 8(%esp)
-#else
- fldt 4(%esp)
-#endif
- fmull MO(two64)
- movl $-64, %ecx
-#ifdef PIC
- fstpt 8(%esp)
- movl 16(%esp), %eax
-#else
- fstpt 4(%esp)
- movl 12(%esp), %eax
-#endif
- movl %eax, %edx
- andl $0x7fff, %eax
-
-2: andl $0x8000, %edx
- subl $16382, %eax
- orl $0x3ffe, %edx
- addl %eax, %ecx
-#ifdef PIC
- movl %edx, 16(%esp)
-
- fldt 8(%esp) /* xm */
-#else
- movl %edx, 12(%esp)
-
- fldt 4(%esp) /* xm */
-#endif
- fabs
-
- /* The following code has two tracks:
- a) compute the normalized cbrt value
- b) compute xe/3 and xe%3
- The right track computes the value for b) and this is done
- in an optimized way by avoiding division.
-
- But why two tracks at all? Very easy: efficiency. Some FP
- instruction can overlap with a certain amount of integer (and
- FP) instructions. So we get (except for the imull) all
- instructions for free. */
-
- fldt MO(f8) /* f8 : xm */
- fmul %st(1) /* f8*xm : xm */
-
- fldt MO(f7)
- faddp /* f7+f8*xm : xm */
- fmul %st(1) /* (f7+f8*xm)*xm : xm */
- movl $1431655766, %eax
- fldt MO(f6)
- faddp /* f6+(f7+f8*xm)*xm : xm */
- imull %ecx
- fmul %st(1) /* (f6+(f7+f8*xm)*xm)*xm : xm */
- movl %ecx, %eax
- fldt MO(f5)
- faddp /* f5+(f6+(f7+f8*xm)*xm)*xm : xm */
- sarl $31, %eax
- fmul %st(1) /* (f5+(f6+(f7+f8*xm)*xm)*xm)*xm : xm */
- subl %eax, %edx
- fldt MO(f4)
- faddp /* f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm : xm */
- fmul %st(1) /* (f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm : xm */
- fldt MO(f3)
- faddp /* f3+(f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm : xm */
- fmul %st(1) /* (f3+(f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm)*xm : xm */
- fldt MO(f2)
- faddp /* f2+(f3+(f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm)*xm : xm */
- fmul %st(1) /* (f2+(f3+(f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm)*xm)*xm : xm */
- fldt MO(f1)
- faddp /* u:=f1+(f2+(f3+(f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm)*xm)*xm : xm */
-
- fld %st /* u : u : xm */
- fmul %st(1) /* u*u : u : xm */
- fld %st(2) /* xm : u*u : u : xm */
- fadd %st /* 2*xm : u*u : u : xm */
- fxch %st(1) /* u*u : 2*xm : u : xm */
- fmul %st(2) /* t2:=u*u*u : 2*xm : u : xm */
- movl %edx, %eax
- fadd %st, %st(1) /* t2 : t2+2*xm : u : xm */
- leal (%edx,%edx,2),%edx
- fadd %st(0) /* 2*t2 : t2+2*xm : u : xm */
- subl %edx, %ecx
- faddp %st, %st(3) /* t2+2*xm : u : 2*t2+xm */
- shll $4, %ecx
- fmulp /* u*(t2+2*xm) : 2*t2+xm */
- fdivp %st, %st(1) /* u*(t2+2*xm)/(2*t2+xm) */
- fldt MOX(32+factor,%ecx)
- fmulp /* u*(t2+2*xm)/(2*t2+xm)*FACT */
- pushl %eax
- cfi_adjust_cfa_offset (4)
- fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */
- fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */
- fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */
- popl %edx
- cfi_adjust_cfa_offset (-4)
-#ifdef PIC
- movl 16(%esp), %eax
- popl %ebx
- cfi_adjust_cfa_offset (-4)
- cfi_restore (ebx)
-#else
- movl 12(%esp), %eax
-#endif
- testl $0x8000, %eax
- fstp %st(1)
- jz 4f
- fchs
-4: ret
-
- /* Return the argument. */
-1: fldt 4(%esp)
- fadd %st
- ret
-END(__cbrtl)
-weak_alias (__cbrtl, cbrtl)
diff --git a/sysdeps/i386/fpu/s_ceil.S b/sysdeps/i386/fpu/s_ceil.S
deleted file mode 100644
index 1226bb2f87..0000000000
--- a/sysdeps/i386/fpu/s_ceil.S
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_ceil.S,v 1.4 1995/05/08 23:52:13 jtc Exp $")
-
-ENTRY(__ceil)
- fldl 4(%esp)
- subl $32,%esp
- cfi_adjust_cfa_offset (32)
-
- fnstenv 4(%esp) /* store fpu environment */
-
- /* 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 */
-
- fldenv 4(%esp) /* restore original environment */
-
- addl $32,%esp
- cfi_adjust_cfa_offset (-32)
- ret
-END (__ceil)
-weak_alias (__ceil, ceil)
diff --git a/sysdeps/i386/fpu/s_ceilf.S b/sysdeps/i386/fpu/s_ceilf.S
deleted file mode 100644
index d345c0973b..0000000000
--- a/sysdeps/i386/fpu/s_ceilf.S
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_ceilf.S,v 1.3 1995/05/08 23:52:44 jtc Exp $")
-
-ENTRY(__ceilf)
- flds 4(%esp)
- subl $32,%esp
- cfi_adjust_cfa_offset (32)
-
- fnstenv 4(%esp) /* store fpu environment */
-
- /* 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 */
-
- fldenv 4(%esp) /* restore original environment */
-
- addl $32,%esp
- cfi_adjust_cfa_offset (-32)
- ret
-END (__ceilf)
-weak_alias (__ceilf, ceilf)
diff --git a/sysdeps/i386/fpu/s_ceill.S b/sysdeps/i386/fpu/s_ceill.S
deleted file mode 100644
index 7c08f43b24..0000000000
--- a/sysdeps/i386/fpu/s_ceill.S
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: $")
-
-ENTRY(__ceill)
- fldt 4(%esp)
- subl $32,%esp
- cfi_adjust_cfa_offset (32)
-
- fnstenv 4(%esp) /* store fpu environment */
-
- /* 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 */
-
- /* Preserve "invalid" exceptions from sNaN input. */
- fnstsw
- andl $0x1, %eax
- orl %eax, 8(%esp)
-
- fldenv 4(%esp) /* restore original environment */
-
- addl $32,%esp
- cfi_adjust_cfa_offset (-32)
- ret
-END (__ceill)
-weak_alias (__ceill, ceill)
diff --git a/sysdeps/i386/fpu/s_copysign.S b/sysdeps/i386/fpu/s_copysign.S
deleted file mode 100644
index 2520a94427..0000000000
--- a/sysdeps/i386/fpu/s_copysign.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_copysign.S,v 1.4 1995/05/08 23:53:02 jtc Exp $")
-
-ENTRY(__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
-END (__copysign)
-weak_alias (__copysign, copysign)
diff --git a/sysdeps/i386/fpu/s_copysignf.S b/sysdeps/i386/fpu/s_copysignf.S
deleted file mode 100644
index 57b1a6f119..0000000000
--- a/sysdeps/i386/fpu/s_copysignf.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_copysignf.S,v 1.3 1995/05/08 23:53:25 jtc Exp $")
-
-ENTRY(__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
-END (__copysignf)
-weak_alias (__copysignf, copysignf)
diff --git a/sysdeps/i386/fpu/s_copysignl.S b/sysdeps/i386/fpu/s_copysignl.S
deleted file mode 100644
index 2163e7b014..0000000000
--- a/sysdeps/i386/fpu/s_copysignl.S
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: $")
-
-ENTRY(__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
-END (__copysignl)
-weak_alias (__copysignl, copysignl)
diff --git a/sysdeps/i386/fpu/s_expm1.S b/sysdeps/i386/fpu/s_expm1.S
deleted file mode 100644
index 59fded2d5a..0000000000
--- a/sysdeps/i386/fpu/s_expm1.S
+++ /dev/null
@@ -1,113 +0,0 @@
-/* ix87 specific implementation of exp(x)-1.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
- Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>.
- Corrections by H.J. Lu (hjl@gnu.ai.mit.edu), 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
- /* Using: e^x - 1 = 2^(x * log2(e)) - 1 */
-
-#include <sysdep.h>
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type minus1,@object
-minus1: .double -1.0
- ASM_SIZE_DIRECTIVE(minus1)
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- .type l2e,@object
-l2e: .tfloat 1.442695040888963407359924681002
- ASM_SIZE_DIRECTIVE(l2e)
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
- .text
-ENTRY(__expm1)
- movzwl 4+6(%esp), %eax
- xorb $0x80, %ah // invert sign bit (now 1 is "positive")
- cmpl $0xc086, %eax // is num >= 704?
- jae HIDDEN_JUMPTARGET (__exp)
-
- fldl 4(%esp) // x
- fxam // Is NaN, +-Inf or +-0?
- xorb $0x80, %ah
- cmpl $0xc043, %eax // is num <= -38.0?
- fstsw %ax
- movb $0x45, %ch
- jb 4f
-
- // Below -38.0 (may be -NaN or -Inf).
- andb %ah, %ch
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- cmpb $0x01, %ch
- je 5f // If -NaN, jump.
- jmp 2f // -large, possibly -Inf.
-
-4: // In range -38.0 to 704.0 (may be +-0 but not NaN or +-Inf).
- andb %ah, %ch
- cmpb $0x40, %ch
- je 3f // If +-0, jump.
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
-
-5: fldt MO(l2e) // log2(e) : x
- fmulp // log2(e)*x
- fld %st // log2(e)*x : log2(e)*x
- // Set round-to-nearest temporarily.
- subl $8, %esp
- cfi_adjust_cfa_offset (8)
- fstcw 4(%esp)
- movl $0xf3ff, %ecx
- andl 4(%esp), %ecx
- movl %ecx, (%esp)
- fldcw (%esp)
- frndint // int(log2(e)*x) : log2(e)*x
- fldcw 4(%esp)
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
- fsubr %st, %st(1) // int(log2(e)*x) : fract(log2(e)*x)
- fxch // fract(log2(e)*x) : int(log2(e)*x)
- f2xm1 // 2^fract(log2(e)*x)-1 : int(log2(e)*x)
- fscale // 2^(log2(e)*x)-2^int(log2(e)*x) : int(log2(e)*x)
- fxch // int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
- fldl MO(one) // 1 : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
- fscale // 2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
- fsubrl MO(one) // 1-2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
- fstp %st(1) // 1-2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
- fsubrp %st, %st(1) // 2^(log2(e)*x)
- DBL_CHECK_FORCE_UFLOW
- ret
-
-2: fstp %st
- fldl MO(minus1) // Set result to -1.0.
-3: ret
-END(__expm1)
-weak_alias (__expm1, expm1)
diff --git a/sysdeps/i386/fpu/s_expm1f.S b/sysdeps/i386/fpu/s_expm1f.S
deleted file mode 100644
index 4f0b2e7832..0000000000
--- a/sysdeps/i386/fpu/s_expm1f.S
+++ /dev/null
@@ -1,113 +0,0 @@
-/* ix87 specific implementation of exp(x)-1.
- Copyright (C) 1996-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
- Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>.
- Corrections by H.J. Lu (hjl@gnu.ai.mit.edu), 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
- /* Using: e^x - 1 = 2^(x * log2(e)) - 1 */
-
-#include <sysdep.h>
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type minus1,@object
-minus1: .double -1.0
- ASM_SIZE_DIRECTIVE(minus1)
- .type one,@object
-one: .double 1.0
- ASM_SIZE_DIRECTIVE(one)
- .type l2e,@object
-l2e: .tfloat 1.442695040888963407359924681002
- ASM_SIZE_DIRECTIVE(l2e)
-
-DEFINE_FLT_MIN
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
- .text
-ENTRY(__expm1f)
- movzwl 4+2(%esp), %eax
- xorb $0x80, %ah // invert sign bit (now 1 is "positive")
- cmpl $0xc2b1, %eax // is num >= 88.5?
- jae HIDDEN_JUMPTARGET (__expf)
-
- flds 4(%esp) // x
- fxam // Is NaN, +-Inf or +-0?
- xorb $0x80, %ah
- cmpl $0xc190, %eax // is num <= -18.0?
- fstsw %ax
- movb $0x45, %ch
- jb 4f
-
- // Below -18.0 (may be -NaN or -Inf).
- andb %ah, %ch
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- cmpb $0x01, %ch
- je 5f // If -NaN, jump.
- jmp 2f // -large, possibly -Inf.
-
-4: // In range -18.0 to 88.5 (may be +-0 but not NaN or +-Inf).
- andb %ah, %ch
- cmpb $0x40, %ch
- je 3f // If +-0, jump.
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
-
-5: fldt MO(l2e) // log2(e) : x
- fmulp // log2(e)*x
- fld %st // log2(e)*x : log2(e)*x
- // Set round-to-nearest temporarily.
- subl $8, %esp
- cfi_adjust_cfa_offset (8)
- fstcw 4(%esp)
- movl $0xf3ff, %ecx
- andl 4(%esp), %ecx
- movl %ecx, (%esp)
- fldcw (%esp)
- frndint // int(log2(e)*x) : log2(e)*x
- fldcw 4(%esp)
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
- fsubr %st, %st(1) // int(log2(e)*x) : fract(log2(e)*x)
- fxch // fract(log2(e)*x) : int(log2(e)*x)
- f2xm1 // 2^fract(log2(e)*x)-1 : int(log2(e)*x)
- fscale // 2^(log2(e)*x)-2^int(log2(e)*x) : int(log2(e)*x)
- fxch // int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
- fldl MO(one) // 1 : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
- fscale // 2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
- fsubrl MO(one) // 1-2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
- fstp %st(1) // 1-2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
- fsubrp %st, %st(1) // 2^(log2(e)*x)
- FLT_CHECK_FORCE_UFLOW
- ret
-
-2: fstp %st
- fldl MO(minus1) // Set result to -1.0.
-3: ret
-END(__expm1f)
-weak_alias (__expm1f, expm1f)
diff --git a/sysdeps/i386/fpu/s_expm1l.S b/sysdeps/i386/fpu/s_expm1l.S
deleted file mode 100644
index 7fbd99b0db..0000000000
--- a/sysdeps/i386/fpu/s_expm1l.S
+++ /dev/null
@@ -1,2 +0,0 @@
-#define USE_AS_EXPM1L
-#include <e_expl.S>
diff --git a/sysdeps/i386/fpu/s_fabs.S b/sysdeps/i386/fpu/s_fabs.S
deleted file mode 100644
index 23ae9dccb9..0000000000
--- a/sysdeps/i386/fpu/s_fabs.S
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <sysdep.h>
-
- .text
-ENTRY(__fabs)
- fldl 4(%esp)
- fabs
- ret
-END(__fabs)
-weak_alias (__fabs, fabs)
diff --git a/sysdeps/i386/fpu/s_fabsf.S b/sysdeps/i386/fpu/s_fabsf.S
deleted file mode 100644
index c0407a8839..0000000000
--- a/sysdeps/i386/fpu/s_fabsf.S
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <sysdep.h>
-
- .text
-ENTRY(__fabsf)
- flds 4(%esp)
- fabs
- ret
-END(__fabsf)
-weak_alias (__fabsf, fabsf)
diff --git a/sysdeps/i386/fpu/s_fabsl.S b/sysdeps/i386/fpu/s_fabsl.S
deleted file mode 100644
index a12a3e050b..0000000000
--- a/sysdeps/i386/fpu/s_fabsl.S
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <sysdep.h>
-
- .text
-ENTRY(__fabsl)
- fldt 4(%esp)
- fabs
- ret
-END(__fabsl)
-weak_alias (__fabsl, fabsl)
diff --git a/sysdeps/i386/fpu/s_fdim.c b/sysdeps/i386/fpu/s_fdim.c
deleted file mode 100644
index 6243c62998..0000000000
--- a/sysdeps/i386/fpu/s_fdim.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Return positive difference between arguments. i386 version.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fpu_control.h>
-#include <math.h>
-#include <math_private.h>
-
-double
-__fdim (double x, double y)
-{
- if (islessequal (x, y))
- return 0.0;
-
- /* To avoid double rounding, set double precision for the
- subtraction. math_narrow_eval is still needed to eliminate
- excess range in the case of overflow. If the result of the
- subtraction is in the subnormal range for double, it is exact, so
- no issues of double rounding for subnormals arise. */
- fpu_control_t cw, cw_double;
- _FPU_GETCW (cw);
- cw_double = (cw & ~_FPU_EXTENDED) | _FPU_DOUBLE;
- _FPU_SETCW (cw_double);
- double r = math_narrow_eval (x - y);
- _FPU_SETCW (cw);
- if (isinf (r) && !isinf (x) && !isinf (y))
- __set_errno (ERANGE);
-
- return r;
-}
-weak_alias (__fdim, fdim)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__fdim, __fdiml)
-weak_alias (__fdim, fdiml)
-#endif
diff --git a/sysdeps/i386/fpu/s_finite.S b/sysdeps/i386/fpu/s_finite.S
deleted file mode 100644
index 1ae4aed451..0000000000
--- a/sysdeps/i386/fpu/s_finite.S
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Written by Joe Keane <jgk@jgk.org>.
- */
-
-#include <machine/asm.h>
-
-ENTRY(__finite)
- movl 8(%esp),%eax
- movl $0xFFEFFFFF,%ecx
- subl %eax,%ecx
- xorl %ecx,%eax
- shrl $31, %eax
- ret
-END (__finite)
-weak_alias (__finite, finite)
-hidden_def (__finite)
-
diff --git a/sysdeps/i386/fpu/s_finitef.S b/sysdeps/i386/fpu/s_finitef.S
deleted file mode 100644
index 69e72facff..0000000000
--- a/sysdeps/i386/fpu/s_finitef.S
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Written by Joe Keane <jgk@jgk.org>.
- */
-
-#include <machine/asm.h>
-
-ENTRY(__finitef)
- movl 4(%esp),%eax
- movl $0xFF7FFFFF,%ecx
- subl %eax,%ecx
- xorl %ecx,%eax
- shrl $31,%eax
- ret
-END (__finitef)
-weak_alias (__finitef, finitef)
-hidden_def (__finitef)
diff --git a/sysdeps/i386/fpu/s_finitel.S b/sysdeps/i386/fpu/s_finitel.S
deleted file mode 100644
index cce90e18fc..0000000000
--- a/sysdeps/i386/fpu/s_finitel.S
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Written by Joe Keane <jgk@jgk.org>.
- */
-
-#include <machine/asm.h>
-
-ENTRY(__finitel)
- movl 12(%esp),%eax
- orl $0xffff8000, %eax
- incl %eax
- shrl $31, %eax
- ret
-END (__finitel)
-weak_alias (__finitel, finitel)
-hidden_def (__finitel)
diff --git a/sysdeps/i386/fpu/s_floor.S b/sysdeps/i386/fpu/s_floor.S
deleted file mode 100644
index ed837dae40..0000000000
--- a/sysdeps/i386/fpu/s_floor.S
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_floor.S,v 1.4 1995/05/09 00:01:59 jtc Exp $")
-
-ENTRY(__floor)
- fldl 4(%esp)
- subl $32,%esp
- cfi_adjust_cfa_offset (32)
-
- fnstenv 4(%esp) /* store fpu environment */
-
- /* 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 */
-
- fldenv 4(%esp) /* restore original environment */
-
- addl $32,%esp
- cfi_adjust_cfa_offset (-32)
- ret
-END (__floor)
-weak_alias (__floor, floor)
diff --git a/sysdeps/i386/fpu/s_floorf.S b/sysdeps/i386/fpu/s_floorf.S
deleted file mode 100644
index 84b6f7ed99..0000000000
--- a/sysdeps/i386/fpu/s_floorf.S
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_floorf.S,v 1.3 1995/05/09 00:04:32 jtc Exp $")
-
-ENTRY(__floorf)
- flds 4(%esp)
- subl $32,%esp
- cfi_adjust_cfa_offset (32)
-
- fnstenv 4(%esp) /* store fpu environment */
-
- /* 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 */
-
- fldenv 4(%esp) /* restore original environment */
-
- addl $32,%esp
- cfi_adjust_cfa_offset (-32)
- ret
-END (__floorf)
-weak_alias (__floorf, floorf)
diff --git a/sysdeps/i386/fpu/s_floorl.S b/sysdeps/i386/fpu/s_floorl.S
deleted file mode 100644
index dc74a0c446..0000000000
--- a/sysdeps/i386/fpu/s_floorl.S
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: $")
-
-ENTRY(__floorl)
- fldt 4(%esp)
- subl $32,%esp
- cfi_adjust_cfa_offset (32)
-
- fnstenv 4(%esp) /* store fpu environment */
-
- /* 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 */
-
- /* Preserve "invalid" exceptions from sNaN input. */
- fnstsw
- andl $0x1, %eax
- orl %eax, 8(%esp)
-
- fldenv 4(%esp) /* restore original environment */
-
- addl $32,%esp
- cfi_adjust_cfa_offset (-32)
- ret
-END (__floorl)
-weak_alias (__floorl, floorl)
diff --git a/sysdeps/i386/fpu/s_fmax.S b/sysdeps/i386/fpu/s_fmax.S
deleted file mode 100644
index 218dcef421..0000000000
--- a/sysdeps/i386/fpu/s_fmax.S
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Compute maximum of two numbers, regarding NaN as missing argument.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__fmax)
- fldl 12(%esp) // y
- fxam
- fnstsw
- fldl 4(%esp) // y : x
-
- andb $0x45, %ah
- cmpb $0x01, %ah
- je 1f // y == NaN
-
- fucom %st(1)
- fnstsw
- sahf
- jnc 1f
-
- fxch %st(1)
-1: fstp %st(1)
-
- ret
-END(__fmax)
-weak_alias (__fmax, fmax)
diff --git a/sysdeps/i386/fpu/s_fmaxf.S b/sysdeps/i386/fpu/s_fmaxf.S
deleted file mode 100644
index b7a00cefeb..0000000000
--- a/sysdeps/i386/fpu/s_fmaxf.S
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Compute maximum of two numbers, regarding NaN as missing argument.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__fmaxf)
- flds 8(%esp) // y
- fxam
- fnstsw
- flds 4(%esp) // y : x
-
- andb $0x45, %ah
- cmpb $0x01, %ah
- je 1f // y == NaN
-
- fucom %st(1)
- fnstsw
- sahf
- jnc 1f
-
- fxch %st(1)
-1: fstp %st(1)
-
- ret
-END(__fmaxf)
-weak_alias (__fmaxf, fmaxf)
diff --git a/sysdeps/i386/fpu/s_fmaxl.S b/sysdeps/i386/fpu/s_fmaxl.S
deleted file mode 100644
index 68162921db..0000000000
--- a/sysdeps/i386/fpu/s_fmaxl.S
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Compute maximum of two numbers, regarding NaN as missing argument.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__fmaxl)
- fldt 16(%esp) // y
- fxam
- fnstsw
- fldt 4(%esp) // y : x
-
- andb $0x45, %ah
- cmpb $0x01, %ah
- je 2f // y == NaN
-
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x01, %ah
- je 3f // x == NaN
-
- fucom %st(1)
- fnstsw
- sahf
- jnc 1f
-
- fxch %st(1)
-1: fstp %st(1)
-
- ret
-
-2: // st(1) is a NaN; st(0) may or may not be.
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x01, %ah
- je 4f
- // st(1) is a NaN; st(0) is not. Test if st(1) is signaling.
- testb $0x40, 23(%esp)
- jz 4f
- fstp %st(1)
- ret
-
-3: // st(0) is a NaN; st(1) is not. Test if st(0) is signaling.
- testb $0x40, 11(%esp)
- jz 4f
- fstp %st(0)
- ret
-
-4: // Both arguments are NaNs, or one is a signaling NaN.
- faddp
- ret
-END(__fmaxl)
-weak_alias (__fmaxl, fmaxl)
diff --git a/sysdeps/i386/fpu/s_fmin.S b/sysdeps/i386/fpu/s_fmin.S
deleted file mode 100644
index a5bb0e06dd..0000000000
--- a/sysdeps/i386/fpu/s_fmin.S
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Compute minimum of two numbers, regarding NaN as missing argument.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__fmin)
- fldl 4(%esp) // x
- fldl 12(%esp) // x : y
-
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x01, %ah
- je 1f // y == NaN
-
- fucom %st(1)
- fnstsw
- sahf
- jc 2f
-
-1: fxch %st(1)
-2: fstp %st(1)
-
- ret
-END(__fmin)
-weak_alias (__fmin, fmin)
diff --git a/sysdeps/i386/fpu/s_fminf.S b/sysdeps/i386/fpu/s_fminf.S
deleted file mode 100644
index fba4a41120..0000000000
--- a/sysdeps/i386/fpu/s_fminf.S
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Compute minimum of two numbers, regarding NaN as missing argument.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__fminf)
- flds 4(%esp) // x
- flds 8(%esp) // x : y
-
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x01, %ah
- je 1f // y == NaN
-
- fucom %st(1)
- fnstsw
- sahf
- jc 2f
-
-1: fxch %st(1)
-2: fstp %st(1)
-
- ret
-END(__fminf)
-weak_alias (__fminf, fminf)
diff --git a/sysdeps/i386/fpu/s_fminl.S b/sysdeps/i386/fpu/s_fminl.S
deleted file mode 100644
index 12ef21fda9..0000000000
--- a/sysdeps/i386/fpu/s_fminl.S
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Compute minimum of two numbers, regarding NaN as missing argument.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__fminl)
- fldt 16(%esp) // y
- fxam
- fnstsw
- fldt 4(%esp) // y : x
-
- andb $0x45, %ah
- cmpb $0x01, %ah
- je 2f // y == NaN
-
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x01, %ah
- je 3f // x == NaN
-
- fucom %st(1)
- fnstsw
- sahf
- jc 1f
-
- fxch %st(1)
-1: fstp %st(1)
-
- ret
-
-2: // st(1) is a NaN; st(0) may or may not be.
- fxam
- fnstsw
- andb $0x45, %ah
- cmpb $0x01, %ah
- je 4f
- // st(1) is a NaN; st(0) is not. Test if st(1) is signaling.
- testb $0x40, 23(%esp)
- jz 4f
- fstp %st(1)
- ret
-
-3: // st(0) is a NaN; st(1) is not. Test if st(0) is signaling.
- testb $0x40, 11(%esp)
- jz 4f
- fstp %st(0)
- ret
-
-4: // Both arguments are NaNs, or one is a signaling NaN.
- faddp
- ret
-END(__fminl)
-weak_alias (__fminl, fminl)
diff --git a/sysdeps/i386/fpu/s_fpclassifyl.c b/sysdeps/i386/fpu/s_fpclassifyl.c
deleted file mode 100644
index ce19fd0035..0000000000
--- a/sysdeps/i386/fpu/s_fpclassifyl.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Return classification value corresponding to argument.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <math.h>
-
-#include <math_private.h>
-
-
-int
-__fpclassifyl (long double x)
-{
- u_int32_t ex, hx, lx;
- int retval = FP_NORMAL;
-
- GET_LDOUBLE_WORDS (ex, hx, lx, x);
- ex &= 0x7fff;
- if ((ex | lx | hx) == 0)
- retval = FP_ZERO;
- else if (ex == 0 && (hx & 0x80000000) == 0)
- retval = FP_SUBNORMAL;
- else if (ex == 0x7fff)
- retval = ((hx & 0x7fffffff) | lx) != 0 ? FP_NAN : FP_INFINITE;
-
- return retval;
-}
-libm_hidden_def (__fpclassifyl)
diff --git a/sysdeps/i386/fpu/s_frexp.S b/sysdeps/i386/fpu/s_frexp.S
deleted file mode 100644
index 104f733bf6..0000000000
--- a/sysdeps/i386/fpu/s_frexp.S
+++ /dev/null
@@ -1,83 +0,0 @@
-/* ix87 specific frexp implementation for double.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type two54,@object
-two54: .byte 0, 0, 0, 0, 0, 0, 0x50, 0x43
- ASM_SIZE_DIRECTIVE(two54)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
-#define PARMS 4 /* no space for saved regs */
-#define VAL0 PARMS
-#define VAL1 VAL0+4
-#define EXPP VAL1+4
-
- .text
-ENTRY (__frexp)
-
- movl VAL0(%esp), %ecx
- movl VAL1(%esp), %eax
- movl %eax, %edx
- andl $0x7fffffff, %eax
- orl %eax, %ecx
- jz 1f
- xorl %ecx, %ecx
- cmpl $0x7ff00000, %eax
- jae 1f
-
- cmpl $0x00100000, %eax
- jae 2f
-
- fldl VAL0(%esp)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fmull MO(two54)
- movl $-54, %ecx
- fstpl VAL0(%esp)
- fwait
- movl VAL1(%esp), %eax
- movl %eax, %edx
- andl $0x7fffffff, %eax
-
-2: shrl $20, %eax
- andl $0x800fffff, %edx
- subl $1022, %eax
- orl $0x3fe00000, %edx
- addl %eax, %ecx
- movl %edx, VAL1(%esp)
-
- /* Store %ecx in the variable pointed to by the second argument,
- get the factor from the stack and return. */
-1: movl EXPP(%esp), %eax
- fldl VAL0(%esp)
- movl %ecx, (%eax)
-
- ret
-END (__frexp)
-weak_alias (__frexp, frexp)
diff --git a/sysdeps/i386/fpu/s_frexpf.S b/sysdeps/i386/fpu/s_frexpf.S
deleted file mode 100644
index f21c39ec4b..0000000000
--- a/sysdeps/i386/fpu/s_frexpf.S
+++ /dev/null
@@ -1,80 +0,0 @@
-/* ix87 specific frexp implementation for float.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type two25,@object
-two25: .byte 0, 0, 0, 0x4c
- ASM_SIZE_DIRECTIVE(two25)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
-#define PARMS 4 /* no space for saved regs */
-#define VAL PARMS
-#define EXPP VAL+4
-
- .text
-ENTRY (__frexpf)
-
- movl VAL(%esp), %eax
- xorl %ecx, %ecx
- movl %eax, %edx
- andl $0x7fffffff, %eax
- jz 1f
- cmpl $0x7f800000, %eax
- jae 1f
-
- cmpl $0x00800000, %eax
- jae 2f
-
- flds VAL(%esp)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
- fmuls MO(two25)
- movl $-25, %ecx
- fstps VAL(%esp)
- fwait
- movl VAL(%esp), %eax
- movl %eax, %edx
- andl $0x7fffffff, %eax
-
-2: shrl $23, %eax
- andl $0x807fffff, %edx
- subl $126, %eax
- orl $0x3f000000, %edx
- addl %eax, %ecx
- movl %edx, VAL(%esp)
-
- /* Store %ecx in the variable pointed to by the second argument,
- get the factor from the stack and return. */
-1: movl EXPP(%esp), %eax
- flds VAL(%esp)
- movl %ecx, (%eax)
-
- ret
-END (__frexpf)
-weak_alias (__frexpf, frexpf)
diff --git a/sysdeps/i386/fpu/s_frexpl.S b/sysdeps/i386/fpu/s_frexpl.S
deleted file mode 100644
index 04f28888d2..0000000000
--- a/sysdeps/i386/fpu/s_frexpl.S
+++ /dev/null
@@ -1,92 +0,0 @@
-/* ix87 specific frexp implementation for long double.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
- .section .rodata
-
- .align ALIGNARG(4)
- .type two64,@object
-two64: .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x43
- ASM_SIZE_DIRECTIVE(two64)
-
-#ifdef PIC
-#define MO(op) op##@GOTOFF(%edx)
-#else
-#define MO(op) op
-#endif
-
-#define PARMS 4 /* no space for saved regs */
-#define VAL0 PARMS
-#define VAL1 VAL0+4
-#define VAL2 VAL1+4
-#define EXPP VAL2+4
-
- .text
-ENTRY (__frexpl)
-
- movl VAL0(%esp), %ecx
- movl VAL2(%esp), %eax
- orl VAL1(%esp), %ecx
- movl %eax, %edx
- andl $0x7fff, %eax
- orl %eax, %ecx
- jz 1f
- xorl %ecx, %ecx
- cmpl $0x7fff, %eax
- je 3f
-
- cmpl $0, %eax
- jne 2f
-
- fldt VAL0(%esp)
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
-
- fmull MO(two64) /* It's not necessary to use a 80bit factor */
- movl $-64, %ecx
- fstpt VAL0(%esp)
- fwait
- movl VAL2(%esp), %eax
- movl %eax, %edx
- andl $0x7fff, %eax
-
-2: andl $0x8000, %edx
- subl $16382, %eax
- orl $0x3ffe, %edx
- addl %eax, %ecx
- movl %edx, VAL2(%esp)
-
- /* Store %ecx in the variable pointed to by the second argument,
- get the factor from the stack and return. */
-1: movl EXPP(%esp), %eax
- fldt VAL0(%esp)
- movl %ecx, (%eax)
-
- ret
-
- /* Infinity or NaN; ensure signaling NaNs are quieted. */
-3: movl EXPP(%esp), %eax
- fldt VAL0(%esp)
- fadd %st
- movl %ecx, (%eax)
- ret
-END (__frexpl)
-weak_alias (__frexpl, frexpl)
diff --git a/sysdeps/i386/fpu/s_isinfl.c b/sysdeps/i386/fpu/s_isinfl.c
deleted file mode 100644
index cdd77183fa..0000000000
--- a/sysdeps/i386/fpu/s_isinfl.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Change for long double by Ulrich Drepper <drepper@cygnus.com>.
- * Intel i387 specific version.
- * Public domain.
- */
-
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: $";
-#endif
-
-/*
- * isinfl(x) returns 1 if x is inf, -1 if x is -inf, else 0;
- * no branching!
- */
-
-#include <math.h>
-#include <math_private.h>
-
-int __isinfl(long double x)
-{
- int32_t se,hx,lx;
- GET_LDOUBLE_WORDS(se,hx,lx,x);
- /* This additional ^ 0x80000000 is necessary because in Intel's
- internal representation of the implicit one is explicit. */
- lx |= (hx ^ 0x80000000) | ((se & 0x7fff) ^ 0x7fff);
- lx |= -lx;
- se &= 0x8000;
- return ~(lx >> 31) & (1 - (se >> 14));
-}
-hidden_def (__isinfl)
-weak_alias (__isinfl, isinfl)
diff --git a/sysdeps/i386/fpu/s_isnanl.c b/sysdeps/i386/fpu/s_isnanl.c
deleted file mode 100644
index 816396d8fb..0000000000
--- a/sysdeps/i386/fpu/s_isnanl.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* s_isnanl.c -- long double version for i387 of s_isnan.c.
- * Conversion to long double by Ulrich Drepper,
- * Cygnus Support, drepper@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.
- * ====================================================
- */
-
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: $";
-#endif
-
-/*
- * isnanl(x) returns 1 is x is nan, else 0;
- * no branching!
- */
-
-#include <math.h>
-#include <math_private.h>
-
-int __isnanl(long double x)
-{
- int32_t se,hx,lx;
- GET_LDOUBLE_WORDS(se,hx,lx,x);
- se = (se & 0x7fff) << 1;
- /* The additional & 0x7fffffff is required because Intel's
- extended format has the normally implicit 1 explicit
- present. Sigh! */
- lx |= hx & 0x7fffffff;
- se |= (u_int32_t)(lx|(-lx))>>31;
- se = 0xfffe - se;
- return (int)((u_int32_t)(se))>>16;
-}
-hidden_def (__isnanl)
-weak_alias (__isnanl, isnanl)
diff --git a/sysdeps/i386/fpu/s_llrint.S b/sysdeps/i386/fpu/s_llrint.S
deleted file mode 100644
index a597183aab..0000000000
--- a/sysdeps/i386/fpu/s_llrint.S
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Round argument to nearest integral value according to current rounding
- direction.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__llrint)
- fldl 4(%esp)
- subl $8, %esp
- cfi_adjust_cfa_offset (8)
- fistpll (%esp)
- fwait
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- ret
-END(__llrint)
-weak_alias (__llrint, llrint)
diff --git a/sysdeps/i386/fpu/s_llrintf.S b/sysdeps/i386/fpu/s_llrintf.S
deleted file mode 100644
index a4b574eccb..0000000000
--- a/sysdeps/i386/fpu/s_llrintf.S
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Round argument to nearest integral value according to current rounding
- direction.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__llrintf)
- flds 4(%esp)
- subl $8, %esp
- cfi_adjust_cfa_offset (8)
- fistpll (%esp)
- fwait
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- ret
-END(__llrintf)
-weak_alias (__llrintf, llrintf)
diff --git a/sysdeps/i386/fpu/s_llrintl.S b/sysdeps/i386/fpu/s_llrintl.S
deleted file mode 100644
index 7b48c02ef4..0000000000
--- a/sysdeps/i386/fpu/s_llrintl.S
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Round argument to nearest integral value according to current rounding
- direction.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__llrintl)
- fldt 4(%esp)
- subl $8, %esp
- cfi_adjust_cfa_offset (8)
- fistpll (%esp)
- fwait
- popl %eax
- cfi_adjust_cfa_offset (-4)
- popl %edx
- cfi_adjust_cfa_offset (-4)
- ret
-END(__llrintl)
-weak_alias (__llrintl, llrintl)
diff --git a/sysdeps/i386/fpu/s_log1p.S b/sysdeps/i386/fpu/s_log1p.S
deleted file mode 100644
index 7978e76095..0000000000
--- a/sysdeps/i386/fpu/s_log1p.S
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-RCSID("$NetBSD: s_log1p.S,v 1.7 1995/05/09 00:10:58 jtc Exp $")
-
- .section .rodata
-
- .align ALIGNARG(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
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
-/*
- * Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29,
- * otherwise fyl2x with the needed extra computation.
- */
- .text
-ENTRY(__log1p)
- fldln2
-
- fldl 4(%esp)
-
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
-
- fxam
- fnstsw
- fld %st
- sahf
- jc 3f // in case x is NaN or ħInf
-4: fabs
- fcompl MO(limit)
- fnstsw
- sahf
- jc 2f
-
- faddl MO(one)
- fyl2x
- ret
-
-2: fyl2xp1
- DBL_CHECK_FORCE_UFLOW_NONNAN
- ret
-
-3: jp 4b // in case x is ħInf
- fstp %st(1)
- fstp %st(1)
- ret
-
-END (__log1p)
diff --git a/sysdeps/i386/fpu/s_log1pf.S b/sysdeps/i386/fpu/s_log1pf.S
deleted file mode 100644
index acaa299d94..0000000000
--- a/sysdeps/i386/fpu/s_log1pf.S
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-RCSID("$NetBSD: s_log1pf.S,v 1.4 1995/05/09 00:13:05 jtc Exp $")
-
- .section .rodata
-
- .align ALIGNARG(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
-
-DEFINE_FLT_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
-/*
- * Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29,
- * otherwise fyl2x with the needed extra computation.
- */
- .text
-ENTRY(__log1pf)
- fldln2
-
- flds 4(%esp)
-
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
-
- fxam
- fnstsw
- fld %st
- sahf
- jc 3f // in case x is NaN or ħInf
-4: fabs
- fcomps MO(limit)
- fnstsw
- sahf
- jc 2f
-
- fadds MO(one)
- fyl2x
- ret
-
-2: fyl2xp1
- FLT_CHECK_FORCE_UFLOW_NONNAN
- ret
-
-3: jp 4b // in case x is ħInf
- fstp %st(1)
- fstp %st(1)
- ret
-
-END (__log1pf)
diff --git a/sysdeps/i386/fpu/s_log1pl.S b/sysdeps/i386/fpu/s_log1pl.S
deleted file mode 100644
index 0fd05cbdb3..0000000000
--- a/sysdeps/i386/fpu/s_log1pl.S
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- *
- * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_log1p.S,v 1.7 1995/05/09 00:10:58 jtc Exp $")
-
- .section .rodata
-
- .align ALIGNARG(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
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
-/*
- * Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29,
- * otherwise fyl2x with the needed extra computation.
- */
- .text
-ENTRY(__log1pl)
- fldln2
-
- fldt 4(%esp)
-
-#ifdef PIC
- LOAD_PIC_REG (dx)
-#endif
-
- fxam
- fnstsw
- fld %st
- sahf
- jc 3f // in case x is NaN or ħInf
-4:
- fabs
- fldt MO(limit)
- fcompp
- fnstsw
- sahf
- jnc 2f
-
- movzwl 4+8(%esp), %eax
- xorb $0x80, %ah
- cmpl $0xc040, %eax
- jae 5f
-
- faddl MO(one)
-5: fyl2x
- ret
-
-2: fyl2xp1
- ret
-
-3: jp 4b // in case x is ħInf
- fstp %st(1)
- fstp %st(1)
- fadd %st(0)
- ret
-
-END (__log1pl)
diff --git a/sysdeps/i386/fpu/s_logb.S b/sysdeps/i386/fpu/s_logb.S
deleted file mode 100644
index f78c091c8a..0000000000
--- a/sysdeps/i386/fpu/s_logb.S
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_logb.S,v 1.4 1995/05/09 00:14:30 jtc Exp $")
-
-ENTRY(__logb)
- fldl 4(%esp)
- fxtract
- fstp %st
- ret
-END (__logb)
-weak_alias (__logb, logb)
diff --git a/sysdeps/i386/fpu/s_logbf.S b/sysdeps/i386/fpu/s_logbf.S
deleted file mode 100644
index 91eb3d2925..0000000000
--- a/sysdeps/i386/fpu/s_logbf.S
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_logbf.S,v 1.3 1995/05/09 00:15:12 jtc Exp $")
-
-ENTRY(__logbf)
- flds 4(%esp)
- fxtract
- fstp %st
- ret
-END (__logbf)
-weak_alias (__logbf, logbf)
diff --git a/sysdeps/i386/fpu/s_logbl.c b/sysdeps/i386/fpu/s_logbl.c
deleted file mode 100644
index 391e2db489..0000000000
--- a/sysdeps/i386/fpu/s_logbl.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
-#include <math_private.h>
-
-long double
-__logbl (long double x)
-{
- long double res;
-
- asm ("fxtract\n"
- "fstp %%st" : "=t" (res) : "0" (x));
- return res;
-}
-
-weak_alias (__logbl, logbl)
diff --git a/sysdeps/i386/fpu/s_lrint.S b/sysdeps/i386/fpu/s_lrint.S
deleted file mode 100644
index 79a374b399..0000000000
--- a/sysdeps/i386/fpu/s_lrint.S
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Round argument to nearest integral value according to current rounding
- direction.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__lrint)
- fldl 4(%esp)
- subl $4, %esp
- cfi_adjust_cfa_offset (4)
- fistpl (%esp)
- fwait
- popl %eax
- cfi_adjust_cfa_offset (-4)
- ret
-END(__lrint)
-weak_alias (__lrint, lrint)
diff --git a/sysdeps/i386/fpu/s_lrintf.S b/sysdeps/i386/fpu/s_lrintf.S
deleted file mode 100644
index fc6e68e073..0000000000
--- a/sysdeps/i386/fpu/s_lrintf.S
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Round argument to nearest integral value according to current rounding
- direction.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__lrintf)
- flds 4(%esp)
- subl $4, %esp
- cfi_adjust_cfa_offset (4)
- fistpl (%esp)
- fwait
- popl %eax
- cfi_adjust_cfa_offset (-4)
- ret
-END(__lrintf)
-weak_alias (__lrintf, lrintf)
diff --git a/sysdeps/i386/fpu/s_lrintl.S b/sysdeps/i386/fpu/s_lrintl.S
deleted file mode 100644
index ba6dbdf44c..0000000000
--- a/sysdeps/i386/fpu/s_lrintl.S
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Round argument to nearest integral value according to current rounding
- direction.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .text
-ENTRY(__lrintl)
- fldt 4(%esp)
- subl $4, %esp
- cfi_adjust_cfa_offset (4)
- fistpl (%esp)
- fwait
- popl %eax
- cfi_adjust_cfa_offset (-4)
- ret
-END(__lrintl)
-weak_alias (__lrintl, lrintl)
diff --git a/sysdeps/i386/fpu/s_nearbyint.S b/sysdeps/i386/fpu/s_nearbyint.S
deleted file mode 100644
index f7b79b6ff2..0000000000
--- a/sysdeps/i386/fpu/s_nearbyint.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-/* Adapted for use as nearbyint by Ulrich Drepper <drepper@cygnus.com>. */
-
-#include <machine/asm.h>
-
-ENTRY(__nearbyint)
- fldl 4(%esp)
- subl $32, %esp
- cfi_adjust_cfa_offset (32)
- fnstenv 4(%esp)
- frndint
- fldenv 4(%esp)
- addl $32, %esp
- cfi_adjust_cfa_offset (-32)
- ret
-END (__nearbyint)
-weak_alias (__nearbyint, nearbyint)
diff --git a/sysdeps/i386/fpu/s_nearbyintf.S b/sysdeps/i386/fpu/s_nearbyintf.S
deleted file mode 100644
index 92df2f87b3..0000000000
--- a/sysdeps/i386/fpu/s_nearbyintf.S
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-/* Adapted for use as nearbyint by Ulrich Drepper <drepper@cygnus.com>. */
-
-#include <machine/asm.h>
-
-ENTRY(__nearbyintf)
- flds 4(%esp)
- subl $32, %esp
- cfi_adjust_cfa_offset (32)
- fnstenv 4(%esp)
- frndint
- fldenv 4(%esp)
- addl $32, %esp
- cfi_adjust_cfa_offset (-32)
- ret
-END (__nearbyintf)
-weak_alias (__nearbyintf, nearbyintf)
diff --git a/sysdeps/i386/fpu/s_nearbyintl.S b/sysdeps/i386/fpu/s_nearbyintl.S
deleted file mode 100644
index 3b7d1e2436..0000000000
--- a/sysdeps/i386/fpu/s_nearbyintl.S
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-/* Adapted for use as nearbyint by Ulrich Drepper <drepper@cygnus.com>. */
-
-#include <machine/asm.h>
-
-ENTRY(__nearbyintl)
- fldt 4(%esp)
- subl $32, %esp
- cfi_adjust_cfa_offset (32)
- fnstenv 4(%esp)
- frndint
- fnstsw
- andl $0x1, %eax
- orl %eax, 8(%esp)
- fldenv 4(%esp)
- addl $32, %esp
- cfi_adjust_cfa_offset (-32)
- ret
-END (__nearbyintl)
-weak_alias (__nearbyintl, nearbyintl)
diff --git a/sysdeps/i386/fpu/s_nextafterl.c b/sysdeps/i386/fpu/s_nextafterl.c
deleted file mode 100644
index 600ad7a8d3..0000000000
--- a/sysdeps/i386/fpu/s_nextafterl.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* s_nextafterl.c -- long double version of s_nextafter.c.
- * Special version for i387.
- * Conversion to long double by Ulrich Drepper,
- * Cygnus Support, drepper@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.
- * ====================================================
- */
-
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: $";
-#endif
-
-/* IEEE functions
- * nextafterl(x,y)
- * return the next machine floating-point number of x in the
- * direction toward y.
- * Special cases:
- */
-
-#include <errno.h>
-#include <math.h>
-#include <math_private.h>
-
-long double __nextafterl(long double x, long double y)
-{
- u_int32_t hx,hy,ix,iy;
- u_int32_t lx,ly;
- int32_t esx,esy;
-
- GET_LDOUBLE_WORDS(esx,hx,lx,x);
- GET_LDOUBLE_WORDS(esy,hy,ly,y);
- ix = esx&0x7fff; /* |x| */
- iy = esy&0x7fff; /* |y| */
-
- /* Intel's extended format has the normally implicit 1 explicit
- present. Sigh! */
- if(((ix==0x7fff)&&(((hx&0x7fffffff)|lx)!=0)) || /* x is nan */
- ((iy==0x7fff)&&(((hy&0x7fffffff)|ly)!=0))) /* y is nan */
- return x+y;
- if(x==y) return y; /* x=y, return y */
- if((ix|hx|lx)==0) { /* x == 0 */
- long double u;
- SET_LDOUBLE_WORDS(x,esy&0x8000,0,1);/* return +-minsubnormal */
- u = math_opt_barrier (x);
- u = u * u;
- math_force_eval (u); /* raise underflow flag */
- return x;
- }
- if(esx>=0) { /* x > 0 */
- if(esx>esy||((esx==esy) && (hx>hy||((hx==hy)&&(lx>ly))))) {
- /* x > y, x -= ulp */
- if(lx==0) {
- if (hx <= 0x80000000) {
- if (esx == 0) {
- --hx;
- } else {
- esx -= 1;
- hx = hx - 1;
- if (esx > 0)
- hx |= 0x80000000;
- }
- } else
- hx -= 1;
- }
- lx -= 1;
- } else { /* x < y, x += ulp */
- lx += 1;
- if(lx==0) {
- hx += 1;
- if (hx==0 || (esx == 0 && hx == 0x80000000)) {
- esx += 1;
- hx |= 0x80000000;
- }
- }
- }
- } else { /* x < 0 */
- if(esy>=0||(esx>esy||((esx==esy)&&(hx>hy||((hx==hy)&&(lx>ly)))))){
- /* x < y, x -= ulp */
- if(lx==0) {
- if (hx <= 0x80000000 && esx != 0xffff8000) {
- esx -= 1;
- hx = hx - 1;
- if ((esx&0x7fff) > 0)
- hx |= 0x80000000;
- } else
- hx -= 1;
- }
- lx -= 1;
- } else { /* x > y, x += ulp */
- lx += 1;
- if(lx==0) {
- hx += 1;
- if (hx==0 || (esx == 0xffff8000 && hx == 0x80000000)) {
- esx += 1;
- hx |= 0x80000000;
- }
- }
- }
- }
- esy = esx&0x7fff;
- if(esy==0x7fff) {
- long double u = x + x; /* overflow */
- math_force_eval (u);
- __set_errno (ERANGE);
- }
- if(esy==0) {
- long double u = x*x; /* underflow */
- math_force_eval (u); /* raise underflow flag */
- __set_errno (ERANGE);
- }
- SET_LDOUBLE_WORDS(x,esx,hx,lx);
- return x;
-}
-weak_alias (__nextafterl, nextafterl)
-strong_alias (__nextafterl, __nexttowardl)
-weak_alias (__nextafterl, nexttowardl)
diff --git a/sysdeps/i386/fpu/s_nexttoward.c b/sysdeps/i386/fpu/s_nexttoward.c
deleted file mode 100644
index 0b47044760..0000000000
--- a/sysdeps/i386/fpu/s_nexttoward.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/* s_nexttoward.c
- * Special i387 version
- * Conversion from s_nextafter.c by Ulrich Drepper, Cygnus Support,
- * drepper@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.
- * ====================================================
- */
-
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: $";
-#endif
-
-/* IEEE functions
- * nexttoward(x,y)
- * return the next machine floating-point number of x in the
- * direction toward y.
- * Special cases:
- */
-
-#include <errno.h>
-#include <math.h>
-#include <math_private.h>
-#include <float.h>
-
-double __nexttoward(double x, long double y)
-{
- int32_t hx,ix,iy;
- u_int32_t lx,hy,ly,esy;
-
- EXTRACT_WORDS(hx,lx,x);
- GET_LDOUBLE_WORDS(esy,hy,ly,y);
- ix = hx&0x7fffffff; /* |x| */
- iy = esy&0x7fff; /* |y| */
-
- /* Intel's extended format has the normally implicit 1 explicit
- present. Sigh! */
- if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || /* x is nan */
- ((iy>=0x7fff)&&((hy&0x7fffffff)|ly)!=0)) /* y is nan */
- return x+y;
- if((long double) x==y) return y; /* x=y, return y */
- if((ix|lx)==0) { /* x == 0 */
- double u;
- INSERT_WORDS(x,(esy&0x8000)<<16,1); /* return +-minsub */
- u = math_opt_barrier (x);
- u = u * u;
- math_force_eval (u); /* raise underflow flag */
- return x;
- }
- if(hx>=0) { /* x > 0 */
- if (x > y) { /* x -= ulp */
- if(lx==0) hx -= 1;
- lx -= 1;
- } else { /* x < y, x += ulp */
- lx += 1;
- if(lx==0) hx += 1;
- }
- } else { /* x < 0 */
- if (x < y) { /* x -= ulp */
- if(lx==0) hx -= 1;
- lx -= 1;
- } else { /* x > y, x += ulp */
- lx += 1;
- if(lx==0) hx += 1;
- }
- }
- hy = hx&0x7ff00000;
- if(hy>=0x7ff00000) {
- double u = x+x; /* overflow */
- math_force_eval (u);
- __set_errno (ERANGE);
- }
- if(hy<0x00100000) {
- double u = x*x; /* underflow */
- math_force_eval (u); /* raise underflow flag */
- __set_errno (ERANGE);
- }
- INSERT_WORDS(x,hx,lx);
- return x;
-}
-weak_alias (__nexttoward, nexttoward)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__nexttoward, __nexttowardl)
-weak_alias (__nexttoward, nexttowardl)
-#endif
diff --git a/sysdeps/i386/fpu/s_nexttowardf.c b/sysdeps/i386/fpu/s_nexttowardf.c
deleted file mode 100644
index e1156d1e4f..0000000000
--- a/sysdeps/i386/fpu/s_nexttowardf.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* s_nexttowardf.c -- float version of s_nextafter.c.
- * Special i387 version.
- * 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.
- * ====================================================
- */
-
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: $";
-#endif
-
-#include <errno.h>
-#include <math.h>
-#include <math_private.h>
-#include <float.h>
-
-float __nexttowardf(float x, long double y)
-{
- int32_t hx,ix,iy;
- u_int32_t hy,ly,esy;
-
- GET_FLOAT_WORD(hx,x);
- GET_LDOUBLE_WORDS(esy,hy,ly,y);
- ix = hx&0x7fffffff; /* |x| */
- iy = esy&0x7fff; /* |y| */
-
- /* Intel's extended format has the normally implicit 1 explicit
- present. Sigh! */
- if((ix>0x7f800000) || /* x is nan */
- (iy>=0x7fff&&(((hy&0x7fffffff)|ly)!=0))) /* y is nan */
- return x+y;
- if((long double) x==y) return y; /* x=y, return y */
- if(ix==0) { /* x == 0 */
- float u;
- SET_FLOAT_WORD(x,((esy&0x8000)<<16)|1);/* return +-minsub*/
- u = math_opt_barrier (x);
- u = u * u;
- math_force_eval (u); /* raise underflow flag */
- return x;
- }
- if(hx>=0) { /* x > 0 */
- if(x > y) { /* x -= ulp */
- hx -= 1;
- } else { /* x < y, x += ulp */
- hx += 1;
- }
- } else { /* x < 0 */
- if(x < y) { /* x -= ulp */
- hx -= 1;
- } else { /* x > y, x += ulp */
- hx += 1;
- }
- }
- hy = hx&0x7f800000;
- if(hy>=0x7f800000) {
- float u = x+x; /* overflow */
- math_force_eval (u);
- __set_errno (ERANGE);
- }
- if(hy<0x00800000) {
- float u = x*x; /* underflow */
- math_force_eval (u); /* raise underflow flag */
- __set_errno (ERANGE);
- }
- SET_FLOAT_WORD(x,hx);
- return x;
-}
-weak_alias (__nexttowardf, nexttowardf)
diff --git a/sysdeps/i386/fpu/s_remquo.S b/sysdeps/i386/fpu/s_remquo.S
deleted file mode 100644
index 341285db30..0000000000
--- a/sysdeps/i386/fpu/s_remquo.S
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Written by Ulrich Drepper <drepper@cygnus.com>.
- * Based on e_remainder by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-#define PARMS 4 /* no space for saved regs */
-#define DVDND PARMS
-#define DVSOR DVDND+8
-#define QUOP DVSOR+8
-
- .text
-ENTRY (__remquo)
-
- fldl DVSOR(%esp)
- fldl DVDND(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- /* Compute the congruent of the quotient. */
- movl %eax, %ecx
- shrl $8, %eax
- shrl $12, %ecx
- andl $4, %ecx
- andl $3, %eax
- orl %eax, %ecx
- leal (%ecx,%ecx,2),%ecx
- movl $0xef2a60, %eax
- shrl %cl, %eax
- andl $7, %eax
- movl QUOP(%esp), %ecx
- movl DVDND+4(%esp), %edx
- xorl DVSOR+4(%esp), %edx
- testl $0x80000000, %edx
- jz 1f
- negl %eax
-1: movl %eax, (%ecx)
-
- ret
-END (__remquo)
-weak_alias (__remquo, remquo)
diff --git a/sysdeps/i386/fpu/s_remquof.S b/sysdeps/i386/fpu/s_remquof.S
deleted file mode 100644
index 62063f068f..0000000000
--- a/sysdeps/i386/fpu/s_remquof.S
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Written by Ulrich Drepper <drepper@cygnus.com>.
- * Based on e_remainder by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-#define PARMS 4 /* no space for saved regs */
-#define DVDND PARMS
-#define DVSOR DVDND+4
-#define QUOP DVSOR+4
-
- .text
-ENTRY (__remquof)
-
- flds DVSOR(%esp)
- flds DVDND(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- /* Compute the congruent of the quotient. */
- movl %eax, %ecx
- shrl $8, %eax
- shrl $12, %ecx
- andl $4, %ecx
- andl $3, %eax
- orl %eax, %ecx
- leal (%ecx,%ecx,2),%ecx
- movl $0xef2a60, %eax
- shrl %cl, %eax
- andl $7, %eax
- movl QUOP(%esp), %ecx
- movl DVDND(%esp), %edx
- xorl DVSOR(%esp), %edx
- testl $0x80000000, %edx
- jz 1f
- negl %eax
-1: movl %eax, (%ecx)
-
- ret
-END (__remquof)
-weak_alias (__remquof, remquof)
diff --git a/sysdeps/i386/fpu/s_remquol.S b/sysdeps/i386/fpu/s_remquol.S
deleted file mode 100644
index f3d84fc7c2..0000000000
--- a/sysdeps/i386/fpu/s_remquol.S
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Written by Ulrich Drepper <drepper@cygnus.com>.
- * Based on e_remainder by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-#define PARMS 4 /* no space for saved regs */
-#define DVDND PARMS
-#define DVSOR DVDND+12
-#define QUOP DVSOR+12
-
- .text
-ENTRY (__remquol)
-
- fldt DVSOR(%esp)
- fldt DVDND(%esp)
-1: fprem1
- fstsw %ax
- sahf
- jp 1b
- fstp %st(1)
- /* Compute the congruent of the quotient. */
- movl %eax, %ecx
- shrl $8, %eax
- shrl $12, %ecx
- andl $4, %ecx
- andl $3, %eax
- orl %eax, %ecx
- leal (%ecx,%ecx,2),%ecx
- movl $0xef2a60, %eax
- shrl %cl, %eax
- andl $7, %eax
- movl QUOP(%esp), %ecx
- movl DVDND+8(%esp), %edx
- xorl DVSOR+8(%esp), %edx
- testl $0x8000, %edx
- jz 1f
- negl %eax
-1: movl %eax, (%ecx)
-
- ret
-END (__remquol)
-weak_alias (__remquol, remquol)
diff --git a/sysdeps/i386/fpu/s_rint.S b/sysdeps/i386/fpu/s_rint.S
deleted file mode 100644
index be36c5f0ca..0000000000
--- a/sysdeps/i386/fpu/s_rint.S
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_rint.S,v 1.4 1995/05/09 00:16:08 jtc Exp $")
-
-ENTRY(__rint)
- fldl 4(%esp)
- frndint
- ret
-END (__rint)
-weak_alias (__rint, rint)
diff --git a/sysdeps/i386/fpu/s_rintf.S b/sysdeps/i386/fpu/s_rintf.S
deleted file mode 100644
index 2b358c1cf1..0000000000
--- a/sysdeps/i386/fpu/s_rintf.S
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_rintf.S,v 1.3 1995/05/09 00:17:22 jtc Exp $")
-
-ENTRY(__rintf)
- flds 4(%esp)
- frndint
- ret
-END (__rintf)
-weak_alias (__rintf, rintf)
diff --git a/sysdeps/i386/fpu/s_rintl.c b/sysdeps/i386/fpu/s_rintl.c
deleted file mode 100644
index 66af9cb675..0000000000
--- a/sysdeps/i386/fpu/s_rintl.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
-#include <math_private.h>
-
-long double
-__rintl (long double x)
-{
- long double res;
-
- asm ("frndint" : "=t" (res) : "0" (x));
- return res;
-}
-
-weak_alias (__rintl, rintl)
diff --git a/sysdeps/i386/fpu/s_scalbln.c b/sysdeps/i386/fpu/s_scalbln.c
deleted file mode 100644
index 1009713fbc..0000000000
--- a/sysdeps/i386/fpu/s_scalbln.c
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Nothing to do. This function is the same as scalbn. So we define an
- alias. */
diff --git a/sysdeps/i386/fpu/s_scalblnf.c b/sysdeps/i386/fpu/s_scalblnf.c
deleted file mode 100644
index 5e558c3540..0000000000
--- a/sysdeps/i386/fpu/s_scalblnf.c
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Nothing to do. This function is the same as scalbnf. So we define an
- alias. */
diff --git a/sysdeps/i386/fpu/s_scalblnl.c b/sysdeps/i386/fpu/s_scalblnl.c
deleted file mode 100644
index cda2ec11c8..0000000000
--- a/sysdeps/i386/fpu/s_scalblnl.c
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Nothing to do. This function is the same as scalbnl. So we define an
- alias. */
diff --git a/sysdeps/i386/fpu/s_scalbn.S b/sysdeps/i386/fpu/s_scalbn.S
deleted file mode 100644
index 4e90903115..0000000000
--- a/sysdeps/i386/fpu/s_scalbn.S
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-RCSID("$NetBSD: s_scalbn.S,v 1.4 1995/05/09 00:19:06 jtc Exp $")
-
-ENTRY(__scalbn)
- fildl 12(%esp)
- fldl 4(%esp)
- fscale
- fstp %st(1)
- DBL_NARROW_EVAL
- ret
-END (__scalbn)
-strong_alias (__scalbn, __scalbln)
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_20)
-compat_symbol (libc, __scalbn, scalbln, GLIBC_2_1);
-#endif
diff --git a/sysdeps/i386/fpu/s_scalbnf.S b/sysdeps/i386/fpu/s_scalbnf.S
deleted file mode 100644
index f8353c4c75..0000000000
--- a/sysdeps/i386/fpu/s_scalbnf.S
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-
-RCSID("$NetBSD: s_scalbnf.S,v 1.3 1995/05/09 00:19:59 jtc Exp $")
-
-ENTRY(__scalbnf)
- fildl 8(%esp)
- flds 4(%esp)
- fscale
- fstp %st(1)
- FLT_NARROW_EVAL
- ret
-END (__scalbnf)
-strong_alias (__scalbnf, __scalblnf)
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_20)
-compat_symbol (libc, __scalbnf, scalblnf, GLIBC_2_1);
-#endif
diff --git a/sysdeps/i386/fpu/s_scalbnl.S b/sysdeps/i386/fpu/s_scalbnl.S
deleted file mode 100644
index 839b5ff353..0000000000
--- a/sysdeps/i386/fpu/s_scalbnl.S
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: $")
-
-ENTRY(__scalbnl)
- fildl 16(%esp)
- fldt 4(%esp)
- fscale
- fstp %st(1)
- ret
-END (__scalbnl)
-strong_alias (__scalbnl, __scalblnl)
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_20)
-compat_symbol (libc, __scalbnl, scalblnl, GLIBC_2_1);
-#endif
diff --git a/sysdeps/i386/fpu/s_significand.S b/sysdeps/i386/fpu/s_significand.S
deleted file mode 100644
index 4859b7ed71..0000000000
--- a/sysdeps/i386/fpu/s_significand.S
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_significand.S,v 1.4 1995/05/09 00:21:47 jtc Exp $")
-
-ENTRY(__significand)
- fldl 4(%esp)
- fxtract
- fstp %st(1)
- ret
-END (__significand)
-weak_alias (__significand, significand)
diff --git a/sysdeps/i386/fpu/s_significandf.S b/sysdeps/i386/fpu/s_significandf.S
deleted file mode 100644
index 3a2de97759..0000000000
--- a/sysdeps/i386/fpu/s_significandf.S
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-RCSID("$NetBSD: s_significandf.S,v 1.3 1995/05/09 00:24:07 jtc Exp $")
-
-ENTRY(__significandf)
- flds 4(%esp)
- fxtract
- fstp %st(1)
- ret
-END (__significandf)
-weak_alias (__significandf, significandf)
diff --git a/sysdeps/i386/fpu/s_significandl.c b/sysdeps/i386/fpu/s_significandl.c
deleted file mode 100644
index b8cb093502..0000000000
--- a/sysdeps/i386/fpu/s_significandl.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Changes for long double by Ulrich Drepper <drepper@cygnus.com>
- * Public domain.
- */
-
-#include <math_private.h>
-
-long double
-__significandl (long double x)
-{
- long double res;
-
- asm ("fxtract\n"
- "fstp %%st(1)" : "=t" (res) : "0" (x));
- return res;
-}
-
-weak_alias (__significandl, significandl)
diff --git a/sysdeps/i386/fpu/s_trunc.S b/sysdeps/i386/fpu/s_trunc.S
deleted file mode 100644
index e9a850b877..0000000000
--- a/sysdeps/i386/fpu/s_trunc.S
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Truncate double value.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
-ENTRY(__trunc)
- fldl 4(%esp)
- subl $32, %esp
- cfi_adjust_cfa_offset (32)
- fnstenv 4(%esp)
- movl $0xc00, %edx
- orl 4(%esp), %edx
- movl %edx, (%esp)
- fldcw (%esp)
- frndint
- fldenv 4(%esp)
- addl $32, %esp
- cfi_adjust_cfa_offset (-32)
- ret
-END(__trunc)
-weak_alias (__trunc, trunc)
diff --git a/sysdeps/i386/fpu/s_truncf.S b/sysdeps/i386/fpu/s_truncf.S
deleted file mode 100644
index a93f5b9a2e..0000000000
--- a/sysdeps/i386/fpu/s_truncf.S
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Truncate float value.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
-ENTRY(__truncf)
- flds 4(%esp)
- subl $32, %esp
- cfi_adjust_cfa_offset (32)
- fnstenv 4(%esp)
- movl $0xc00, %edx
- orl 4(%esp), %edx
- movl %edx, (%esp)
- fldcw (%esp)
- frndint
- fldenv 4(%esp)
- addl $32, %esp
- cfi_adjust_cfa_offset (-32)
- ret
-END(__truncf)
-weak_alias (__truncf, truncf)
diff --git a/sysdeps/i386/fpu/s_truncl.S b/sysdeps/i386/fpu/s_truncl.S
deleted file mode 100644
index a884123612..0000000000
--- a/sysdeps/i386/fpu/s_truncl.S
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Truncate long double value.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <machine/asm.h>
-
-ENTRY(__truncl)
- fldt 4(%esp)
- subl $32, %esp
- cfi_adjust_cfa_offset (32)
- fnstenv 4(%esp)
- movl $0xc00, %edx
- orl 4(%esp), %edx
- movl %edx, (%esp)
- fldcw (%esp)
- frndint
- fnstsw
- andl $0x1, %eax
- orl %eax, 8(%esp)
- fldenv 4(%esp)
- addl $32, %esp
- cfi_adjust_cfa_offset (-32)
- ret
-END(__truncl)
-weak_alias (__truncl, truncl)
diff --git a/sysdeps/i386/fpu/slowexp.c b/sysdeps/i386/fpu/slowexp.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/slowexp.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/slowpow.c b/sysdeps/i386/fpu/slowpow.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/slowpow.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed. */
diff --git a/sysdeps/i386/fpu/t_exp.c b/sysdeps/i386/fpu/t_exp.c
deleted file mode 100644
index fd37963b05..0000000000
--- a/sysdeps/i386/fpu/t_exp.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Empty. Not needed. */
diff --git a/sysdeps/i386/fpu/w_sqrt_compat.c b/sysdeps/i386/fpu/w_sqrt_compat.c
deleted file mode 100644
index ddd36d0964..0000000000
--- a/sysdeps/i386/fpu/w_sqrt_compat.c
+++ /dev/null
@@ -1,8 +0,0 @@
-/* The inline __ieee754_sqrt is not correctly rounding; it's OK for
- most internal uses in glibc, but not for sqrt itself. */
-#define __ieee754_sqrt __avoid_ieee754_sqrt
-#include <math.h>
-#include <math_private.h>
-#undef __ieee754_sqrt
-extern double __ieee754_sqrt (double);
-#include <math/w_sqrt_compat.c>