hexstr / cold-print fixes from Douglas Katzman
[sbcl.git] / src / assembly / ppc / assem-rtns.lisp
index d59e074..e6839a9 100644 (file)
                           (:temp target-uwp any-reg nl2-offset))
   (declare (ignore start count))
 
-  (let ((error (generate-error-code nil invalid-unwind-error)))
+  (let ((error (generate-error-code nil 'invalid-unwind-error)))
     (inst cmpwi block 0)
     (inst beq error))
 
-  (load-symbol-value cur-uwp *current-unwind-protect-block*)
+  (load-tl-symbol-value cur-uwp *current-unwind-protect-block*)
   (loadw target-uwp block unwind-block-current-uwp-slot)
   (inst cmpw cur-uwp target-uwp)
   (inst bne do-uwp)
   (loadw cfp-tn cur-uwp unwind-block-current-cont-slot)
   (loadw code-tn cur-uwp unwind-block-current-code-slot)
   (loadw lra cur-uwp unwind-block-entry-pc-slot)
-  (lisp-return lra lip :frob-code nil)
+  (lisp-return lra lip)
 
   DO-UWP
 
   (loadw next-uwp cur-uwp unwind-block-current-uwp-slot)
-  (store-symbol-value next-uwp *current-unwind-protect-block*)
+  (store-tl-symbol-value next-uwp *current-unwind-protect-block* cfp-tn)
   (inst b do-exit))
 
 (define-assembly-routine (throw
 
   (declare (ignore start count))
 
-  (load-symbol-value catch *current-catch-block*)
+  (load-tl-symbol-value catch *current-catch-block*)
 
   loop
 
-  (let ((error (generate-error-code nil unseen-throw-tag-error target)))
+  (let ((error (generate-error-code nil 'unseen-throw-tag-error target)))
     (inst cmpwi catch 0)
     (inst beq error))
 
   exit
 
   (move target catch)
-  (inst ba (make-fixup 'unwind :assembly-routine)))
-
-
-
+  ;; reuse catch
+  (inst lr catch (make-fixup 'unwind :assembly-routine))
+  (inst mtlr catch)
+  (inst blr))