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
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
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
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
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)
27 unsigned XCTYPE result = AO_XSIZE_load(addr);
28 /* Acquire barrier would be useless, since the load could be delayed */
33 # define AO_HAVE_XSIZE_load_acquire
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)
41 unsigned XCTYPE result = AO_XSIZE_load(addr);
42 /* Acquire barrier would be useless, since the load could be delayed */
47 # define AO_HAVE_XSIZE_load_read
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
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
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
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
73 # if defined(AO_HAVE_XSIZE_load)
74 # define AO_XSIZE_load_dd_acquire_read(addr) \
76 # define AO_HAVE_XSIZE_load_dd_acquire_read
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
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
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
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
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
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
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
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
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
138 /* XSIZE_fetch_and_add */
139 #if defined(AO_HAVE_XSIZE_compare_and_swap_full) && \
140 !defined(AO_HAVE_XSIZE_fetch_and_add_full)
142 AO_XSIZE_fetch_and_add_full(volatile unsigned XCTYPE *addr,
143 unsigned XCTYPE incr)
150 while (!AO_XSIZE_compare_and_swap_full(addr, old, old+incr));
153 # define AO_HAVE_XSIZE_fetch_and_add_full
156 #if defined(AO_HAVE_XSIZE_compare_and_swap_acquire) && \
157 !defined(AO_HAVE_XSIZE_fetch_and_add_acquire)
159 AO_XSIZE_fetch_and_add_acquire(volatile unsigned XCTYPE *addr,
160 unsigned XCTYPE incr)
167 while (!AO_XSIZE_compare_and_swap_acquire(addr, old, old+incr));
170 # define AO_HAVE_XSIZE_fetch_and_add_acquire
173 #if defined(AO_HAVE_XSIZE_compare_and_swap_release) && \
174 !defined(AO_HAVE_XSIZE_fetch_and_add_release)
176 AO_XSIZE_fetch_and_add_release(volatile unsigned XCTYPE *addr,
177 unsigned XCTYPE incr)
184 while (!AO_XSIZE_compare_and_swap_release(addr, old, old+incr));
187 # define AO_HAVE_XSIZE_fetch_and_add_release
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
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
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
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
211 #endif /* AO_HAVE_XSIZE_fetch_and_add_full */
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
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
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
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
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))
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
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
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
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
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
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
284 /* XSIZE_fetch_and_add1 */
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
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
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
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
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
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
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
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
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
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
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
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
356 #endif /* AO_HAVE_XSIZE_fetch_and_add1_full */
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
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
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
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
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
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
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
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
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
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
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
430 /* XSIZE_fetch_and_sub1 */
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
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
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
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
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
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
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
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
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
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
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
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
502 #endif /* AO_HAVE_XSIZE_fetch_and_sub1_full */
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
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
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
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
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
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
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
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
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
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
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