- (let ((tls-index-valid (gen-label)))
- (load-binding-stack-pointer bsp)
- (loadw tls-index symbol symbol-tls-index-slot other-pointer-lowtag)
- (inst add bsp (* binding-size n-word-bytes))
- (store-binding-stack-pointer bsp)
- (inst test tls-index tls-index)
- (inst jmp :ne tls-index-valid)
- (inst mov tls-index symbol)
- (inst mov temp-reg-tn
- (make-fixup (ecase (tn-offset tls-index)
- (#.rax-offset 'alloc-tls-index-in-rax)
- (#.rcx-offset 'alloc-tls-index-in-rcx)
- (#.rdx-offset 'alloc-tls-index-in-rdx)
- (#.rbx-offset 'alloc-tls-index-in-rbx)
- (#.rsi-offset 'alloc-tls-index-in-rsi)
- (#.rdi-offset 'alloc-tls-index-in-rdi)
- (#.r8-offset 'alloc-tls-index-in-r8)
- (#.r9-offset 'alloc-tls-index-in-r9)
- (#.r10-offset 'alloc-tls-index-in-r10)
- (#.r12-offset 'alloc-tls-index-in-r12)
- (#.r13-offset 'alloc-tls-index-in-r13)
- (#.r14-offset 'alloc-tls-index-in-r14)
- (#.r15-offset 'alloc-tls-index-in-r15))
- :assembly-routine))
- (inst call temp-reg-tn)
- (emit-label tls-index-valid)
- (inst push (make-ea :qword :base thread-base-tn :scale 1 :index tls-index))
- (popw bsp (- binding-value-slot binding-size))
- (storew symbol bsp (- binding-symbol-slot binding-size))
- (inst mov (make-ea :qword :base thread-base-tn :scale 1 :index tls-index)
- val))))
+ (load-binding-stack-pointer bsp)
+ (loadw tls-index symbol symbol-tls-index-slot other-pointer-lowtag)
+ (inst add bsp (* binding-size n-word-bytes))
+ (store-binding-stack-pointer bsp)
+ (inst test tls-index tls-index)
+ (inst jmp :ne TLS-INDEX-VALID)
+ (inst mov tls-index symbol)
+ (inst mov tmp
+ (make-fixup (ecase (tn-offset tls-index)
+ (#.rax-offset 'alloc-tls-index-in-rax)
+ (#.rcx-offset 'alloc-tls-index-in-rcx)
+ (#.rdx-offset 'alloc-tls-index-in-rdx)
+ (#.rbx-offset 'alloc-tls-index-in-rbx)
+ (#.rsi-offset 'alloc-tls-index-in-rsi)
+ (#.rdi-offset 'alloc-tls-index-in-rdi)
+ (#.r8-offset 'alloc-tls-index-in-r8)
+ (#.r9-offset 'alloc-tls-index-in-r9)
+ (#.r10-offset 'alloc-tls-index-in-r10)
+ (#.r12-offset 'alloc-tls-index-in-r12)
+ (#.r13-offset 'alloc-tls-index-in-r13)
+ (#.r14-offset 'alloc-tls-index-in-r14)
+ (#.r15-offset 'alloc-tls-index-in-r15))
+ :assembly-routine))
+ (inst call tmp)
+ TLS-INDEX-VALID
+ (inst mov tmp (make-ea :qword :base thread-base-tn :scale 1 :index tls-index))
+ (storew tls-index bsp (- binding-symbol-slot binding-size))
+ (storew tmp bsp (- binding-value-slot binding-size))
+ (inst mov (make-ea :qword :base thread-base-tn :scale 1 :index tls-index)
+ val)))