(: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))