X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Futil%2Fu_atomic.c;h=e4bffa8534ea46a49975cece512fc981fca00eed;hb=6ff94735c93b8fcc2a3e5c6eb668b069ac4e0a1a;hp=44b75fb0c00803e23ce6387ab4ed5dbfcb14882f;hpb=a6a38a038bd62e6d9558905f00bef81b5e7e6fcc;p=mesa.git diff --git a/src/util/u_atomic.c b/src/util/u_atomic.c index 44b75fb0c00..e4bffa8534e 100644 --- a/src/util/u_atomic.c +++ b/src/util/u_atomic.c @@ -61,15 +61,17 @@ __sync_sub_and_fetch_8(uint64_t *ptr, uint64_t val) } WEAK uint64_t -__atomic_fetch_add_8(uint64_t *ptr, uint64_t val, int memorder) +__sync_val_compare_and_swap_8(uint64_t *ptr, uint64_t oldval, uint64_t newval) { - return __sync_add_and_fetch(ptr, val); -} + uint64_t r; -WEAK uint64_t -__atomic_fetch_sub_8(uint64_t *ptr, uint64_t val, int memorder) -{ - return __sync_sub_and_fetch(ptr, val); + pthread_mutex_lock(&sync_mutex); + r = *ptr; + if (*ptr == oldval) + *ptr = newval; + pthread_mutex_unlock(&sync_mutex); + + return r; } #endif