[movitz-cvs] CVS update: movitz/losp/muerte/integers.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Thu Jun 10 19:25:05 UTC 2004
Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv10428
Modified Files:
integers.lisp
Log Message:
Added a really stupid /, and a slightly improved logxor.
Date: Thu Jun 10 12:25:05 2004
Author: ffjeld
Index: movitz/losp/muerte/integers.lisp
diff -u movitz/losp/muerte/integers.lisp:1.36 movitz/losp/muerte/integers.lisp:1.37
--- movitz/losp/muerte/integers.lisp:1.36 Thu Jun 10 06:31:14 2004
+++ movitz/losp/muerte/integers.lisp Thu Jun 10 12:25:05 2004
@@ -9,7 +9,7 @@
;;;; Created at: Wed Nov 8 18:44:57 2000
;;;; Distribution: See the accompanying file COPYING.
;;;;
-;;;; $Id: integers.lisp,v 1.36 2004/06/10 13:31:14 ffjeld Exp $
+;;;; $Id: integers.lisp,v 1.37 2004/06/10 19:25:05 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -1277,6 +1277,19 @@
(do-it)))
))))
+(defun / (number &rest denominators)
+ (declare (dynamic-extent denominators))
+ (cond
+ ((null denominators)
+ (make-ratio 1 number))
+ ((null (cdr denominators))
+ (multiple-value-bind (q r)
+ (truncate number (first denominators))
+ (if (= 0 r)
+ q
+ (error "Don't know how to divide ~S by ~S." number (first denominators)))))
+ (t (reduce '/ denominators :initial-value number))))
+
(defun round (number &optional (divisor 1))
"Mathematical rounding."
(multiple-value-bind (quotient remainder)
@@ -1536,11 +1549,14 @@
(1 (x) x)
(2 (x y)
(number-double-dispatch (x y)
+ (((eql 0) t) y)
+ ((t (eql 0)) x)
((fixnum fixnum)
(with-inline-assembly (:returns :eax)
(:compile-form (:result-mode :eax) x)
- (:compile-form (:result-mode :ebx) y)
- (:xorl :ebx :eax)))))
+ (:compile-form (:result-mode :ecx) y)
+ ;; (:orl #.movitz:+movitz-fixnum-zmask+ :ecx)
+ (:xorl :ecx :eax)))))
(t (&rest integers)
(declare (dynamic-extent integers))
(if (null integers)
More information about the Movitz-cvs
mailing list