(inst addi (- (bytes-needed-for-non-descriptor-stack-frame))
nfp 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)
(insert-step-instrumenting (callable-tn)
;; Conditionally insert a conditional trap:
(when step-instrumenting
- ;; Get the symbol-value of SB!IMPL::*STEPPING*
- (inst ldw (- (+ symbol-value-slot
- (truncate (static-symbol-offset 'sb!impl::*stepping*)
- n-word-bytes))
- other-pointer-lowtag)
- null-tn stepping)
+ (load-symbol-value stepping sb!impl::*stepping*)
;; If it's not NIL, trap.
;(inst comb := stepping null-tn step-done-label)
(inst comb := null-tn null-tn step-done-label :nullify t)
(:policy :fast-safe)
(:vop-var vop)
(:generator 3
- ;; Get the symbol-value of SB!IMPL::*STEPPING*
- (inst ldw (- (+ symbol-value-slot
- (truncate (static-symbol-offset 'sb!impl::*stepping*)
- n-word-bytes))
- other-pointer-lowtag)
- null-tn stepping)
+ (load-symbol-value stepping sb!impl::*stepping*)
;; If it's not NIL, trap.
(inst comb := stepping null-tn DONE :nullify t)
;; CONTEXT-PC will be pointing here when the interrupt is handled,