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 __MB   " mb\n"
#define __arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2)
#define __arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2)
#define __arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2)
#define __arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2)
#define __arch_compare_and_exchange_bool_8_int(mem, new, old, mb1, mb2)
#define __arch_compare_and_exchange_bool_16_int(mem, new, old, mb1, mb2)
#define __arch_compare_and_exchange_bool_32_int(mem, new, old, mb1, mb2)
#define __arch_compare_and_exchange_bool_64_int(mem, new, old, mb1, mb2)
#define __arch_compare_and_exchange_val_8_int(mem, new, old, mb1, mb2)
#define __arch_compare_and_exchange_val_16_int(mem, new, old, mb1, mb2)
#define __arch_compare_and_exchange_val_32_int(mem, new, old, mb1, mb2)
#define __arch_compare_and_exchange_val_64_int(mem, new, old, mb1, mb2)
#define atomic_compare_and_exchange_bool_acq(mem, new, old)
#define atomic_compare_and_exchange_val_acq(mem, new, old)
#define atomic_compare_and_exchange_bool_rel(mem, new, old)
#define atomic_compare_and_exchange_val_rel(mem, new, old)
#define __arch_exchange_8_int(mem, value, mb1, mb2)
#define __arch_exchange_16_int(mem, value, mb1, mb2)
#define __arch_exchange_32_int(mem, value, mb1, mb2)
#define __arch_exchange_64_int(mem, value, mb1, mb2)
#define atomic_exchange_acq(mem, value)   __atomic_val_bysize (__arch_exchange, int, mem, value, "", __MB)
#define atomic_exchange_rel(mem, value)   __atomic_val_bysize (__arch_exchange, int, mem, value, __MB, "")
#define __arch_exchange_and_add_8_int(mem, value, mb1, mb2)   ({ __builtin_trap (); 0; })
#define __arch_exchange_and_add_16_int(mem, value, mb1, mb2)   ({ __builtin_trap (); 0; })
#define __arch_exchange_and_add_32_int(mem, value, mb1, mb2)
#define __arch_exchange_and_add_64_int(mem, value, mb1, mb2)
#define atomic_exchange_and_add(mem, value)   __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, __MB, __MB)
#define atomic_full_barrier()   __asm ("mb" : : : "memory");
#define atomic_read_barrier()   __asm ("mb" : : : "memory");
#define atomic_write_barrier()   __asm ("wmb" : : : "memory");

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

Define Documentation

#define __arch_compare_and_exchange_bool_16_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({ unsigned long __prev; int __cmp;                                   \
   __arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2);   \
   !__cmp; })

Definition at line 161 of file atomic.h.

#define __arch_compare_and_exchange_bool_32_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({ unsigned long __prev; int __cmp;                                   \
   __arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2);   \
   !__cmp; })

Definition at line 166 of file atomic.h.

#define __arch_compare_and_exchange_bool_64_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({ unsigned long __prev; int __cmp;                                   \
   __arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2);   \
   !__cmp; })

Definition at line 171 of file atomic.h.

#define __arch_compare_and_exchange_bool_8_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({ unsigned long __prev; int __cmp;                                   \
   __arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2);    \
   !__cmp; })

Definition at line 156 of file atomic.h.

#define __arch_compare_and_exchange_val_16_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({ unsigned long __prev; int __cmp;                                   \
   __arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2);   \
   (typeof (*mem))__prev; })

Definition at line 184 of file atomic.h.

#define __arch_compare_and_exchange_val_32_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({ unsigned long __prev; int __cmp;                                   \
   __arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2);   \
   (typeof (*mem))__prev; })

Definition at line 189 of file atomic.h.

#define __arch_compare_and_exchange_val_64_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({ unsigned long __prev; int __cmp;                                   \
   __arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2);   \
   (typeof (*mem))__prev; })

Definition at line 194 of file atomic.h.

#define __arch_compare_and_exchange_val_8_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({ unsigned long __prev; int __cmp;                                   \
   __arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2);    \
   (typeof (*mem))__prev; })

Definition at line 179 of file atomic.h.

