diff options
Diffstat (limited to 'nptl/sysdeps/ia64')
-rw-r--r-- | nptl/sysdeps/ia64/bits/atomic.h | 26 | ||||
-rw-r--r-- | nptl/sysdeps/ia64/pthread_spin_unlock.c | 6 |
2 files changed, 16 insertions, 16 deletions
diff --git a/nptl/sysdeps/ia64/bits/atomic.h b/nptl/sysdeps/ia64/bits/atomic.h index cfccc6a..fab2307 100644 --- a/nptl/sysdeps/ia64/bits/atomic.h +++ b/nptl/sysdeps/ia64/bits/atomic.h @@ -76,20 +76,22 @@ typedef uintmax_t uatomic_max_t; __val = *__memp; \ if (sizeof (*mem) == 4) \ do \ - __oldval = __val; \ - while ((__val \ - = __arch_compare_and_exchange_32_val_acq (__memp, \ - __oldval + __value, \ - __oldval)) \ - != __oldval); \ + { \ + __oldval = __val; \ + __val = __arch_compare_and_exchange_32_val_acq (__memp, \ + __oldval + __value, \ + __oldval); \ + } \ + while (__builtin_expect (__val != __oldval, 0)); \ else if (sizeof (*mem) == 8) \ do \ - __oldval = __val; \ - while ((__val \ - = __arch_compare_and_exchange_64_val_acq (__memp, \ - __oldval + __value, \ - __oldval)) \ - != __oldval); \ + { \ + __oldval = __val; \ + __val = __arch_compare_and_exchange_64_val_acq (__memp, \ + __oldval + __value, \ + __oldval); \ + } \ + while (__builtin_expect (__val != __oldval, 0)); \ else \ abort (); \ __oldval + __value; }) diff --git a/nptl/sysdeps/ia64/pthread_spin_unlock.c b/nptl/sysdeps/ia64/pthread_spin_unlock.c index b3f1ff1..9019188 100644 --- a/nptl/sysdeps/ia64/pthread_spin_unlock.c +++ b/nptl/sysdeps/ia64/pthread_spin_unlock.c @@ -17,15 +17,13 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -/* Ugly hack to avoid the declaration of pthread_spin_init. */ -#define pthread_spin_init pthread_spin_init_XXX #include "pthreadP.h" -#undef pthread_spin_init + int pthread_spin_unlock (pthread_spinlock_t *lock) { - *lock = 0; + __sync_lock_release_si ((int *) lock); return 0; } strong_alias (pthread_spin_unlock, pthread_spin_init) |