Andreas Jaeger | 9 Feb 22:49
Gravatar

Fix for bz#13658 - using fsincos on x86-64

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))

Gmane