~ubuntu-branches/ubuntu/quantal/libgc/quantal

« back to all changes in this revision

Viewing changes to libatomic_ops-1.2/src/atomic_ops/generalize-small.template

  • Committer: Bazaar Package Importer
  • Author(s): Christoph Egger
  • Date: 2011-02-19 12:19:56 UTC
  • mfrom: (1.3.2 upstream) (0.1.5 experimental)
  • mto: This revision was merged to the branch mainline in revision 14.
  • Revision ID: james.westby@ubuntu.com-20110219121956-67rb69xlt5nud3v2
Tags: 1:7.1-5
Upload to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* XSIZE_load */
 
2
#if defined(AO_HAVE_XSIZE_load_acquire) && !defined(AO_HAVE_XSIZE_load)
 
3
#  define AO_XSIZE_load(addr) AO_XSIZE_load_acquire(addr)
 
4
#  define AO_HAVE_XSIZE_load
 
5
#endif
 
6
 
 
7
#if defined(AO_HAVE_XSIZE_load_full) && !defined(AO_HAVE_XSIZE_load_acquire)
 
8
#  define AO_XSIZE_load_acquire(addr) AO_XSIZE_load_full(addr)
 
9
#  define AO_HAVE_XSIZE_load_acquire
 
10
#endif
 
11
 
 
12
#if defined(AO_HAVE_XSIZE_load_full) && !defined(AO_HAVE_XSIZE_load_read)
 
13
#  define AO_XSIZE_load_read(addr) AO_XSIZE_load_full(addr)
 
14
#  define AO_HAVE_XSIZE_load_read
 
15
#endif
 
16
 
 
17
#if !defined(AO_HAVE_XSIZE_load_acquire_read) && defined(AO_HAVE_XSIZE_load_acquire)
 
18
#  define AO_XSIZE_load_acquire_read(addr) AO_XSIZE_load_acquire(addr)
 
19
#  define AO_HAVE_XSIZE_load_acquire_read
 
20
#endif
 
21
 
 
22
#if defined(AO_HAVE_XSIZE_load) && defined(AO_HAVE_nop_full) && \
 
23
    !defined(AO_HAVE_XSIZE_load_acquire)
 
24
   AO_INLINE unsigned XCTYPE
 
25
   AO_XSIZE_load_acquire(volatile unsigned XCTYPE *addr)
 
26
   {
 
27
     unsigned XCTYPE result = AO_XSIZE_load(addr);
 
28
     /* Acquire barrier would be useless, since the load could be delayed  */
 
29
     /* beyond it.                                                         */
 
30
     AO_nop_full();
 
31
     return result;
 
32
   }
 
33
#  define AO_HAVE_XSIZE_load_acquire
 
34
#endif
 
35
 
 
36
#if defined(AO_HAVE_XSIZE_load) && defined(AO_HAVE_nop_read) && \
 
37
    !defined(AO_HAVE_XSIZE_load_read)
 
38
   AO_INLINE unsigned XCTYPE
 
39
   AO_XSIZE_load_read(volatile unsigned XCTYPE *addr)
 
40
   {
 
41
     unsigned XCTYPE result = AO_XSIZE_load(addr);
 
42
     /* Acquire barrier would be useless, since the load could be delayed  */
 
43
     /* beyond it.                                                         */
 
44
     AO_nop_read();
 
45
     return result;
 
46
   }
 
47
#  define AO_HAVE_XSIZE_load_read
 
48
#endif
 
49
 
 
50
#if defined(AO_HAVE_XSIZE_load_acquire) && defined(AO_HAVE_nop_full) && \
 
51
    !defined(AO_HAVE_XSIZE_load_full)
 
52
#  define AO_XSIZE_load_full(addr) (AO_nop_full(), AO_XSIZE_load_acquire(addr))
 
53
#  define AO_HAVE_XSIZE_load_full
 
54
#endif
 
55
 
 
56
#if !defined(AO_HAVE_XSIZE_load_acquire_read) && defined(AO_HAVE_XSIZE_load_read)
 
57
#  define AO_XSIZE_load_acquire_read(addr) AO_XSIZE_load_read(addr)
 
58
#  define AO_HAVE_XSIZE_load_acquire_read
 
59
#endif
 
60
 
 
61
#if defined(AO_HAVE_XSIZE_load_acquire_read) && !defined(AO_HAVE_XSIZE_load)
 
62
#  define AO_XSIZE_load(addr) AO_XSIZE_load_acquire_read(addr)
 
63
#  define AO_HAVE_XSIZE_load
 
64
#endif
 