#define __arch_compare_and_exchange_xxx_16_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({                                                             \
  unsigned long __tmp, __snew, __addr64;                       \
  __asm__ __volatile__ (                                       \
              mb1                                              \
       "      andnot %[__addr16],7,%[__addr64]\n"                     \
       "      inswl  %[__new],%[__addr16],%[__snew]\n"         \
       "1:    ldq_l  %[__tmp],0(%[__addr64])\n"                \
       "      extwl  %[__tmp],%[__addr16],%[__prev]\n"         \
       "      cmpeq  %[__prev],%[__old],%[__cmp]\n"                   \
       "      beq    %[__cmp],2f\n"                                   \
       "      mskwl  %[__tmp],%[__addr16],%[__tmp]\n"          \
       "      or     %[__snew],%[__tmp],%[__tmp]\n"                   \
       "      stq_c  %[__tmp],0(%[__addr64])\n"                \
       "      beq    %[__tmp],1b\n"                                   \
              mb2                                              \
       "2:"                                                    \
       : [__prev] "=&r" (__prev),                              \
         [__snew] "=&r" (__snew),                              \
         [__tmp] "=&r" (__tmp),                                \
         [__cmp] "=&r" (__cmp),                                \
         [__addr64] "=&r" (__addr64)                                  \
       : [__addr16] "r" (mem),                                        \
         [__old] "Ir" ((uint64_t)(uint16_t)(uint64_t)(old)),          \
         [__new] "r" (new)                                     \
       : "memory");                                            \
})

Definition at line 86 of file atomic.h.

#define __arch_compare_and_exchange_xxx_32_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({                                                             \
  __asm__ __volatile__ (                                       \
              mb1                                              \
       "1:    ldl_l  %[__prev],%[__mem]\n"                            \
       "      cmpeq  %[__prev],%[__old],%[__cmp]\n"                   \
       "      beq    %[__cmp],2f\n"                                   \
       "      mov    %[__new],%[__cmp]\n"                      \
       "      stl_c  %[__cmp],%[__mem]\n"                      \
       "      beq    %[__cmp],1b\n"                                   \
              mb2                                              \
       "2:"                                                    \
       : [__prev] "=&r" (__prev),                              \
         [__cmp] "=&r" (__cmp)                                        \
       : [__mem] "m" (*(mem)),                                        \
         [__old] "Ir" ((uint64_t)(atomic32_t)(uint64_t)(old)),        \
         [__new] "Ir" (new)                                    \
       : "memory");                                            \
})

Definition at line 114 of file atomic.h.

#define __arch_compare_and_exchange_xxx_64_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({                                                             \
  __asm__ __volatile__ (                                       \
              mb1                                              \
       "1:    ldq_l  %[__prev],%[__mem]\n"                            \
       "      cmpeq  %[__prev],%[__old],%[__cmp]\n"                   \
       "      beq    %[__cmp],2f\n"                                   \
       "      mov    %[__new],%[__cmp]\n"                      \
       "      stq_c  %[__cmp],%[__mem]\n"                      \
       "      beq    %[__cmp],1b\n"                                   \
              mb2                                              \
       "2:"                                                    \
       : [__prev] "=&r" (__prev),                              \
         [__cmp] "=&r" (__cmp)                                        \
       : [__mem] "m" (*(mem)),                                        \
         [__old] "Ir" ((uint64_t)(old)),                       \
         [__new] "Ir" (new)                                    \
       : "memory");                                            \
})

Definition at line 134 of file atomic.h.

#define __arch_compare_and_exchange_xxx_8_int (   mem,
  new,
  old,
  mb1,
  mb2 
)
Value:
({                                                             \
  unsigned long __tmp, __snew, __addr64;                       \
  __asm__ __volatile__ (                                       \
              mb1                                              \
       "      andnot %[__addr8],7,%[__addr64]\n"               \
       "      insbl  %[__new],%[__addr8],%[__snew]\n"          \
       "1:    ldq_l  %[__tmp],0(%[__addr64])\n"                \
       "      extbl  %[__tmp],%[__addr8],%[__prev]\n"          \
       "      cmpeq  %[__prev],%[__old],%[__cmp]\n"                   \
       "      beq    %[__cmp],2f\n"                                   \
       "      mskbl  %[__tmp],%[__addr8],%[__tmp]\n"                  \
       "      or     %[__snew],%[__tmp],%[__tmp]\n"                   \
       "      stq_c  %[__tmp],0(%[__addr64])\n"                \
       "      beq    %[__tmp],1b\n"                                   \
              mb2                                              \
       "2:"                                                    \
       : [__prev] "=&r" (__prev),                              \
         [__snew] "=&r" (__snew),                              \
         [__tmp] "=&r" (__tmp),                                \
         [__cmp] "=&r" (__cmp),                                \
         [__addr64] "=&r" (__addr64)                                  \
       : [__addr8] "r" (mem),                                         \
         [__old] "Ir" ((uint64_t)(uint8_t)(uint64_t)(old)),           \
         [__new] "r" (new)                                     \
       : "memory");                                            \
})

Definition at line 58 of file atomic.h.

