[git] CMU Common Lisp branch master updated. snapshot-2014-08-35-ge38211a

Raymond Toy rtoy at common-lisp.net
Wed Aug 27 03:34:01 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  e38211a12ceccae3b59938fd4815ab9055d6d5b8 (commit)
      from  1345f3b146c9840447fa7a943daf85f111011a7f (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 e38211a12ceccae3b59938fd4815ab9055d6d5b8
Author: Raymond Toy <toy.raymond at gmail.com>
Date:   Tue Aug 26 20:33:54 2014 -0700

    Implement a simpler (and faster?) algorithm to convert a double to an

diff --git a/src/compiler/sparc/float.lisp b/src/compiler/sparc/float.lisp
index 013f184..74f279d 100644
--- a/src/compiler/sparc/float.lisp
+++ b/src/compiler/sparc/float.lisp
@@ -1252,17 +1252,13 @@
     (inst fdtox r x)
     (inst fxtod r r)))
+;; See Listing 2.2: Conversion from FP to int in in "CR-LIBM: A
+;; library of correctly rounded elementary functions in
+;; double-precision".
 (deftransform %unary-round ((x) (float) (signed-byte 32))
-  '(let* ((trunc (truly-the (signed-byte 32) (%unary-truncate x)))
-	  (extra (- x trunc))
-	  (absx (abs extra))
-	  (one-half (float 1/2 x)))
-     (if (if (oddp trunc)
-	     (>= absx one-half)
-	     (> absx one-half))
-	 (truly-the (signed-byte 32) (%unary-truncate (+ x extra)))
-	 trunc)))
+   '(kernel:double-float-low-bits (+ x (+ (scale-float 1d0 52)
+					  (scale-float 1d0 51)))))
 (define-vop (make-single-float)
   (:args (bits :scs (signed-reg) :target res


Summary of changes:
 src/compiler/sparc/float.lisp |   14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

CMU Common Lisp

More information about the cmucl-cvs mailing list