Update of /project/movitz/cvsroot/movitz/losp/muerte In directory common-lisp.net:/tmp/cvs-serv20193
Modified Files: integers.lisp Log Message: Added a slow but working implementation of bignum multiplication.
Date: Mon Jul 12 07:17:15 2004 Author: ffjeld
Index: movitz/losp/muerte/integers.lisp diff -u movitz/losp/muerte/integers.lisp:1.46 movitz/losp/muerte/integers.lisp:1.47 --- movitz/losp/muerte/integers.lisp:1.46 Mon Jul 12 06:43:43 2004 +++ movitz/losp/muerte/integers.lisp Mon Jul 12 07:17:14 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.46 2004/07/12 13:43:43 ffjeld Exp $ +;;;; $Id: integers.lisp,v 1.47 2004/07/12 14:17:14 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------
@@ -1114,12 +1114,7 @@ (0 `(progn ,factor2 0)) (1 factor2) (2 `(ash ,factor2 1)) - (t `(with-inline-assembly (:returns :eax :type integer) - (:compile-form (:result-mode :eax) ,factor2) - (:testb #.movitz::+movitz-fixnum-zmask+ :al) - (:jnz '(:sub-program () (:int 107))) - (:imull ,f1 :eax :eax) - (:into)))))) + (t `(no-macro-call * ,factor1 ,factor2))))) (t `(no-macro-call * ,factor1 ,factor2))))) (t `(* (* ,(first operands) ,(second operands)) ,@(cddr operands)))))
@@ -1271,6 +1266,12 @@ (:xorl #xff00 (:eax ,movitz:+other-type-offset+)) positive-result ))) + ((positive-bignum positive-bignum) + (do ((f y) + (r 0)) + ((typep f 'fixnum) (+ r (* f x))) + (setf r (+ r (* most-positive-fixnum x))) + (setf f (- f most-positive-fixnum)))) ))) (do-it))) (t (&rest factors)