Jay, Thanks for the code. The code you pointed out is only used during configure, so I don't think is that critical. However, we use similar code deep into our voodoo assembly generation, for opal_atomic_add_32 and opal_atomic_sub_32.
So if I understand your statement the correct version of the code should be static inline int32_t opal_atomic_add_32(volatile int32_t* v, int i) { int ret = i; __asm__ __volatile__( SMPLOCK "xaddl %1,%0" :"=m" (*v), "+r" (ret) >> new >> :"m" (*v) ); return (ret+i); } On the GCC extended ASM documentation (http://gcc.gnu.org/onlinedocs/gcc/Modifiers.html#Modifiers), it is specified: `=' Means that this operand is write-only for this instruction: the previous value is discarded and replaced by output data. `+' Means that this operand is both read and written by the instruction. Based on this info, I would rather rewrite this function like this: static inline int32_t opal_atomic_add_32(volatile int32_t* v, int i) { int ret = i; __asm__ __volatile__( SMPLOCK "xaddl %1,%0" : "=m" (*v), "=r" (ret) : "m" (*v), "1" (ret) : "memory", "cc" ); return (ret+i); } Can you ask the kindly GCC expert which version is "correct" (whatever the definition of correct might means related to GCC extended assembly). Do I have to specify = for the output if I put the register on the input? Aren't this conflicting? george. On Feb 23, 2011, at 13:04 , Jay Fenlason wrote: > I was recently handed > https://bugzilla.redhat.com/attachment.cgi?id=480307 > for which a kindly GCC expert attached the enclosed patch. Apparently > this only causes problems on 32-bit i686 machines, which could by why > it has gone undetected until now. > > -- JF > > --- openmpi-1.5/opal/config/opal_config_asm.m4.jj 2010-09-28 > 23:33:51.000000000 +0200 > +++ openmpi-1.5/opal/config/opal_config_asm.m4 2011-02-23 > 01:39:21.191433509 +0100 > @@ -885,7 +885,7 @@ AC_DEFUN([OMPI_CONFIG_ASM],[ > ompi_cv_asm_arch="AMD64" > fi > OPAL_ASM_SUPPORT_64BIT=1 > - OMPI_GCC_INLINE_ASSIGN='"xaddl %1,%0" : "=m"(ret), "+r"(negone)' > + OMPI_GCC_INLINE_ASSIGN='"xaddl %1,%0" : "=m"(ret), "+r"(negone) > : "m"(ret)' > ;; > > ia64-*) > _______________________________________________ > devel mailing list > de...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/devel "I disapprove of what you say, but I will defend to the death your right to say it" -- Evelyn Beatrice Hall