aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-03-01 06:38:24 +0000
committerUlrich Drepper <drepper@redhat.com>2004-03-01 06:38:24 +0000
commitebddb42437ef37b15b1be1d82589b909c6799b1c (patch)
treebc7b6f6636880aacb55422ca06a7335da1bddb74
parent7a49a7d5b7cfd40e4ea7f6544c9f92e997254c10 (diff)
downloadglibc-ebddb42437ef37b15b1be1d82589b909c6799b1c.tar
glibc-ebddb42437ef37b15b1be1d82589b909c6799b1c.tar.gz
glibc-ebddb42437ef37b15b1be1d82589b909c6799b1c.tar.bz2
glibc-ebddb42437ef37b15b1be1d82589b909c6799b1c.zip
(__lll_mutex_lock_wait): Optimize a bit more. Just one copy of the atomic instruction needed.
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S12
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S12
2 files changed, 6 insertions, 18 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
index 600ba75874..96ea35caac 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
@@ -51,24 +51,18 @@ __lll_mutex_lock_wait:
xorl %ecx, %ecx /* movl $FUTEX_WAIT, %ecx */
cmpl %edx, %eax /* NB: %edx == 2 */
- je 1f
-
- movl %edx, %eax
- xchgl %eax, (%ebx) /* NB: lock is implied */
-
- testl %eax, %eax
- je 2f
+ jne 2f
1: movl $SYS_futex, %eax
ENTER_KERNEL
- movl %edx, %eax
+2: movl %edx, %eax
xchgl %eax, (%ebx) /* NB: lock is implied */
testl %eax, %eax
jnz,pn 1b
-2: popl %esi
+ popl %esi
popl %ebx
popl %edx
ret
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
index 3c56daecf5..2c918d7622 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
@@ -51,24 +51,18 @@ __lll_mutex_lock_wait:
movq %r10, %rsi /* movq $FUTEX_WAIT, %rsi */
cmpl %edx, %eax /* NB: %edx == 2 */
- je 1f
-
- movl %edx, %eax
- xchgl %eax, (%rdi) /* NB: lock is implied */
-
- testl %eax, %eax
- je 2f
+ jne 2f
1: movq $SYS_futex, %rax
syscall
- movl %edx, %eax
+2: movl %edx, %eax
xchgl %eax, (%rdi) /* NB: lock is implied */
testl %eax, %eax
jnz 1b
-2: popq %rdx
+ popq %rdx
popq %r10
retq
.size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait