Back to index

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

Go to the source code of this file.

Defines

#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval)   (abort (), 0)
#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval)   (abort (), 0)
#define __arch_compare_and_exchange_bool_8_rel(mem, newval, oldval)   (abort (), 0)
#define __arch_compare_and_exchange_bool_16_rel(mem, newval, oldval)   (abort (), 0)
#define __ARCH_ACQ_INSTR   "isync"
#define __ARCH_REL_INSTR   "sync"
#define MUTEX_HINT_REL
#define atomic_full_barrier()   __asm ("sync" ::: "memory")
#define atomic_write_barrier()   __asm ("eieio" ::: "memory")
#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval)
#define __arch_compare_and_exchange_val_32_rel(mem, newval, oldval)
#define __arch_atomic_exchange_32_acq(mem, value)
#define __arch_atomic_exchange_32_rel(mem, value)
#define __arch_atomic_exchange_and_add_32(mem, value)
#define __arch_atomic_increment_val_32(mem)
#define __arch_atomic_decrement_val_32(mem)
#define __arch_atomic_decrement_if_positive_32(mem)
#define atomic_compare_and_exchange_val_acq(mem, newval, oldval)
#define atomic_compare_and_exchange_val_rel(mem, newval, oldval)
#define atomic_exchange_acq(mem, value)
#define atomic_exchange_rel(mem, value)
#define atomic_exchange_and_add(mem, value)
#define atomic_increment_val(mem)
#define atomic_increment(mem)   ({ atomic_increment_val (mem); (void) 0; })
#define atomic_decrement_val(mem)
#define atomic_decrement(mem)   ({ atomic_decrement_val (mem); (void) 0; })
#define atomic_decrement_if_positive(mem)

Typedefs

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

Define Documentation

#define __ARCH_ACQ_INSTR   "isync"

Definition at line 67 of file atomic.h.

Value:
({ int __val, __tmp;                                                 \
     __asm __volatile ("1:  lwarx  %0,0,%3\n"                        \
                     "      cmpwi  0,%0,0\n"                         \
                     "      addi   %1,%0,-1\n"                       \
                     "      ble    2f\n"                             \
                     "      stwcx. %1,0,%3\n"                        \
                     "      bne-   1b\n"                             \
                     "2:    " __ARCH_ACQ_INSTR                       \
                     : "=&b" (__val), "=&r" (__tmp), "=m" (*mem)            \
                     : "b" (mem), "m" (*mem)                                \
                     : "cr0", "memory");                             \
     __val;                                                          \
  })

Definition at line 183 of file atomic.h.

Value:
({                                                                   \
    __typeof (*(mem)) __val;                                                \
    __asm __volatile ("1:   lwarx  %0,0,%2\n"                        \
                    "              subi   %0,%0,1\n"                        \
                    "              stwcx. %0,0,%2\n"                        \
                    "              bne-   1b"                               \
                    : "=&b" (__val), "=m" (*mem)                     \
                    : "b" (mem), "m" (*mem)                                 \
                    : "cr0", "memory");                              \
    __val;                                                           \
  })

Definition at line 170 of file atomic.h.

#define __arch_atomic_exchange_32_acq (   mem,
  value 
)
Value:
({                                                                   \
    __typeof (*mem) __val;                                           \
    __asm __volatile (                                                      \
                    "1:     lwarx  %0,0,%2" MUTEX_HINT_ACQ "\n"             \
                    "              stwcx. %3,0,%2\n"                        \
                    "              bne-   1b\n"                             \
                    "   " __ARCH_ACQ_INSTR                                  \
                    : "=&r" (__val), "=m" (*mem)                     \
                    : "b" (mem), "r" (value), "m" (*mem)                    \
                    : "cr0", "memory");                              \
    __val;                                                           \
  })

Definition at line 117 of file atomic.h.

#define __arch_atomic_exchange_32_rel (   mem,
  value 
)
Value:
({                                                                   \
    __typeof (*mem) __val;                                           \
    __asm __volatile (__ARCH_REL_INSTR "\n"                                 \
                    "1:     lwarx  %0,0,%2" MUTEX_HINT_REL "\n"             \
                    "              stwcx. %3,0,%2\n"                        \
                    "              bne-   1b"                               \
                    : "=&r" (__val), "=m" (*mem)                     \
                    : "b" (mem), "r" (value), "m" (*mem)                    \
                    : "cr0", "memory");                              \
    __val;                                                           \
  })

Definition at line 131 of file atomic.h.

Value:
({                                                                   \
    __typeof (*mem) __val, __tmp;                                    \
    __asm __volatile ("1:   lwarx  %0,0,%3\n"                        \
                    "              add    %1,%0,%4\n"                       \
                    "              stwcx. %1,0,%3\n"                        \
                    "              bne-   1b"                               \
                    : "=&b" (__val), "=&r" (__tmp), "=m" (*mem)             \
                    : "b" (mem), "r" (value), "m" (*mem)                    \
                    : "cr0", "memory");                              \
    __val;                                                           \
  })

Definition at line 144 of file atomic.h.

Value:
({                                                                   \
    __typeof (*(mem)) __val;                                                \
    __asm __volatile ("1:   lwarx  %0,0,%2\n"                        \
                    "              addi   %0,%0,1\n"                        \
                    "              stwcx. %0,0,%2\n"                        \
                    "              bne-   1b"                               \
                    : "=&b" (__val), "=m" (*mem)                     \
                    : "b" (mem), "m" (*mem)                                 \
                    : "cr0", "memory");                              \
    __val;                                                           \
  })

Definition at line 157 of file atomic.h.

#define __arch_compare_and_exchange_bool_16_acq (   mem,
  newval,
  oldval 
)    (abort (), 0)

Definition at line 54 of file atomic.h.

#define __arch_compare_and_exchange_bool_16_rel (   mem,
  newval,
  oldval 
)    (abort (), 0)

Definition at line 60 of file atomic.h.

#define __arch_compare_and_exchange_bool_8_acq (   mem,
  newval,
  oldval 
)    (abort (), 0)

Definition at line 51 of file atomic.h.

#define __arch_compare_and_exchange_bool_8_rel (   mem,
  newval,
  oldval 
)    (abort (), 0)

Definition at line 57 of file atomic.h.

#define __arch_compare_and_exchange_val_32_acq (   mem,
  newval,
  oldval 
)
Value:
({                                                                   \
      __typeof (*(mem)) __tmp;                                              \
      __typeof (mem)  __memp = (mem);                                       \
      __asm __volatile (                                             \
                      "1:   lwarx  %0,0,%1" MUTEX_HINT_ACQ "\n"             \
                      "     cmpw   %0,%2\n"                          \
                      "     bne    2f\n"                             \
                      "     stwcx. %3,0,%1\n"                        \
                      "     bne-   1b\n"                             \
                      "2:   " __ARCH_ACQ_INSTR                       \
                      : "=&r" (__tmp)                                       \
                      : "b" (__memp), "r" (oldval), "r" (newval)            \
                      : "cr0", "memory");                            \
      __tmp;                                                         \
  })

Definition at line 83 of file atomic.h.

#define __arch_compare_and_exchange_val_32_rel (   mem,
  newval,
  oldval 
)
Value:
({                                                                   \
      __typeof (*(mem)) __tmp;                                              \
      __typeof (mem)  __memp = (mem);                                       \
      __asm __volatile (__ARCH_REL_INSTR "\n"                               \
                      "1:   lwarx  %0,0,%1" MUTEX_HINT_REL "\n"             \
                      "     cmpw   %0,%2\n"                          \
                      "     bne    2f\n"                             \
                      "     stwcx. %3,0,%1\n"                        \
                      "     bne-   1b\n"                             \
                      "2:   "                                        \
                      : "=&r" (__tmp)                                       \
                      : "b" (__memp), "r" (oldval), "r" (newval)            \
                      : "cr0", "memory");                            \
      __tmp;                                                         \
  })

Definition at line 100 of file atomic.h.

#define __ARCH_REL_INSTR   "sync"

Definition at line 69 of file atomic.h.

#define atomic_compare_and_exchange_val_acq (   mem,
  newval,
  oldval 
)
Value:
({                                                                   \
    __typeof (*(mem)) __result;                                             \
    if (sizeof (*mem) == 4)                                          \
      __result = __arch_compare_and_exchange_val_32_acq(mem, newval, oldval); \
    else if (sizeof (*mem) == 8)                                     \
      __result = __arch_compare_and_exchange_val_64_acq(mem, newval, oldval); \
    else                                                             \
       abort ();                                                     \
    __result;                                                        \
  })

Definition at line 198 of file atomic.h.

