16 #include "libComAPI.h" 18 #ifndef epicsAtomicOSD_h 19 #define epicsAtomicOSD_h 21 #define EPICS_ATOMIC_OS_NAME "Solaris" 23 #if defined ( __SunOS_5_10 ) 36 #ifndef EPICS_ATOMIC_READ_MEMORY_BARRIER 37 #define EPICS_ATOMIC_READ_MEMORY_BARRIER 44 #ifndef EPICS_ATOMIC_WRITE_MEMORY_BARRIER 45 #define EPICS_ATOMIC_WRITE_MEMORY_BARRIER 52 #ifndef EPICS_ATOMIC_CAS_INTT 53 #define EPICS_ATOMIC_CAS_INTT 55 int oldVal,
int newVal )
58 unsigned *
const pTarg = (
unsigned * ) pTarget;
59 return (
int ) atomic_cas_uint ( pTarg, (
unsigned ) oldVal,
60 (
unsigned ) newVal );
64 #ifndef EPICS_ATOMIC_CAS_SIZET 65 #define EPICS_ATOMIC_CAS_SIZET 68 size_t oldVal,
size_t newVal )
71 ulong_t *
const pTarg = ( ulong_t * ) pTarget;
72 return (
size_t ) atomic_cas_ulong ( pTarg, oldVal, newVal );
76 #ifndef EPICS_ATOMIC_CAS_PTRT 77 #define EPICS_ATOMIC_CAS_PTRT 83 return atomic_cas_ptr ( pTarget, oldVal, newVal );
87 #ifndef EPICS_ATOMIC_INCR_INTT 88 #define EPICS_ATOMIC_INCR_INTT 92 unsigned *
const pTarg = (
unsigned * ) ( pTarget );
93 return (
int ) atomic_inc_uint_nv ( pTarg );
97 #ifndef EPICS_ATOMIC_INCR_SIZET 98 #define EPICS_ATOMIC_INCR_SIZET 102 ulong_t *
const pTarg = ( ulong_t * ) pTarget;
103 return (
size_t ) atomic_inc_ulong_nv ( pTarg );
107 #ifndef EPICS_ATOMIC_DECR_INTT 108 #define EPICS_ATOMIC_DECR_INTT 112 unsigned *
const pTarg = (
unsigned * ) ( pTarget );
113 return (
int ) atomic_dec_uint_nv ( pTarg );
117 #ifndef EPICS_ATOMIC_DECR_SIZET 118 #define EPICS_ATOMIC_DECR_SIZET 122 ulong_t *
const pTarg = ( ulong_t * ) pTarget;
123 return (
size_t ) atomic_dec_ulong_nv ( pTarg );
127 #ifndef EPICS_ATOMIC_ADD_INTT 128 #define EPICS_ATOMIC_ADD_INTT 132 unsigned *
const pTarg = (
unsigned * ) ( pTarget );
133 return (
int ) atomic_add_int_nv ( pTarg, delta );
137 #ifndef EPICS_ATOMIC_ADD_SIZET 138 #define EPICS_ATOMIC_ADD_SIZET 143 ulong_t *
const pTarg = ( ulong_t * ) pTarget;
144 return (
size_t ) atomic_add_long_nv ( pTarg, (
long ) delta );
148 #ifndef EPICS_ATOMIC_SUB_SIZET 149 #define EPICS_ATOMIC_SUB_SIZET 154 ulong_t *
const pTarg = ( ulong_t * ) pTarget;
155 long sdelta = ( long ) delta;
156 return (
size_t ) atomic_add_long_nv ( pTarg, -sdelta );
EPICS_ATOMIC_INLINE size_t epicsAtomicCmpAndSwapSizeT(size_t *pTarget, size_t oldVal, size_t newVal)
An EPICS-specific replacement for ANSI C's assert.
EPICS_ATOMIC_INLINE size_t epicsAtomicSubSizeT(size_t *pTarget, size_t delta)
struct EpicsAtomicLockKey EpicsAtomicLockKey
EPICS_ATOMIC_INLINE int epicsAtomicCmpAndSwapIntT(int *pTarget, int oldVal, int newVal)
EPICS_ATOMIC_INLINE size_t epicsAtomicAddSizeT(size_t *pTarget, size_t delta)
EPICS_ATOMIC_INLINE size_t epicsAtomicDecrSizeT(size_t *pTarget)
LIBCOM_API void epicsAtomicLock(struct EpicsAtomicLockKey *)
#define EPICS_ATOMIC_INLINE
#define STATIC_ASSERT(expr)
Declare a condition that should be true at compile-time.
EPICS_ATOMIC_INLINE void epicsAtomicWriteMemoryBarrier(void)
EPICS_ATOMIC_INLINE EpicsAtomicPtrT epicsAtomicCmpAndSwapPtrT(EpicsAtomicPtrT *pTarget, EpicsAtomicPtrT oldVal, EpicsAtomicPtrT newVal)
EPICS_ATOMIC_INLINE int epicsAtomicAddIntT(int *pTarget, int delta)
LIBCOM_API void epicsAtomicUnlock(struct EpicsAtomicLockKey *)
EPICS_ATOMIC_INLINE int epicsAtomicDecrIntT(int *pTarget)
EPICS_ATOMIC_INLINE int epicsAtomicIncrIntT(int *pTarget)
EPICS_ATOMIC_INLINE size_t epicsAtomicIncrSizeT(size_t *pTarget)
EPICS_ATOMIC_INLINE void epicsAtomicReadMemoryBarrier(void)