(__lll_mutex_lock_wait): Optimize a bit more. Just one copy of the atomic instruction needed.

This commit is contained in:
Ulrich Drepper 2004-03-01 06:38:24 +00:00
parent 7a49a7d5b7
commit ebddb42437
2 changed files with 6 additions and 18 deletions

View File

@ -51,24 +51,18 @@ __lll_mutex_lock_wait:
xorl %ecx, %ecx /* movl $FUTEX_WAIT, %ecx */ xorl %ecx, %ecx /* movl $FUTEX_WAIT, %ecx */
cmpl %edx, %eax /* NB: %edx == 2 */ cmpl %edx, %eax /* NB: %edx == 2 */
je 1f jne 2f
movl %edx, %eax
xchgl %eax, (%ebx) /* NB: lock is implied */
testl %eax, %eax
je 2f
1: movl $SYS_futex, %eax 1: movl $SYS_futex, %eax
ENTER_KERNEL ENTER_KERNEL
movl %edx, %eax 2: movl %edx, %eax
xchgl %eax, (%ebx) /* NB: lock is implied */ xchgl %eax, (%ebx) /* NB: lock is implied */
testl %eax, %eax testl %eax, %eax
jnz,pn 1b jnz,pn 1b
2: popl %esi popl %esi
popl %ebx popl %ebx
popl %edx popl %edx
ret ret

View File

@ -51,24 +51,18 @@ __lll_mutex_lock_wait:
movq %r10, %rsi /* movq $FUTEX_WAIT, %rsi */ movq %r10, %rsi /* movq $FUTEX_WAIT, %rsi */
cmpl %edx, %eax /* NB: %edx == 2 */ cmpl %edx, %eax /* NB: %edx == 2 */
je 1f jne 2f
movl %edx, %eax
xchgl %eax, (%rdi) /* NB: lock is implied */
testl %eax, %eax
je 2f
1: movq $SYS_futex, %rax 1: movq $SYS_futex, %rax
syscall syscall
movl %edx, %eax 2: movl %edx, %eax
xchgl %eax, (%rdi) /* NB: lock is implied */ xchgl %eax, (%rdi) /* NB: lock is implied */
testl %eax, %eax testl %eax, %eax
jnz 1b jnz 1b
2: popq %rdx popq %rdx
popq %r10 popq %r10
retq retq
.size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait .size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait