0.8.7.56:
[sbcl.git] / src / compiler / alpha / nlx.lisp
index 654105c..89c2e8d 100644 (file)
@@ -1,4 +1,4 @@
-;;;; the definitions of VOPs used for non-local exit (throw, lexical
+;;;; the definitions of VOPs used for non-local exit (THROW, lexical
 ;;;; exit, etc.)
 
 ;;;; This software is part of the SBCL system. See the README file for
 
 ;;; Make a TN for the argument count passing location for a
 ;;; non-local entry.
-(!def-vm-support-routine make-nlx-entry-argument-start-location ()
+(!def-vm-support-routine make-nlx-entry-arg-start-location ()
   (make-wired-tn *fixnum-primitive-type* immediate-arg-scn ocfp-offset))
-
 \f
 ;;;; save and restoring the dynamic environment
 ;;;;
 ;;;; These VOPs are used in the reentered function to restore the
 ;;;; appropriate dynamic environment. Currently we only save the
-;;;; Current-Catch and binding stack pointer. We don't need to
-;;;; save/restore the current unwind-protect, since unwind-protects
+;;;; CURRENT-CATCH and binding stack pointer. We don't need to
+;;;; save/restore the current UNWIND-PROTECT, since UNWIND-PROTECTS
 ;;;; are implicitly processed during unwinding. If there were any
-;;;; additional stacks, then this would be the place to restore the
+;;;; additional stacks (as e.g. there was an interpreter "eval stack"
+;;;; before sbcl-0.7.0), then this would be the place to restore the
 ;;;; top pointers.
 
-
-;;; Return a list of TNs that can be used to snapshot the dynamic state for
-;;; use with the Save/Restore-Dynamic-Environment VOPs.
-(!def-vm-support-routine make-dynamic-state-tns ()
-  (list (make-normal-tn *backend-t-primitive-type*)
-       (make-normal-tn *backend-t-primitive-type*)
-       (make-normal-tn *backend-t-primitive-type*)
-       (make-normal-tn *backend-t-primitive-type*)))
-
 (define-vop (save-dynamic-state)
   (:results (catch :scs (descriptor-reg))
            (nfp :scs (descriptor-reg))
-           (nsp :scs (descriptor-reg))
-           (eval :scs (descriptor-reg)))
+           (nsp :scs (descriptor-reg)))
   (:vop-var vop)
   (:generator 13
     (load-symbol-value catch *current-catch-block*)
     (let ((cur-nfp (current-nfp-tn vop)))
       (when cur-nfp
        (inst mskll cur-nfp 4 nfp)))
-    (inst mskll nsp-tn 4 nsp)
-    (load-symbol-value eval *eval-stack-top*)))
+    (inst mskll nsp-tn 4 nsp)))
 
 (define-vop (restore-dynamic-state)
   (:args (catch :scs (descriptor-reg))
         (nfp :scs (descriptor-reg))
-        (nsp :scs (descriptor-reg))
-        (eval :scs (descriptor-reg)))
+        (nsp :scs (descriptor-reg)))
   (:vop-var vop)
   (:temporary (:sc any-reg) temp)
   (:generator 10
     (store-symbol-value catch *current-catch-block*)
-    (store-symbol-value eval *eval-stack-top*)
     (inst mskll nsp-tn 0 temp)
     (let ((cur-nfp (current-nfp-tn vop)))
       (when cur-nfp
   (:temporary (:scs (descriptor-reg)) temp)
   (:temporary (:scs (non-descriptor-reg)) ndescr)
   (:generator 22
-    (inst lda block (* (tn-offset tn) sb!vm:n-word-bytes) cfp-tn)
+    (inst lda block (* (tn-offset tn) n-word-bytes) cfp-tn)
     (load-symbol-value temp *current-unwind-protect-block*)
-    (storew temp block sb!vm:unwind-block-current-uwp-slot)
-    (storew cfp-tn block sb!vm:unwind-block-current-cont-slot)
-    (storew code-tn block sb!vm:unwind-block-current-code-slot)
+    (storew temp block unwind-block-current-uwp-slot)
+    (storew cfp-tn block unwind-block-current-cont-slot)
+    (storew code-tn block unwind-block-current-code-slot)
     (inst compute-lra-from-code temp code-tn entry-label ndescr)
-    (storew temp block sb!vm:catch-block-entry-pc-slot)))
+    (storew temp block catch-block-entry-pc-slot)))
 
 
 ;;; This is like Make-Unwind-Block, except that we also store in the
 ;;; specified tag, and link the block into the Current-Catch list.
 (define-vop (make-catch-block)
   (:args (tn)
-        (tag :scs (descriptor-reg)))
+        (tag :scs (any-reg descriptor-reg)))
   (:info entry-label)
   (:results (block :scs (any-reg)))
   (:temporary (:scs (descriptor-reg)) temp)
   (:temporary (:scs (descriptor-reg) :target block :to (:result 0)) result)
   (:temporary (:scs (non-descriptor-reg)) ndescr)
   (:generator 44
-    (inst lda result (* (tn-offset tn) sb!vm:n-word-bytes) cfp-tn)
+    (inst lda result (* (tn-offset tn) n-word-bytes) cfp-tn)
     (load-symbol-value temp *current-unwind-protect-block*)
-    (storew temp result sb!vm:catch-block-current-uwp-slot)
-    (storew cfp-tn result sb!vm:catch-block-current-cont-slot)
-    (storew code-tn result sb!vm:catch-block-current-code-slot)
+    (storew temp result catch-block-current-uwp-slot)
+    (storew cfp-tn result catch-block-current-cont-slot)
+    (storew code-tn result catch-block-current-code-slot)
     (inst compute-lra-from-code temp code-tn entry-label ndescr)
-    (storew temp result sb!vm:catch-block-entry-pc-slot)
+    (storew temp result catch-block-entry-pc-slot)
 
-    (storew tag result sb!vm:catch-block-tag-slot)
+    (storew tag result catch-block-tag-slot)
     (load-symbol-value temp *current-catch-block*)
-    (storew temp result sb!vm:catch-block-previous-catch-slot)
+    (storew temp result catch-block-previous-catch-slot)
     (store-symbol-value result *current-catch-block*)
 
     (move result block)))
   (:args (tn))
   (:temporary (:scs (descriptor-reg)) new-uwp)
   (:generator 7
-    (inst lda new-uwp (* (tn-offset tn) sb!vm:n-word-bytes) cfp-tn)
+    (inst lda new-uwp (* (tn-offset tn) n-word-bytes) cfp-tn)
     (store-symbol-value new-uwp *current-unwind-protect-block*)))
 
 (define-vop (unlink-catch-block)
   (:translate %catch-breakup)
   (:generator 17
     (load-symbol-value block *current-catch-block*)
-    (loadw block block sb!vm:catch-block-previous-catch-slot)
+    (loadw block block catch-block-previous-catch-slot)
     (store-symbol-value block *current-catch-block*)))
 
 (define-vop (unlink-unwind-protect)
   (:translate %unwind-protect-breakup)
   (:generator 17
     (load-symbol-value block *current-unwind-protect-block*)
-    (loadw block block sb!vm:unwind-block-current-uwp-slot)
+    (loadw block block unwind-block-current-uwp-slot)
     (store-symbol-value block *current-unwind-protect-block*)))
 \f
 ;;;; NLX entry VOPs
       ;; Copy stuff on stack.
       (emit-label loop)
       (loadw temp src)
-      (inst lda src sb!vm:n-word-bytes src)
+      (inst lda src n-word-bytes src)
       (storew temp dst)
       (inst lda num (fixnumize -1) num)
-      (inst lda dst sb!vm:n-word-bytes dst)
+      (inst lda dst n-word-bytes dst)
       (inst bne num loop)
 
       (emit-label done)