From 8e35f6ea93cc8e8a3b26fc104a300bfbac3031b6 Mon Sep 17 00:00:00 2001 From: Alastair Bridgewater Date: Tue, 9 Nov 2010 19:43:44 +0000 Subject: [PATCH] 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. --- src/compiler/alpha/call.lisp | 18 ++++++++++++++++++ src/compiler/alpha/cell.lisp | 6 ++++++ version.lisp-expr | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/compiler/alpha/call.lisp b/src/compiler/alpha/call.lisp index d62f5bd..c1ef107 100644 --- a/src/compiler/alpha/call.lisp +++ b/src/compiler/alpha/call.lisp @@ -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) diff --git a/src/compiler/alpha/cell.lisp b/src/compiler/alpha/cell.lisp index 22f7ce6..26dae0e 100644 --- a/src/compiler/alpha/cell.lisp +++ b/src/compiler/alpha/cell.lisp @@ -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 diff --git a/version.lisp-expr b/version.lisp-expr index 4f005d9..f384092 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.44.7" +"1.0.44.8" -- 1.7.10.4