X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fx86%2Fassem-rtns.lisp;h=c006ebeb22dd489201ede773a7ef220a6b6f7d38;hb=e7ec364a5d88c71a0dbaf501161c0209dd8dde19;hp=867b2d9ef674b8899194d313362e7d9093f20b1e;hpb=50305b602c3953440af716137a56f50cd204375d;p=sbcl.git diff --git a/src/assembly/x86/assem-rtns.lisp b/src/assembly/x86/assem-rtns.lisp index 867b2d9..c006ebe 100644 --- a/src/assembly/x86/assem-rtns.lisp +++ b/src/assembly/x86/assem-rtns.lisp @@ -197,7 +197,7 @@ (declare (ignore start count)) - (load-symbol-value catch *current-catch-block*) + (load-tl-symbol-value catch *current-catch-block*) LOOP @@ -213,7 +213,7 @@ EXIT - ;; Hear EAX points to catch block containing symbol pointed to by EDX. + ;; Here EAX points to catch block containing symbol pointed to by EDX. (inst jmp (make-fixup 'unwind :assembly-routine))) ;;;; non-local exit noise @@ -232,9 +232,10 @@ (inst or block block) ; check for NULL pointer (inst jmp :z error)) - (load-symbol-value uwp *current-unwind-protect-block*) + (load-tl-symbol-value uwp *current-unwind-protect-block*) - ;; Does *cuwpb* match value stored in argument cuwp slot? + ;; Does *CURRENT-UNWIND-PROTECT-BLOCK* match the value stored in + ;; argument's CURRENT-UWP-SLOT? (inst cmp uwp (make-ea-for-object-slot block unwind-block-current-uwp-slot 0)) ;; If a match, return to context in arg block. @@ -246,15 +247,17 @@ (move block uwp) ;; Set next unwind protect context. (loadw uwp uwp unwind-block-current-uwp-slot) - (store-symbol-value uwp *current-unwind-protect-block*) + ;; we're about to reload ebp anyway, so let's borrow it here as a + ;; temporary. Hope this works + (store-tl-symbol-value uwp *current-unwind-protect-block* ebp-tn) DO-EXIT (loadw ebp-tn block unwind-block-current-cont-slot) ;; Uwp-entry expects some things in known locations so that they can - ;; be saved on the stack: the block in edx-tn; start in ebx-tn; and - ;; count in ecx-tn + ;; be saved on the stack: the block in edx-tn, start in ebx-tn, and + ;; count in ecx-tn. (inst jmp (make-ea :byte :base block :disp (* unwind-block-entry-pc-slot n-word-bytes))))