Skip to content
Snippets Groups Projects
Commit 2f4a668f authored by wlott's avatar wlott
Browse files

Now that ir2tran deals with the BSP during unwinds, don't bother to save it

in save/restore-dynamic-state.
parent 8f8d8ca2
No related branches found
No related tags found
No related merge requests found
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
;;; Scott Fahlman (FAHLMAN@CMUC). ;;; Scott Fahlman (FAHLMAN@CMUC).
;;; ********************************************************************** ;;; **********************************************************************
;;; ;;;
;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/nlx.lisp,v 1.3 1991/01/20 22:46:52 wlott Exp $ ;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/nlx.lisp,v 1.4 1991/08/31 22:11:00 wlott Exp $
;;; ;;;
;;; This file contains the definitions of VOPs used for non-local exit ;;; This file contains the definitions of VOPs used for non-local exit
;;; (throw, lexical exit, etc.) ;;; (throw, lexical exit, etc.)
...@@ -43,18 +43,16 @@ ...@@ -43,18 +43,16 @@
;;; use with the Save/Restore-Dynamic-Environment VOPs. ;;; use with the Save/Restore-Dynamic-Environment VOPs.
;;; ;;;
(def-vm-support-routine make-dynamic-state-tns () (def-vm-support-routine make-dynamic-state-tns ()
(make-n-tns 5 *any-primitive-type*)) (make-n-tns 4 *any-primitive-type*))
(define-vop (save-dynamic-state) (define-vop (save-dynamic-state)
(:results (catch :scs (descriptor-reg)) (:results (catch :scs (descriptor-reg))
(special :scs (descriptor-reg))
(nfp :scs (descriptor-reg)) (nfp :scs (descriptor-reg))
(nsp :scs (descriptor-reg)) (nsp :scs (descriptor-reg))
(eval :scs (descriptor-reg))) (eval :scs (descriptor-reg)))
(:vop-var vop) (:vop-var vop)
(:generator 13 (:generator 13
(load-symbol-value catch lisp::*current-catch-block*) (load-symbol-value catch lisp::*current-catch-block*)
(move special bsp-tn)
(let ((cur-nfp (current-nfp-tn vop))) (let ((cur-nfp (current-nfp-tn vop)))
(when cur-nfp (when cur-nfp
(move nfp cur-nfp))) (move nfp cur-nfp)))
...@@ -63,42 +61,17 @@ ...@@ -63,42 +61,17 @@
(define-vop (restore-dynamic-state) (define-vop (restore-dynamic-state)
(:args (catch :scs (descriptor-reg)) (:args (catch :scs (descriptor-reg))
(special :scs (descriptor-reg))
(nfp :scs (descriptor-reg)) (nfp :scs (descriptor-reg))
(nsp :scs (descriptor-reg)) (nsp :scs (descriptor-reg))
(eval :scs (descriptor-reg))) (eval :scs (descriptor-reg)))
(:temporary (:scs (descriptor-reg)) symbol value)
(:vop-var vop) (:vop-var vop)
(:generator 10 (:generator 10
(let ((done (gen-label)) (store-symbol-value catch lisp::*current-catch-block*)
(skip (gen-label)) (store-symbol-value eval lisp::*eval-stack-top*)
(loop (gen-label))) (let ((cur-nfp (current-nfp-tn vop)))
(when cur-nfp
(store-symbol-value catch lisp::*current-catch-block*) (move cur-nfp nfp)))
(store-symbol-value eval lisp::*eval-stack-top*) (move nsp-tn nsp)))
(let ((cur-nfp (current-nfp-tn vop)))
(when cur-nfp
(move cur-nfp nfp)))
(move nsp-tn nsp)
(inst cmp special bsp-tn)
(inst b :eq done)
(inst nop)
(emit-label loop)
(loadw symbol bsp-tn (- binding-symbol-slot binding-size))
(inst cmp symbol)
(inst b :eq skip)
(loadw value bsp-tn (- binding-value-slot binding-size))
(storew value symbol vm:symbol-value-slot vm:other-pointer-type)
(storew zero-tn bsp-tn (- binding-symbol-slot binding-size))
(emit-label skip)
(inst add bsp-tn bsp-tn (* -2 vm:word-bytes))
(inst cmp bsp-tn special)
(inst b :ne loop)
(inst nop)
(emit-label done))))
(define-vop (current-stack-pointer) (define-vop (current-stack-pointer)
(:results (res :scs (any-reg descriptor-reg))) (:results (res :scs (any-reg descriptor-reg)))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment