X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fx86-64%2Falloc.lisp;h=2c113b0332734232e87cd5a75a21bdf38007e95b;hb=a18894dbea4495b885e1747babf4e2593dfb705e;hp=ba27b1b4aff45ce6b6e36bf2579b713a3fc04a93;hpb=dabefb02a8df444fbc3c38d7043e201ae450040e;p=sbcl.git diff --git a/src/assembly/x86-64/alloc.lisp b/src/assembly/x86-64/alloc.lisp index ba27b1b..2c113b0 100644 --- a/src/assembly/x86-64/alloc.lisp +++ b/src/assembly/x86-64/alloc.lisp @@ -94,8 +94,7 @@ (emit-label get-tls-index-lock) (inst mov target 1) (zeroize rax-tn) - (inst lock) - (inst cmpxchg (make-ea-for-symbol-value *tls-index-lock*) target) + (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) @@ -106,13 +105,14 @@ (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 ((error (generate-error-code nil 'tls-exhausted-error))) (inst cmp target (fixnumize tls-size)) (inst jmp :ge error)) (inst add (make-ea-for-symbol-value *free-tls-index*) (fixnumize 1)) (storew target other symbol-tls-index-slot other-pointer-lowtag) (emit-label release-tls-index-lock) + ;; No need for barriers on x86/x86-64 on unlock. (store-symbol-value 0 *tls-index-lock*) ;; Restore OTHER. (inst pop other))