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

rtoy rtoy at common-lisp.net
Sun Nov 4 02:45:01 UTC 2007


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

Modified Files:
      Tag: THREE-ARG-BRANCH
	qd-rep.lisp qd.lisp 
Log Message:
o Move compiler macros from qd.lisp to qd-rep.lisp
o Declare add-qd-t, mul-qd-t and div-qd-t as inline functions so that
  everything is still fast on cmucl.


--- /project/oct/cvsroot/oct/qd-rep.lisp	2007/11/02 20:45:32	1.10.2.2
+++ /project/oct/cvsroot/oct/qd-rep.lisp	2007/11/04 02:45:01	1.10.2.3
@@ -233,3 +233,28 @@
   (declare (ignore x))
   nil)
 ) ; end progn
+
+
+(macrolet
+    ((frob (qd qd-t)
+       #+cmu
+       `(define-compiler-macro ,qd (a b &optional c)
+	  (if c
+	      `(setf ,c (,',qd-t ,a ,b nil))
+	      `(,',qd-t ,a ,b nil)))
+       #-cmu
+       `(define-compiler-macro ,qd (a b &optional (c (%make-qd-d 0d0 0d0 0d0 0d0)))
+	  `(,',qd-t ,a ,b ,c))))
+  (frob add-qd add-qd-t)
+  (frob mul-qd mul-qd-t)
+  (frob div-qd div-qd-t))
+
+#+cmu
+(define-compiler-macro sub-qd (a b &optional c)
+  (if c
+      `(setf ,c (add-qd-t ,a (neg-qd ,b) nil))
+      `(add-qd-t ,a (neg-qd ,b) nil)))
+
+#-cmu
+(define-compiler-macro sub-qd (a b &optional c)
+  `(add-qd-t ,a (neg-qd ,b) ,c))
--- /project/oct/cvsroot/oct/qd.lisp	2007/11/02 20:11:42	1.60.2.1
+++ /project/oct/cvsroot/oct/qd.lisp	2007/11/04 02:45:01	1.60.2.2
@@ -161,11 +161,14 @@
 	 add-qd-d
 	 add-qd-dd
 	 add-qd
+	 add-qd-t
 	 mul-qd-d
 	 mul-qd-dd
 	 mul-qd
+	 mul-qd-t
 	 sqr-qd
 	 div-qd
+	 div-qd-t
 	 div-qd-d
 	 div-qd-dd))
 
@@ -187,6 +190,7 @@
 			  mul-qd-t
 			  sqr-qd
 			  div-qd div-qd-d div-qd-dd
+			  div-qd-t
 			  make-qd-dd
 			  ))
 
@@ -394,7 +398,9 @@
 (defun add-qd-t (a b target)
   (declare (type %quad-double a b)
 	   (optimize (speed 3)
-		     (space 0)))
+		     (space 0))
+	   #+cmu
+	   (ignore target))
   ;; This is the version that is NOT IEEE.  Should we use the IEEE
   ;; version?  It's quite a bit more complicated.
   ;;
@@ -454,16 +460,6 @@
 ;; directly.  For CMU, we always replace the parameter C with NIL
 ;; because we don't use it.  For other Lisps, we create the necessary
 ;; object and call add-qd-t.
-#+cmu
-(define-compiler-macro add-qd (a b &optional c)
-  (if c
-      `(setf c (add-qd-t ,a ,b nil))
-      `(add-qd-t ,a ,b nil)))
-
-#-cmu
-(define-compiler-macro add-qd (a b &optional (c (%make-qd-d 0d0 0d0 0d0 0d0)))
-  `(add-qd-t ,a ,b ,c))
-
 (defun neg-qd (a)
   (declare (type %quad-double a))
   (with-qd-parts (a0 a1 a2 a3)
@@ -476,16 +472,6 @@
   (add-qd-t a (neg-qd b) target))
 
 #+cmu
-(define-compiler-macro sub-qd (a b &optional c)
-  (if c
-      `(setf ,c `(add-qd-t ,a (neg-qd ,b) nil))
-      `(add-qd-t ,a (neg-qd ,b) nil)))
-
-#-cmu
-(define-compiler-macro sub-qd (a b &optional (c (%make-qd-d 0d0 0d0 0d0 0d0)))
-  `(add-qd-t ,a (neg-qd ,b) ,c))
-
-#+cmu
 (defun sub-qd-dd (a b)
   (declare (type %quad-double a)
 	   (type double-double-float b))
@@ -699,16 +685,6 @@
 			    (%store-qd-d target p0 0d0 0d0 0d0)
 			    (%store-qd-d target r0 r1 s0 s1))))))))))))))
 
-#+cmu
-(define-compiler-macro mul-qd (a b &optional c)
-  (if c
-      `(setf ,c `(mul-qd-t ,a ,b nil))
-      `(mul-qd-t ,a ,b nil)))
-
-#-cmu
-(define-compiler-macro mul-qd (a b &optional (c (%make-qd-d 0d0 0d0 0d0 0d0)))
-  `(mul-qd-t ,a ,b ,c))
-
 
 ;; This is the non-sloppy version.  I think this works just fine, but
 ;; since qd defaults to the sloppy multiplication version, we do the
@@ -865,7 +841,9 @@
   (declare (type %quad-double a b)
 	   (optimize (speed 3)
 		     (space 0))
-	   (inline float-infinity-p))
+	   (inline float-infinity-p)
+	   #+cmu
+	   (ignore target))
   (let ((a0 (qd-0 a))
 	(b0 (qd-0 b)))
     (let* ((q0 (cl:/ a0 b0))
@@ -882,17 +860,6 @@
 	      (renorm-4 q0 q1 q2 q3)
 	    (%store-qd-d target q0 q1 q2 q3)))))))
 
-#+cmu
-(define-compiler-macro div-qd (a b &optional c)
-  (if c
-      `(setf ,c `(div-qd-t ,a ,b nil))
-      `(div-qd-t ,a ,b nil)))
-
-#-cmu
-(define-compiler-macro div-qd (a b &optional (c (%make-qd-d 0d0 0d0 0d0 0d0)))
-  `(div-qd-t ,a ,b ,c))
-
-
 (declaim (inline invert-qd))
 
 (defun invert-qd(v) ;; a quartic newton iteration for 1/v




More information about the oct-cvs mailing list