This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.15-1182-g3ee947b


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  3ee947b1244a4562e8934b98f39e17f98d2309da (commit)
      from  62c8cc6dbe750113907547e847ddc5d5aa108828 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=3ee947b1244a4562e8934b98f39e17f98d2309da

commit 3ee947b1244a4562e8934b98f39e17f98d2309da
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Jun 18 11:09:58 2012 -0700

    Use __volatile__ to access fpu control word

diff --git a/ChangeLog b/ChangeLog
index 3b7f988..9983dca 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-06-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+	[BZ #14117]
+	* sysdeps/x86_64/fpu_control.h (_FPU_GETCW): Add __volatile__.
+	(_FPU_SETCW): Likewise.
+
 2012-06-15  H.J. Lu  <hongjiu.lu@intel.com>
 
 	[BZ #14117]
diff --git a/sysdeps/x86_64/fpu_control.h b/sysdeps/x86_64/fpu_control.h
index 61bc30e..605302c 100644
--- a/sysdeps/x86_64/fpu_control.h
+++ b/sysdeps/x86_64/fpu_control.h
@@ -1,5 +1,5 @@
-/* FPU control word bits.  x86-64 version.
-   Copyright (C) 1993,1995,1996,1997,1998,2000,2001,2002 Free Software Foundation, Inc.
+/* FPU control word bits.  x86 version.
+   Copyright (C) 1993-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Olaf Flebbe.
 
@@ -90,9 +90,18 @@
 /* Type of the control word.  */
 typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__)));
 
-/* Macros for accessing the hardware control word.  */
-#define _FPU_GETCW(cw) __asm__ ("fnstcw %0" : "=m" (*&cw))
-#define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (*&cw))
+/* Macros for accessing the hardware control word.  "*&" is used to
+   work around a bug in older versions of GCC.  __volatile__ is used
+   to support combination of writing the control register and reading
+   it back.  Without __volatile__, the old value may be used for reading
+   back under compiler optimization.
+
+   Note that the use of these macros is not sufficient anymore with
+   recent hardware nor on x86-64.  Some floating point operations are
+   executed in the SSE/SSE2 engines which have their own control and
+   status register.  */
+#define _FPU_GETCW(cw) __asm__ __volatile__ ("fnstcw %0" : "=m" (*&cw))
+#define _FPU_SETCW(cw) __asm__ __volatile__ ("fldcw %0" : : "m" (*&cw))
 
 /* Default control word set at startup.  */
 extern fpu_control_t __fpu_control;

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                    |    6 ++++++
 sysdeps/x86_64/fpu_control.h |   19 ++++++++++++++-----
 2 files changed, 20 insertions(+), 5 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]