o changed name, OSD_ATOMIC_INLINE to EPICS_ATOMIC_INLINE
o changed supported data types, unsigned removed and int added (per reveiw at codeathon)
o added add/subtract functions (per reveiw at codeathon)
o now presuming that __sync_synchronize available all gcc 4 mingw does not provide windows mem barrier)
o consolodated on one implemention for Microsoft invarient of cmplr intrinisic or win32 by using macros to config a shared header file
o improved doc in epicsAtomic.h
o added overloaded c++ interface in namespace epics :: atomic to epicsAtomic.h
o added epicsAtomicReadMemoryBarrier and epicsAtomicWriteMemoryBarrier interface to epicsAtomic.h
o changed the implementation so that each of the functions can be individually specified for a particular compiler, os, or in the generic implementation (this is accomplished with macros)
o modified the functional and performance test so that they are based on templates so we can easily support new data types
o modified performance tests to repeat function calls and measure performance using a template
CA links in records were being removed without locking them first.
We also now set the link type to CONSTANT, which prevents some
assertion failures if the record gets processed again before the
IOC finally dies.
o removed function
epicsAtomicTestAndSetUIntT
o added new functions
epicsAtomicSetPtrT
epicsAtomicGetPtrT
epicsAtomicCmpAndSwapUIntT
epicsAtomicCmpAndSwapPtrT
o changed msvc intrinsics to define memory fence
o fixed mutex synchronized version so that its slow, but correct if the c++ compiler doesnt synchronized local scope static initialization
o changed most of the set/get methods to use memory barriers instead of some other primitive
o added additional tests
o removed function
epicsAtomicTestAndSetUIntT
o added new functions
epicsAtomicSetPtrT
epicsAtomicGetPtrT
epicsAtomicCmpAndSwapUIntT
epicsAtomicCmpAndSwapPtrT
o changed msvc intrinsics to define memory fence
o fixed mutex synchronized version so that its slow, but correct if the c++ compiler doesnt synchronized local scope static initialization
o changed most of the set/get methods to use memory barriers instead of some other primitive
o added additional tests
configure/os/CONFIG.Common.cygwin-x86
configure/os/CONFIG.Common.linux-x86
configure/os/CONFIG.Common.win32-x86-cygwin
configure/os/CONFIG.Common.win32-x86-mingw
added commented out "-march=i586" to
configure/os/CONFIG_SITE.cygwin-x86.cygwin-x86
configure/os/CONFIG_SITE.win32-x86-cygwin.win32-x86-cygwin
added "-march=i586" to (I know that this compiler currently defaults to 386)
configure/os/CONFIG_SITE.win32-x86-mingw.win32-x86-mingw
configure/os/CONFIG.Common.cygwin-x86
configure/os/CONFIG.Common.linux-x86
configure/os/CONFIG.Common.win32-x86-cygwin
configure/os/CONFIG.Common.win32-x86-mingw
added commented out "-march=i586" to
configure/os/CONFIG_SITE.cygwin-x86.cygwin-x86
configure/os/CONFIG_SITE.win32-x86-cygwin.win32-x86-cygwin
added "-march=i586" to (I know that this compiler currently defaults to 386)
configure/os/CONFIG_SITE.win32-x86-mingw.win32-x86-mingw
o removed -march=i586 from CONFIG.linux-x86.linux-x86
o fixed compile errors in epicsAtomicOSD.h (I didnt have the proper version of solaris for initial testing here)
o removed -march=i586 from CONFIG.linux-x86.linux-x86
o fixed compile errors in epicsAtomicOSD.h (I didnt have the proper version of solaris for initial testing here)