]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/libstdc++-v3/contrib/libstdc++-v3-4.4/include/bits/atomicfwd_c.h
update
[l4.git] / l4 / pkg / libstdc++-v3 / contrib / libstdc++-v3-4.4 / include / bits / atomicfwd_c.h
1 // -*- C++ -*- header.
2
3 // Copyright (C) 2008, 2009
4 // Free Software Foundation, Inc.
5 //
6 // This file is part of the GNU ISO C++ Library.  This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 3, or (at your option)
10 // any later version.
11
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16
17 // Under Section 7 of GPL version 3, you are granted additional
18 // permissions described in the GCC Runtime Library Exception, version
19 // 3.1, as published by the Free Software Foundation.
20
21 // You should have received a copy of the GNU General Public License and
22 // a copy of the GCC Runtime Library Exception along with this program;
23 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24 // <http://www.gnu.org/licenses/>.
25
26 /** @file bits/atomicfwd_c.h
27  *  This is an internal header file, included by other library headers.
28  *  You should not attempt to use it directly.
29  */
30
31 // "C" only bits.
32
33 #define _ATOMIC_MEMBER_ ((__a)->_M_i)
34
35   // POD base classes for atomic intgral types.
36   struct __atomic_bool_base
37   {
38     bool _M_i;
39   };
40
41   struct __atomic_char_base
42   {
43     char _M_i;
44   };
45
46   struct __atomic_schar_base
47   {
48     signed char _M_i;
49   };
50
51   struct __atomic_uchar_base
52   {
53     unsigned char _M_i;
54   };
55
56   struct __atomic_short_base
57   {
58     short _M_i;
59   };
60
61   struct __atomic_ushort_base
62   {
63     unsigned short _M_i;
64   };
65
66   struct __atomic_int_base
67   {
68     int _M_i;
69   };
70
71   struct __atomic_uint_base
72   {
73     unsigned int _M_i;
74   };
75
76   struct __atomic_long_base
77   {
78     long _M_i;
79   };
80
81   struct __atomic_ulong_base
82   {
83     unsigned long _M_i;
84   };
85
86   struct __atomic_llong_base
87   {
88     long long _M_i;
89   };
90
91   struct __atomic_ullong_base
92   {
93     unsigned long long  _M_i;
94   };
95
96   struct __atomic_wchar_t_base
97   {
98     wchar_t _M_i;
99   };
100
101   typedef struct __atomic_flag_base             atomic_flag;
102   typedef struct __atomic_address_base          atomic_address;
103   typedef struct __atomic_bool_base             atomic_bool;
104   typedef struct __atomic_char_base             atomic_char;
105   typedef struct __atomic_schar_base            atomic_schar;
106   typedef struct __atomic_uchar_base            atomic_uchar;
107   typedef struct __atomic_short_base            atomic_short;
108   typedef struct __atomic_ushort_base           atomic_ushort;
109   typedef struct __atomic_int_base              atomic_int;
110   typedef struct __atomic_uint_base             atomic_uint;
111   typedef struct __atomic_long_base             atomic_long;
112   typedef struct __atomic_ulong_base            atomic_ulong;
113   typedef struct __atomic_llong_base            atomic_llong;
114   typedef struct __atomic_ullong_base           atomic_ullong;
115   typedef struct __atomic_wchar_t_base          atomic_wchar_t;
116   typedef struct __atomic_short_base            atomic_char16_t;
117   typedef struct __atomic_int_base              atomic_char32_t;
118
119 #define atomic_is_lock_free(__a)                                        \
120   false
121
122 #define atomic_load_explicit(__a, __x)                                  \
123   _ATOMIC_LOAD_(__a, __x)
124
125 #define atomic_load(__a)                                                \
126   atomic_load_explicit(__a, memory_order_seq_cst)
127
128 #define atomic_store_explicit(__a, __m, __x)                            \
129   _ATOMIC_STORE_(__a, __m, __x)
130
131 #define atomic_store(__a, __m)                                          \
132   atomic_store_explicit(__a, __m, memory_order_seq_cst)
133
134 #define atomic_exchange_explicit(__a, __m, __x)                         \
135   _ATOMIC_MODIFY_(__a, =, __m, __x)
136
137 #define atomic_exchange(__a, __m)                                       \
138   atomic_exchange_explicit(__a, __m, memory_order_seq_cst)
139
140 #define atomic_compare_exchange_explicit(__a, __e, __m, __x, __y)       \
141   _ATOMIC_CMPEXCHNG_(__a, __e, __m, __x)
142
143 #define atomic_compare_exchange(__a, __e, __m)                          \
144   _ATOMIC_CMPEXCHNG_(__a, __e, __m, memory_order_seq_cst)
145
146 #define atomic_fetch_add_explicit(__a, __m, __x)                        \
147   _ATOMIC_MODIFY_(__a, +=, __m, __x)
148
149 #define atomic_fetch_add(__a, __m)                                      \
150   atomic_fetch_add_explicit(__a, __m, memory_order_seq_cst)
151
152 #define atomic_fetch_sub_explicit(__a, __m, __x)                        \
153   _ATOMIC_MODIFY_(__a, -=, __m, __x)
154
155 #define atomic_fetch_sub(__a, __m)                                      \
156   atomic_fetch_sub_explicit(__a, __m, memory_order_seq_cst)
157
158 #define atomic_fetch_and_explicit(__a, __m, __x)                        \
159   _ATOMIC_MODIFY_(__a, &=, __m, __x)
160
161 #define atomic_fetch_and(__a, __m)                                      \
162   atomic_fetch_and_explicit(__a, __m, memory_order_seq_cst)
163
164 #define atomic_fetch_or_explicit(__a, __m, __x)                         \
165   _ATOMIC_MODIFY_(__a, |=, __m, __x)
166
167 #define atomic_fetch_or(__a, __m)                                       \
168   atomic_fetch_or_explicit(__a, __m, memory_order_seq_cst)
169
170 #define atomic_fetch_xor_explicit(__a, __m, __x)                        \
171   _ATOMIC_MODIFY_(__a, ^=, __m, __x)
172
173 #define atomic_fetch_xor(__a, __m)                                      \
174   atomic_fetch_xor_explicit(__a, __m, memory_order_seq_cst)