65
 
 
66
#ifdef AO_NO_DD_ORDERING
 
67
#  if defined(AO_HAVE_XSIZE_load_acquire_read)
 
68
#    define AO_XSIZE_load_dd_acquire_read(addr) \
 
69
        AO_XSIZE_load_acquire_read(addr)
 
70
#    define AO_HAVE_XSIZE_load_dd_acquire_read
 
71
#  endif
 
72
#else
 
73
#  if defined(AO_HAVE_XSIZE_load)
 
74
#    define AO_XSIZE_load_dd_acquire_read(addr) \
 
75
        AO_XSIZE_load(addr)
 
76
#    define AO_HAVE_XSIZE_load_dd_acquire_read
 
77
#  endif
 
78
#endif
 
79
 
 
80
 
 
81
/* XSIZE_store */
 
82
 
 
83
#if defined(AO_HAVE_XSIZE_store_release) && !defined(AO_HAVE_XSIZE_store)
 
84
#  define AO_XSIZE_store(addr, val) AO_XSIZE_store_release(addr,val)
 
85
#  define AO_HAVE_XSIZE_store
 
86
#endif
 
87
 
 
88
#if defined(AO_HAVE_XSIZE_store_full) && !defined(AO_HAVE_XSIZE_store_release)
 
89
#  define AO_XSIZE_store_release(addr,val) AO_XSIZE_store_full(addr,val)
 
90
#  define AO_HAVE_XSIZE_store_release
 
91
#endif
 
92
 
 
93
#if defined(AO_HAVE_XSIZE_store_full) && !defined(AO_HAVE_XSIZE_store_write)
 
94
#  define AO_XSIZE_store_write(addr,val) AO_XSIZE_store_full(addr,val)
 
95
#  define AO_HAVE_XSIZE_store_write
 
96
#endif
 
97
 
 
98
#if defined(AO_HAVE_XSIZE_store_release) && \
 
99
        !defined(AO_HAVE_XSIZE_store_release_write)
 
100
#  define AO_XSIZE_store_release_write(addr, val) \
 
101
        AO_XSIZE_store_release(addr,val)
 
102
#  define AO_HAVE_XSIZE_store_release_write
 
103
#endif
 
104
 
 
105
#if defined(AO_HAVE_XSIZE_store_write) && !defined(AO_HAVE_XSIZE_store)
 
106
#  define AO_XSIZE_store(addr, val) AO_XSIZE_store_write(addr,val)
 
107
#  define AO_HAVE_XSIZE_store
 
108
#endif
 
109
 
 
110
#if defined(AO_HAVE_XSIZE_store) && defined(AO_HAVE_nop_full) && \
 
111
    !defined(AO_HAVE_XSIZE_store_release)
 
112
#  define AO_XSIZE_store_release(addr,val) \
 
113
        (AO_nop_full(), AO_XSIZE_store(addr,val))
 
114
#  define AO_HAVE_XSIZE_store_release
 
115
#endif
 
116
 
 
117
#if defined(AO_HAVE_nop_write) && defined(AO_HAVE_XSIZE_store) && \
 
118
     !defined(AO_HAVE_XSIZE_store_write)
 
119
#  define AO_XSIZE_store_write(addr, val) \
 
120
        (AO_nop_write(), AO_XSIZE_store(addr,val))
 
121
#  define AO_HAVE_XSIZE_store_write
 
122
#endif
 
123
 
 
124
#if defined(AO_HAVE_XSIZE_store_write) && \
 
125
     !defined(AO_HAVE_XSIZE_store_release_write)
 
126
#  define AO_XSIZE_store_release_write(addr, val) AO_XSIZE_store_write(addr,val)
 
127
#  define AO_HAVE_XSIZE_store_release_write
 
128
#endif
 
129
 
 
130
#if defined(AO_HAVE_XSIZE_store_release) && defined(AO_HAVE_nop_full) && \
 
131
    !defined(AO_HAVE_XSIZE_store_full)
 
132
#  define AO_XSIZE_store_full(addr, val) \
 
133
        (AO_XSIZE_store_release(addr, val), AO_nop_full())
 
134
#  define AO_HAVE_XSIZE_store_full
 
135
#endif
 
136
 
 
137
 
 
138
/* XSIZE_fetch_and_add */
 
139
#if defined(AO_HAVE_XSIZE_compare_and_swap_full) && \
 
140
    !defined(AO_HAVE_XSIZE_fetch_and_add_full)
 
141
   AO_INLINE AO_t
 
