diff options
author | Andreas Schwab <schwab@redhat.com> | 2009-07-22 11:37:18 +0200 |
---|---|---|
committer | Andreas Schwab <schwab@redhat.com> | 2009-07-22 11:37:18 +0200 |
commit | 64322469ecb5746709e560f36dbc740c1300f978 (patch) | |
tree | adb81205fb9862b78ed02770ea42e96f51e89561 /nptl/sysdeps | |
parent | 0457885b7efb5731e67202746d476c0d023bf43f (diff) | |
parent | ae612b04cc0716186e0d14e342bee184ba94ac1b (diff) | |
download | glibc-64322469ecb5746709e560f36dbc740c1300f978.tar glibc-64322469ecb5746709e560f36dbc740c1300f978.tar.gz glibc-64322469ecb5746709e560f36dbc740c1300f978.tar.bz2 glibc-64322469ecb5746709e560f36dbc740c1300f978.zip |
Merge commit 'origin/master' into fedora/master
Diffstat (limited to 'nptl/sysdeps')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S | 8 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S | 31 |
2 files changed, 16 insertions, 23 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S index f81466e1a5..e12790cb96 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S @@ -160,16 +160,14 @@ __pthread_cond_timedwait: movq 8(%rsp), %rdi movq %r13, %r10 + movl $FUTEX_WAIT_BITSET, %esi cmpq $-1, dep_mutex(%rdi) - movl $FUTEX_WAIT_BITSET, %eax - movl $(FUTEX_WAIT_BITSET|FUTEX_PRIVATE_FLAG), %esi - cmove %eax, %esi je 60f movq dep_mutex(%rdi), %r8 /* Requeue to a PI mutex if the PI bit is set. */ testl $PI_BIT, MUTEX_KIND(%r8) - je 60f + je 61f movl $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %esi xorl %eax, %eax @@ -191,10 +189,10 @@ __pthread_cond_timedwait: cmpq $-4095, %rax jnae 62f - movl $(FUTEX_WAIT_BITSET|FUTEX_PRIVATE_FLAG), %esi subq $cond_futex, %rdi #endif +61: movl $(FUTEX_WAIT_BITSET|FUTEX_PRIVATE_FLAG), %esi 60: xorl %r15d, %r15d xorl %eax, %eax /* The following only works like this because we only support 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 e6323ea3e2..2fab38e277 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 @@ -128,28 +128,15 @@ __pthread_cond_wait: movq 8(%rsp), %rdi xorq %r10, %r10 movq %r12, %rdx - // XXX reverse + lea - addq $cond_futex, %rdi - cmpq $-1, dep_mutex-cond_futex(%rdi) -#ifdef __ASSUME_PRIVATE_FUTEX - movl $FUTEX_WAIT, %eax - movl $(FUTEX_WAIT|FUTEX_PRIVATE_FLAG), %esi - cmove %eax, %esi -#else - movl $0, %eax - movl %fs:PRIVATE_FUTEX, %esi - cmove %eax, %esi -# if FUTEX_WAIT != 0 -# error "cc destroyed by following orl" - orl $FUTEX_WAIT, %esi -# endif -#endif + cmpq $-1, dep_mutex(%rdi) + leaq cond_futex(%rdi), %rdi + movl $FUTEX_WAIT, %esi je 60f movq dep_mutex-cond_futex(%rdi), %r8 /* Requeue to a PI mutex if the PI bit is set. */ testl $PI_BIT, MUTEX_KIND(%r8) - je 60f + je 61f movl $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %esi movl $SYS_futex, %eax @@ -162,9 +149,17 @@ __pthread_cond_wait: cmpq $-4095, %rax jnae 62f - movl $(FUTEX_WAIT|FUTEX_PRIVATE_FLAG), %esi +# ifndef __ASSUME_PRIVATE_FUTEX + movl $FUTEX_WAIT, %esi +# endif #endif +61: +#ifdef __ASSUME_PRIVATE_FUTEX + movl $(FUTEX_WAIT|FUTEX_PRIVATE_FLAG), %esi +#else + orl %fs:PRIVATE_FUTEX, %esi +#endif 60: xorl %r13d, %r13d movl $SYS_futex, %eax syscall |