X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fx86%2Falloc.lisp;h=897855b5572141b612aa27313ed03e0eea3b9835;hb=371577a214ce2659c271279ad48e4c42e1c0c93e;hp=65cfdb066d6e0610c785d80bed9744e0123d8991;hpb=b71ea3ac652d67b53d415378ed27da80cc90806f;p=sbcl.git diff --git a/src/assembly/x86/alloc.lisp b/src/assembly/x86/alloc.lisp index 65cfdb0..897855b 100644 --- a/src/assembly/x86/alloc.lisp +++ b/src/assembly/x86/alloc.lisp @@ -102,7 +102,8 @@ (emit-label get-tls-index-lock) (inst mov target 1) (inst xor eax-tn eax-tn) - (inst cmpxchg (make-ea-for-symbol-value *tls-index-lock*) target :lock) + (inst cmpxchg (make-ea-for-symbol-value *tls-index-lock*) + target :lock) (inst jmp :ne get-tls-index-lock) ;; The symbol is now in OTHER. (inst pop other) @@ -113,9 +114,13 @@ (inst jmp :ne release-tls-index-lock) ;; Allocate a new tls-index. (load-symbol-value target *free-tls-index*) - (let ((error (generate-error-code nil 'tls-exhausted-error))) + (let ((not-error (gen-label)) + (error (generate-error-code nil 'tls-exhausted-error))) (inst cmp target (fixnumize tls-size)) - (inst jmp :ge error)) + (inst jmp :l not-error) + (%clear-pseudo-atomic) + (inst jmp error) + (emit-label not-error)) (inst add (make-ea-for-symbol-value *free-tls-index*) (fixnumize 1)) (storew target other symbol-tls-index-slot other-pointer-lowtag)