diff options
Diffstat (limited to 'sysdeps/i386/fpu')
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> |