+2013-01-31 Dmitry Vyukov <dvyukov@gcc.gnu.org>
+ Joost VandeVondele <Joost.VandeVondele@mat.ethz.ch>
+
+ PR libgomp/55561
+ * config/linux/wait.h (do_spin): Use atomic load for addr.
+ * config/linux/ptrlock.c (gomp_ptrlock_get_slow): Use atomic
+ for intptr and ptrlock.
+ * config/linux/ptrlock.h (gomp_ptrlock_get): Use atomic load
+ for ptrlock.
+
2013-01-22 Alan Modra <amodra@gmail.com>
PR libgomp/51376
#endif
do
do_wait (intptr, 2);
- while (*intptr == 2);
+ while (__atomic_load_n (intptr, MEMMODEL_RELAXED) == 2);
__asm volatile ("" : : : "memory");
- return *ptrlock;
+ return (void *) __atomic_load_n (ptrlock, MEMMODEL_ACQUIRE);
}
void
{
uintptr_t oldval;
- if ((uintptr_t) *ptrlock > 2)
- return *ptrlock;
+ uintptr_t v = (uintptr_t) __atomic_load_n (ptrlock, MEMMODEL_ACQUIRE);
+ if (v > 2)
+ return (void *) v;
oldval = 0;
if (__atomic_compare_exchange_n (ptrlock, &oldval, 1, false,
if (__builtin_expect (gomp_managed_threads > gomp_available_cpus, 0))
count = gomp_throttled_spin_count_var;
for (i = 0; i < count; i++)
- if (__builtin_expect (*addr != val, 0))
+ if (__builtin_expect (__atomic_load_n (addr, MEMMODEL_RELAXED) != val, 0))
return 0;
else
cpu_relax ();