Back to index

glibc  2.9
Defines | Typedefs | Functions
atomic.h File Reference
#include <stdint.h>

Go to the source code of this file.

Defines

#define __sparc32_atomic_do_lock(addr)
#define __sparc32_atomic_do_unlock(addr)
#define __sparc32_atomic_do_lock24(addr)
#define __sparc32_atomic_do_unlock24(addr)
#define __v9_compare_and_exchange_val_32_acq(mem, newval, oldval)
#define __v7_compare_and_exchange_val_acq(mem, newval, oldval)
#define __v7_compare_and_exchange_bool_acq(mem, newval, oldval)
#define __v7_exchange_acq(mem, newval)
#define __v7_exchange_and_add(mem, value)
#define __v7_compare_and_exchange_val_24_acq(mem, newval, oldval)
#define __v7_exchange_24_rel(mem, newval)
#define __ATOMIC_HWCAP_SPARC_V9   16
#define __atomic_is_v9
#define atomic_compare_and_exchange_val_acq(mem, newval, oldval)
#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval)
#define atomic_exchange_rel(mem, newval)
#define atomic_compare_and_exchange_val_24_acq(mem, newval, oldval)
#define atomic_exchange_24_rel(mem, newval)

Typedefs

typedef int8_t atomic8_t
typedef uint8_t uatomic8_t
typedef int_fast8_t atomic_fast8_t
typedef uint_fast8_t uatomic_fast8_t
typedef int16_t atomic16_t
typedef uint16_t uatomic16_t
typedef int_fast16_t atomic_fast16_t
typedef uint_fast16_t uatomic_fast16_t
typedef int32_t atomic32_t
typedef uint32_t uatomic32_t
typedef int_fast32_t atomic_fast32_t
typedef uint_fast32_t uatomic_fast32_t
typedef int64_t atomic64_t
typedef uint64_t uatomic64_t
typedef int_fast64_t atomic_fast64_t
typedef uint_fast64_t uatomic_fast64_t
typedef intptr_t atomicptr_t
typedef uintptr_t uatomicptr_t
typedef intmax_t atomic_max_t
typedef uintmax_t uatomic_max_t

Functions

 __make_section_unallocated (".gnu.linkonce.b.__sparc32_atomic_locks, \"aw\", %nobits")
volatile unsigned char
__sparc32_atomic_locks[64] 
__attribute__ ((nocommon, section(".gnu.linkonce.b.__sparc32_atomic_locks"__sec_comment), visibility("hidden")))
uint64_t _dl_hwcap __attribute__ ((weak))

Define Documentation

#define __ATOMIC_HWCAP_SPARC_V9   16

Definition at line 242 of file atomic.h.

#define __atomic_is_v9
Value:
(__builtin_expect (&_dl_hwcap != 0, 1) \
   && __builtin_expect (_dl_hwcap & __ATOMIC_HWCAP_SPARC_V9, \
                     __ATOMIC_HWCAP_SPARC_V9))

Definition at line 243 of file atomic.h.

Value:
do                                                            \
    {                                                         \
      unsigned int __old_lock;                                       \
      unsigned int __idx = (((long) addr >> 2) ^ ((long) addr >> 12)) \
                        & 63;                                 \
      do                                                      \
       __asm __volatile ("ldstub %1, %0"                      \
                       : "=r" (__old_lock),                          \
                         "=m" (__sparc32_atomic_locks[__idx])      \
                       : "m" (__sparc32_atomic_locks[__idx])         \
                       : "memory");                                  \
      while (__old_lock);                                     \
    }                                                         \
  while (0)

Definition at line 65 of file atomic.h.

Value:
do                                                            \
    {                                                         \
      unsigned int __old_lock;                                       \
      do                                                      \
       __asm __volatile ("ldstub %1, %0"                      \
                       : "=r" (__old_lock), "=m" (*(addr))           \
                       : "m" (*(addr))                        \
                       : "memory");                                  \
      while (__old_lock);                                     \
    }                                                         \
  while (0)

Definition at line 90 of file atomic.h.

Value:
do                                                            \
    {                                                         \
      __sparc32_atomic_locks[(((long) addr >> 2)              \
                           ^ ((long) addr >> 12)) & 63] = 0;         \
      __asm __volatile ("" ::: "memory");                     \
    }                                                         \
  while (0)

Definition at line 81 of file atomic.h.

Value:
do                                                            \
    {                                                         \
      *(char *) (addr) = 0;                                   \
      __asm __volatile ("" ::: "memory");                     \
    }                                                         \
  while (0)

Definition at line 103 of file atomic.h.

