21 #include "compilerSpecific.h"
23 #define EPICS_ATOMIC_INLINE static EPICS_ALWAYS_INLINE
29 typedef void * EpicsAtomicPtrT;
32 EPICS_ATOMIC_INLINE
void epicsAtomicReadMemoryBarrier (
void);
35 EPICS_ATOMIC_INLINE
void epicsAtomicWriteMemoryBarrier (
void);
43 EPICS_ATOMIC_INLINE
size_t epicsAtomicIncrSizeT (
size_t * pTarget );
44 EPICS_ATOMIC_INLINE
int epicsAtomicIncrIntT (
int * pTarget );
52 EPICS_ATOMIC_INLINE
size_t epicsAtomicDecrSizeT (
size_t * pTarget );
53 EPICS_ATOMIC_INLINE
int epicsAtomicDecrIntT (
int * pTarget );
61 EPICS_ATOMIC_INLINE
size_t epicsAtomicAddSizeT (
size_t * pTarget,
size_t delta );
62 EPICS_ATOMIC_INLINE
size_t epicsAtomicSubSizeT (
size_t * pTarget,
size_t delta );
63 EPICS_ATOMIC_INLINE
int epicsAtomicAddIntT (
int * pTarget,
int delta );
68 EPICS_ATOMIC_INLINE
void epicsAtomicSetSizeT (
size_t * pTarget,
size_t newValue );
69 EPICS_ATOMIC_INLINE
void epicsAtomicSetIntT (
int * pTarget,
int newValue );
70 EPICS_ATOMIC_INLINE
void epicsAtomicSetPtrT ( EpicsAtomicPtrT * pTarget, EpicsAtomicPtrT newValue );
75 EPICS_ATOMIC_INLINE
size_t epicsAtomicGetSizeT (
const size_t * pTarget );
76 EPICS_ATOMIC_INLINE
int epicsAtomicGetIntT (
const int * pTarget );
77 EPICS_ATOMIC_INLINE EpicsAtomicPtrT epicsAtomicGetPtrT (
const EpicsAtomicPtrT * pTarget );
86 EPICS_ATOMIC_INLINE
size_t epicsAtomicCmpAndSwapSizeT (
size_t * pTarget,
87 size_t oldVal,
size_t newVal );
88 EPICS_ATOMIC_INLINE
int epicsAtomicCmpAndSwapIntT (
int * pTarget,
89 int oldVal,
int newVal );
90 EPICS_ATOMIC_INLINE EpicsAtomicPtrT epicsAtomicCmpAndSwapPtrT (
91 EpicsAtomicPtrT * pTarget,
92 EpicsAtomicPtrT oldVal,
93 EpicsAtomicPtrT newVal );
107 #include "epicsAtomicCD.h"
119 EPICS_ATOMIC_INLINE
size_t increment (
size_t & v )
121 return epicsAtomicIncrSizeT ( & v );
124 EPICS_ATOMIC_INLINE
int increment (
int & v )
126 return epicsAtomicIncrIntT ( & v );
130 EPICS_ATOMIC_INLINE
size_t decrement (
size_t & v )
132 return epicsAtomicDecrSizeT ( & v );
135 EPICS_ATOMIC_INLINE
int decrement (
int & v )
137 return epicsAtomicDecrIntT ( & v );
141 EPICS_ATOMIC_INLINE
size_t add (
size_t & v,
size_t delta )
143 return epicsAtomicAddSizeT ( & v, delta );
146 EPICS_ATOMIC_INLINE
int add (
int & v,
int delta )
148 return epicsAtomicAddIntT ( & v, delta );
152 EPICS_ATOMIC_INLINE
size_t subtract (
size_t & v,
size_t delta )
154 return epicsAtomicSubSizeT ( & v, delta );
157 EPICS_ATOMIC_INLINE
int subtract (
int & v,
int delta )
159 return epicsAtomicAddIntT ( & v, -delta );
163 EPICS_ATOMIC_INLINE
void set (
size_t & v ,
size_t newValue )
165 epicsAtomicSetSizeT ( & v, newValue );
168 EPICS_ATOMIC_INLINE
void set (
int & v,
int newValue )
170 epicsAtomicSetIntT ( & v, newValue );
173 EPICS_ATOMIC_INLINE
void set ( EpicsAtomicPtrT & v, EpicsAtomicPtrT newValue )
175 epicsAtomicSetPtrT ( & v, newValue );
179 EPICS_ATOMIC_INLINE
size_t get (
const size_t & v )
181 return epicsAtomicGetSizeT ( & v );
184 EPICS_ATOMIC_INLINE
int get (
const int & v )
186 return epicsAtomicGetIntT ( & v );
189 EPICS_ATOMIC_INLINE EpicsAtomicPtrT
get (
const EpicsAtomicPtrT & v )
191 return epicsAtomicGetPtrT ( & v );
195 EPICS_ATOMIC_INLINE
size_t compareAndSwap (
size_t & v,
196 size_t oldVal,
size_t newVal )
198 return epicsAtomicCmpAndSwapSizeT ( & v, oldVal, newVal );
201 EPICS_ATOMIC_INLINE
int compareAndSwap (
int & v,
int oldVal,
int newVal )
203 return epicsAtomicCmpAndSwapIntT ( & v, oldVal, newVal );
206 EPICS_ATOMIC_INLINE EpicsAtomicPtrT compareAndSwap ( EpicsAtomicPtrT & v,
207 EpicsAtomicPtrT oldVal,
208 EpicsAtomicPtrT newVal )
210 return epicsAtomicCmpAndSwapPtrT ( & v, oldVal, newVal );