#define __arch_exchange_16_int (   mem,
  value,
  mb1,
  mb2 
)
Value:
({                                                             \
  unsigned long __ret, __tmp, __addr64, __sval;                       \
  __asm__ __volatile__ (                                       \
              mb1                                              \
       "      andnot %[__addr16],7,%[__addr64]\n"                     \
       "      inswl  %[__value],%[__addr16],%[__sval]\n"              \
       "1:    ldq_l  %[__tmp],0(%[__addr64])\n"                \
       "      extwl  %[__tmp],%[__addr16],%[__ret]\n"          \
       "      mskwl  %[__tmp],%[__addr16],%[__tmp]\n"          \
       "      or     %[__sval],%[__tmp],%[__tmp]\n"                   \
       "      stq_c  %[__tmp],0(%[__addr64])\n"                \
       "      beq    %[__tmp],1b\n"                                   \
              mb2                                              \
       : [__ret] "=&r" (__ret),                                \
         [__sval] "=&r" (__sval),                              \
         [__tmp] "=&r" (__tmp),                                \
         [__addr64] "=&r" (__addr64)                                  \
       : [__addr16] "r" (mem),                                        \
         [__value] "r" (value)                                        \
       : "memory");                                            \
  __ret; })

Definition at line 245 of file atomic.h.

#define __arch_exchange_32_int (   mem,
  value,
  mb1,
  mb2 
)
Value:
({                                                             \
  signed int __ret, __tmp;                                     \
  __asm__ __volatile__ (                                       \
              mb1                                              \
       "1:    ldl_l  %[__ret],%[__mem]\n"                      \
       "      mov    %[__val],%[__tmp]\n"                      \
       "      stl_c  %[__tmp],%[__mem]\n"                      \
       "      beq    %[__tmp],1b\n"                                   \
              mb2                                              \
       : [__ret] "=&r" (__ret),                                \
         [__tmp] "=&r" (__tmp)                                        \
       : [__mem] "m" (*(mem)),                                        \
         [__val] "Ir" (value)                                         \
       : "memory");                                            \
  __ret; })

Definition at line 268 of file atomic.h.

#define __arch_exchange_64_int (   mem,
  value,
  mb1,
  mb2 
)
Value:
({                                                             \
  unsigned long __ret, __tmp;                                         \
  __asm__ __volatile__ (                                       \
              mb1                                              \
       "1:    ldq_l  %[__ret],%[__mem]\n"                      \
       "      mov    %[__val],%[__tmp]\n"                      \
       "      stq_c  %[__tmp],%[__mem]\n"                      \
       "      beq    %[__tmp],1b\n"                                   \
              mb2                                              \
       : [__ret] "=&r" (__ret),                                \
         [__tmp] "=&r" (__tmp)                                        \
       : [__mem] "m" (*(mem)),                                        \
         [__val] "Ir" (value)                                         \
       : "memory");                                            \
  __ret; })

Definition at line 285 of file atomic.h.

#define __arch_exchange_8_int (   mem,
  value,
  mb1,
  mb2 
)
Value:
({                                                             \
  unsigned long __ret, __tmp, __addr64, __sval;                       \
  __asm__ __volatile__ (                                       \
              mb1                                              \
       "      andnot %[__addr8],7,%[__addr64]\n"               \
       "      insbl  %[__value],%[__addr8],%[__sval]\n"        \
       "1:    ldq_l  %[__tmp],0(%[__addr64])\n"                \
       "      extbl  %[__tmp],%[__addr8],%[__ret]\n"                  \
       "      mskbl  %[__tmp],%[__addr8],%[__tmp]\n"                  \
       "      or     %[__sval],%[__tmp],%[__tmp]\n"                   \
       "      stq_c  %[__tmp],0(%[__addr64])\n"                \
       "      beq    %[__tmp],1b\n"                                   \
              mb2                                              \
       : [__ret] "=&r" (__ret),                                \
         [__sval] "=&r" (__sval),                              \
         [__tmp] "=&r" (__tmp),                                \
         [__addr64] "=&r" (__addr64)                                  \
       : [__addr8] "r" (mem),                                         \
         [__value] "r" (value)                                        \
       : "memory");                                            \
  __ret; })

Definition at line 222 of file atomic.h.

#define __arch_exchange_and_add_16_int (   mem,
  value,
  mb1,
  mb2 
)    ({ __builtin_trap (); 0; })

Definition at line 314 of file atomic.h.

