From: Paul K. <pk...@us...> - 2009-07-18 17:53:06
|
Update of /cvsroot/sbcl/sbcl/src/compiler/ppc In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv22620/src/compiler/ppc Modified Files: move.lisp Log Message: 1.0.30.3: deal with load-time-value constants more aggressively * Revert 1.0.29.54.rc5 to allow constant moves from LTV TNs. * Modify the relevant VOPs to handle LTV constants correctly. While this mostly results in duplicated code, VOPs can generate better code even for unknown values in the constant vector. Index: move.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/ppc/move.lisp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- move.lisp 21 May 2009 21:03:38 -0000 1.6 +++ move.lisp 18 Jul 2009 17:53:00 -0000 1.7 @@ -141,7 +141,7 @@ (:arg-types tagged-num) (:note "fixnum untagging") (:generator 1 - (inst srawi y x 2))) + (inst srawi y x n-fixnum-tag-bits))) (define-move-vop move-to-word/fixnum :move (any-reg descriptor-reg) (signed-reg unsigned-reg)) @@ -151,7 +151,11 @@ (:results (y :scs (signed-reg unsigned-reg))) (:note "constant load") (:generator 1 - (inst lr y (tn-value x)))) + (cond ((sb!c::tn-leaf x) + (inst lr y (tn-value x))) + (t + (loadw y code-tn (tn-offset x) other-pointer-lowtag) + (inst srawi y y n-fixnum-tag-bits))))) (define-move-vop move-to-word-c :move (constant) (signed-reg unsigned-reg)) |