Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv8448
Modified Files:
integers.lisp
Log Message:
Make (* <fixnum> <bignum>) observe the register discipline, i.e. by
exchanging the usage of ECX and ESI.
Date: Wed Aug 18 02:50:33 2004
Author: ffjeld
Index: movitz/losp/muerte/integers.lisp
diff -u movitz/losp/muerte/integers.lisp:1.92 movitz/losp/muerte/integers.lisp:1.93
--- movitz/losp/muerte/integers.lisp:1.92 Mon Aug 16 08:26:36 2004
+++ movitz/losp/muerte/integers.lisp Wed Aug 18 02:50:33 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.92 2004/08/16 15:26:36 ffjeld Exp $
+;;;; $Id: integers.lisp,v 1.93 2004/08/18 09:50:33 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -333,6 +333,7 @@
(define-compiler-macro =%2op (n1 n2 &environment env)
(cond
+ #+ignore
((movitz:movitz-constantp n1 env)
(let ((n1 (movitz:movitz-eval n1 env)))
(etypecase n1
@@ -353,6 +354,7 @@
`(with-inline-assembly (:returns :boolean-zf=1 :side-effects nil)
(:compile-two-forms (:eax :ebx) ,n1 ,n2)
(:call-global-pf fast-compare-two-reals))))))
+ #+ignore
((movitz:movitz-constantp n2 env)
`(=%2op ,n2 ,n1))
(t `(eql ,n1 ,n2))))
@@ -1137,39 +1139,39 @@
(:store-lexical (:lexical-binding r) :eax :type bignum)
(:movl :eax :ebx) ; r into ebx
- (:xorl :ecx :ecx) ; counter
+ (:xorl :esi :esi) ; counter
(:xorl :edx :edx) ; initial carry
(:std) ; Make EAX, EDX, ESI non-GC-roots.
- (:compile-form (:result-mode :esi) x)
- (:sarl ,movitz:+movitz-fixnum-shift+ :esi)
+ (:compile-form (:result-mode :ecx) x)
+ (:sarl ,movitz:+movitz-fixnum-shift+ :ecx)
(:jns 'multiply-loop)
- (:negl :esi) ; can't overflow
+ (:negl :ecx) ; can't overflow
multiply-loop
- (:movl :edx (:ebx (:ecx 1) ; new
+ (:movl :edx (:ebx (:esi 1) ; new
(:offset movitz-bignum bigit0)))
(:compile-form (:result-mode :ebx) y)
- (:movl (:ebx (:ecx 1) (:offset movitz-bignum bigit0))
+ (:movl (:ebx (:esi 1) (:offset movitz-bignum bigit0))
:eax)
- (:mull :esi :eax :edx)
+ (:mull :ecx :eax :edx)
(:compile-form (:result-mode :ebx) r)
- (:addl :eax (:ebx :ecx (:offset movitz-bignum bigit0)))
+ (:addl :eax (:ebx :esi (:offset movitz-bignum bigit0)))
(:adcl 0 :edx)
- (:addl 4 :ecx)
- (:cmpw :cx (:ebx (:offset movitz-bignum length)))
+ (:addl 4 :esi)
+ (:cmpw :si (:ebx (:offset movitz-bignum length)))
(:ja 'multiply-loop)
(:testl :edx :edx)
(:jz 'no-carry-expansion)
- (:movl :edx (:ebx :ecx (:offset movitz-bignum bigit0)))
- (:addl 4 :ecx)
- (:movw :cx (:ebx (:offset movitz-bignum length)))
+ (:movl :edx (:ebx :esi (:offset movitz-bignum bigit0)))
+ (:addl 4 :esi)
+ (:movw :si (:ebx (:offset movitz-bignum length)))
no-carry-expansion
+ (:leal (:esi ,movitz:+movitz-fixnum-factor+)
+ :ecx) ; Put bignum length into ECX
(:movl (:ebp -4) :esi)
(:movl :ebx :eax)
(:movl :edi :edx)
(:cld) ; EAX, EDX, and ESI are GC roots again.
- (:leal ((:ecx 1) ,movitz:+movitz-fixnum-factor+)
- :ecx)
(:call-local-pf cons-commit)
(:locally (:movl ,(bt:enum-value 'movitz::atomically-status :inactive)
(:edi (:edi-offset atomically-status))))