15 #define __INLINE__ extern inline __attribute__((always_inline)) 
   19 #if defined(__bgq__) || defined(__bgp__) || defined(__powerpc__) 
   20 __INLINE__ int32_t LoadReservedSigned32( 
volatile int32_t *pVar )
 
   23    asm volatile (
"lwarx   %[rc],0,%[pVar];" 
   29 __INLINE__ int StoreConditionalSigned32( 
volatile int32_t *pVar, int32_t Val )
 
   32    asm volatile (
"  stwcx.  %2,0,%1;" 
   44 __INLINE__ int32_t CompareAndSwapSigned32( 
volatile int32_t *var, int32_t  Compare, int32_t  NewValue )
 
   46     asm volatile (
"msync" : : : 
"memory");
 
   48     int32_t OldValue = *var;
 
   51        int32_t TmpValue = LoadReservedSigned32( var );
 
   52        if ( Compare != TmpValue  ) 
return(OldValue);
 
   54        while( !StoreConditionalSigned32( var, NewValue ) );
 
   59 __INLINE__ int32_t FetchAndAddSigned32( 
volatile int32_t *pVar, int32_t value )
 
   61     asm volatile (
"msync" : : : 
"memory");
 
   63     register int32_t old_val, tmp_val;
 
   67         old_val = LoadReservedSigned32( pVar );
 
   68         tmp_val = old_val + value;
 
   70     while ( !StoreConditionalSigned32( pVar, tmp_val ) );
 
   77     asm volatile (
"msync" : : : 
"memory");
 
   83 #error You cannot use PowerPC assembly on a non-PowerPC architecture! 
#define __INLINE__
Definition: bgq_atomics.h:15