• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/arm-linux/include/c++/4.5.3/bits/
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)
175