diff options
author | Ulrich Drepper <drepper@redhat.com> | 2009-08-08 10:21:46 -0700 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2009-08-08 10:21:46 -0700 |
commit | 49eea97b00d367aa3eac3dfd047c259e7bd04732 (patch) | |
tree | 689337823f6e88b1c410dfcd1dbc12f6d4a5f63f | |
parent | 8e436522e108229eeb96d8921c659c5a19eaf455 (diff) | |
download | glibc-49eea97b00d367aa3eac3dfd047c259e7bd04732.zip glibc-49eea97b00d367aa3eac3dfd047c259e7bd04732.tar.gz glibc-49eea97b00d367aa3eac3dfd047c259e7bd04732.tar.bz2 |
Another minor optimization of x86-64 pthread_cond_wait.
-rw-r--r-- | nptl/ChangeLog | 6 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S | 22 |
2 files changed, 13 insertions, 15 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 0f5c231..48fcc0f 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,9 @@ +2009-08-08 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S + (__pthread_cond_wait): Optimize by avoiding use of callee-safe + register. + 2009-08-07 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Little optimizations diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S index 45116b1..f5b929e 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S @@ -45,9 +45,6 @@ __pthread_cond_wait: cfi_lsda(DW_EH_PE_udata4, .LexceptSTART) #endif - pushq %r13 - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%r13, 0) #define FRAME_SIZE 32 leaq -FRAME_SIZE(%rsp), %rsp cfi_adjust_cfa_offset(FRAME_SIZE) @@ -140,7 +137,7 @@ __pthread_cond_wait: movl $SYS_futex, %eax syscall - movl $1, %r13d + movl $1, %r8d #ifdef __ASSUME_REQUEUE_PI jmp 62f #else @@ -158,7 +155,7 @@ __pthread_cond_wait: #else orl %fs:PRIVATE_FUTEX, %esi #endif -60: xorl %r13d, %r13d +60: xorl %r8d, %r8d movl $SYS_futex, %eax syscall @@ -233,20 +230,18 @@ __pthread_cond_wait: /* If requeue_pi is used the kernel performs the locking of the mutex. */ 11: movq 16(%rsp), %rdi - testl %r13d, %r13d + testl %r8d, %r8d jnz 18f callq __pthread_mutex_cond_lock -14: movq FRAME_SIZE(%rsp), %r13 - leaq FRAME_SIZE+8(%rsp), %rsp - cfi_adjust_cfa_offset(-(FRAME_SIZE + 8)) +14: leaq FRAME_SIZE(%rsp), %rsp + cfi_adjust_cfa_offset(-FRAME_SIZE) /* We return the result of the mutex_lock operation. */ retq - cfi_adjust_cfa_offset(8 + FRAME_SIZE) - cfi_rel_offset(%r13, FRAME_SIZE) + cfi_adjust_cfa_offset(FRAME_SIZE) 18: callq __pthread_mutex_cond_lock_adjust xorl %eax, %eax @@ -341,9 +336,7 @@ versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait, __condvar_cleanup1: /* Stack frame: - rsp + 40 - +--------------------------+ - rsp + 32 | %r13 | + rsp + 32 +--------------------------+ rsp + 24 | unused | +--------------------------+ @@ -465,7 +458,6 @@ __condvar_cleanup1: callq __pthread_mutex_cond_lock movq 24(%rsp), %rdi - movq 32(%rsp), %r13 .LcallUR: call _Unwind_Resume@PLT hlt |