RW_READ_INCR
#define RW_THREAD ((uintptr_t)-RW_READ_INCR)
next = rw_cas(ptr, owner, owner + RW_READ_INCR);
next = rw_cas(ptr, owner, owner + RW_READ_INCR);
decr = RW_READ_INCR;
new += RW_READ_INCR;
#if RW_READ_INCR != 32
incr = RW_READ_INCR;
decr = RW_READ_INCR;
if (rcnt == 0 || decr == RW_READ_INCR) {
incr = RW_READ_INCR;
next = rw_cas(rw, owner, newown + RW_READ_INCR);
newown |= RW_READ_INCR | RW_HAS_WAITERS |
newown += (rcnt << RW_READ_COUNT_SHIFT) + RW_READ_INCR;
for (owner = RW_READ_INCR;; owner = next) {
if (__predict_false((next & RW_THREAD) != RW_READ_INCR)) {
#define RW_THREAD ((uintptr_t)-RW_READ_INCR)