diff options
Diffstat (limited to 'nptl')
17 files changed, 177 insertions, 110 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 82895d4785..9aadf5c016 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,25 @@ +2005-03-31 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Use + functionally equivalent, but shorter instructions. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h: Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: + Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: + Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Likewise. + 2005-03-28 Daniel Jacobowitz <dan@codesourcery.com> * sysdeps/mips/Makefile: New file. diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S index d5c9345558..3a49e25dd2 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -48,12 +48,16 @@ __lll_mutex_lock_wait: xorq %r10, %r10 /* No timeout. */ movl $2, %edx - movq %r10, %rsi /* movq $FUTEX_WAIT, %rsi */ +#if FUTEX_WAIT == 0 + xorl %esi, %esi +#else + movl $FUTEX_WAIT, %esi +#endif cmpl %edx, %eax /* NB: %edx == 2 */ jne 2f -1: movq $SYS_futex, %rax +1: movl $SYS_futex, %eax syscall 2: movl %edx, %eax @@ -93,7 +97,7 @@ __lll_mutex_timedlock_wait: 1: /* Get current time. */ movq %rsp, %rdi - xorq %rsi, %rsi + xorl %esi, %esi movq $VSYSCALL_ADDR_vgettimeofday, %rax /* This is a regular function call, all caller-save registers might be clobbered. */ @@ -101,7 +105,7 @@ __lll_mutex_timedlock_wait: /* Compute relative timeout. */ movq 8(%rsp), %rax - movq $1000, %rdi + movl $1000, %edi mul %rdi /* Milli seconds to nano seconds. */ movq (%r13), %rdi movq 8(%r13), %rsi @@ -126,9 +130,13 @@ __lll_mutex_timedlock_wait: je 8f movq %rsp, %r10 - xorq %rsi, %rsi /* movq $FUTEX_WAIT, %rsi */ +#if FUTEX_WAIT == 0 + xorl %esi, %esi +#else + movl $FUTEX_WAIT, %esi +#endif movq %r12, %rdi - movq $SYS_futex, %rax + movl $SYS_futex, %eax syscall movq %rax, %rcx @@ -195,9 +203,9 @@ __lll_mutex_unlock_wake: pushq %rdx movl $0, (%rdi) - movq $FUTEX_WAKE, %rsi + movl $FUTEX_WAKE, %esi movl $1, %edx /* Wake one thread. */ - movq $SYS_futex, %rax + movl $SYS_futex, %eax syscall popq %rdx @@ -222,13 +230,13 @@ __lll_timedwait_tid: /* Get current time. */ 2: movq %rsp, %rdi - xorq %rsi, %rsi + xorl %esi, %esi movq $VSYSCALL_ADDR_vgettimeofday, %rax callq *%rax /* Compute relative timeout. */ movq 8(%rsp), %rax - movq $1000, %rdi + movl $1000, %edi mul %rdi /* Milli seconds to nano seconds. */ movq (%r13), %rdi movq 8(%r13), %rsi @@ -248,9 +256,13 @@ __lll_timedwait_tid: jz 4f movq %rsp, %r10 - xorq %rsi, %rsi /* movq $FUTEX_WAIT, %rsi */ +#if FUTEX_WAIT == 0 + xorl %esi, %esi +#else + movl $FUTEX_WAIT, %esi +#endif movq %r12, %rdi - movq $SYS_futex, %rax + movl $SYS_futex, %eax syscall cmpl $0, (%rdi) diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S index e1593f32ff..fa8125dd87 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -63,9 +63,14 @@ pthread_barrier_wait: /* Wait for the remaining threads. The call will return immediately if the CURR_EVENT memory has meanwhile been changed. */ -7: xorq %rsi, %rsi /* movq $FUTEX_WAIT, %rsi */ +7: +#if FUTEX_WAIT == 0 + xorl %esi, %esi +#else + movl $FUTEX_WAIT, %esi +#endif xorq %r10, %r10 -8: movq $SYS_futex, %rax +8: movl $SYS_futex, %eax syscall /* Don't return on spurious wakeups. The syscall does not change @@ -110,8 +115,8 @@ pthread_barrier_wait: /* Wake up all waiters. The count is a signed number in the kernel so 0x7fffffff is the highest value. */ movl $0x7fffffff, %edx - movq $FUTEX_WAKE, %rsi - movq $SYS_futex, %rax + movl $FUTEX_WAKE, %esi + movl $SYS_futex, %eax syscall /* Increment LEFT. If this brings the count back to the diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S index e8d7bd9bb6..72e7bc5b24 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -81,10 +81,10 @@ __pthread_cond_broadcast: je 9f /* Wake up all threads. */ - movq $FUTEX_CMP_REQUEUE, %rsi - movq $SYS_futex, %rax + movl $FUTEX_CMP_REQUEUE, %esi + movl $SYS_futex, %eax movl $1, %edx - movq $0x7fffffff, %r10 + movl $0x7fffffff, %r10d syscall /* For any kind of error, which mainly is EAGAIN, we try again @@ -128,9 +128,9 @@ __pthread_cond_broadcast: jmp 8b 9: /* The futex requeue functionality is not available. */ - movq $0x7fffffff, %rdx - movq $FUTEX_WAKE, %rsi - movq $SYS_futex, %rax + movl $0x7fffffff, %edx + movl $FUTEX_WAKE, %esi + movl $SYS_futex, %eax syscall jmp 10b .size __pthread_cond_broadcast, .-__pthread_cond_broadcast diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S index 62bb74cc1a..de9e109f45 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -66,9 +66,9 @@ __pthread_cond_signal: addl $1, (%rdi) /* Wake up one thread. */ - movq $FUTEX_WAKE, %rsi - movq $SYS_futex, %rax - movq $1, %rdx + movl $FUTEX_WAKE, %esi + movl $SYS_futex, %eax + movl $1, %edx syscall /* Unlock. */ 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 67bec6caa7..ad3ae1e76e 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 @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -56,7 +56,7 @@ __pthread_cond_timedwait: .Lsubq: cmpq $1000000000, 8(%rdx) - movq $EINVAL, %rax + movl $EINVAL, %eax jae 18f /* Stack frame: @@ -102,7 +102,7 @@ __pthread_cond_timedwait: /* Unlock the mutex. */ 2: movq 16(%rsp), %rdi - xorq %rsi, %rsi + xorl %esi, %esi callq __pthread_mutex_unlock_usercnt testl %eax, %eax @@ -141,7 +141,7 @@ __pthread_cond_timedwait: /* Only clocks 0 and 1 are allowed so far. Both are handled in the kernel. */ leaq 24(%rsp), %rsi - movq $__NR_clock_gettime, %rax + movl $__NR_clock_gettime, %eax syscall # ifndef __ASSUME_POSIX_TIMERS cmpq $-ENOSYS, %rax @@ -155,13 +155,13 @@ __pthread_cond_timedwait: subq 32(%rsp), %rdx #else leaq 24(%rsp), %rdi - xorq %rsi, %rsi + xorl %esi, %esi movq $VSYSCALL_ADDR_vgettimeofday, %rax callq *%rax /* Compute relative timeout. */ movq 32(%rsp), %rax - movq $1000, %rdx + movl $1000, %edx mul %rdx /* Milli seconds to nano seconds. */ movq (%r13), %rcx movq 8(%r13), %rdx @@ -195,10 +195,14 @@ __pthread_cond_timedwait: movl %eax, (%rsp) leaq 24(%rsp), %r10 - xorq %rsi, %rsi /* movq $FUTEX_WAIT, %rsi */ +#if FUTEX_WAIT == 0 + xorl %esi, %esi +#else + movl $FUTEX_WAIT, %esi +#endif movq %r12, %rdx addq $cond_futex, %rdi - movq $SYS_futex, %rax + movl $SYS_futex, %eax syscall movq %rax, %r14 @@ -237,7 +241,7 @@ __pthread_cond_timedwait: 13: incq wakeup_seq(%rdi) incl cond_futex(%rdi) - movq $ETIMEDOUT, %r14 + movl $ETIMEDOUT, %r14d jmp 14f 23: xorq %r14, %r14 @@ -256,8 +260,8 @@ __pthread_cond_timedwait: jne 25f addq $cond_nwaiters, %rdi - movq $SYS_futex, %rax - movq $FUTEX_WAKE, %rsi + movl $SYS_futex, %eax + movl $FUTEX_WAKE, %esi movl $1, %edx syscall subq $cond_nwaiters, %rdi @@ -349,13 +353,13 @@ __pthread_cond_timedwait: #if defined __NR_clock_gettime && !defined __ASSUME_POSIX_TIMERS /* clock_gettime not available. */ 19: leaq 24(%rsp), %rdi - xorq %rsi, %rsi + xorl %esi, %esi movq $VSYSCALL_ADDR_vgettimeofday, %rax callq *%rax /* Compute relative timeout. */ movq 32(%rsp), %rax - movq $1000, %rdx + movl $1000, %edx mul %rdx /* Milli seconds to nano seconds. */ movq (%r13), %rcx movq 8(%r13), %rdx 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 f5de0a280c..b837d466b1 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 @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -82,12 +82,12 @@ __condvar_cleanup: jne 4f addq $cond_nwaiters, %rdi - movq $SYS_futex, %rax - movq $FUTEX_WAKE, %rsi + movl $SYS_futex, %eax + movl $FUTEX_WAKE, %esi movl $1, %edx syscall subq $cond_nwaiters, %rdi - movq $1, %r12 + movl $1, %r12d 4: LOCK #if cond_lock == 0 @@ -105,9 +105,9 @@ __condvar_cleanup: 2: testq %r12, %r12 jnz 5f addq $cond_futex, %rdi - movq $FUTEX_WAKE, %rsi + movl $FUTEX_WAKE, %esi movl $0x7fffffff, %edx - movq $SYS_futex, %rax + movl $SYS_futex, %eax syscall 5: movq 16(%r8), %rdi @@ -170,7 +170,7 @@ __pthread_cond_wait: /* Unlock the mutex. */ 2: movq 16(%rsp), %rdi - xorq %rsi, %rsi + xorl %esi, %esi callq __pthread_mutex_unlock_usercnt testl %eax, %eax @@ -215,8 +215,12 @@ __pthread_cond_wait: xorq %r10, %r10 movq %r12, %rdx addq $cond_futex-cond_lock, %rdi - movq $SYS_futex, %rax - movq %r10, %rsi /* movq $FUTEX_WAIT, %rsi */ + movl $SYS_futex, %eax +#if FUTEX_WAIT == 0 + xorl %esi, %esi +#else + movl $FUTEX_WAIT, %esi +#endif syscall movl (%rsp), %edi @@ -262,8 +266,8 @@ __pthread_cond_wait: jne 17f addq $cond_nwaiters, %rdi - movq $SYS_futex, %rax - movq $FUTEX_WAKE, %rsi + movl $SYS_futex, %eax + movl $FUTEX_WAKE, %esi movl $1, %edx syscall subq $cond_nwaiters, %rdi diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S index 3fec0f4205..6bf8d095ba 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -74,8 +74,12 @@ __pthread_once: jnz 3f /* Different for generation -> run initializer. */ /* Somebody else got here first. Wait. */ - movq %r10, %rsi /* movq $FUTEX_WAIT, %rsi */ - movq $SYS_futex, %rax +#if FUTEX_WAIT == 0 + xorl %esi, %esi +#else + movl $FUTEX_WAIT, %esi +#endif + movl $SYS_futex, %eax syscall jmp 6b @@ -98,12 +102,12 @@ __pthread_once: /* Wake up all other threads. */ movl $0x7fffffff, %edx movl $FUTEX_WAKE, %esi - movq $SYS_futex, %rax + movl $SYS_futex, %eax syscall 4: addq $8, %rsp .Ladd: - xorq %rax, %rax + xorl %eax, %eax retq .size __pthread_once,.-__pthread_once @@ -124,8 +128,8 @@ clear_once_control: movl $0, (%rdi) movl $0x7fffffff, %edx - movq $FUTEX_WAKE, %rsi - movq $SYS_futex, %rax + movl $FUTEX_WAKE, %esi + movl $SYS_futex, %eax syscall movq %r8, %rdi diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S index 43c8cae34c..5e9d8fb1d6 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -74,8 +74,12 @@ __pthread_rwlock_rdlock: jne 10f 11: addq $READERS_WAKEUP, %rdi - movq %r10, %rsi /* movq $FUTEX_WAIT, %rsi */ - movq $SYS_futex, %rax +#if FUTEX_WAIT == 0 + xorl %esi, %esi +#else + movl $FUTEX_WAIT, %esi +#endif + movl $SYS_futex, %eax syscall subq $READERS_WAKEUP, %rdi @@ -94,7 +98,7 @@ __pthread_rwlock_rdlock: 13: decl READERS_QUEUED(%rdi) jmp 2b -5: xorq %rdx, %rdx +5: xorl %edx, %edx incl NR_READERS(%rdi) je 8f 9: LOCK @@ -122,7 +126,7 @@ __pthread_rwlock_rdlock: 14: cmpl %fs:TID, %eax jne 3b /* Deadlock detected. */ - movq $EDEADLK, %rdx + movl $EDEADLK, %edx jmp 9b 6: @@ -137,12 +141,12 @@ __pthread_rwlock_rdlock: /* Overflow. */ 8: decl NR_READERS(%rdi) - movq $EAGAIN, %rdx + movl $EAGAIN, %edx jmp 9b /* Overflow. */ 4: decl READERS_QUEUED(%rdi) - movq $EAGAIN, %rdx + movl $EAGAIN, %edx jmp 9b 10: diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S index aadc90c974..b44660418a 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -90,13 +90,13 @@ pthread_rwlock_timedrdlock: /* Get current time. */ 11: movq %rsp, %rdi - xorq %rsi, %rsi + xorl %esi, %esi movq $VSYSCALL_ADDR_vgettimeofday, %rax callq *%rax /* Compute relative timeout. */ movq 8(%rsp), %rax - movq $1000, %rdi + movl $1000, %edi mul %rdi /* Milli seconds to nano seconds. */ movq (%r13), %rcx movq 8(%r13), %rdi @@ -112,11 +112,15 @@ pthread_rwlock_timedrdlock: movq %rcx, (%rsp) /* Store relative timeout. */ movq %rdi, 8(%rsp) - xorq %rsi, %rsi /* movq $FUTEX_WAIT, %rsi */ +#if FUTEX_WAIT == 0 + xorl %esi, %esi +#else + movl $FUTEX_WAIT, %esi +#endif movq %rsp, %r10 movl %r14d, %edx leaq READERS_WAKEUP(%r12), %rdi - movq $SYS_futex, %rax + movl $SYS_futex, %eax syscall movq %rax, %rdx 17: @@ -136,11 +140,11 @@ pthread_rwlock_timedrdlock: cmpq $-ETIMEDOUT, %rdx jne 2b -18: movq $ETIMEDOUT, %rdx +18: movl $ETIMEDOUT, %edx jmp 9f -5: xorq %rdx, %rdx +5: xorl %edx, %edx incl NR_READERS(%r12) je 8f 9: LOCK @@ -168,7 +172,7 @@ pthread_rwlock_timedrdlock: 14: cmpl %fs:TID, %eax jne 3b - movq $EDEADLK, %rdx + movl $EDEADLK, %edx jmp 9b 6: @@ -182,12 +186,12 @@ pthread_rwlock_timedrdlock: /* Overflow. */ 8: decl NR_READERS(%r12) - movq $EAGAIN, %rdx + movl $EAGAIN, %edx jmp 9b /* Overflow. */ 4: decl READERS_QUEUED(%r12) - movq $EAGAIN, %rdx + movl $EAGAIN, %edx jmp 9b 10: @@ -211,6 +215,6 @@ pthread_rwlock_timedrdlock: 16: movq $-ETIMEDOUT, %rdx jmp 17b -19: movq $EINVAL, %rdx +19: movl $EINVAL, %edx jmp 9b .size pthread_rwlock_timedrdlock,.-pthread_rwlock_timedrdlock diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S index ccaef47070..525e5b6b93 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -86,13 +86,13 @@ pthread_rwlock_timedwrlock: /* Get current time. */ 11: movq %rsp, %rdi - xorq %rsi, %rsi + xorl %esi, %esi movq $VSYSCALL_ADDR_vgettimeofday, %rax callq *%rax /* Compute relative timeout. */ movq 8(%rsp), %rax - movq $1000, %rdi + movl $1000, %edi mul %rdi /* Milli seconds to nano seconds. */ movq (%r13), %rcx movq 8(%r13), %rdi @@ -108,11 +108,15 @@ pthread_rwlock_timedwrlock: movq %rcx, (%rsp) /* Store relative timeout. */ movq %rdi, 8(%rsp) - xorq %rsi, %rsi /* movq $FUTEX_WAIT, %rsi */ +#if FUTEX_WAIT == 0 + xorl %esi, %esi +#else + movl $FUTEX_WAIT, %esi +#endif movq %rsp, %r10 movl %r14d, %edx leaq WRITERS_WAKEUP(%r12), %rdi - movq $SYS_futex, %rax + movl $SYS_futex, %eax syscall movq %rax, %rdx 17: @@ -132,11 +136,11 @@ pthread_rwlock_timedwrlock: cmpq $-ETIMEDOUT, %rdx jne 2b -18: movq $ETIMEDOUT, %rdx +18: movl $ETIMEDOUT, %edx jmp 9f -5: xorq %rdx, %rdx +5: xorl %edx, %edx movl %fs:TID, %eax movl %eax, WRITER(%r12) 9: LOCK @@ -164,7 +168,7 @@ pthread_rwlock_timedwrlock: 14: cmpl %fs:TID, %eax jne 3b -20: movq $EDEADLK, %rdx +20: movl $EDEADLK, %edx jmp 9b 6: @@ -178,7 +182,7 @@ pthread_rwlock_timedwrlock: /* Overflow. */ 4: decl WRITERS_QUEUED(%r12) - movq $EAGAIN, %rdx + movl $EAGAIN, %edx jmp 9b 10: @@ -202,6 +206,6 @@ pthread_rwlock_timedwrlock: 16: movq $-ETIMEDOUT, %rdx jmp 17b -19: movq $EINVAL, %rdx +19: movl $EINVAL, %edx jmp 9b .size pthread_rwlock_timedwrlock,.-pthread_rwlock_timedwrlock diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S index ac69fc0eae..3a6b9f0bad 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -56,7 +56,7 @@ __pthread_rwlock_unlock: 5: movl $0, WRITER(%rdi) - movq $1, %rsi + movl $1, %esi leaq WRITERS_WAKEUP(%rdi), %r10 movq %rsi, %rdx cmpl $0, WRITERS_QUEUED(%rdi) @@ -78,11 +78,11 @@ __pthread_rwlock_unlock: #endif jne 7f -8: movq $SYS_futex, %rax +8: movl $SYS_futex, %eax movq %r10, %rdi syscall - xorq %rax, %rax + xorl %eax, %eax retq .align 16 @@ -94,7 +94,7 @@ __pthread_rwlock_unlock: #endif jne 3f -4: xorq %rax, %rax +4: xorl %eax, %eax retq 1: diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S index 1fcb07eaef..0e82f890aa 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -72,8 +72,12 @@ __pthread_rwlock_wrlock: jne 10f 11: addq $WRITERS_WAKEUP, %rdi - movq %r10, %rsi /* movq $FUTEX_WAIT, %rsi */ - movq $SYS_futex, %rax +#if FUTEX_WAIT == 0 + xorl %esi, %esi +#else + movl $FUTEX_WAIT, %esi +#endif + movl $SYS_futex, %eax syscall subq $WRITERS_WAKEUP, %rdi @@ -92,7 +96,7 @@ __pthread_rwlock_wrlock: 13: decl WRITERS_QUEUED(%rdi) jmp 2b -5: xorq %rdx, %rdx +5: xorl %edx, %edx movl %fs:TID, %eax movl %eax, WRITER(%rdi) 9: LOCK @@ -119,7 +123,7 @@ __pthread_rwlock_wrlock: 14: cmpl %fs:TID, %eax jne 3b - movq $EDEADLK, %rdx + movl $EDEADLK, %edx jmp 9b 6: diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S index 21ec6fd226..7f608a5974 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -41,8 +41,8 @@ sem_post: LOCK xaddl %edx, (%rdi) - movq $SYS_futex, %rax - movq $FUTEX_WAKE, %rsi + movl $SYS_futex, %eax + movl $FUTEX_WAKE, %esi incl %edx syscall diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S index d90e03b55b..c44d3f5e77 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -82,14 +82,14 @@ sem_timedwait: 7: call __pthread_enable_asynccancel movl %eax, 16(%rsp) - xorq %rsi, %rsi + xorl %esi, %esi movq %rsp, %rdi movq $VSYSCALL_ADDR_vgettimeofday, %rax callq *%rax /* Compute relative timeout. */ movq 8(%rsp), %rax - movq $1000, %rdi + movl $1000, %edi mul %rdi /* Milli seconds to nano seconds. */ movq (%r13), %rdi movq 8(%r13), %rsi @@ -107,8 +107,8 @@ sem_timedwait: movq %rsp, %r10 movq %r12, %rdi - xorq %rsi, %rsi - movq $SYS_futex, %rax + xorl %esi, %esi + movl $SYS_futex, %eax xorl %edx, %edx syscall movq %rax, %r14 diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S index 76957bc139..63ecd063ab 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -77,7 +77,7 @@ sem_wait: movl %eax, %r8d xorq %r10, %r10 - movq $SYS_futex, %rax + movl $SYS_futex, %eax movq %r13, %rdi movq %r10, %rsi movq %r10, %rdx diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h index d47c1b80dc..97debaba99 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. @@ -48,7 +48,7 @@ POPARGS_##args \ /* The return value from CENABLE is argument for CDISABLE. */ \ movq %rax, (%rsp); \ - movq $SYS_ify (syscall_name), %rax; \ + movl $SYS_ify (syscall_name), %eax; \ syscall; \ movq (%rsp), %rdi; \ /* Save %rax since it's the error code from the syscall. */ \ |