Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 May 2005 19:07:48 -0400 (EDT)
From:      Daniel Eischen <deischen@freebsd.org>
To:        Marc Olzheim <marcolz@stack.nl>
Cc:        freebsd-threads@freebsd.org
Subject:   Re: Floating point exceptions with -pthread
Message-ID:  <Pine.GSO.4.43.0505041905430.498-200000@sea.ntplx.net>
In-Reply-To: <20050504230157.GA1886@stack.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--NMuMz9nt05w80d4+
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.GSO.4.43.0505041905432.498@sea.ntplx.net>
Content-Disposition: INLINE

On Thu, 5 May 2005, Marc Olzheim wrote:

> On Thu, May 05, 2005 at 12:32:13AM +0200, Marc Olzheim wrote:
> > That fixed it for me indeed. :-P
>
> I've applied the attached patch on my systems.
>
> Question remains why the truncf() doesn't trigger it and the ceilf() and
> floorf() does.
> And why it only triggers with threads (even a single thread is enough).

For the latter, the threads library may place a stackframe on
top of the swapped-out thread's stack.  Without threads, or
even with libthr, the thread's stack doesn't get used by
anything else.

-- 
DE

--NMuMz9nt05w80d4+
Content-Type: TEXT/PLAIN; CHARSET=us-ascii
Content-Transfer-Encoding: QUOTED-PRINTABLE
Content-ID: <Pine.GSO.4.43.0505041905433.498@sea.ntplx.net>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="fpu.patch"

Index: lib/msun/i387/s_ceilf.S
--- lib/msun/i387/s_ceilf.S.orig	Thu Jan 13 19:58:25 2005
+++ lib/msun/i387/s_ceilf.S	Thu May  5 00:54:18 2005
@@ -13,17 +13,17 @@
 	movl	%esp,%ebp
 	subl	$8,%esp
=20
-	fstcw	-12(%ebp)		/* store fpu control word */
-	movw	-12(%ebp),%dx
+	fstcw	-4(%ebp)		/* store fpu control word */
+	movw	-4(%ebp),%dx
 	orw	$0x0800,%dx		/* round towards +oo */
 	andw	$0xfbff,%dx
-	movw	%dx,-16(%ebp)
-	fldcw	-16(%ebp)		/* load modfied control word */
+	movw	%dx,-8(%ebp)
+	fldcw	-8(%ebp)		/* load modfied control word */
=20
 	flds	8(%ebp);		/* round */
 	frndint
=20
-	fldcw	-12(%ebp)		/* restore original control word */
+	fldcw	-4(%ebp)		/* restore original control word */
=20
 	leave
 	ret
Index: lib/msun/i387/s_floorf.S
--- lib/msun/i387/s_floorf.S.orig	Thu Jan 13 19:58:25 2005
+++ lib/msun/i387/s_floorf.S	Thu May  5 00:54:29 2005
@@ -13,17 +13,17 @@
 	movl	%esp,%ebp
 	subl	$8,%esp
=20
-	fstcw	-12(%ebp)		/* store fpu control word */
-	movw	-12(%ebp),%dx
+	fstcw	-4(%ebp)		/* store fpu control word */
+	movw	-4(%ebp),%dx
 	orw	$0x0400,%dx		/* round towards -oo */
 	andw	$0xf7ff,%dx
-	movw	%dx,-16(%ebp)
-	fldcw	-16(%ebp)		/* load modfied control word */
+	movw	%dx,-8(%ebp)
+	fldcw	-8(%ebp)		/* load modfied control word */
=20
 	flds	8(%ebp);		/* round */
 	frndint
=20
-	fldcw	-12(%ebp)		/* restore original control word */
+	fldcw	-4(%ebp)		/* restore original control word */
=20
 	leave
 	ret
Index: lib/msun/i387/s_truncf.S
--- lib/msun/i387/s_truncf.S.orig	Sat Apr 16 23:12:55 2005
+++ lib/msun/i387/s_truncf.S	Thu May  5 00:54:35 2005
@@ -11,16 +11,16 @@
 	movl	%esp,%ebp
 	subl	$8,%esp
=20
-	fstcw	-12(%ebp)		/* store fpu control word */
-	movw	-12(%ebp),%dx
+	fstcw	-4(%ebp)		/* store fpu control word */
+	movw	-4(%ebp),%dx
 	orw	$0x0c00,%dx		/* round towards -oo */
-	movw	%dx,-16(%ebp)
-	fldcw	-16(%ebp)		/* load modfied control word */
+	movw	%dx,-8(%ebp)
+	fldcw	-8(%ebp)		/* load modfied control word */
=20
 	flds	8(%ebp)			/* round */
 	frndint
=20
-	fldcw	-12(%ebp)		/* restore original control word */
+	fldcw	-4(%ebp)		/* restore original control word */
=20
 	leave
 	ret

--NMuMz9nt05w80d4+--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.43.0505041905430.498-200000>