[Cmucl-cvs] [git] CMU Common Lisp branch master updated. snapshot-2014-09-22-g95551b4

Raymond Toy rtoy at common-lisp.net
Sun Sep 28 21:44:18 UTC 2014


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMU Common Lisp".

The branch, master has been updated
       via  95551b41407093f6bdb89e50967c9d3203b273b9 (commit)
      from  e82e6d3ba6e9e22735d5822d95836fe0b4838d04 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 95551b41407093f6bdb89e50967c9d3203b273b9
Author: Raymond Toy <toy.raymond at gmail.com>
Date:   Sun Sep 28 14:44:09 2014 -0700

    Rename scalbn to fdlibm_scalbn, and use a union.

diff --git a/src/lisp/s_scalbn.c b/src/lisp/s_scalbn.c
index 329be8b..4889385 100644
--- a/src/lisp/s_scalbn.c
+++ b/src/lisp/s_scalbn.c
@@ -31,33 +31,37 @@ huge   = 1.0e+300,
 tiny   = 1.0e-300;
 
 #ifdef __STDC__
-	double scalbn (double x, int n)
+	double fdlibm_scalbn (double x, int n)
 #else
-	double scalbn (x,n)
+	double fdlibm_scalbn (x,n)
 	double x; int n;
 #endif
 {
 	int  k,hx,lx;
-	hx = __HI(x);
-	lx = __LO(x);
+	union { int i[2]; double d; } ux;
+
+        ux.d = x;
+	hx = ux.i[HIWORD];
+	lx = ux.i[LOWORD];
         k = (hx&0x7ff00000)>>20;		/* extract exponent */
         if (k==0) {				/* 0 or subnormal x */
             if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
-	    x *= two54; 
-	    hx = __HI(x);
+	    x *= two54;
+            ux.d = x;
+	    hx = ux.i[HIWORD];
 	    k = ((hx&0x7ff00000)>>20) - 54; 
-            if (n< -50000) return tiny*x; 	/*underflow*/
+            if (n< -50000) return fdlibm_setexception(x, FDLIBM_UNDERFLOW);; 	/*underflow*/
 	    }
         if (k==0x7ff) return x+x;		/* NaN or Inf */
         k = k+n; 
-        if (k >  0x7fe) return huge*copysign(huge,x); /* overflow  */
+        if (k >  0x7fe) return fdlibm_setexception(x, FDLIBM_OVERFLOW); /* overflow  */
         if (k > 0) 				/* normal result */
-	    {__HI(x) = (hx&0x800fffff)|(k<<20); return x;}
+	    {ux.i[HIWORD] = (hx&0x800fffff)|(k<<20); return x;}
         if (k <= -54)
             if (n > 50000) 	/* in case integer overflow in n+k */
-		return huge*copysign(huge,x);	/*overflow*/
-	    else return tiny*copysign(tiny,x); 	/*underflow*/
+              return fdlibm_setexception(x, FDLIBM_OVERFLOW);	/*overflow*/
+            else return fdlibm_setexception(x, FDLIBM_UNDERFLOW); 	/*underflow*/
         k += 54;				/* subnormal result */
-        __HI(x) = (hx&0x800fffff)|(k<<20);
+        ux.i[HIWORD] = (hx&0x800fffff)|(k<<20);
         return x*twom54;
 }

-----------------------------------------------------------------------

Summary of changes:
 src/lisp/s_scalbn.c |   28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)


hooks/post-receive
-- 
CMU Common Lisp




More information about the cmucl-cvs mailing list