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_val_8_acq(mem, newval, oldval)
#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval)
#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval)
#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval)   (abort (), (__typeof (*mem)) 0)
#define atomic_exchange_and_add(mem, value)
#define atomic_add(mem, value)
#define atomic_add_negative(mem, value)
#define atomic_add_zero(mem, value)
#define atomic_increment_and_test(mem)   atomic_add_zero((mem), 1)
#define atomic_decrement_and_test(mem)   atomic_add_zero((mem), -1)
#define atomic_bit_set(mem, bit)
#define atomic_bit_test_set(mem, bit)

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_val_16_acq (   mem,
  newval,
  oldval 
)
Value:
({ __typeof (*(mem)) __result; \
     __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\ nop\n\ mov r15,r1\n\ mov #-8,r15\n\     0: mov.w @%1,%0\n\     cmp/eq %0,%3\n\      bf 1f\n\      mov.w %2,@%1\n\     1: mov r1,r15"\
       : "=&r" (__result) : "r" (mem), "r" (newval), "r" (oldval) \
       : "r0", "r1", "t", "memory"); \
     __result; })

Definition at line 85 of file atomic.h.

#define __arch_compare_and_exchange_val_32_acq (   mem,
  newval,
  oldval 
)
Value:
({ __typeof (*(mem)) __result; \
     __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\ nop\n\ mov r15,r1\n\ mov #-8,r15\n\     0: mov.l @%1,%0\n\     cmp/eq %0,%3\n\      bf 1f\n\      mov.l %2,@%1\n\     1: mov r1,r15"\
       : "=&r" (__result) : "r" (mem), "r" (newval), "r" (oldval) \
       : "r0", "r1", "t", "memory"); \
     __result; })

Definition at line 102 of file atomic.h.

#define __arch_compare_and_exchange_val_64_acq (   mem,
  newval,
  oldval 
)    (abort (), (__typeof (*mem)) 0)

Definition at line 124 of file atomic.h.

#define __arch_compare_and_exchange_val_8_acq (   mem,
  newval,
  oldval 
)
Value:
({ __typeof (*(mem)) __result; \
     __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\ nop\n\ mov r15,r1\n\ mov #-8,r15\n\     0: mov.b @%1,%0\n\     cmp/eq %0,%3\n\      bf 1f\n\      mov.b %2,@%1\n\     1: mov r1,r15"\
       : "=&r" (__result) : "r" (mem), "r" (newval), "r" (oldval) \
       : "r0", "r1", "t", "memory"); \
     __result; })

Definition at line 68 of file atomic.h.

#define atomic_add (   mem,
  value 
)
Value:
(void) ({ __typeof (*(mem)) __tmp, __value = (value); \
           if (sizeof (*(mem)) == 1) \
             __asm __volatile ("\         .align 2\n\          mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\            0: mov.b @%1,r2\n\            add r2,%0\n\         mov.b %0,@%1\n\           1: mov r1,r15"\
              : "=&r" (__tmp) : "r" (mem), "0" (__value) \
              : "r0", "r1", "r2", "memory"); \
           else if (sizeof (*(mem)) == 2) \
             __asm __volatile ("\         .align 2\n\          mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\            0: mov.w @%1,r2\n\            add r2,%0\n\         mov.w %0,@%1\n\           1: mov r1,r15"\
              : "=&r" (__tmp) : "r" (mem), "0" (__value) \
              : "r0", "r1", "r2", "memory"); \
           else if (sizeof (*(mem)) == 4) \
             __asm __volatile ("\         .align 2\n\          mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\            0: mov.l @%1,r2\n\            add r2,%0\n\         mov.l %0,@%1\n\           1: mov r1,r15"\
              : "=&r" (__tmp) : "r" (mem), "0" (__value) \
              : "r0", "r1", "r2", "memory"); \
           else \
             { \
              __typeof (*(mem)) oldval; \
              __typeof (mem) memp = (mem); \
              do \
                oldval = *memp; \
              while (__arch_compare_and_exchange_val_64_acq \
                     (memp, oldval + __value, oldval) == oldval); \
              (void) __value; \
             } \
           })

