_InterlockedExchangeAdd
*ret = _InterlockedExchangeAdd((void *)&refcnt->val, 1) + 1;
*ret = _InterlockedExchangeAdd((void *)&refcnt->val, -1) - 1;
*ret = _InterlockedExchangeAdd((void *)&refcnt->val, 0);
*ret = _InterlockedExchangeAdd(&refcnt->val, -1) - 1;
extern long __cdecl _InterlockedExchangeAdd(long volatile *, long);
*ret = _InterlockedExchangeAdd(&refcnt->val, 1) + 1;
*ret = _InterlockedExchangeAdd(&refcnt->val, -1) - 1;
*ret = _InterlockedExchangeAdd(&refcnt->val, 0);
: _InterlockedExchangeAdd((ptr), (n)))
#define tsan_add(ptr, n) _InterlockedExchangeAdd((ptr), (n))