PatchworkOS
Loading...
Searching...
No Matches
stdatomic.h File Reference
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

Go to the source code of this file.

Macros

#define __GNUC_PREREQ(maj, min)   0
 
#define __GNUC_PREREQ__(ma, mi)   __GNUC_PREREQ(ma, mi)
 
#define __has_feature(x)   0
 
#define _Atomic(T)
 
#define ATOMIC_VAR_INIT(value)   {.__val = (value)}
 
#define atomic_init(obj, value)
 
#define __ATOMIC_RELAXED   0
 
#define __ATOMIC_CONSUME   1
 
#define __ATOMIC_ACQUIRE   2
 
#define __ATOMIC_RELEASE   3
 
#define __ATOMIC_ACQ_REL   4
 
#define __ATOMIC_SEQ_CST   5
 
#define atomic_thread_fence(order)   __sync_synchronize()
 
#define atomic_signal_fence(order)   __asm volatile("" : : : "memory")
 
#define atomic_is_lock_free(obj)   (sizeof((obj)->__val) <= sizeof(void*))
 
#define atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure)
 
#define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure)    atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure)
 
#define atomic_exchange_explicit(object, desired, order)
 
#define atomic_fetch_add_explicit(object, operand, order)   __sync_fetch_and_add(&(object)->__val, operand)
 
#define atomic_fetch_and_explicit(object, operand, order)   __sync_fetch_and_and(&(object)->__val, operand)
 
#define atomic_fetch_or_explicit(object, operand, order)   __sync_fetch_and_or(&(object)->__val, operand)
 
#define atomic_fetch_sub_explicit(object, operand, order)   __sync_fetch_and_sub(&(object)->__val, operand)
 
#define atomic_fetch_xor_explicit(object, operand, order)   __sync_fetch_and_xor(&(object)->__val, operand)
 
#define atomic_load_explicit(object, order)   __sync_fetch_and_add(&(object)->__val, 0)
 
#define atomic_store_explicit(object, desired, order)
 
#define atomic_compare_exchange_strong(object, expected, desired)    atomic_compare_exchange_strong_explicit(object, expected, desired, memory_order_seq_cst, memory_order_seq_cst)
 
#define atomic_compare_exchange_weak(object, expected, desired)    atomic_compare_exchange_weak_explicit(object, expected, desired, memory_order_seq_cst, memory_order_seq_cst)
 
#define atomic_exchange(object, desired)   atomic_exchange_explicit(object, desired, memory_order_seq_cst)
 
#define atomic_fetch_add(object, operand)   atomic_fetch_add_explicit(object, operand, memory_order_seq_cst)
 
#define atomic_fetch_and(object, operand)   atomic_fetch_and_explicit(object, operand, memory_order_seq_cst)
 
#define atomic_fetch_or(object, operand)   atomic_fetch_or_explicit(object, operand, memory_order_seq_cst)
 
#define atomic_fetch_sub(object, operand)   atomic_fetch_sub_explicit(object, operand, memory_order_seq_cst)
 
#define atomic_fetch_xor(object, operand)   atomic_fetch_xor_explicit(object, operand, memory_order_seq_cst)
 
#define atomic_load(object)   atomic_load_explicit(object, memory_order_seq_cst)
 
#define atomic_store(object, desired)   atomic_store_explicit(object, desired, memory_order_seq_cst)
 
#define ATOMIC_FLAG_INIT   ATOMIC_VAR_INIT(0)
 
#define atomic_flag_clear_explicit(object, order)   atomic_store_explicit(object, 0, order)
 
#define atomic_flag_test_and_set_explicit(object, order)    atomic_compare_exchange_strong_explicit(object, 0, 1, order, order)
 
#define atomic_flag_clear(object)   atomic_flag_clear_explicit(object, memory_order_seq_cst)
 
#define atomic_flag_test_and_set(object)   atomic_flag_test_and_set_explicit(object, memory_order_seq_cst)
 

Typedefs

