9 Feb 22:49
Fix for bz#13658 - using fsincos on x86-64
Andreas Jaeger <aj <at> suse.com>
2012-02-09 21:49:10 GMT
2012-02-09 21:49:10 GMT
We should not use the inaccurate fsincos instruction on x86-64 (see
bugzilla and the discussion on the gcc mailing list). Let's just remove
the double version and use the IBM libm sincos implementation.
Unfortunately the same fix does not work for the long double version -
since there's no sincos implementation for ldbl-96 yet ;-(. Jakub, you
wrote the ldb-128 versions - do you have any suggestions?
Andreas
2012-02-09 Andreas Jaeger <aj <at> suse.de>
[BZ#13658]
* sysdeps/x86_64/fpu/s_sincos.S: Remove, let's not use the
inaccurate fsincos instruction.
--
Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
commit b9443d818d7046f903a5135fa5201c95601a68fa
Author: Andreas Jaeger <aj <at> suse.de>
Date: Thu Feb 9 22:45:02 2012 +0100
2012-02-09 Andreas Jaeger <aj <at> suse.de>
[BZ#13658]
* sysdeps/x86_64/fpu/s_sincos.S: Remove, let's not use the
inaccurate fsincos instruction.
diff --git a/sysdeps/x86_64/fpu/s_sincos.S b/sysdeps/x86_64/fpu/s_sincos.S
deleted file mode 100644
index 9a33615..0000000
--- a/sysdeps/x86_64/fpu/s_sincos.S
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Compute sine and cosine of argument.
- Copyright (C) 1997, 2000, 2001, 2005 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper <at> 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, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include <machine/asm.h>
-#include "bp-sym.h"
-#include "bp-asm.h"
-
-#define PARMS LINKAGE /* no space for saved regs */
-#define ANGLE PARMS
-#define SINP ANGLE+12
-#define COSP SINP+PTR_SIZE
-
- .text
-ENTRY (BP_SYM (__sincos))
- ENTER
-
- movsd %xmm0, -8(%rsp)
- fldl -8(%rsp)
- fsincos
- fnstsw %ax
- testl $0x400,%eax
- jnz 1f
- fstpl (%rsi)
- fstpl (%rdi)
-
- LEAVE
- retq
-
-1: fldpi
- fadd %st(0)
- fxch %st(1)
-2: fprem1
- fnstsw %ax
- testl $0x400,%eax
- jnz 2b
- fstp %st(1)
- fsincos
- fstpl (%rsi)
- fstpl (%rdi)
-
- LEAVE
- retq
-END (BP_SYM (__sincos))
-weak_alias (BP_SYM (__sincos), BP_SYM (sincos))
RSS Feed