#define __arch_exchange_and_add_32_int (   mem,
  value,
  mb1,
  mb2 
)
Value:
({                                                             \
  signed int __ret, __tmp;                                     \
  __asm__ __volatile__ (                                       \
              mb1                                              \
       "1:    ldl_l  %[__ret],%[__mem]\n"                      \
       "      addl   %[__ret],%[__val],%[__tmp]\n"                    \
       "      stl_c  %[__tmp],%[__mem]\n"                      \
       "      beq    %[__tmp],1b\n"                                   \
              mb2                                              \
       : [__ret] "=&r" (__ret),                                \
         [__tmp] "=&r" (__tmp)                                        \
       : [__mem] "m" (*(mem)),                                        \
         [__val] "Ir" ((signed int)(value))                           \
       : "memory");                                            \
  __ret; })

Definition at line 317 of file atomic.h.

#define __arch_exchange_and_add_64_int (   mem,
  value,
  mb1,
  mb2 
)
Value:
({                                                             \
  unsigned long __ret, __tmp;                                         \
  __asm__ __volatile__ (                                       \
              mb1                                              \
       "1:    ldq_l  %[__ret],%[__mem]\n"                      \
       "      addq   %[__ret],%[__val],%[__tmp]\n"                    \
       "      stq_c  %[__tmp],%[__mem]\n"                      \
       "      beq    %[__tmp],1b\n"                                   \
              mb2                                              \
       : [__ret] "=&r" (__ret),                                \
         [__tmp] "=&r" (__tmp)                                        \
       : [__mem] "m" (*(mem)),                                        \
         [__val] "Ir" ((unsigned long)(value))                        \
       : "memory");                                            \
  __ret; })

Definition at line 334 of file atomic.h.

#define __arch_exchange_and_add_8_int (   mem,
  value,
  mb1,
  mb2 
)    ({ __builtin_trap (); 0; })

Definition at line 311 of file atomic.h.

#define __MB   " mb\n"

Definition at line 50 of file atomic.h.

#define atomic_compare_and_exchange_bool_acq (   mem,
  new,
  old 
)
Value:
__atomic_bool_bysize (__arch_compare_and_exchange_bool, int,   \
                      mem, new, old, "", __MB)

Definition at line 201 of file atomic.h.

#define atomic_compare_and_exchange_bool_rel (   mem,
  new,
  old 
)
Value:
__atomic_bool_bysize (__arch_compare_and_exchange_bool, int,   \
                      mem, new, old, __MB, "")

Definition at line 211 of file atomic.h.

#define atomic_compare_and_exchange_val_acq (   mem,
  new,
  old 
)
Value:
__atomic_val_bysize (__arch_compare_and_exchange_val, int,     \
                     mem, new, old, "", __MB)

Definition at line 205 of file atomic.h.

#define atomic_compare_and_exchange_val_rel (   mem,
  new,
  old 
)
Value:
__atomic_val_bysize (__arch_compare_and_exchange_val, int,     \
                     mem, new, old, __MB, "")

Definition at line 215 of file atomic.h.

#define atomic_exchange_acq (   mem,
  value 
)    __atomic_val_bysize (__arch_exchange, int, mem, value, "", __MB)

Definition at line 302 of file atomic.h.

#define atomic_exchange_and_add (   mem,
  value 
)    __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, __MB, __MB)

Definition at line 353 of file atomic.h.

#define atomic_exchange_rel (   mem,
  value 
)    __atomic_val_bysize (__arch_exchange, int, mem, value, __MB, "")

Definition at line 305 of file atomic.h.

#define atomic_full_barrier ( )    __asm ("mb" : : : "memory");

Definition at line 366 of file atomic.h.

#define atomic_read_barrier ( )    __asm ("mb" : : : "memory");

Definition at line 367 of file atomic.h.

#define atomic_write_barrier ( )    __asm ("wmb" : : : "memory");

Definition at line 368 of file atomic.h.


Typedef Documentation

Definition at line 26 of file atomic.h.

Definition at line 31 of file atomic.h.

Definition at line 36 of file atomic.h.

typedef int8_t atomic8_t

Definition at line 21 of file atomic.h.

Definition at line 28 of file atomic.h.

Definition at line 33 of file atomic.h.

Definition at line 38 of file atomic.h.

Definition at line 23 of file atomic.h.

Definition at line 43 of file atomic.h.

Definition at line 41 of file atomic.h.

Definition at line 27 of file atomic.h.

Definition at line 32 of file atomic.h.

Definition at line 37 of file atomic.h.

Definition at line 22 of file atomic.h.

Definition at line 29 of file atomic.h.

Definition at line 34 of file atomic.h.

Definition at line 39 of file atomic.h.

Definition at line 24 of file atomic.h.

Definition at line 44 of file atomic.h.

Definition at line 42 of file atomic.h.