typedef atomic_bool atomic_flag
 

Enumerations

enum  memory_order {
  memory_order_relaxed = __ATOMIC_RELAXED ,
  memory_order_consume = __ATOMIC_CONSUME ,
  memory_order_acquire = __ATOMIC_ACQUIRE ,
  memory_order_release = __ATOMIC_RELEASE ,
  memory_order_acq_rel = __ATOMIC_ACQ_REL ,
  memory_order_seq_cst = __ATOMIC_SEQ_CST
}
 

Functions

typedef _Atomic (_Bool) atomic_bool
 
typedef _Atomic (char) atomic_char
 
typedef _Atomic (signed char) atomic_schar
 
typedef _Atomic (unsigned char) atomic_uchar
 
typedef _Atomic (short) atomic_short
 
typedef _Atomic (unsigned short) atomic_ushort
 
typedef _Atomic (int) atomic_int
 
typedef _Atomic (unsigned int) atomic_uint
 
typedef _Atomic (long) atomic_long
 
typedef _Atomic (unsigned long) atomic_ulong
 
typedef _Atomic (long long) atomic_llong
 
typedef _Atomic (unsigned long long) atomic_ullong
 
typedef _Atomic (wchar_t) atomic_wchar_t
 
typedef _Atomic (int_least8_t) atomic_int_least8_t
 
typedef _Atomic (uint_least8_t) atomic_uint_least8_t
 
typedef _Atomic (int_least16_t) atomic_int_least16_t
 
typedef _Atomic (uint_least16_t) atomic_uint_least16_t
 
typedef _Atomic (int_least32_t) atomic_int_least32_t
 
typedef _Atomic (uint_least32_t) atomic_uint_least32_t
 
typedef _Atomic (int_least64_t) atomic_int_least64_t
 
typedef _Atomic (uint_least64_t) atomic_uint_least64_t
 
typedef _Atomic (int_fast8_t) atomic_int_fast8_t
 
typedef _Atomic (uint_fast8_t) atomic_uint_fast8_t
 
typedef _Atomic (int_fast16_t) atomic_int_fast16_t
 
typedef _Atomic (uint_fast16_t) atomic_uint_fast16_t
 
typedef _Atomic (int_fast32_t) atomic_int_fast32_t
 
typedef _Atomic (uint_fast32_t) atomic_uint_fast32_t
 
typedef _Atomic (int_fast64_t) atomic_int_fast64_t
 
typedef _Atomic (uint_fast64_t) atomic_uint_fast64_t
 
typedef _Atomic (intptr_t) atomic_intptr_t
 
typedef _Atomic (uintptr_t) atomic_uintptr_t
 
typedef _Atomic (size_t) atomic_size_t
 
typedef _Atomic (ptrdiff_t) atomic_ptrdiff_t
 
typedef _Atomic (intmax_t) atomic_intmax_t
 
typedef _Atomic (uintmax_t) atomic_uintmax_t
 
typedef _Atomic (uint64_t) atomic_uint64_t
 
typedef _Atomic (uint32_t) atomic_uint32_t
 
typedef _Atomic (uint16_t) atomic_uint16_t
 
typedef _Atomic (uint8_t) atomic_uint8_t
 
typedef _Atomic (int64_t) atomic_int64_t
 
typedef _Atomic (int32_t) atomic_int32_t
 
typedef _Atomic (int16_t) atomic_int16_t
 
typedef _Atomic (int8_t) atomic_int8_t
 

Macro Definition Documentation

◆ __ATOMIC_ACQ_REL

#define __ATOMIC_ACQ_REL   4

Definition at line 101 of file stdatomic.h.

◆ __ATOMIC_ACQUIRE

#define __ATOMIC_ACQUIRE   2

Definition at line 95 of file stdatomic.h.

◆ __ATOMIC_CONSUME

#define __ATOMIC_CONSUME   1

Definition at line 92 of file stdatomic.h.

◆ __ATOMIC_RELAXED

