Implement atomic_swap_{32,64,int,long,ptr}(9).
This commit is contained in:
parent
a0e00905f0
commit
c98027b2bc
@ -154,14 +154,15 @@
|
|||||||
e; \
|
e; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define atomic_st(p, v, sz) do { \
|
#define atomic_st(p, v, sz) ({ \
|
||||||
itype(sz) e, r; \
|
itype(sz) e, r; \
|
||||||
for (e = *(volatile itype(sz) *)(p);; e = r) { \
|
for (e = *(volatile itype(sz) *)(p);; e = r) { \
|
||||||
r = atomic_cas((p), e, (v), sz); \
|
r = atomic_cas((p), e, (v), sz); \
|
||||||
if (r == e) \
|
if (r == e) \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
e; \
|
||||||
|
})
|
||||||
|
|
||||||
#define atomic_st_acq(p, v, sz) do { \
|
#define atomic_st_acq(p, v, sz) do { \
|
||||||
atomic_st((p), (v), sz); \
|
atomic_st((p), (v), sz); \
|
||||||
@ -310,6 +311,12 @@ static __inline void \
|
|||||||
atomic_store_rel_ ## name(volatile ptype p, vtype v) \
|
atomic_store_rel_ ## name(volatile ptype p, vtype v) \
|
||||||
{ \
|
{ \
|
||||||
atomic_st_rel((p), (v), sz); \
|
atomic_st_rel((p), (v), sz); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static __inline vtype \
|
||||||
|
atomic_swap_ ## name(volatile ptype p, vtype v) \
|
||||||
|
{ \
|
||||||
|
return ((vtype)atomic_st((p), (v), sz)); \
|
||||||
}
|
}
|
||||||
|
|
||||||
static __inline void
|
static __inline void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user