[zeromq-dev] atomic ops

Ivan Pechorin ivan.pechorin at gmail.com
Thu Feb 9 07:14:26 CET 2012

2012/2/8 Steven McCoy <steven.mccoy at miru.hk>:
> Compare with my atomics:
> http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/include/pgm/atomic.h

Steven, what is the reason to use asm on Solaris/x86 instead of
Solaris intrinsics from <atomic.h> ?

#elif (defined( __SUNPRO_C ) || defined( __SUNPRO_CC )) && (defined(
__i386 ) || defined( __amd64 ))
        uint32_t result = val;
        __asm__ volatile ("lock; xaddl %0, %1"
                       :: "r" (result), "m" (*atomic)  );
        return result;

And (sorry for stupid question), why the asm for x86/x86_64 is
different for SunCC and for GCC/ICC ?

By the way, HP-UX also has the same intrinsics in <atomic.h>.
So, I believe, it's worth changing

#if defined( __sun )
#       include <atomic.h>

to something like this:

#if (defined(sun) || defined(__sun) || defined(hpux) || defined(__hpux))

At least, that's what we use in our proprietary code that runs on all
of these platforms.

More information about the zeromq-dev mailing list