#define __ATOMIC_RELAXED   0

Definition at line 89 of file stdatomic.h.

◆ __ATOMIC_RELEASE

#define __ATOMIC_RELEASE   3

Definition at line 98 of file stdatomic.h.

◆ __ATOMIC_SEQ_CST

#define __ATOMIC_SEQ_CST   5

Definition at line 104 of file stdatomic.h.

◆ __GNUC_PREREQ

#define __GNUC_PREREQ (   maj,
  min 
)    0

Definition at line 41 of file stdatomic.h.

◆ __GNUC_PREREQ__

#define __GNUC_PREREQ__ (   ma,
  mi 
)    __GNUC_PREREQ(ma, mi)

Definition at line 44 of file stdatomic.h.

◆ __has_feature

#define __has_feature (   x)    0

Definition at line 47 of file stdatomic.h.

◆ _Atomic

#define _Atomic (   T)
Value:
struct \
{ \
volatile T __val; \
}
#define T
Definition qsort.c:27

Definition at line 59 of file stdatomic.h.

◆ atomic_compare_exchange_strong

#define atomic_compare_exchange_strong (   object,
  expected,
  desired 
)     atomic_compare_exchange_strong_explicit(object, expected, desired, memory_order_seq_cst, memory_order_seq_cst)

Definition at line 278 of file stdatomic.h.

◆ atomic_compare_exchange_strong_explicit

#define atomic_compare_exchange_strong_explicit (   object,
  expected,
  desired,
  success,
  failure 
)
Value:
({ \
__typeof__((object)->__val) __v; \
_Bool __r; \
__v = __sync_val_compare_and_swap(&(object)->__val, *(expected), desired); \
__r = *(expected) == __v; \
*(expected) = __v; \
__r; \
})

Definition at line 230 of file stdatomic.h.

◆ atomic_compare_exchange_weak

#define atomic_compare_exchange_weak (   object,
  expected,
  desired 
)     atomic_compare_exchange_weak_explicit(object, expected, desired, memory_order_seq_cst, memory_order_seq_cst)

Definition at line 280 of file stdatomic.h.

◆ atomic_compare_exchange_weak_explicit

#define atomic_compare_exchange_weak_explicit (   object,
  expected,
  desired,
  success,
  failure 
)     atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure)

Definition at line 240 of file stdatomic.h.

◆ atomic_exchange

#define atomic_exchange (   object,
  desired 
)    atomic_exchange_explicit(object, desired, memory_order_seq_cst)

Definition at line 282 of file stdatomic.h.

◆ atomic_exchange_explicit

#define atomic_exchange_explicit (   object,
  desired,
  order 
)
Value:
({ \
__typeof__((object)->__val) __v; \
__v = __sync_lock_test_and_set(&(object)->__val, desired); \
__sync_synchronize(); \
__v; \
})

Definition at line 251 of file stdatomic.h.

◆ atomic_fetch_add

#define atomic_fetch_add (   object,
  operand 
)    atomic_fetch_add_explicit(object, operand, memory_order_seq_cst)

Definition at line 283 of file stdatomic.h.

◆ atomic_fetch_add_explicit

#define atomic_fetch_add_explicit (   object,
  operand,
  order 
)    __sync_fetch_and_add(&(object)->__val, operand)

Definition at line 259 of file stdatomic.h.

◆ atomic_fetch_and

#define atomic_fetch_and (   object,
  operand 
)    atomic_fetch_and_explicit(object, operand, memory_order_seq_cst)

Definition at line 284 of file stdatomic.h.

◆ atomic_fetch_and_explicit

#define atomic_fetch_and_explicit (   object,
  operand,
  order 
)    __sync_fetch_and_and(&(object)->__val, operand)

Definition at line 260 of file stdatomic.h.

◆ atomic_fetch_or

#define atomic_fetch_or (   object,
  operand 
)    atomic_fetch_or_explicit(object, operand, memory_order_seq_cst)

Definition at line 285 of file stdatomic.h.