Definition at line 176 of file atomic.h.

#define atomic_add_negative (   mem,
  value 
)
Value:
({ unsigned char __result; \
     __typeof (*(mem)) __tmp, __value = (value); \
     if (sizeof (*(mem)) == 1) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\       0: mov.b @%2,r2\n\   add r2,%1\n\         mov.b %1,@%2\n\       1: mov r1,r15\n\    shal %1\n\    movt %0"\
       : "=r" (__result), "=&r" (__tmp) : "r" (mem), "1" (__value) \
       : "r0", "r1", "r2", "t", "memory"); \
     else if (sizeof (*(mem)) == 2) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\       0: mov.w @%2,r2\n\   add r2,%1\n\         mov.w %1,@%2\n\       1: mov r1,r15\n\    shal %1\n\    movt %0"\
       : "=r" (__result), "=&r" (__tmp) : "r" (mem), "1" (__value) \
       : "r0", "r1", "r2", "t", "memory"); \
     else if (sizeof (*(mem)) == 4) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\       0: mov.l @%2,r2\n\   add r2,%1\n\         mov.l %1,@%2\n\       1: mov r1,r15\n\    shal %1\n\    movt %0"\
       : "=r" (__result), "=&r" (__tmp) : "r" (mem), "1" (__value) \
       : "r0", "r1", "r2", "t", "memory"); \
     else \
       abort (); \
     __result; })

Definition at line 226 of file atomic.h.

#define atomic_add_zero (   mem,
  value 
)
Value:
({ unsigned char __result; \
     __typeof (*(mem)) __tmp, __value = (value); \
     if (sizeof (*(mem)) == 1) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\       0: mov.b @%2,r2\n\   add r2,%1\n\         mov.b %1,@%2\n\       1: mov r1,r15\n\    tst %1,%1\n\         movt %0"\
       : "=r" (__result), "=&r" (__tmp) : "r" (mem), "1" (__value) \
       : "r0", "r1", "r2", "t", "memory"); \
     else if (sizeof (*(mem)) == 2) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\       0: mov.w @%2,r2\n\   add r2,%1\n\         mov.w %1,@%2\n\       1: mov r1,r15\n\    tst %1,%1\n\         movt %0"\
       : "=r" (__result), "=&r" (__tmp) : "r" (mem), "1" (__value) \
       : "r0", "r1", "r2", "t", "memory"); \
     else if (sizeof (*(mem)) == 4) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\       0: mov.l @%2,r2\n\   add r2,%1\n\         mov.l %1,@%2\n\       1: mov r1,r15\n\    tst %1,%1\n\         movt %0"\
       : "=r" (__result), "=&r" (__tmp) : "r" (mem), "1" (__value) \
       : "r0", "r1", "r2", "t", "memory"); \
     else \
       abort (); \
     __result; })

Definition at line 275 of file atomic.h.

#define atomic_bit_set (   mem,
  bit 
)
Value:
(void) ({ unsigned int __mask = 1 << (bit); \
           if (sizeof (*(mem)) == 1) \
             __asm __volatile ("\         .align 2\n\          mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\            0: mov.b @%0,r2\n\            or %1,r2\n\          mov.b r2,@%0\n\           1: mov r1,r15"\
              : : "r" (mem), "r" (__mask) \
              : "r0", "r1", "r2", "memory"); \
           else if (sizeof (*(mem)) == 2) \
             __asm __volatile ("\         .align 2\n\          mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\            0: mov.w @%0,r2\n\            or %1,r2\n\          mov.w r2,@%0\n\           1: mov r1,r15"\
              : : "r" (mem), "r" (__mask) \
              : "r0", "r1", "r2", "memory"); \
           else if (sizeof (*(mem)) == 4) \
             __asm __volatile ("\         .align 2\n\          mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\            0: mov.l @%0,r2\n\            or %1,r2\n\          mov.l r2,@%0\n\           1: mov r1,r15"\
              : : "r" (mem), "r" (__mask) \
              : "r0", "r1", "r2", "memory"); \
	    else \
	      abort (); \
           })

Definition at line 327 of file atomic.h.

