libmetal
atomic.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7/*
8 * @file atomic.h
9 * @brief Atomic primitives for libmetal.
10 */
11
12#ifndef __METAL_ATOMIC__H__
13#define __METAL_ATOMIC__H__
14
15#include <metal/config.h>
16
17#if defined(__cplusplus)
18# include <cstdint>
19
20/*
21 * <atomic> has the same functionality as <stdatomic.h> but all members are only
22 * accessible in the std namespace. As the rest of libmetal is pure C, it does
23 * not know about namespaces, even when compiled as part of a C++ file. So we
24 * just export the members of <atomic> into the global namespace.
25 */
26# include <atomic>
29
30using std::atomic_bool;
32using std::atomic_schar;
36using std::atomic_int;
42using std::atomic_char16_t;
43using std::atomic_char32_t;
44using std::atomic_wchar_t;
45using std::atomic_int_least8_t;
46using std::atomic_uint_least8_t;
47using std::atomic_int_least16_t;
48using std::atomic_uint_least16_t;
49using std::atomic_int_least32_t;
50using std::atomic_uint_least32_t;
51using std::atomic_int_least64_t;
52using std::atomic_uint_least64_t;
53using std::atomic_int_fast8_t;
54using std::atomic_uint_fast8_t;
55using std::atomic_int_fast16_t;
56using std::atomic_uint_fast16_t;
57using std::atomic_int_fast32_t;
58using std::atomic_uint_fast32_t;
59using std::atomic_int_fast64_t;
60using std::atomic_uint_fast64_t;
61using std::atomic_intptr_t;
63using std::atomic_size_t;
64using std::atomic_ptrdiff_t;
65using std::atomic_intmax_t;
66using std::atomic_uintmax_t;
67
96
97#elif defined(HAVE_STDATOMIC_H) && !defined(__CC_ARM) && \
98 !defined(__STDC_NO_ATOMICS__)
99# include <stdint.h>
100# include <stdatomic.h>
101#elif defined(__GNUC__)
102# include <metal/compiler/gcc/atomic.h>
103#else
104# include <metal/processor/@PROJECT_PROCESSOR@/atomic.h>
105#endif
106
107#endif /* __METAL_ATOMIC__H__ */
#define atomic_fetch_sub_explicit(OBJ, VAL, MO)
Definition: atomic.h:101
#define atomic_fetch_add(OBJ, VAL)
Definition: atomic.h:95
#define atomic_signal_fence(MO)
Definition: atomic.h:117
#define atomic_load(OBJ)
Definition: atomic.h:60
memory_order
Definition: atomic.h:35
unsigned long long atomic_ullong
Definition: atomic.h:30
unsigned char atomic_uchar
Definition: atomic.h:21
int atomic_int
Definition: atomic.h:24
#define atomic_flag_clear_explicit(FLAG, MO)
Definition: atomic.h:50
#define atomic_compare_exchange_weak_explicit(OBJ, EXP, DES, MO)
Definition: atomic.h:93
#define atomic_flag_test_and_set(FLAG)
Definition: atomic.h:44
#define atomic_fetch_and_explicit(OBJ, VAL, MO)
Definition: atomic.h:113
#define atomic_compare_exchange_strong_explicit(OBJ, EXP, DES, MO)
Definition: atomic.h:89
char atomic_char
Definition: atomic.h:20
#define atomic_flag_clear(FLAG)
Definition: atomic.h:48
unsigned int atomic_uint
Definition: atomic.h:25
#define atomic_fetch_or_explicit(OBJ, VAL, MO)
Definition: atomic.h:105
#define atomic_thread_fence(MO)
Definition: atomic.h:115
#define atomic_compare_exchange_strong(OBJ, EXP, DES)
Definition: atomic.h:79
#define atomic_fetch_and(OBJ, VAL)
Definition: atomic.h:111
short atomic_short
Definition: atomic.h:22
unsigned short atomic_ushort
Definition: atomic.h:23
long atomic_long
Definition: atomic.h:27
unsigned long atomic_ulong
Definition: atomic.h:28
int atomic_flag
Definition: atomic.h:19
#define atomic_init(OBJ, VAL)
Definition: atomic.h:52
#define atomic_fetch_xor_explicit(OBJ, VAL, MO)
Definition: atomic.h:109
atomic_uint atomic_uintptr_t
Definition: atomic.h:26
#define atomic_exchange_explicit(OBJ, DES, MO)
Definition: atomic.h:77
#define atomic_load_explicit(OBJ, MO)
Definition: atomic.h:62
#define atomic_fetch_add_explicit(OBJ, VAL, MO)
Definition: atomic.h:97
#define atomic_store(OBJ, VAL)
Definition: atomic.h:56
long long atomic_llong
Definition: atomic.h:29
#define atomic_exchange(OBJ, DES)
Definition: atomic.h:64
#define atomic_fetch_sub(OBJ, VAL)
Definition: atomic.h:99
#define atomic_is_lock_free(OBJ)
Definition: atomic.h:54
#define atomic_flag_test_and_set_explicit(FLAG, MO)
Definition: atomic.h:46
#define atomic_compare_exchange_weak(OBJ, EXP, DES)
Definition: atomic.h:91
#define atomic_fetch_or(OBJ, VAL)
Definition: atomic.h:103
#define atomic_fetch_xor(OBJ, VAL)
Definition: atomic.h:107
#define atomic_store_explicit(OBJ, VAL, MO)
Definition: atomic.h:58