142
   AO_XSIZE_fetch_and_add_full(volatile unsigned XCTYPE *addr,
 
143
                               unsigned XCTYPE incr)
 
144
   {
 
145
     unsigned XCTYPE old;
 
146
     do
 
147
       {
 
148
         old = *addr;
 
149
       }
 
150
     while (!AO_XSIZE_compare_and_swap_full(addr, old, old+incr));
 
151
     return old;
 
152
   }
 
153
#  define AO_HAVE_XSIZE_fetch_and_add_full
 
154
#endif
 
155
 
 
156
#if defined(AO_HAVE_XSIZE_compare_and_swap_acquire) && \
 
157
    !defined(AO_HAVE_XSIZE_fetch_and_add_acquire)
 
158
   AO_INLINE AO_t
 
159
   AO_XSIZE_fetch_and_add_acquire(volatile unsigned XCTYPE *addr,
 
160
                                  unsigned XCTYPE incr)
 
161
   {
 
162
     unsigned XCTYPE old;
 
163
     do
 
164
       {
 
165
         old = *addr;
 
166
       }
 
167
     while (!AO_XSIZE_compare_and_swap_acquire(addr, old, old+incr));
 
168
     return old;
 
169
   }
 
170
#  define AO_HAVE_XSIZE_fetch_and_add_acquire
 
171
#endif
 
172
 
 
173
#if defined(AO_HAVE_XSIZE_compare_and_swap_release) && \
 
174
    !defined(AO_HAVE_XSIZE_fetch_and_add_release)
 
175
   AO_INLINE AO_t
 
176
   AO_XSIZE_fetch_and_add_release(volatile unsigned XCTYPE *addr,
 
177
                                  unsigned XCTYPE incr)
 
178
   {
 
179
     unsigned XCTYPE old;
 
180
     do
 
181
       {
 
182
         old = *addr;
 
183
       }
 
184
     while (!AO_XSIZE_compare_and_swap_release(addr, old, old+incr));
 
185
     return old;
 
186
   }
 
187
#  define AO_HAVE_XSIZE_fetch_and_add_release
 
188
#endif
 
189
 
 
190
#if defined(AO_HAVE_XSIZE_fetch_and_add_full)
 
191
#  if !defined(AO_HAVE_XSIZE_fetch_and_add_release)
 
192
#    define AO_XSIZE_fetch_and_add_release(addr, val) \
 
193
         AO_XSIZE_fetch_and_add_full(addr, val)
 
194
#    define AO_HAVE_XSIZE_fetch_and_add_release
 
195
#  endif
 
196
#  if !defined(AO_HAVE_XSIZE_fetch_and_add_acquire)
 
197
#    define AO_XSIZE_fetch_and_add_acquire(addr, val) \
 
198
         AO_XSIZE_fetch_and_add_full(addr, val)
 
199
#    define AO_HAVE_XSIZE_fetch_and_add_acquire
 
200
#  endif
 
201
#  if !defined(AO_HAVE_XSIZE_fetch_and_add_write)
 
202
#    define AO_XSIZE_fetch_and_add_write(addr, val) \
 
203
         AO_XSIZE_fetch_and_add_full(addr, val)
 
204
#    define AO_HAVE_XSIZE_fetch_and_add_write
 
205
#  endif
 
206
#  if !defined(AO_HAVE_XSIZE_fetch_and_add_read)
 
207
#    define AO_XSIZE_fetch_and_add_read(addr, val) \
 
208
         AO_XSIZE_fetch_and_add_full(addr, val)
 
209
#    define AO_HAVE_XSIZE_fetch_and_add_read
 
210
#  endif
 
211
#endif /* AO_HAVE_XSIZE_fetch_and_add_full */
 
212
 
 
213
#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \
 
214
    defined(AO_HAVE_XSIZE_fetch_and_add_release)
 
215
#  define AO_XSIZE_fetch_and_add(addr, val) \
 
216
        AO_XSIZE_fetch_and_add_release(addr, val)
 
217
#  define AO_HAVE_XSIZE_fetch_and_add
 
218
#endif
 
219
#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \
 
220
    defined(AO_HAVE_XSIZE_fetch_and_add_acquire)
 
221
#  define AO_XSIZE_fetch_and_add(addr, val) \
 
222
        AO_XSIZE_fetch_and_add_acquire(addr, val)
 
223
#  define AO_HAVE_XSIZE_fetch_and_add
 
224
#endif
 
225
#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \
 
226
    defined(AO_HAVE_XSIZE_fetch_and_add_write)
 
227
#  define AO_XSIZE_fetch_and_add(addr, val) \
 
