Also retrieve SSE exceptions in x86-32 fegetexceptflag

This commit is contained in:
Ulrich Drepper 2011-12-22 16:28:08 -05:00
parent f311e884ec
commit db910efdbd
3 changed files with 28 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2011-12-22 Ulrich Drepper <drepper@gmail.com>
[BZ #13185]
* sysdeps/i386/fpu/fgetexcptflg.c (__fegetexceptflag): Also return
SSE flags if possible.
2011-12-22 Liubov Dmitrieva <liubov.dmitrieva@gmail.com>
* sysdeps/i386/i686/multiarch/strcpy-ssse3.S: Fix wrong copying

8
NEWS
View File

@ -11,10 +11,10 @@ Version 2.15
6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874,
12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090,
13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13189,
13192, 13268, 13276, 13282, 13291, 13305, 13328, 13335, 13337, 13344,
13358, 13367, 13413, 13416, 13423, 13439, 13446, 13472, 13484, 13506,
13515, 13523, 13524, 13538
13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13185,
13189, 13192, 13268, 13276, 13282, 13291, 13305, 13328, 13335, 13337,
13344, 13358, 13367, 13413, 13416, 13423, 13439, 13446, 13472, 13484,
13506, 13515, 13523, 13524, 13538
* New program pldd to list loaded object of a process
Implemented by Ulrich Drepper.

View File

@ -1,5 +1,5 @@
/* Store current representation for exceptions.
Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc.
Copyright (C) 1997,99,2000,01,11 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -19,7 +19,10 @@
02111-1307 USA. */
#include <fenv.h>
#include <bp-sym.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
int
__fegetexceptflag (fexcept_t *flagp, int excepts)
@ -31,6 +34,17 @@ __fegetexceptflag (fexcept_t *flagp, int excepts)
*flagp = temp & excepts & FE_ALL_EXCEPT;
/* If the CPU supports SSE, we clear the MXCSR as well. */
if ((GLRO(dl_hwcap) & HWCAP_I386_XMM) != 0)
{
unsigned int sse_exc;
/* Get the current MXCSR. */
__asm__ ("stmxcsr %0" : "=m" (*&sse_exc));
*flagp |= sse_exc & excepts & FE_ALL_EXCEPT;
}
/* Success. */
return 0;
}
@ -38,7 +52,7 @@ __fegetexceptflag (fexcept_t *flagp, int excepts)
#include <shlib-compat.h>
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
strong_alias (__fegetexceptflag, __old_fegetexceptflag)
compat_symbol (libm, BP_SYM (__old_fegetexceptflag), BP_SYM (fegetexceptflag), GLIBC_2_1);
compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1);
#endif
versioned_symbol (libm, BP_SYM (__fegetexceptflag), BP_SYM (fegetexceptflag), GLIBC_2_2);
versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2);