On 11/17/2011 01:56 AM, Alan Modra wrote: > This is part of work in progress getting locking back into shape on > powerpc. (If we ever were in shape, which is doubtful.) Using the > ia64 version means we have a needless sync at the start of > gomp_mutex_lock (courtesy of __sync_val_compare_and_swap) and a > needless isync at the end of gomp_mutex_unlock (slightly odd use > of __sync_lock_test_and_set to release a lock). It would be nice to > get rid of the __sync_val_compare_and_swap in config/linux/mutex.c > too.
We should be able to use this new file as a replacement for all targets, not just PPC. And, yes, updating all of the __sync uses in libgomp would be a good thing. > + __atomic_compare_exchange_4 (mutex, &oldval, 1, false, > + MEMMODEL_ACQUIRE, MEMMODEL_RELAXED); > + if (__builtin_expect (oldval != 0, 0)) > + gomp_mutex_lock_slow (mutex, oldval); __atomic_compare_exchange_4 returns a boolean success: if (__builtin_expect (!__atomic_compare_exchange_4 (mutex, &oldval, 1, false, MEMMODEL_ACQUIRE, MEMMODEL_RELAXED), 0)) In theory that should avoid an extra comparison on some targets. r~