228
        AO_XSIZE_fetch_and_add_write(addr, val)
 
229
#  define AO_HAVE_XSIZE_fetch_and_add
 
230
#endif
 
231
#if !defined(AO_HAVE_XSIZE_fetch_and_add) && \
 
232
    defined(AO_HAVE_XSIZE_fetch_and_add_read)
 
233
#  define AO_XSIZE_fetch_and_add(addr, val) \
 
234
        AO_XSIZE_fetch_and_add_read(addr, val)
 
235
#  define AO_HAVE_XSIZE_fetch_and_add
 
236
#endif
 
237
 
 
238
#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire) &&\
 
239
    defined(AO_HAVE_nop_full) && \
 
240
    !defined(AO_HAVE_XSIZE_fetch_and_add_full)
 
241
#  define AO_XSIZE_fetch_and_add_full(addr, val) \
 
242
        (AO_nop_full(), AO_XSIZE_fetch_and_add_acquire(addr, val))
 
243
#endif
 
244
 
 
245
#if !defined(AO_HAVE_XSIZE_fetch_and_add_release_write) && \
 
246
    defined(AO_HAVE_XSIZE_fetch_and_add_write)
 
247
#  define AO_XSIZE_fetch_and_add_release_write(addr, val) \
 
248
        AO_XSIZE_fetch_and_add_write(addr, val)
 
249
#  define AO_HAVE_XSIZE_fetch_and_add_release_write
 
250
#endif
 
251
#if !defined(AO_HAVE_XSIZE_fetch_and_add_release_write) && \
 
252
    defined(AO_HAVE_XSIZE_fetch_and_add_release)
 
253
#  define AO_XSIZE_fetch_and_add_release_write(addr, val) \
 
254
        AO_XSIZE_fetch_and_add_release(addr, val)
 
255
#  define AO_HAVE_XSIZE_fetch_and_add_release_write
 
256
#endif
 
257
#if !defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) && \
 
258
    defined(AO_HAVE_XSIZE_fetch_and_add_read)
 
259
#  define AO_XSIZE_fetch_and_add_acquire_read(addr, val) \
 
260
        AO_XSIZE_fetch_and_add_read(addr, val)
 
261
#  define AO_HAVE_XSIZE_fetch_and_add_acquire_read
 
262
#endif
 
263
#if !defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) && \
 
264
    defined(AO_HAVE_XSIZE_fetch_and_add_acquire)
 
265
#  define AO_XSIZE_fetch_and_add_acquire_read(addr, val) \
 
266
        AO_XSIZE_fetch_and_add_acquire(addr, val)
 
267
#  define AO_HAVE_XSIZE_fetch_and_add_acquire_read
 
268
#endif
 
269
 
 
270
#ifdef AO_NO_DD_ORDERING
 
271
#  if defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read)
 
272
#    define AO_XSIZE_fetch_and_add_dd_acquire_read(addr, val) \
 
273
        AO_XSIZE_fetch_and_add_acquire_read(addr, val)
 
274
#    define AO_HAVE_XSIZE_fetch_and_add_dd_acquire_read
 
275
#  endif
 
276
#else
 
277
#  if defined(AO_HAVE_XSIZE_fetch_and_add)
 
278
#    define AO_XSIZE_fetch_and_add_dd_acquire_read(addr, val) \
 
279
        AO_XSIZE_fetch_and_add(addr, val)
 
280
#    define AO_HAVE_XSIZE_fetch_and_add_dd_acquire_read
 
281
#  endif
 
282
#endif
 
283
  
 
284
/* XSIZE_fetch_and_add1 */
 
285
 
 
286
#if defined(AO_HAVE_XSIZE_fetch_and_add_full) &&\
 
287
    !defined(AO_HAVE_XSIZE_fetch_and_add1_full)
 
288
#  define AO_XSIZE_fetch_and_add1_full(addr) \
 
289
        AO_XSIZE_fetch_and_add_full(addr,1)
 
290
#  define AO_HAVE_XSIZE_fetch_and_add1_full
 
291
#endif
 
292
#if defined(AO_HAVE_XSIZE_fetch_and_add_release) &&\
 
293
    !defined(AO_HAVE_XSIZE_fetch_and_add1_release)
 
294
#  define AO_XSIZE_fetch_and_add1_release(addr) \
 
295
        AO_XSIZE_fetch_and_add_release(addr,1)
 
296
#  define AO_HAVE_XSIZE_fetch_and_add1_release
 
297
#endif
 
298
#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire) &&\
 
299
    !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire)
 
