On 04/15/2016 07:23 AM, Alex Bennée wrote: > +#define atomic_bool_cmpxchg(ptr, old, new) \ > + ({ \ > + typeof(*ptr) _old = (old), _new = (new); \ > + bool r; \ > + r = __atomic_compare_exchange(ptr, &_old, &_new, false, \ > + __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \ > + r; \ > + })
How are you thinking this will be used? If a loop like do { old = atomic_read (ptr); new = f(old); } while (!atomic_bool_cmpxchg(ptr, old, new)); then it's usually helpful to use a weak compare_exchange (s/false/true/ above). This will produce one loop for ll/sc architectures instead of two. r~