X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fmips%2Fnlx.lisp;h=76174caa0785a83b58448afebcecdf1700f222ad;hb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;hp=45286b1c59df8d31b689713cd1857fd3764a6022;hpb=4ae1b794a5d6a90794468cf8017f5307f2c30dfe;p=sbcl.git diff --git a/src/compiler/mips/nlx.lisp b/src/compiler/mips/nlx.lisp index 45286b1..76174ca 100644 --- a/src/compiler/mips/nlx.lisp +++ b/src/compiler/mips/nlx.lisp @@ -1,41 +1,26 @@ (in-package "SB!VM") -;;; MAKE-NLX-SP-TN -- Interface -;;; -;;; Make an environment-live stack TN for saving the SP for NLX entry. -;;; +;;; Make an environment-live stack TN for saving the SP for NLX entry. (!def-vm-support-routine make-nlx-sp-tn (env) (physenv-live-tn (make-representation-tn *fixnum-primitive-type* immediate-arg-scn) env)) -;;; Make-NLX-Entry-Argument-Start-Location -- Interface -;;; -;;; Make a TN for the argument count passing location for a +;;; Make a TN for the argument count passing location for a ;;; non-local entry. ;;; (!def-vm-support-routine make-nlx-entry-arg-start-location () (make-wired-tn *fixnum-primitive-type* immediate-arg-scn ocfp-offset)) - ;;; Save and restore dynamic environment. ;;; -;;; These VOPs are used in the reentered function to restore the appropriate +;;; 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 are implicitly processed during unwinding. If there ;;; were any additional stacks, then this would be the place to restore the top ;;; pointers. - -;;; Make-Dynamic-State-TNs -- Interface -;;; -;;; 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 () - (make-n-tns 4 *backend-t-primitive-type*)) - (define-vop (save-dynamic-state) (:results (catch :scs (descriptor-reg)) (nfp :scs (descriptor-reg)) @@ -171,7 +156,7 @@ ((= nvals 1) (let ((no-values (gen-label))) (inst beq count zero-tn no-values) - (move (tn-ref-tn values) null-tn) + (move (tn-ref-tn values) null-tn t) (loadw (tn-ref-tn values) start) (emit-label no-values))) (t @@ -238,8 +223,9 @@ (any-reg (move new-start dst)) (control-stack (store-stack-tn new-start dst))) (inst beq num zero-tn done) + (inst nop) (sc-case new-count - (any-reg (inst move new-count num)) + (any-reg (move new-count num)) (control-stack (store-stack-tn new-count num))) ;; Copy stuff on stack. @@ -252,7 +238,7 @@ (inst addu dst dst n-word-bytes) (emit-label done) - (inst move csp-tn dst)))) + (move csp-tn dst)))) ;;; This VOP is just to force the TNs used in the cleanup onto the stack.