◆ atomic_fetch_or_explicit

#define atomic_fetch_or_explicit (   object,
  operand,
  order 
)    __sync_fetch_and_or(&(object)->__val, operand)

Definition at line 261 of file stdatomic.h.

◆ atomic_fetch_sub

#define atomic_fetch_sub (   object,
  operand 
)    atomic_fetch_sub_explicit(object, operand, memory_order_seq_cst)

Definition at line 286 of file stdatomic.h.

◆ atomic_fetch_sub_explicit

#define atomic_fetch_sub_explicit (   object,
  operand,
  order 
)    __sync_fetch_and_sub(&(object)->__val, operand)

Definition at line 262 of file stdatomic.h.

◆ atomic_fetch_xor

#define atomic_fetch_xor (   object,
  operand 
)    atomic_fetch_xor_explicit(object, operand, memory_order_seq_cst)

Definition at line 287 of file stdatomic.h.

◆ atomic_fetch_xor_explicit

#define atomic_fetch_xor_explicit (   object,
  operand,
  order 
)    __sync_fetch_and_xor(&(object)->__val, operand)

Definition at line 263 of file stdatomic.h.

◆ atomic_flag_clear

#define atomic_flag_clear (   object)    atomic_flag_clear_explicit(object, memory_order_seq_cst)

Definition at line 303 of file stdatomic.h.

◆ atomic_flag_clear_explicit

#define atomic_flag_clear_explicit (   object,
  order 
)    atomic_store_explicit(object, 0, order)

Definition at line 299 of file stdatomic.h.

◆ ATOMIC_FLAG_INIT

#define ATOMIC_FLAG_INIT   ATOMIC_VAR_INIT(0)

Definition at line 297 of file stdatomic.h.

◆ atomic_flag_test_and_set

#define atomic_flag_test_and_set (   object)    atomic_flag_test_and_set_explicit(object, memory_order_seq_cst)

Definition at line 304 of file stdatomic.h.

◆ atomic_flag_test_and_set_explicit

#define atomic_flag_test_and_set_explicit (   object,
  order 
)     atomic_compare_exchange_strong_explicit(object, 0, 1, order, order)

Definition at line 300 of file stdatomic.h.

◆ atomic_init

#define atomic_init (   obj,
  value 
)
Value:
do \
{ \
(obj)->__val = (value); \
} while (0)

Definition at line 75 of file stdatomic.h.

◆ atomic_is_lock_free

#define atomic_is_lock_free (   obj)    (sizeof((obj)->__val) <= sizeof(void*))

Definition at line 148 of file stdatomic.h.

◆ atomic_load

#define atomic_load (   object)    atomic_load_explicit(object, memory_order_seq_cst)

Definition at line 288 of file stdatomic.h.

◆ atomic_load_explicit

#define atomic_load_explicit (   object,
  order 
)    __sync_fetch_and_add(&(object)->__val, 0)

Definition at line 264 of file stdatomic.h.

◆ atomic_signal_fence

#define atomic_signal_fence (   order)    __asm volatile("" : : : "memory")

Definition at line 136 of file stdatomic.h.

◆ atomic_store

#define atomic_store (   object,
  desired 
)    atomic_store_explicit(object, desired, memory_order_seq_cst)

Definition at line 289 of file stdatomic.h.

◆ atomic_store_explicit

#define atomic_store_explicit (   object,
  desired,
  order 
)
Value:
do \
{ \
__sync_synchronize(); \
(object)->__val = (desired); \
__sync_synchronize(); \
} while (0)

Definition at line 265 of file stdatomic.h.

◆ atomic_thread_fence

#define atomic_thread_fence (   order)    __sync_synchronize()

Definition at line 135 of file stdatomic.h.

◆ ATOMIC_VAR_INIT

#define ATOMIC_VAR_INIT (   value)    {.__val = (value)}

Definition at line 74 of file stdatomic.h.

Typedef Documentation

◆ atomic_flag