#define __v7_compare_and_exchange_bool_acq (   mem,
  newval,
  oldval 
)
Value:
({ __typeof (mem) __aceb_memp = (mem);                        \
     int __aceb_ret;                                          \
     __typeof (*mem) __aceb_newval = (newval);                       \
                                                              \
     __sparc32_atomic_do_lock (__aceb_memp);                         \
     __aceb_ret = 0;                                          \
     if (*__aceb_memp == (oldval))                            \
       *__aceb_memp = __aceb_newval;                                 \
     else                                                     \
       __aceb_ret = 1;                                               \
     __sparc32_atomic_do_unlock (__aceb_memp);                       \
     __aceb_ret; })

Definition at line 141 of file atomic.h.

#define __v7_compare_and_exchange_val_24_acq (   mem,
  newval,
  oldval 
)
Value:
({ __typeof (mem) __acev_memp = (mem);                        \
     __typeof (*mem) __acev_ret;                              \
     __typeof (*mem) __acev_newval = (newval);                       \
                                                              \
     __sparc32_atomic_do_lock24 (__acev_memp);                       \
     __acev_ret = *__acev_memp & 0xffffff;                           \
     if (__acev_ret == (oldval))                              \
       *__acev_memp = __acev_newval;                                 \
     else                                                     \
       __sparc32_atomic_do_unlock24 (__acev_memp);                   \
     __asm __volatile ("" ::: "memory");                      \
     __acev_ret; })

Definition at line 178 of file atomic.h.

#define __v7_compare_and_exchange_val_acq (   mem,
  newval,
  oldval 
)
Value:
({ __typeof (mem) __acev_memp = (mem);                        \
     __typeof (*mem) __acev_ret;                              \
     __typeof (*mem) __acev_newval = (newval);                       \
                                                              \
     __sparc32_atomic_do_lock (__acev_memp);                         \
     __acev_ret = *__acev_memp;                                      \
     if (__acev_ret == (oldval))                              \
       *__acev_memp = __acev_newval;                                 \
     __sparc32_atomic_do_unlock (__acev_memp);                       \
     __acev_ret; })

Definition at line 129 of file atomic.h.

#define __v7_exchange_24_rel (   mem,
  newval 
)
Value:
({ __typeof (mem) __acev_memp = (mem);                        \
     __typeof (*mem) __acev_ret;                              \
     __typeof (*mem) __acev_newval = (newval);                       \
                                                              \
     __sparc32_atomic_do_lock24 (__acev_memp);                       \
     __acev_ret = *__acev_memp & 0xffffff;                           \
     *__acev_memp = __acev_newval;                            \
     __asm __volatile ("" ::: "memory");                      \
     __acev_ret; })

Definition at line 192 of file atomic.h.

#define __v7_exchange_acq (   mem,
  newval 
)
Value:
({ __typeof (mem) __acev_memp = (mem);                        \
     __typeof (*mem) __acev_ret;                              \
     __typeof (*mem) __acev_newval = (newval);                       \
                                                              \
     __sparc32_atomic_do_lock (__acev_memp);                         \
     __acev_ret = *__acev_memp;                                      \
     *__acev_memp = __acev_newval;                            \
     __sparc32_atomic_do_unlock (__acev_memp);                       \
     __acev_ret; })

Definition at line 155 of file atomic.h.

#define __v7_exchange_and_add (   mem,
  value 
)
Value:
({ __typeof (mem) __acev_memp = (mem);                        \
     __typeof (*mem) __acev_ret;                              \
                                                              \
     __sparc32_atomic_do_lock (__acev_memp);                         \
     __acev_ret = *__acev_memp;                                      \
     *__acev_memp = __acev_ret + (value);                     \
     __sparc32_atomic_do_unlock (__acev_memp);                       \
     __acev_ret; })

Definition at line 166 of file atomic.h.

#define __v9_compare_and_exchange_val_32_acq (   mem,
  newval,
  oldval 
)
Value:
({                                                                   \
  register __typeof (*(mem)) __acev_tmp __asm ("%g6");                      \
  register __typeof (mem) __acev_mem __asm ("%g1") = (mem);                 \
  register __typeof (*(mem)) __acev_oldval __asm ("%g5");                   \
  __acev_tmp = (newval);                                             \
  __acev_oldval = (oldval);                                          \
  /* .word 0xcde05005 is cas [%g1], %g5, %g6.  Can't use cas here though,     \
     because as will then mark the object file as V8+ arch.  */                    \
  __asm __volatile (".word 0xcde05005"                                      \
                  : "+r" (__acev_tmp), "=m" (*__acev_mem)                   \
                  : "r" (__acev_oldval), "m" (*__acev_mem),                 \
                    "r" (__acev_mem) : "memory");                           \
  __acev_tmp; })

Definition at line 113 of file atomic.h.

