From ebddb42437ef37b15b1be1d82589b909c6799b1c Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 1 Mar 2004 06:38:24 +0000 Subject: (__lll_mutex_lock_wait): Optimize a bit more. Just one copy of the atomic instruction needed. --- nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S | 12 +++--------- 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 -- cgit 1.4.1