300
#  define AO_XSIZE_fetch_and_add1_acquire(addr) \
 
301
        AO_XSIZE_fetch_and_add_acquire(addr,1)
 
302
#  define AO_HAVE_XSIZE_fetch_and_add1_acquire
 
303
#endif
 
304
#if defined(AO_HAVE_XSIZE_fetch_and_add_write) &&\
 
305
    !defined(AO_HAVE_XSIZE_fetch_and_add1_write)
 
306
#  define AO_XSIZE_fetch_and_add1_write(addr) \
 
307
        AO_XSIZE_fetch_and_add_write(addr,1)
 
308
#  define AO_HAVE_XSIZE_fetch_and_add1_write
 
309
#endif
 
310
#if defined(AO_HAVE_XSIZE_fetch_and_add_read) &&\
 
311
    !defined(AO_HAVE_XSIZE_fetch_and_add1_read)
 
312
#  define AO_XSIZE_fetch_and_add1_read(addr) \
 
313
        AO_XSIZE_fetch_and_add_read(addr,1)
 
314
#  define AO_HAVE_XSIZE_fetch_and_add1_read
 
315
#endif
 
316
#if defined(AO_HAVE_XSIZE_fetch_and_add_release_write) &&\
 
317
    !defined(AO_HAVE_XSIZE_fetch_and_add1_release_write)
 
318
#  define AO_XSIZE_fetch_and_add1_release_write(addr) \
 
319
        AO_XSIZE_fetch_and_add_release_write(addr,1)
 
320
#  define AO_HAVE_XSIZE_fetch_and_add1_release_write
 
321
#endif
 
322
#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) &&\
 
323
    !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read)
 
324
#  define AO_XSIZE_fetch_and_add1_acquire_read(addr) \
 
325
        AO_XSIZE_fetch_and_add_acquire_read(addr,1)
 
326
#  define AO_HAVE_XSIZE_fetch_and_add1_acquire_read
 
327
#endif
 
328
#if defined(AO_HAVE_XSIZE_fetch_and_add) &&\
 
329
    !defined(AO_HAVE_XSIZE_fetch_and_add1)
 
330
#  define AO_XSIZE_fetch_and_add1(addr) \
 
331
        AO_XSIZE_fetch_and_add(addr,1)
 
332
#  define AO_HAVE_XSIZE_fetch_and_add1
 
333
#endif
 
334
 
 
335
#if defined(AO_HAVE_XSIZE_fetch_and_add1_full)
 
336
#  if !defined(AO_HAVE_XSIZE_fetch_and_add1_release)
 
337
#    define AO_XSIZE_fetch_and_add1_release(addr) \
 
338
         AO_XSIZE_fetch_and_add1_full(addr)
 
339
#    define AO_HAVE_XSIZE_fetch_and_add1_release
 
340
#  endif
 
341
#  if !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire)
 
342
#    define AO_XSIZE_fetch_and_add1_acquire(addr) \
 
343
         AO_XSIZE_fetch_and_add1_full(addr)
 
344
#    define AO_HAVE_XSIZE_fetch_and_add1_acquire
 
345
#  endif
 
346
#  if !defined(AO_HAVE_XSIZE_fetch_and_add1_write)
 
347
#    define AO_XSIZE_fetch_and_add1_write(addr) \
 
348
         AO_XSIZE_fetch_and_add1_full(addr)
 
349
#    define AO_HAVE_XSIZE_fetch_and_add1_write
 
350
#  endif
 
351
#  if !defined(AO_HAVE_XSIZE_fetch_and_add1_read)
 
352
#    define AO_XSIZE_fetch_and_add1_read(addr) \
 
353
         AO_XSIZE_fetch_and_add1_full(addr)
 
354
#    define AO_HAVE_XSIZE_fetch_and_add1_read
 
355
#  endif
 
356
#endif /* AO_HAVE_XSIZE_fetch_and_add1_full */
 
357
 
 
358
#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \
 
359
    defined(AO_HAVE_XSIZE_fetch_and_add1_release)
 
360
#  define AO_XSIZE_fetch_and_add1(addr) \
 
361
        AO_XSIZE_fetch_and_add1_release(addr)
 
362
#  define AO_HAVE_XSIZE_fetch_and_add1
 
363
#endif
 
364
#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \
 
365
    defined(AO_HAVE_XSIZE_fetch_and_add1_acquire)
 
366
#  define AO_XSIZE_fetch_and_add1(addr) \
 
367
        AO_XSIZE_fetch_and_add1_acquire(addr)
 
368
#  define AO_HAVE_XSIZE_fetch_and_add1
 