typedef atomic_bool atomic_flag

Definition at line 295 of file stdatomic.h.

Enumeration Type Documentation

◆ memory_order

Enumerator
memory_order_relaxed 
memory_order_consume 
memory_order_acquire 
memory_order_release 
memory_order_acq_rel 
memory_order_seq_cst 

Definition at line 114 of file stdatomic.h.

Function Documentation

◆ _Atomic() [1/43]

typedef _Atomic ( _Bool  )

◆ _Atomic() [2/43]

typedef _Atomic ( char  )

◆ _Atomic() [3/43]

typedef _Atomic ( int  )

◆ _Atomic() [4/43]

typedef _Atomic ( int16_t  )

◆ _Atomic() [5/43]

typedef _Atomic ( int32_t  )

◆ _Atomic() [6/43]

typedef _Atomic ( int64_t  )

◆ _Atomic() [7/43]

typedef _Atomic ( int8_t  )

◆ _Atomic() [8/43]

typedef _Atomic ( int_fast16_t  )

◆ _Atomic() [9/43]

typedef _Atomic ( int_fast32_t  )

◆ _Atomic() [10/43]

typedef _Atomic ( int_fast64_t  )

◆ _Atomic() [11/43]

typedef _Atomic ( int_fast8_t  )

◆ _Atomic() [12/43]

typedef _Atomic ( int_least16_t  )

◆ _Atomic() [13/43]

typedef _Atomic ( int_least32_t  )

◆ _Atomic() [14/43]

typedef _Atomic ( int_least64_t  )

◆ _Atomic() [15/43]

typedef _Atomic ( int_least8_t  )

◆ _Atomic() [16/43]

typedef _Atomic ( intmax_t  )

◆ _Atomic() [17/43]

typedef _Atomic ( intptr_t  )

◆ _Atomic() [18/43]

typedef _Atomic ( long long  )

◆ _Atomic() [19/43]

typedef _Atomic ( long  )

◆ _Atomic() [20/43]

typedef _Atomic ( ptrdiff_t  )

◆ _Atomic() [21/43]

typedef _Atomic ( short  )

◆ _Atomic() [22/43]

typedef _Atomic ( signed char  )

◆ _Atomic() [23/43]

typedef _Atomic ( size_t  )

◆ _Atomic() [24/43]

typedef _Atomic ( uint16_t  )

◆ _Atomic() [25/43]

typedef _Atomic ( uint32_t  )

◆ _Atomic() [26/43]

typedef _Atomic ( uint64_t  )

◆ _Atomic() [27/43]

typedef _Atomic ( uint8_t  )

◆ _Atomic() [28/43]

typedef _Atomic ( uint_fast16_t  )

◆ _Atomic() [29/43]

typedef _Atomic ( uint_fast32_t  )

◆ _Atomic() [30/43]

typedef _Atomic ( uint_fast64_t  )

◆ _Atomic() [31/43]

typedef _Atomic ( uint_fast8_t  )

◆ _Atomic() [32/43]

typedef _Atomic ( uint_least16_t  )

◆ _Atomic() [33/43]

typedef _Atomic ( uint_least32_t  )

◆ _Atomic() [34/43]

typedef _Atomic ( uint_least64_t  )

◆ _Atomic() [35/43]

typedef _Atomic ( uint_least8_t  )

◆ _Atomic() [36/43]

typedef _Atomic ( uintmax_t  )

◆ _Atomic() [37/43]

typedef _Atomic ( uintptr_t  )

◆ _Atomic() [38/43]

typedef _Atomic ( unsigned char  )

◆ _Atomic() [39/43]

typedef _Atomic ( unsigned int  )

◆ _Atomic() [40/43]

typedef _Atomic ( unsigned long long  )

◆ _Atomic() [41/43]

typedef _Atomic ( unsigned long  )

◆ _Atomic() [42/43]

typedef _Atomic ( unsigned short  )

◆ _Atomic() [43/43]

typedef _Atomic ( wchar_t  )