34 #ifndef GRPC_SUPPORT_ATM_WIN32_H
35 #define GRPC_SUPPORT_ATM_WIN32_H
38 #include <grpc/support/port_platform.h>
42 typedef gpr_intptr gpr_atm;
44 #define gpr_atm_full_barrier MemoryBarrier
46 static __inline gpr_atm gpr_atm_acq_load(
const gpr_atm *p) {
48 gpr_atm_full_barrier();
52 static __inline gpr_atm gpr_atm_no_barrier_load(
const gpr_atm *p) {
54 return gpr_atm_acq_load(p);
57 static __inline
void gpr_atm_rel_store(gpr_atm *p, gpr_atm value) {
58 gpr_atm_full_barrier();
62 static __inline
int gpr_atm_no_barrier_cas(gpr_atm *p, gpr_atm o, gpr_atm n) {
66 return o == (gpr_atm)InterlockedCompareExchangeAcquire64((
volatile LONGLONG *) p,
67 (LONGLONG) n, (LONGLONG) o);
69 return o == (gpr_atm)InterlockedCompareExchangeAcquire((
volatile LONG *) p,
74 static __inline
int gpr_atm_acq_cas(gpr_atm *p, gpr_atm o, gpr_atm n) {
76 return o == (gpr_atm)InterlockedCompareExchangeAcquire64((
volatile LONGLONG *) p,
77 (LONGLONG) n, (LONGLONG) o);
79 return o == (gpr_atm)InterlockedCompareExchangeAcquire((
volatile LONG *) p,
84 static __inline
int gpr_atm_rel_cas(gpr_atm *p, gpr_atm o, gpr_atm n) {
86 return o == (gpr_atm)InterlockedCompareExchangeRelease64((
volatile LONGLONG *) p,
87 (LONGLONG) n, (LONGLONG) o);
89 return o == (gpr_atm)InterlockedCompareExchangeRelease((
volatile LONG *) p,
94 static __inline gpr_atm gpr_atm_no_barrier_fetch_add(gpr_atm *p,
100 }
while (!gpr_atm_no_barrier_cas(p, old, old + delta));
104 static __inline gpr_atm gpr_atm_full_fetch_add(gpr_atm *p, gpr_atm delta) {
110 }
while (old != (gpr_atm)InterlockedCompareExchange64((
volatile LONGLONG *) p,
111 (LONGLONG) old + delta,
116 }
while (old != (gpr_atm)InterlockedCompareExchange((
volatile LONG *) p,