InterlockedExchangeAdd(&atomic->var, change);
}
+static_inline int
+rx_atomic_add_and_read(rx_atomic_t *atomic, int change) {
+ return InterlockedExchangeAdd(&atomic->var, change) + change;
+}
+
static_inline void
rx_atomic_dec(rx_atomic_t *atomic) {
InterlockedDecrement(&atomic->var);
OSAtomicAdd32(change, &atomic->var);
}
+static_inline int
+rx_atomic_add_and_read(rx_atomic_t *atomic, int change) {
+ return OSAtomicAdd32(change, &atomic->var);
+}
+
static_inline void
rx_atomic_dec(rx_atomic_t *atomic) {
OSAtomicDecrement32(&atomic->var);
#define rx_atomic_inc(X) atomic_inc(X)
#define rx_atomic_inc_and_read(X) atomic_inc_return(X)
#define rx_atomic_add(X, V) atomic_add(V, X)
+#define rx_atomic_add_and_read(X, V) atomic_add_return(V, X);
#define rx_atomic_dec(X) atomic_dec(X)
#define rx_atomic_dec_and_read(X) atomic_dec_return(X)
#define rx_atomic_sub(X, V) atomic_sub(V, X)
atomic_add_32(&atomic->var, change);
}
+static_inline int
+rx_atomic_add_and_read(rx_atomic_t *atomic, int change) {
+ return atomic_add_32_nv(&atomic->var, change);
+}
+
static_inline void
rx_atomic_dec(rx_atomic_t *atomic) {
atomic_dec_32(&atomic->var);
(void)__sync_fetch_and_add(&atomic->var, change);
}
+static_inline int
+rx_atomic_add_and_read(rx_atomic_t *atomic, int change) {
+ return __sync_fetch_and_add(&atomic->var, change);
+}
+
static_inline void
rx_atomic_dec(rx_atomic_t *atomic) {
(void)__sync_fetch_and_sub(&atomic->var, 1);
MUTEX_EXIT(&rx_atomic_mutex);
}
+static_inline int
+rx_atomic_add_and_read(rx_atomic_t *atomic, int change) {
+ int retval;
+
+ MUTEX_ENTER(&rx_atomic_mutex);
+ atomic->var += change;
+ retval = atomic->var;
+ MUTEX_EXIT(&rx_atomic_mutex);
+
+ return retval;
+}
+
static_inline void
rx_atomic_dec(rx_atomic_t *atomic) {
MUTEX_ENTER(&rx_atomic_mutex);