[movitz-cvs] CVS update: movitz/compiler.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Thu Nov 18 23:50:02 UTC 2004
Update of /project/movitz/cvsroot/movitz
In directory common-lisp.net:/tmp/cvs-serv15456
Modified Files:
compiler.lisp
Log Message:
Some tuning of the mess that is forwarding-bindings and register allocaiton.
Date: Fri Nov 19 00:49:56 2004
Author: ffjeld
Index: movitz/compiler.lisp
diff -u movitz/compiler.lisp:1.108 movitz/compiler.lisp:1.109
--- movitz/compiler.lisp:1.108 Thu Nov 18 18:58:35 2004
+++ movitz/compiler.lisp Fri Nov 19 00:49:53 2004
@@ -8,7 +8,7 @@
;;;; Created at: Wed Oct 25 12:30:49 2000
;;;; Distribution: See the accompanying file COPYING.
;;;;
-;;;; $Id: compiler.lisp,v 1.108 2004/11/18 17:58:35 ffjeld Exp $
+;;;; $Id: compiler.lisp,v 1.109 2004/11/18 23:49:53 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -2756,13 +2756,13 @@
(let* ((count-init-pc (gethash binding var-counts))
(count (car count-init-pc))
(init-pc (cdr count-init-pc)))
+ ;; (warn "b ~S: count: ~D, init-pc: ~{~&~A~}" binding count init-pc)
(cond
((binding-lended-p binding)
;; We can't lend a register.
(values nil :never))
((and (= 1 count)
init-pc)
- ;; (warn "b ~S: count: ~D, init-pc: ~{~&~A~}" binding count init-pc)
(assert (instruction-is (first init-pc) :init-lexvar))
(destructuring-bind (init-binding &key init-with-register init-with-type
protect-registers protect-carry)
@@ -2773,7 +2773,7 @@
(find-if (lambda (i)
(and (not (instruction-is i :init-lexvar))
(member binding (find-read-bindings i)
- :test #'eq)))
+ :test #'eq #+ignore #'binding-eql)))
(cdr init-pc)
#-sbcl :end #-sbcl 15))
(binding-destination (third load-instruction))
@@ -2836,6 +2836,9 @@
(assert (not (cdr count-init-pc)))
(setf (cdr count-init-pc) init-pc))
(unless storep
+ (unless (eq binding (binding-target binding))
+ ;; (break "ewfew: ~S" (gethash (binding-target binding) var-counter))
+ (take-note-of-binding (binding-target binding)))
(incf (car count-init-pc))))
#+ignore
(when (typep binding 'forwarding-binding)
@@ -2878,7 +2881,7 @@
(when init-with-register
(take-note-of-binding binding t pc)
(when (and (typep init-with-register 'binding)
- #+ignore (not (typep binding 'forwarding-binding)))
+ (not (typep binding 'forwarding-binding))) ; XXX
(take-note-of-binding init-with-register)))))
(t (mapcar #'take-note-of-binding
(find-read-bindings instruction))
@@ -6090,7 +6093,7 @@
(and (typep binding 'forwarding-binding)
(recursive-located-p (forwarding-binding-target b))))))
(recursive-located-p binding)))
- (warn "Unused variable: ~S." (binding-name binding))))
+ #+ignore (warn "Unused variable: ~S." (binding-name binding))))
((typep binding 'forwarding-binding)
;; No need to do any initialization because the target will be initialized.
(assert (not (binding-lended-p binding)))
@@ -6409,8 +6412,8 @@
(when (and (bindingp destination)
(binding-lended-p destination))
(warn "Add for lend0: ~S" destination))
- (let ((loc0 (new-binding-location term0 frame-map :default nil))
- (loc1 (new-binding-location term1 frame-map :default nil)))
+ (let ((loc0 (new-binding-location (binding-target term0) frame-map :default nil))
+ (loc1 (new-binding-location (binding-target term1) frame-map :default nil)))
;;; (warn "add: ~A" instruction)
;;; (warn "add for: ~S is ~A, from ~A/~A and ~A/~A."
;;; destination result-type
@@ -6455,7 +6458,7 @@
;;; loc1 term1
;;; (type-specifier-singleton type0)
;;; (eq loc1 destination))
-;;; (warn "ADDI: ~S" instruction)
+;;; (warn "ADDI: ~S" instruction)
(append (cond
((and (eq :eax loc0) (eq :ebx loc1))
nil)
@@ -6511,21 +6514,25 @@
(rotatef x y)
(rotatef x-type y-type)
(rotatef x-singleton y-singleton))
- (warn "eql ~S ~S" x-singleton y-singleton)
- (cond
- ((and x-singleton y-singleton)
- (break "Constant EQL: ~S ~S" (car x-singleton) (car y-singleton)))
- ((or (movitz-subtypep x-type 'fixnum)
- (movitz-subtypep x-type 'character)
- (movitz-subtypep y-type 'fixnum)
- (movitz-subtypep y-type 'character))
- (break "EQL that is EQ."))
- (t (append (make-load-lexical x :eax funobj nil frame-map)
- (make-load-lexical y :ebx funobj nil frame-map)
- (let ((eql-done (gensym "eql-done-")))
- `((:cmpl :eax :ebx)
- (:je ',eql-done)
- (,*compiler-global-segment-prefix*
- :movl (:edi ,(global-constant-offset 'complicated-eql)) :esi)
- (:call (:esi ,(bt:slot-offset 'movitz-funobj 'code-vector%2op)))
- ,eql-done))))))))
+ (let ((x-loc (new-binding-location (binding-target x) frame-map :default nil))
+ (y-loc (new-binding-location (binding-target y) frame-map :default nil)))
+ (warn "eql ~S/~S ~S/~S"
+ x x-loc
+ y y-loc)
+ (cond
+ ((and x-singleton y-singleton)
+ (break "Constant EQL: ~S ~S" (car x-singleton) (car y-singleton)))
+ ((or (movitz-subtypep x-type 'fixnum)
+ (movitz-subtypep x-type 'character)
+ (movitz-subtypep y-type 'fixnum)
+ (movitz-subtypep y-type 'character))
+ (break "EQL that is EQ."))
+ (t (append (make-load-lexical x :eax funobj nil frame-map)
+ (make-load-lexical y :ebx funobj nil frame-map)
+ (let ((eql-done (gensym "eql-done-")))
+ `((:cmpl :eax :ebx)
+ (:je ',eql-done)
+ (,*compiler-global-segment-prefix*
+ :movl (:edi ,(global-constant-offset 'complicated-eql)) :esi)
+ (:call (:esi ,(bt:slot-offset 'movitz-funobj 'code-vector%2op)))
+ ,eql-done)))))))))
More information about the Movitz-cvs
mailing list