diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-03-01 06:38:24 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-03-01 06:38:24 +0000 |
commit | ebddb42437ef37b15b1be1d82589b909c6799b1c (patch) | |
tree | bc7b6f6636880aacb55422ca06a7335da1bddb74 | |
parent | 7a49a7d5b7cfd40e4ea7f6544c9f92e997254c10 (diff) | |
download | glibc-ebddb42437ef37b15b1be1d82589b909c6799b1c.tar.gz glibc-ebddb42437ef37b15b1be1d82589b909c6799b1c.tar.xz 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.S | 12 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S | 12 |
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 |