#define atomic_bit_test_set (   mem,
  bit 
)
Value:
({ unsigned int __mask = 1 << (bit); \
     unsigned int __result = __mask; \
     if (sizeof (*(mem)) == 1) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        nop\n\        mov r15,r1\n\        mov #-8,r15\n\       0: mov.b @%2,r2\n\   or r2,%1\n\   and r2,%0\n\         mov.b %1,@%2\n\       1: mov r1,r15"\
       : "=&r" (__result), "=&r" (__mask) \
       : "r" (mem), "0" (__result), "1" (__mask) \
       : "r0", "r1", "r2", "memory"); \
     else if (sizeof (*(mem)) == 2) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        nop\n\        mov r15,r1\n\        mov #-8,r15\n\       0: mov.w @%2,r2\n\   or r2,%1\n\   and r2,%0\n\         mov.w %1,@%2\n\       1: mov r1,r15"\
       : "=&r" (__result), "=&r" (__mask) \
       : "r" (mem), "0" (__result), "1" (__mask) \
       : "r0", "r1", "r2", "memory"); \
     else if (sizeof (*(mem)) == 4) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        nop\n\        mov r15,r1\n\        mov #-8,r15\n\       0: mov.l @%2,r2\n\   or r2,%1\n\   and r2,%0\n\         mov.l %1,@%2\n\       1: mov r1,r15"\
       : "=&r" (__result), "=&r" (__mask) \
       : "r" (mem), "0" (__result), "1" (__mask) \
       : "r0", "r1", "r2", "memory"); \
     else \
       abort (); \
     __result; })

Definition at line 369 of file atomic.h.

#define atomic_decrement_and_test (   mem)    atomic_add_zero((mem), -1)

Definition at line 325 of file atomic.h.

#define atomic_exchange_and_add (   mem,
  value 
)
Value:
({ __typeof (*(mem)) __result, __tmp, __value = (value); \
     if (sizeof (*(mem)) == 1) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\       0: mov.b @%2,%0\n\   add %0,%1\n\         mov.b %1,@%2\n\       1: mov r1,r15"\
       : "=&r" (__result), "=&r" (__tmp) : "r" (mem), "1" (__value) \
       : "r0", "r1", "memory"); \
     else if (sizeof (*(mem)) == 2) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\       0: mov.w @%2,%0\n\   add %0,%1\n\         mov.w %1,@%2\n\       1: mov r1,r15"\
       : "=&r" (__result), "=&r" (__tmp) : "r" (mem), "1" (__value) \
       : "r0", "r1", "memory"); \
     else if (sizeof (*(mem)) == 4) \
       __asm __volatile ("\   .align 2\n\   mova 1f,r0\n\        mov r15,r1\n\        mov #-6,r15\n\       0: mov.l @%2,%0\n\   add %0,%1\n\         mov.l %1,@%2\n\       1: mov r1,r15"\
       : "=&r" (__result), "=&r" (__tmp) : "r" (mem), "1" (__value) \
       : "r0", "r1", "memory"); \
     else \
       { \
        __typeof (mem) memp = (mem); \
        do \
          __result = *memp; \
        while (__arch_compare_and_exchange_val_64_acq \
               (memp,       __result + __value, __result) == __result); \
        (void) __value; \
       } \
     __result; })

Definition at line 127 of file atomic.h.

#define atomic_increment_and_test (   mem)    atomic_add_zero((mem), 1)

Definition at line 324 of file atomic.h.


Typedef Documentation

Definition at line 28 of file atomic.h.

Definition at line 33 of file atomic.h.

Definition at line 38 of file atomic.h.

typedef int8_t atomic8_t

Definition at line 23 of file atomic.h.

Definition at line 30 of file atomic.h.

Definition at line 35 of file atomic.h.

Definition at line 40 of file atomic.h.

Definition at line 25 of file atomic.h.

Definition at line 45 of file atomic.h.

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

Definition at line 36 of file atomic.h.

Definition at line 41 of file atomic.h.

Definition at line 26 of file atomic.h.

Definition at line 46 of file atomic.h.

Definition at line 44 of file atomic.h.