about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRoland McGrath <roland@hack.frob.com>2012-04-09 12:20:48 -0700
committerRoland McGrath <roland@hack.frob.com>2012-04-09 12:20:48 -0700
commit8de131cbff365a34392ee3314ee5ea8007a877fe (patch)
tree6f3a27f5f6bdb76b0c8a2ce56b2c1cc0ab04362a
parentc0ed9d7d2be861dc01cd6051415b8a8f1f5fa2aa (diff)
downloadglibc-8de131cbff365a34392ee3314ee5ea8007a877fe.tar.gz
glibc-8de131cbff365a34392ee3314ee5ea8007a877fe.tar.xz
glibc-8de131cbff365a34392ee3314ee5ea8007a877fe.zip
Fix missing clobber in i386 __sincos_code asm.
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/i386/fpu/bits/mathinline.h14
2 files changed, 12 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 58006ee87b..7be8eb0c70 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-04-09  Roland McGrath  <roland@hack.frob.com>
+
+	* sysdeps/i386/fpu/bits/mathinline.h (__sincos_code): Don't clobber
+	%eax without telling the compiler.
+
 2012-04-09  Carlos O'Donell  <carlos_odonell@mentor.com>
 
 	[BZ # 13963]
diff --git a/sysdeps/i386/fpu/bits/mathinline.h b/sysdeps/i386/fpu/bits/mathinline.h
index 276acf8e71..6561ebaa39 100644
--- a/sysdeps/i386/fpu/bits/mathinline.h
+++ b/sysdeps/i386/fpu/bits/mathinline.h
@@ -1,6 +1,5 @@
 /* Inline math functions for i387.
-   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2003,2004,2006,2007,2009,
-   2010 Free Software Foundation, Inc.
+   Copyright (C) 1995-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by John C. Bowman <bowman@math.ualberta.ca>, 1995.
 
@@ -324,22 +323,23 @@ __inline_mathcode (__pow2, __x, \
 #  define __sincos_code \
   register long double __cosr;						      \
   register long double __sinr;						      \
+  register unsigned int __swtmp;					      \
   __asm __volatile__							      \
     ("fsincos\n\t"							      \
-     "fnstsw	%%ax\n\t"						      \
-     "testl	$0x400, %%eax\n\t"					      \
+     "fnstsw	%w2\n\t"						      \
+     "testl	$0x400, %2\n\t"						      \
      "jz	1f\n\t"							      \
      "fldpi\n\t"							      \
      "fadd	%%st(0)\n\t"						      \
      "fxch	%%st(1)\n\t"						      \
      "2: fprem1\n\t"							      \
-     "fnstsw	%%ax\n\t"						      \
-     "testl	$0x400, %%eax\n\t"					      \
+     "fnstsw	%w2\n\t"						      \
+     "testl	$0x400, %2\n\t"						      \
      "jnz	2b\n\t"							      \
      "fstp	%%st(1)\n\t"						      \
      "fsincos\n\t"							      \
      "1:"								      \
-     : "=t" (__cosr), "=u" (__sinr) : "0" (__x));			      \
+     : "=t" (__cosr), "=u" (__sinr), "=a" (__swtmp) : "0" (__x));	      \
   *__sinx = __sinr;							      \
   *__cosx = __cosr