369
#endif
 
370
#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \
 
371
    defined(AO_HAVE_XSIZE_fetch_and_add1_write)
 
372
#  define AO_XSIZE_fetch_and_add1(addr) \
 
373
        AO_XSIZE_fetch_and_add1_write(addr)
 
374
#  define AO_HAVE_XSIZE_fetch_and_add1
 
375
#endif
 
376
#if !defined(AO_HAVE_XSIZE_fetch_and_add1) && \
 
377
    defined(AO_HAVE_XSIZE_fetch_and_add1_read)
 
378
#  define AO_XSIZE_fetch_and_add1(addr) \
 
379
        AO_XSIZE_fetch_and_add1_read(addr)
 
380
#  define AO_HAVE_XSIZE_fetch_and_add1
 
381
#endif
 
382
 
 
383
#if defined(AO_HAVE_XSIZE_fetch_and_add1_acquire) &&\
 
384
    defined(AO_HAVE_nop_full) && \
 
385
    !defined(AO_HAVE_XSIZE_fetch_and_add1_full)
 
386
#  define AO_XSIZE_fetch_and_add1_full(addr) \
 
387
        (AO_nop_full(), AO_XSIZE_fetch_and_add1_acquire(addr))
 
388
#  define AO_HAVE_XSIZE_fetch_and_add1_full
 
389
#endif
 
390
 
 
391
#if !defined(AO_HAVE_XSIZE_fetch_and_add1_release_write) && \
 
392
    defined(AO_HAVE_XSIZE_fetch_and_add1_write)
 
393
#  define AO_XSIZE_fetch_and_add1_release_write(addr) \
 
394
        AO_XSIZE_fetch_and_add1_write(addr)
 
395
#  define AO_HAVE_XSIZE_fetch_and_add1_release_write
 
396
#endif
 
397
#if !defined(AO_HAVE_XSIZE_fetch_and_add1_release_write) && \
 
398
    defined(AO_HAVE_XSIZE_fetch_and_add1_release)
 
399
#  define AO_XSIZE_fetch_and_add1_release_write(addr) \
 
400
        AO_XSIZE_fetch_and_add1_release(addr)
 
401
#  define AO_HAVE_XSIZE_fetch_and_add1_release_write
 
402
#endif
 
403
#if !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read) && \
 
404
    defined(AO_HAVE_XSIZE_fetch_and_add1_read)
 
405
#  define AO_XSIZE_fetch_and_add1_acquire_read(addr) \
 
406
        AO_XSIZE_fetch_and_add1_read(addr)
 
407
#  define AO_HAVE_XSIZE_fetch_and_add1_acquire_read
 
408
#endif
 
409
#if !defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read) && \
 
410
    defined(AO_HAVE_XSIZE_fetch_and_add1_acquire)
 
411
#  define AO_XSIZE_fetch_and_add1_acquire_read(addr) \
 
412
        AO_XSIZE_fetch_and_add1_acquire(addr)
 
413
#  define AO_HAVE_XSIZE_fetch_and_add1_acquire_read
 
414
#endif
 
415
 
 
416
#ifdef AO_NO_DD_ORDERING
 
417
#  if defined(AO_HAVE_XSIZE_fetch_and_add1_acquire_read)
 
418
#    define AO_XSIZE_fetch_and_add1_dd_acquire_read(addr) \
 
419
        AO_XSIZE_fetch_and_add1_acquire_read(addr)
 
420
#    define AO_HAVE_XSIZE_fetch_and_add1_dd_acquire_read
 
421
#  endif
 
422
#else
 
423
#  if defined(AO_HAVE_XSIZE_fetch_and_add1)
 
424
#    define AO_XSIZE_fetch_and_add1_dd_acquire_read(addr) \
 
425
        AO_XSIZE_fetch_and_add1(addr)
 
426
#    define AO_HAVE_XSIZE_fetch_and_add1_dd_acquire_read
 
427
#  endif
 
428
#endif
 
429
 
 
430
/* XSIZE_fetch_and_sub1 */
 
431
 
 
432
#if defined(AO_HAVE_XSIZE_fetch_and_add_full) &&\
 
433
    !defined(AO_HAVE_XSIZE_fetch_and_sub1_full)
 
434
#  define AO_XSIZE_fetch_and_sub1_full(addr) \
 
435
        AO_XSIZE_fetch_and_add_full(addr,(unsigned XCTYPE)(-1))
 
436
#  define AO_HAVE_XSIZE_fetch_and_sub1_full
 
437
#endif
 
