[oct-cvs] Oct commit: oct qd-dd.lisp

rtoy rtoy at common-lisp.net
Thu Sep 13 01:06:02 UTC 2007


Update of /project/oct/cvsroot/oct
In directory clnet:/tmp/cvs-serv22721

Modified Files:
	qd-dd.lisp 
Log Message:
Add declarations.  Mostly to help Allegro generate much better code. 


--- /project/oct/cvsroot/oct/qd-dd.lisp	2007/08/25 17:08:48	1.4
+++ /project/oct/cvsroot/oct/qd-dd.lisp	2007/09/13 01:06:02	1.5
@@ -34,19 +34,23 @@
 (declaim (inline quick-two-sum))
 (defun quick-two-sum (a b)
   "Computes fl(a+b) and err(a+b), assuming |a| >= |b|"
-  (declare (double-float a b))
+  (declare (double-float a b)
+	   (optimize (speed 3) (safety 0)))
   (let* ((s (+ a b))
 	 (e (- b (- s a))))
+    (declare (double-float s e))
     (values s e)))
 
 (declaim (inline two-sum))
 (defun two-sum (a b)
   "Computes fl(a+b) and err(a+b)"
-  (declare (double-float a b))
+  (declare (double-float a b)
+	   (optimize (speed 3) (safety 0)))
   (let* ((s (+ a b))
 	 (v (- s a))
 	 (e (+ (- a (- s v))
 	       (- b v))))
+    (declare (double-float s v e))
     (values s e)))
 
 (declaim (inline two-prod))
@@ -103,36 +107,46 @@
 	     (as (* a (scale-float 1d0 -27)))
 	     (a-hi (* (- tmp (- tmp as)) (expt 2 27)))
 	     (a-lo (- a a-hi)))
+	(declare (double-float tmp as a-hi a-lo))
 	(values a-hi a-lo))
       ;; Yozo's algorithm.
       (let* ((tmp (* a (+ 1 (expt 2 27))))
 	     (a-hi (- tmp (- tmp a)))
 	     (a-lo (- a a-hi)))
+	(declare (double-float tmp a-hi a-lo))
 	(values a-hi a-lo))))
 
 
 (defun two-prod (a b)
   "Compute fl(a*b) and err(a*b)"
-  (declare (double-float a b))
+  (declare (double-float a b)
+	   (optimize (speed 3) (safety 0)))
   (let ((p (* a b)))
+    (declare (double-float p))
     (multiple-value-bind (a-hi a-lo)
 	(split a)
+      (declare (double-float a-hi a-lo))
       (multiple-value-bind (b-hi b-lo)
 	  (split b)
+	(declare (double-float b-hi b-lo))
 	(let ((e (+ (+ (- (* a-hi b-hi) p)
 		       (* a-hi b-lo)
 		       (* a-lo b-hi))
 		    (* a-lo b-lo))))
+	  (declare (double-float e))
 	  (values p e))))))
 
 (declaim (inline two-sqr))
 (defun two-sqr (a)
   "Compute fl(a*a) and err(a*b).  This is a more efficient
   implementation of two-prod"
-  (declare (double-float a))
+  (declare (double-float a)
+	   (optimize (speed 3) (safety 0)))
   (let ((q (* a a)))
+    (declare (double-float q))
     (multiple-value-bind (a-hi a-lo)
 	(split a)
+      (declare (double-float a-hi a-lo))
       (values q (+ (+ (- (* a-hi a-hi) q)
 		      (* 2 a-hi a-lo))
 		   (* a-lo a-lo))))))




More information about the oct-cvs mailing list