Skip to content
Browse files

1.0.44.13: x86: Implement ANCESTOR-FRAME VOPs.

  * This is the x86 version of the "implicit" VALUE-CELL access
for DYNAMIC-EXTENT closures.
  • Loading branch information...
1 parent 4ad46c6 commit 997959cc458b00ff7faae526511533d24bdc0fde Alastair Bridgewater committed Nov 9, 2010
Showing with 27 additions and 1 deletion.
  1. +20 −0 src/compiler/x86/call.lisp
  2. +6 −0 src/compiler/x86/cell.lisp
  3. +1 −1 version.lisp-expr
View
20 src/compiler/x86/call.lisp
@@ -119,6 +119,26 @@
(:generator 1
nil))
+;;; 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
+ (frame-word-offset (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
+ (frame-word-offset (tn-offset variable-home-tn)))))
+
(define-vop (xep-allocate-frame)
(:info start-lab copy-more-arg-follows)
(:vop-var vop)
View
6 src/compiler/x86/cell.lisp
@@ -418,6 +418,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 ebp-tn object (+ closure-info-offset offset) fun-pointer-lowtag)))
;;;; value cell hackery
View
2 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.12"
+"1.0.44.13"

0 comments on commit 997959c

Please sign in to comment.
Something went wrong with that request. Please try again.