mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-26 23:10:06 +00:00
(__lll_mutex_lock_wait): Replace one memory operation with one register operation.
This commit is contained in:
parent
d38145ff0b
commit
a14c918ddd
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user