X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fx86-64%2Falloc.lisp;h=7fd309b3c9a88cb277b87f2030a5deb1d244f557;hb=f17e3d27d7ff599f9443d011d17017a2a858c81a;hp=80d5406329a8ba75ebdb934b86a6549ee1d356b2;hpb=6147892310586401bae00de7e65a386c72531136;p=sbcl.git diff --git a/src/assembly/x86-64/alloc.lisp b/src/assembly/x86-64/alloc.lisp index 80d5406..7fd309b 100644 --- a/src/assembly/x86-64/alloc.lisp +++ b/src/assembly/x86-64/alloc.lisp @@ -92,11 +92,12 @@ (inst push other) (inst push target) (emit-label get-tls-index-lock) - (inst mov target 1) - (zeroize rax-tn) - (inst cmpxchg (make-ea-for-symbol-value *tls-index-lock*) - target :lock) - (inst jmp :ne get-tls-index-lock) + (let ((not-rax ,(if (eql 'rax reg) 'other 'target))) + (inst mov not-rax 1) + (zeroize rax-tn) + (inst cmpxchg (make-ea-for-symbol-value *tls-index-lock*) + not-rax :lock) + (inst jmp :ne get-tls-index-lock)) ;; The symbol is now in OTHER. (inst pop other) ;; Now with the lock held, see if the symbol's tls index has been