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