diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | sysdeps/i386/fpu/Implies | 1 | ||||
-rw-r--r-- | sysdeps/i386/fpu/bits/fenv.h | 137 | ||||
-rw-r--r-- | sysdeps/x86/fpu/bits/fenv.h (renamed from sysdeps/x86_64/fpu/bits/fenv.h) | 0 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/Implies | 1 |
5 files changed, 8 insertions, 137 deletions
@@ -1,6 +1,12 @@ 2012-06-06 H.J. Lu <hongjiu.lu@intel.com> [BZ #14117] + * sysdeps/i386/fpu/bits/fenv.h: Removed. + * sysdeps/i386/fpu/Implies: New file. + * sysdeps/x86_64/fpu/Implies: Likewise. + * sysdeps/x86_64/fpu/bits/fenv.h: Renamed to ... + * sysdeps/x86/fpu/bits/fenv.h: This. + * sysdeps/x86_64/fpu/bits/fenv.h (feraiseexcept): Check __SSE_MATH__. diff --git a/sysdeps/i386/fpu/Implies b/sysdeps/i386/fpu/Implies new file mode 100644 index 0000000000..2b745a34fb --- /dev/null +++ b/sysdeps/i386/fpu/Implies @@ -0,0 +1 @@ +x86/fpu diff --git a/sysdeps/i386/fpu/bits/fenv.h b/sysdeps/i386/fpu/bits/fenv.h deleted file mode 100644 index e71ceb7b3d..0000000000 --- a/sysdeps/i386/fpu/bits/fenv.h +++ /dev/null @@ -1,137 +0,0 @@ -/* Copyright (C) 1997-2012 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 _FENV_H -# error "Never use <bits/fenv.h> directly; include <fenv.h> instead." -#endif - - -/* Define bits representing the exception. We use the bit positions - of the appropriate bits in the FPU control word. */ -enum - { - FE_INVALID = 0x01, -#define FE_INVALID FE_INVALID - __FE_DENORM = 0x02, - FE_DIVBYZERO = 0x04, -#define FE_DIVBYZERO FE_DIVBYZERO - FE_OVERFLOW = 0x08, -#define FE_OVERFLOW FE_OVERFLOW - FE_UNDERFLOW = 0x10, -#define FE_UNDERFLOW FE_UNDERFLOW - FE_INEXACT = 0x20 -#define FE_INEXACT FE_INEXACT - }; - -#define FE_ALL_EXCEPT \ - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) - -/* The ix87 FPU supports all of the four defined rounding modes. We - use again the bit positions in the FPU control word as the values - for the appropriate macros. */ -enum - { - FE_TONEAREST = 0, -#define FE_TONEAREST FE_TONEAREST - FE_DOWNWARD = 0x400, -#define FE_DOWNWARD FE_DOWNWARD - FE_UPWARD = 0x800, -#define FE_UPWARD FE_UPWARD - FE_TOWARDZERO = 0xc00 -#define FE_TOWARDZERO FE_TOWARDZERO - }; - - -/* Type representing exception flags. */ -typedef unsigned short int fexcept_t; - - -/* Type representing floating-point environment. This function corresponds - to the layout of the block written by the `fstenv'. */ -typedef struct - { - unsigned short int __control_word; - unsigned short int __unused1; - unsigned short int __status_word; - unsigned short int __unused2; - unsigned short int __tags; - unsigned short int __unused3; - unsigned int __eip; - unsigned short int __cs_selector; - unsigned int __opcode:11; - unsigned int __unused4:5; - unsigned int __data_offset; - unsigned short int __data_selector; - unsigned short int __unused5; - } -fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exception is masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) -2) -#endif - - -#ifdef __USE_EXTERN_INLINES -__BEGIN_DECLS - -/* Optimized versions. */ -extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), feraiseexcept); -__extern_inline int -__NTH (feraiseexcept (int __excepts)) -{ - if (__builtin_constant_p (__excepts) - && (__excepts & ~(FE_INVALID | FE_DIVBYZERO)) == 0) - { - if ((FE_INVALID & __excepts) != 0) - { - /* One example of a invalid operation is 0.0 / 0.0. */ - float __f = 0.0; - -# ifdef __SSE_MATH__ - __asm__ __volatile__ ("divss %0, %0 " : : "x" (__f)); -# else - __asm__ __volatile__ ("fdiv %%st, %%st(0); fwait" - : "=t" (__f) : "0" (__f)); -# endif - (void) &__f; - } - if ((FE_DIVBYZERO & __excepts) != 0) - { - float __f = 1.0; - float __g = 0.0; - -# ifdef __SSE_MATH__ - __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g)); -# else - __asm__ __volatile__ ("fdivp %%st, %%st(1); fwait" - : "=t" (__f) : "0" (__f), "u" (__g) : "st(1)"); -# endif - (void) &__f; - } - - return 0; - } - - return __feraiseexcept_renamed (__excepts); -} - -__END_DECLS -#endif diff --git a/sysdeps/x86_64/fpu/bits/fenv.h b/sysdeps/x86/fpu/bits/fenv.h index b2c01c403f..b2c01c403f 100644 --- a/sysdeps/x86_64/fpu/bits/fenv.h +++ b/sysdeps/x86/fpu/bits/fenv.h diff --git a/sysdeps/x86_64/fpu/Implies b/sysdeps/x86_64/fpu/Implies new file mode 100644 index 0000000000..2b745a34fb --- /dev/null +++ b/sysdeps/x86_64/fpu/Implies @@ -0,0 +1 @@ +x86/fpu |