#define atomic_compare_and_exchange_val_rel (   mem,
  newval,
  oldval 
)
Value:
({                                                                   \
    __typeof (*(mem)) __result;                                             \
    if (sizeof (*mem) == 4)                                          \
      __result = __arch_compare_and_exchange_val_32_rel(mem, newval, oldval); \
    else if (sizeof (*mem) == 8)                                     \
      __result = __arch_compare_and_exchange_val_64_rel(mem, newval, oldval); \
    else                                                             \
       abort ();                                                     \
    __result;                                                        \
  })

Definition at line 210 of file atomic.h.

#define atomic_decrement (   mem)    ({ atomic_decrement_val (mem); (void) 0; })

Definition at line 284 of file atomic.h.

Value:
({ __typeof (*(mem)) __result;                                       \
    if (sizeof (*mem) == 4)                                          \
      __result = __arch_atomic_decrement_if_positive_32 (mem);              \
    else if (sizeof (*mem) == 8)                                     \
      __result = __arch_atomic_decrement_if_positive_64 (mem);              \
    else                                                             \
       abort ();                                                     \
    __result;                                                        \
  })

Definition at line 288 of file atomic.h.

#define atomic_decrement_val (   mem)
Value:
({                                                                   \
    __typeof (*(mem)) __result;                                             \
    if (sizeof (*(mem)) == 4)                                               \
      __result = __arch_atomic_decrement_val_32 (mem);                      \
    else if (sizeof (*(mem)) == 8)                                   \
      __result = __arch_atomic_decrement_val_64 (mem);                      \
    else                                                             \
       abort ();                                                     \
    __result;                                                        \
  })

Definition at line 272 of file atomic.h.

#define atomic_exchange_acq (   mem,
  value 
)
Value:
({                                                                   \
    __typeof (*(mem)) __result;                                             \
    if (sizeof (*mem) == 4)                                          \
      __result = __arch_atomic_exchange_32_acq (mem, value);                \
    else if (sizeof (*mem) == 8)                                     \
      __result = __arch_atomic_exchange_64_acq (mem, value);                \
    else                                                             \
       abort ();                                                     \
    __result;                                                        \
  })

Definition at line 222 of file atomic.h.

#define atomic_exchange_and_add (   mem,
  value 
)
Value:
({                                                                   \
    __typeof (*(mem)) __result;                                             \
    if (sizeof (*mem) == 4)                                          \
      __result = __arch_atomic_exchange_and_add_32 (mem, value);            \
    else if (sizeof (*mem) == 8)                                     \
      __result = __arch_atomic_exchange_and_add_64 (mem, value);            \
    else                                                             \
       abort ();                                                     \
    __result;                                                        \
  })

Definition at line 246 of file atomic.h.

#define atomic_exchange_rel (   mem,
  value 
)
Value:
({                                                                   \
    __typeof (*(mem)) __result;                                             \
    if (sizeof (*mem) == 4)                                          \
      __result = __arch_atomic_exchange_32_rel (mem, value);                \
    else if (sizeof (*mem) == 8)                                     \
      __result = __arch_atomic_exchange_64_rel (mem, value);                \
    else                                                             \
       abort ();                                                     \
    __result;                                                        \
  })

Definition at line 234 of file atomic.h.

#define atomic_full_barrier ( )    __asm ("sync" ::: "memory")

Definition at line 80 of file atomic.h.

#define atomic_increment (   mem)    ({ atomic_increment_val (mem); (void) 0; })

Definition at line 270 of file atomic.h.

#define atomic_increment_val (   mem)
Value:
({                                                                   \
    __typeof (*(mem)) __result;                                             \
    if (sizeof (*(mem)) == 4)                                               \
      __result = __arch_atomic_increment_val_32 (mem);                      \
    else if (sizeof (*(mem)) == 8)                                   \
      __result = __arch_atomic_increment_val_64 (mem);                      \
    else                                                             \
       abort ();                                                     \
    __result;                                                        \
  })

Definition at line 258 of file atomic.h.

#define atomic_write_barrier ( )    __asm ("eieio" ::: "memory")

Definition at line 81 of file atomic.h.

#define MUTEX_HINT_REL

Definition at line 77 of file atomic.h.


Typedef Documentation

Definition at line 32 of file atomic.h.

Definition at line 37 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 42 of file atomic.h.

Definition at line 33 of file atomic.h.

Definition at line 38 of file atomic.h.

Definition at line 35 of file atomic.h.

Definition at line 40 of file atomic.h.

Definition at line 45 of file atomic.h.

Definition at line 43 of file atomic.h.