438
#if defined(AO_HAVE_XSIZE_fetch_and_add_release) &&\
 
439
    !defined(AO_HAVE_XSIZE_fetch_and_sub1_release)
 
440
#  define AO_XSIZE_fetch_and_sub1_release(addr) \
 
441
        AO_XSIZE_fetch_and_add_release(addr,(unsigned XCTYPE)(-1))
 
442
#  define AO_HAVE_XSIZE_fetch_and_sub1_release
 
443
#endif
 
444
#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire) &&\
 
445
    !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire)
 
446
#  define AO_XSIZE_fetch_and_sub1_acquire(addr) \
 
447
        AO_XSIZE_fetch_and_add_acquire(addr,(unsigned XCTYPE)(-1))
 
448
#  define AO_HAVE_XSIZE_fetch_and_sub1_acquire
 
449
#endif
 
450
#if defined(AO_HAVE_XSIZE_fetch_and_add_write) &&\
 
451
    !defined(AO_HAVE_XSIZE_fetch_and_sub1_write)
 
452
#  define AO_XSIZE_fetch_and_sub1_write(addr) \
 
453
        AO_XSIZE_fetch_and_add_write(addr,(unsigned XCTYPE)(-1))
 
454
#  define AO_HAVE_XSIZE_fetch_and_sub1_write
 
455
#endif
 
456
#if defined(AO_HAVE_XSIZE_fetch_and_add_read) &&\
 
457
    !defined(AO_HAVE_XSIZE_fetch_and_sub1_read)
 
458
#  define AO_XSIZE_fetch_and_sub1_read(addr) \
 
459
        AO_XSIZE_fetch_and_add_read(addr,(unsigned XCTYPE)(-1))
 
460
#  define AO_HAVE_XSIZE_fetch_and_sub1_read
 
461
#endif
 
462
#if defined(AO_HAVE_XSIZE_fetch_and_add_release_write) &&\
 
463
    !defined(AO_HAVE_XSIZE_fetch_and_sub1_release_write)
 
464
#  define AO_XSIZE_fetch_and_sub1_release_write(addr) \
 
465
        AO_XSIZE_fetch_and_add_release_write(addr,(unsigned XCTYPE)(-1))
 
466
#  define AO_HAVE_XSIZE_fetch_and_sub1_release_write
 
467
#endif
 
468
#if defined(AO_HAVE_XSIZE_fetch_and_add_acquire_read) &&\
 
469
    !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read)
 
470
#  define AO_XSIZE_fetch_and_sub1_acquire_read(addr) \
 
471
        AO_XSIZE_fetch_and_add_acquire_read(addr,(unsigned XCTYPE)(-1))
 
472
#  define AO_HAVE_XSIZE_fetch_and_sub1_acquire_read
 
473
#endif
 
474
#if defined(AO_HAVE_XSIZE_fetch_and_add) &&\
 
475
    !defined(AO_HAVE_XSIZE_fetch_and_sub1)
 
476
#  define AO_XSIZE_fetch_and_sub1(addr) \
 
477
        AO_XSIZE_fetch_and_add(addr,(unsigned XCTYPE)(-1))
 
478
#  define AO_HAVE_XSIZE_fetch_and_sub1
 
479
#endif
 
480
 
 
481
#if defined(AO_HAVE_XSIZE_fetch_and_sub1_full)
 
482
#  if !defined(AO_HAVE_XSIZE_fetch_and_sub1_release)
 
483
#    define AO_XSIZE_fetch_and_sub1_release(addr) \
 
484
         AO_XSIZE_fetch_and_sub1_full(addr)
 
485
#    define AO_HAVE_XSIZE_fetch_and_sub1_release
 
486
#  endif
 
487
#  if !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire)
 
488
#    define AO_XSIZE_fetch_and_sub1_acquire(addr) \
 
489
         AO_XSIZE_fetch_and_sub1_full(addr)
 
490
#    define AO_HAVE_XSIZE_fetch_and_sub1_acquire
 
491
#  endif
 
492
#  if !defined(AO_HAVE_XSIZE_fetch_and_sub1_write)
 
493
#    define AO_XSIZE_fetch_and_sub1_write(addr) \
 
494
         AO_XSIZE_fetch_and_sub1_full(addr)
 
495
#    define AO_HAVE_XSIZE_fetch_and_sub1_write
 
496
#  endif
 
497
#  if !defined(AO_HAVE_XSIZE_fetch_and_sub1_read)
 
498
#    define AO_XSIZE_fetch_and_sub1_read(addr) \
 
499
         AO_XSIZE_fetch_and_sub1_full(addr)
 