#define atomic_compare_and_exchange_bool_acq (   mem,
  newval,
  oldval 
)
Value:
({                                                            \
     int __acev_wret;                                                \
     if (sizeof (*mem) != 4)                                         \
       abort ();                                              \
     if (__atomic_is_v9)                                      \
       {                                                      \
        __typeof (oldval) __acev_woldval = (oldval);                 \
        __acev_wret                                           \
          = __v9_compare_and_exchange_val_32_acq (mem, newval,       \
                                             __acev_woldval)    \
            != __acev_woldval;                                       \
       }                                                      \
     else                                                     \
       __acev_wret                                            \
        = __v7_compare_and_exchange_bool_acq (mem, newval, oldval);  \
     __acev_wret; })

Definition at line 261 of file atomic.h.

#define atomic_compare_and_exchange_val_24_acq (   mem,
  newval,
  oldval 
)
Value:
({                                                            \
     __typeof (*mem) __acev_wret;                             \
     if (sizeof (*mem) != 4)                                         \
       abort ();                                              \
     if (__atomic_is_v9)                                      \
       __acev_wret                                            \
        = __v9_compare_and_exchange_val_32_acq (mem, newval, oldval);\
     else                                                     \
       __acev_wret                                            \
        = __v7_compare_and_exchange_val_24_acq (mem, newval, oldval);\
     __acev_wret; })

Definition at line 300 of file atomic.h.

#define atomic_compare_and_exchange_val_acq (   mem,
  newval,
  oldval 
)
Value:
({                                                            \
     __typeof (*mem) __acev_wret;                             \
     if (sizeof (*mem) != 4)                                         \
       abort ();                                              \
     if (__atomic_is_v9)                                      \
       __acev_wret                                            \
        = __v9_compare_and_exchange_val_32_acq (mem, newval, oldval);\
     else                                                     \
       __acev_wret                                            \
        = __v7_compare_and_exchange_val_acq (mem, newval, oldval);   \
     __acev_wret; })

Definition at line 248 of file atomic.h.

#define atomic_exchange_24_rel (   mem,
  newval 
)
Value:
({                                                            \
     __typeof (*mem) __acev_w24ret;                                  \
     if (sizeof (*mem) != 4)                                         \
       abort ();                                              \
     if (__atomic_is_v9)                                      \
       __acev_w24ret = atomic_exchange_rel (mem, newval);            \
     else                                                     \
       __acev_w24ret = __v7_exchange_24_rel (mem, newval);           \
     __acev_w24ret; })

Definition at line 313 of file atomic.h.

#define atomic_exchange_rel (   mem,
  newval 
)
Value:
({                                                            \
     __typeof (*mem) __acev_wret;                             \
     if (sizeof (*mem) != 4)                                         \
       abort ();                                              \
     if (__atomic_is_v9)                                      \
       {                                                      \
        __typeof (mem) __acev_wmemp = (mem);                         \
        __typeof (*(mem)) __acev_wval = (newval);                    \
        do                                                    \
          __acev_wret = *__acev_wmemp;                               \
        while (__builtin_expect                               \
                (__v9_compare_and_exchange_val_32_acq (__acev_wmemp,\
                                                  __acev_wval, \
                                                  __acev_wret) \
                 != __acev_wret, 0));                                \
       }                                                      \
     else                                                     \
       __acev_wret = __v7_exchange_acq (mem, newval);                \
     __acev_wret; })

Definition at line 279 of file atomic.h.


Typedef Documentation

Definition at line 31 of file atomic.h.

Definition at line 36 of file atomic.h.

Definition at line 41 of file atomic.h.

typedef int8_t atomic8_t

Definition at line 26 of file atomic.h.

Definition at line 33 of file atomic.h.

Definition at line 38 of file atomic.h.

Definition at line 43 of file atomic.h.

Definition at line 28 of file atomic.h.

Definition at line 48 of file atomic.h.

Definition at line 46 of file atomic.h.

Definition at line 32 of file atomic.h.

Definition at line 37 of file atomic.h.

Definition at line 42 of file atomic.h.

Definition at line 27 of file atomic.h.

Definition at line 34 of file atomic.h.

Definition at line 39 of file atomic.h.

Definition at line 44 of file atomic.h.

Definition at line 29 of file atomic.h.

Definition at line 49 of file atomic.h.

Definition at line 47 of file atomic.h.


Function Documentation

volatile unsigned char __sparc32_atomic_locks [64] __attribute__ ( (nocommon, section(".gnu.linkonce.b.__sparc32_atomic_locks"__sec_comment), visibility("hidden"))  )

Definition at line 245 of file libc-tls.c.

Here is the call graph for this function:

__make_section_unallocated ( ".gnu.linkonce.b.  __sparc32_atomic_locks,
\"aw\"  ,
%nobits"   
)