Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 22 Sep 2012 15:38:30 +0000 (UTC)
From:      Steve Kargl <kargl@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r240828 - head/lib/msun/src
Message-ID:  <201209221538.q8MFcUwM092623@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kargl
Date: Sat Sep 22 15:38:29 2012
New Revision: 240828
URL: http://svn.freebsd.org/changeset/base/240828

Log:
  * Use ENTERI() and RETURNI() to toggle the rounding precision if
    necessary, so that cosl(), sinl() and tanl() work on i386 even
    for naive callers.
  
  Suggested by:	bde
  Reviewed by:	bde
  Approved by: 	das (mentor)

Modified:
  head/lib/msun/src/s_cosl.c
  head/lib/msun/src/s_sinl.c
  head/lib/msun/src/s_tanl.c

Modified: head/lib/msun/src/s_cosl.c
==============================================================================
--- head/lib/msun/src/s_cosl.c	Sat Sep 22 15:19:11 2012	(r240827)
+++ head/lib/msun/src/s_cosl.c	Sat Sep 22 15:38:29 2012	(r240828)
@@ -33,6 +33,9 @@ __FBSDID("$FreeBSD$");
  */
 
 #include <float.h>
+#ifdef __i386__
+#include <ieeefp.h>
+#endif
 
 #include "math.h"
 #include "math_private.h"
@@ -63,9 +66,11 @@ cosl(long double x)
 	if (z.bits.exp == 32767)
 		return ((x - x) / (x - x));
 
+	ENTERI();
+
 	/* Optimize the case where x is already within range. */
 	if (z.e < M_PI_4)
-		return (__kernel_cosl(z.e, 0));
+		RETURNI(__kernel_cosl(z.e, 0));
 
 	e0 = __ieee754_rem_pio2l(x, y);
 	hi = y[0];
@@ -86,5 +91,5 @@ cosl(long double x)
 	    break;
 	}
 	
-	return (hi);
+	RETURNI(hi);
 }

Modified: head/lib/msun/src/s_sinl.c
==============================================================================
--- head/lib/msun/src/s_sinl.c	Sat Sep 22 15:19:11 2012	(r240827)
+++ head/lib/msun/src/s_sinl.c	Sat Sep 22 15:38:29 2012	(r240828)
@@ -28,6 +28,9 @@
 __FBSDID("$FreeBSD$");
 
 #include <float.h>
+#ifdef __i386__
+#include <ieeefp.h>
+#endif
 
 #include "math.h"
 #include "math_private.h"
@@ -59,10 +62,12 @@ sinl(long double x)
 	if (z.bits.exp == 32767)
 		return ((x - x) / (x - x));
 
+	ENTERI();
+
 	/* Optimize the case where x is already within range. */
 	if (z.e < M_PI_4) {
 		hi = __kernel_sinl(z.e, 0, 0);
-		return  (s ? -hi : hi);
+		RETURNI(s ? -hi : hi);
 	}
 
 	e0 = __ieee754_rem_pio2l(x, y);
@@ -84,5 +89,5 @@ sinl(long double x)
 	    break;
 	}
 	
-	return (hi);
+	RETURNI(hi);
 }

Modified: head/lib/msun/src/s_tanl.c
==============================================================================
--- head/lib/msun/src/s_tanl.c	Sat Sep 22 15:19:11 2012	(r240827)
+++ head/lib/msun/src/s_tanl.c	Sat Sep 22 15:38:29 2012	(r240828)
@@ -34,6 +34,9 @@ __FBSDID("$FreeBSD$");
  */
 
 #include <float.h>
+#ifdef __i386__
+#include <ieeefp.h>
+#endif
 
 #include "math.h"
 #include "math_private.h"
@@ -65,10 +68,12 @@ tanl(long double x)
 	if (z.bits.exp == 32767)
 		return ((x - x) / (x - x));
 
+	ENTERI();
+
 	/* Optimize the case where x is already within range. */
 	if (z.e < M_PI_4) {
 		hi = __kernel_tanl(z.e, 0, 0);
-		return (s ? -hi : hi);
+		RETURNI(s ? -hi : hi);
 	}
 
 	e0 = __ieee754_rem_pio2l(x, y);
@@ -86,5 +91,5 @@ tanl(long double x)
 	    break;
 	}
 
-	return (hi);
+	RETURNI(hi);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201209221538.q8MFcUwM092623>