util/u_atomic: Add implementation of __sync_val_compare_and_swap_8
authorMatt Turner <mattst88@gmail.com>
Thu, 14 Sep 2017 18:00:26 +0000 (11:00 -0700)
committerMatt Turner <mattst88@gmail.com>
Fri, 15 Sep 2017 16:37:30 +0000 (09:37 -0700)
Needed for 32-bit PowerPC.

Cc: "17.2" <mesa-stable@lists.freedesktop.org>
Fixes: a6a38a038bd ("util/u_atomic: provide 64bit atomics where
they're missing")
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
src/util/u_atomic.c

index 44b75fb..b32527f 100644 (file)
@@ -61,6 +61,20 @@ __sync_sub_and_fetch_8(uint64_t *ptr, uint64_t val)
 }
 
 WEAK uint64_t
+__sync_val_compare_and_swap_8(uint64_t *ptr, uint64_t oldval, uint64_t newval)
+{
+   uint64_t r;
+
+   pthread_mutex_lock(&sync_mutex);
+   r = *ptr;
+   if (*ptr == oldval)
+      *ptr = newval;
+   pthread_mutex_unlock(&sync_mutex);
+
+   return r;
+}
+
+WEAK uint64_t
 __atomic_fetch_add_8(uint64_t *ptr, uint64_t val, int memorder)
 {
    return __sync_add_and_fetch(ptr, val);