From: Alastair B. <lis...@us...> - 2010-11-09 19:43:53
|
Update of /cvsroot/sbcl/sbcl/src/compiler/alpha In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv27584/src/compiler/alpha Modified Files: call.lisp cell.lisp Log Message: 1.0.44.8: alpha: Implement ANCESTOR-FRAME VOPs. * This is the Alpha version of the "implicit" VALUE-CELL access for DYNAMIC-EXTENT closures. * This commit is untested, but should work, as it is based on the PPC changes, which were tested. Index: call.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/alpha/call.lisp,v retrieving revision 1.32 retrieving revision 1.33 diff -u -d -r1.32 -r1.33 --- call.lisp 19 Sep 2008 20:56:21 -0000 1.32 +++ call.lisp 9 Nov 2010 19:43:44 -0000 1.33 @@ -123,6 +123,24 @@ (when nfp (inst addq nfp (bytes-needed-for-non-descriptor-stack-frame) val))))) +;;; Accessing a slot from an earlier stack frame is definite hackery. +(define-vop (ancestor-frame-ref) + (:args (frame-pointer :scs (descriptor-reg)) + (variable-home-tn :load-if nil)) + (:results (value :scs (descriptor-reg any-reg))) + (:policy :fast-safe) + (:generator 4 + (aver (sc-is variable-home-tn control-stack)) + (loadw value frame-pointer (tn-offset variable-home-tn)))) +(define-vop (ancestor-frame-set) + (:args (frame-pointer :scs (descriptor-reg)) + (value :scs (descriptor-reg any-reg))) + (:results (variable-home-tn :load-if nil)) + (:policy :fast-safe) + (:generator 4 + (aver (sc-is variable-home-tn control-stack)) + (storew value frame-pointer (tn-offset variable-home-tn)))) + (define-vop (xep-allocate-frame) (:info start-lab copy-more-arg-follows) (:ignore copy-more-arg-follows) Index: cell.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/alpha/cell.lisp,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- cell.lisp 8 May 2009 19:08:08 -0000 1.19 +++ cell.lisp 9 Nov 2010 19:43:44 -0000 1.20 @@ -239,6 +239,12 @@ (define-vop (closure-init slot-set) (:variant closure-info-offset fun-pointer-lowtag)) + +(define-vop (closure-init-from-fp) + (:args (object :scs (descriptor-reg))) + (:info offset) + (:generator 4 + (storew cfp-tn object (+ closure-info-offset offset) fun-pointer-lowtag))) ;;;; value cell hackery |