(__lll_mutex_lock_wait): Replace one memory operation with one register operation.

This commit is contained in:
Ulrich Drepper 2003-05-30 17:49:37 +00:00
parent d38145ff0b
commit a14c918ddd
2 changed files with 19 additions and 12 deletions

View File

@ -45,21 +45,23 @@ __lll_mutex_lock_wait:
pushl %ebx
pushl %edx
/* In the loop we are going to add 2 instead of 1 which is what
the caller did. Account for that. */
subl $1, %eax
movl %ecx, %ebx
xorl %esi, %esi /* No timeout. */
xorl %ecx, %ecx /* movl $FUTEX_WAIT, %ecx */
1:
leal 1(%eax), %edx /* account for the preceeded xadd. */
leal 2(%eax), %edx /* account for the preceeded xadd. */
movl $SYS_futex, %eax
ENTER_KERNEL
movl $1, %eax
movl $2, %eax
LOCK
xaddl %eax, (%ebx)
testl %eax, %eax
jne 1b
movl $2, (%ebx)
jne,pn 1b
popl %edx
popl %ebx
@ -83,13 +85,17 @@ __lll_mutex_timedlock_wait:
pushl %ebx
pushl %ebp
/* In the loop we are going to add 2 instead of 1 which is what
the caller did. Account for that. */
subl $1, %eax
/* Stack frame for the timespec and timeval structs. */
subl $8, %esp
movl %ecx, %ebp
movl %edx, %edi
1: leal 1(%eax), %esi
1: leal 2(%eax), %esi
/* Get current time. */
movl %esp, %ebx
@ -122,13 +128,12 @@ __lll_mutex_timedlock_wait:
ENTER_KERNEL
movl %eax, %ecx
movl $1, %eax
movl $2, %eax
LOCK
xaddl %eax, (%ebx)
testl %eax, %eax
jne 7f
movl $2, (%ebx)
xorl %eax, %eax
6: addl $8, %esp

View File

@ -46,22 +46,24 @@ __lll_mutex_lock_wait:
pushq %r10
pushq %rdx
/* In the loop we are going to add 2 instead of 1 which is what
the caller did. Account for that. */
decq %rsi
xorq %r10, %r10 /* No timeout. */
1:
leaq 1(%rsi), %rdx /* account for the preceeded xadd. */
leaq 2(%rsi), %rdx /* account for the preceeded xadd. */
movq %r10, %rsi /* movq $FUTEX_WAIT, %rsi */
movq $SYS_futex, %rax
syscall
movl $1, %esi
movl $2, %esi
LOCK
xaddl %esi, (%rdi)
testl %esi, %esi
jne 1b
movl $2, (%rdi)
popq %rdx
popq %r10
retq