500
#    define AO_HAVE_XSIZE_fetch_and_sub1_read
 
501
#  endif
 
502
#endif /* AO_HAVE_XSIZE_fetch_and_sub1_full */
 
503
 
 
504
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \
 
505
    defined(AO_HAVE_XSIZE_fetch_and_sub1_release)
 
506
#  define AO_XSIZE_fetch_and_sub1(addr) \
 
507
        AO_XSIZE_fetch_and_sub1_release(addr)
 
508
#  define AO_HAVE_XSIZE_fetch_and_sub1
 
509
#endif
 
510
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \
 
511
    defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire)
 
512
#  define AO_XSIZE_fetch_and_sub1(addr) \
 
513
        AO_XSIZE_fetch_and_sub1_acquire(addr)
 
514
#  define AO_HAVE_XSIZE_fetch_and_sub1
 
515
#endif
 
516
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \
 
517
    defined(AO_HAVE_XSIZE_fetch_and_sub1_write)
 
518
#  define AO_XSIZE_fetch_and_sub1(addr) \
 
519
        AO_XSIZE_fetch_and_sub1_write(addr)
 
520
#  define AO_HAVE_XSIZE_fetch_and_sub1
 
521
#endif
 
522
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1) && \
 
523
    defined(AO_HAVE_XSIZE_fetch_and_sub1_read)
 
524
#  define AO_XSIZE_fetch_and_sub1(addr) \
 
525
        AO_XSIZE_fetch_and_sub1_read(addr)
 
526
#  define AO_HAVE_XSIZE_fetch_and_sub1
 
527
#endif
 
528
 
 
529
#if defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire) &&\
 
530
    defined(AO_HAVE_nop_full) && \
 
531
    !defined(AO_HAVE_XSIZE_fetch_and_sub1_full)
 
532
#  define AO_XSIZE_fetch_and_sub1_full(addr) \
 
533
        (AO_nop_full(), AO_XSIZE_fetch_and_sub1_acquire(addr))
 
534
#  define AO_HAVE_XSIZE_fetch_and_sub1_full
 
535
#endif
 
536
 
 
537
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_release_write) && \
 
538
    defined(AO_HAVE_XSIZE_fetch_and_sub1_write)
 
539
#  define AO_XSIZE_fetch_and_sub1_release_write(addr) \
 
540
        AO_XSIZE_fetch_and_sub1_write(addr)
 
541
#  define AO_HAVE_XSIZE_fetch_and_sub1_release_write
 
542
#endif
 
543
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_release_write) && \
 
544
    defined(AO_HAVE_XSIZE_fetch_and_sub1_release)
 
545
#  define AO_XSIZE_fetch_and_sub1_release_write(addr) \
 
546
        AO_XSIZE_fetch_and_sub1_release(addr)
 
547
#  define AO_HAVE_XSIZE_fetch_and_sub1_release_write
 
548
#endif
 
549
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read) && \
 
550
    defined(AO_HAVE_XSIZE_fetch_and_sub1_read)
 
551
#  define AO_XSIZE_fetch_and_sub1_acquire_read(addr) \
 
552
        AO_XSIZE_fetch_and_sub1_read(addr)
 
553
#  define AO_HAVE_XSIZE_fetch_and_sub1_acquire_read
 
554
#endif
 
555
#if !defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read) && \
 
556
    defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire)
 
557
#  define AO_XSIZE_fetch_and_sub1_acquire_read(addr) \
 
558
        AO_XSIZE_fetch_and_sub1_acquire(addr)
 
559
#  define AO_HAVE_XSIZE_fetch_and_sub1_acquire_read
 
560
#endif
 
561
 
 
562
#ifdef AO_NO_DD_ORDERING
 
563
#  if defined(AO_HAVE_XSIZE_fetch_and_sub1_acquire_read)
 
564
#    define AO_XSIZE_fetch_and_sub1_dd_acquire_read(addr) \
 
565
        AO_XSIZE_fetch_and_sub1_acquire_read(addr)
 
566
#    define AO_HAVE_XSIZE_fetch_and_sub1_dd_acquire_read
 
567
#  endif
 
568
#else
 
569
#  if defined(AO_HAVE_XSIZE_fetch_and_sub1)
 
570
#    define AO_XSIZE_fetch_and_sub1_dd_acquire_read(addr) \
 
571
        AO_XSIZE_fetch_and_sub1(addr)
 
572
#    define AO_HAVE_XSIZE_fetch_and_sub1_dd_acquire_read
 
573
#  endif
 
574
#endif
 
575