[movitz-cvs] CVS update: movitz/losp/muerte/integers.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Mon Aug 16 15:26:36 UTC 2004


Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv7880

Modified Files:
	integers.lisp 
Log Message:
Fixed complicated-eql, which was very broken for bignums. And
therefore = was also broken. And therefore also - and many other operators.

Date: Mon Aug 16 08:26:36 2004
Author: ffjeld

Index: movitz/losp/muerte/integers.lisp
diff -u movitz/losp/muerte/integers.lisp:1.91 movitz/losp/muerte/integers.lisp:1.92
--- movitz/losp/muerte/integers.lisp:1.91	Wed Aug  4 05:59:23 2004
+++ movitz/losp/muerte/integers.lisp	Mon Aug 16 08:26:36 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.91 2004/08/04 12:59:23 ffjeld Exp $
+;;;; $Id: integers.lisp,v 1.92 2004/08/16 15:26:36 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -159,7 +159,7 @@
 	    (:jne 'done)
 	    ;; Ok.. we have two bignums of identical sign and size.
 	    (:shrl 16 :ecx)
-	    (:movl :ecx :edx)		; counter
+	    (:leal (:ecx 4) :edx)	; counter
 	   compare-loop
 	    (:subl ,movitz:+movitz-fixnum-factor+ :edx)
 	    (:jz 'done)
@@ -187,39 +187,6 @@
 	    (:movl :edi :eax)
 	    (:clc)
 	    )))
-    (do-it)))
-
-
-(define-primitive-function fast-eql (x y)
-  "Compare EAX and EBX under EQL, result in ZF.
-Preserve EAX and EBX."
-  (macrolet
-      ((do-it ()
-	 `(with-inline-assembly (:returns :nothing) ; unspecified
-	    (:cmpl :eax :ebx)		; EQ?
-	    (:je 'done)
-	    (:leal (:eax ,(- (movitz:tag :other))) :ecx)
-	    (:testb 7 :cl)
-	    (:jne 'done)
-	    (:leal (:ebx ,(- (movitz:tag :other))) :ecx)
-	    (:testb 7 :cl)
-	    (:jne 'done)
-	    (:movl (:eax ,movitz:+other-type-offset+) :ecx)
-	    (:cmpb ,(movitz:tag :bignum) :cl)
-	    (:jne 'done)
-	    (:cmpl :ecx (:ebx ,movitz:+other-type-offset+))
-	    (:jne 'done)
-	    ;; Ok.. we have two bignums of identical sign and size.
-	    (:shrl 16 :ecx)
-	    (:movl :ecx :edx)		; counter
-	   compare-loop
-	    (:subl ,movitz:+movitz-fixnum-factor+ :edx)
-	    (:jz 'done)
-	    (:movl (:eax :edx (:offset movitz-bignum bigit0 -4)) :ecx)
-	    (:cmpl :ecx (:ebx :edx (:offset movitz-bignum bigit0 -4)))
-	    (:je 'compare-loop)
-	   done
-	    (:ret))))
     (do-it)))
 
 (define-primitive-function fast-compare-fixnum-real (n1 n2)





More information about the Movitz-cvs mailing list