about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nptl/ChangeLog3
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S14
2 files changed, 16 insertions, 1 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 7727fdf267..75158615c0 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,5 +1,8 @@
 2003-02-22  Ulrich Drepper  <drepper@redhat.com>
 
+	* sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Shave
+	off 3 more bytes by using offset-less instructions when possible.
+
 	* Makefile: Add dependency for $(objpfx)version.d.
 
 	* eintr.c (eintr_source): Add unnecessary return but the compiler
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S
index b77c342a99..7c27b94623 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -59,7 +59,11 @@ pthread_barrier_wait:
 	je	3f
 
 	/* There are more threads to come.  */
+#if CURR_EVENT == 0
+	movl	(%ebx), %edx
+#else
 	movl	CURR_EVENT(%ebx), %edx
+#endif
 
 	/* Release the mutex.  */
 	LOCK
@@ -75,7 +79,11 @@ pthread_barrier_wait:
 	/* Don't return on spurious wakeups.  The syscall does not change
 	   any register except %eax so there is no need to reload any of
 	   them.  */
+#if CURR_EVENT == 0
+	cmpl	%edx, (%ebx)
+#else
 	cmpl	%edx, CURR_EVENT(%ebx)
+#endif
 	je,pn	8b
 
 	/* Note: %esi is still zero.  */
@@ -88,7 +96,11 @@ pthread_barrier_wait:
 	/* The necessary number of threads arrived.  */
 3:	movl	INIT_COUNT(%ebx), %eax
 	movl	%eax, LEFT(%ebx)
+#if CURR_EVENT == 0
+	incl	(%ebx)
+#else
 	incl	CURR_EVENT(%ebx)
+#endif
 
 	/* Wake up all waiters.  The count is a signed number in the kernel
 	   so 0x7fffffff is the highest value.  */