46#ifndef AO_ATOMIC_OPS_H
47# error This file should not be included directly.
51#if !defined(AO_HAVE_test_and_set) && !defined(AO_HAVE_test_and_set_release) \
52 && !defined(AO_HAVE_test_and_set_acquire) \
53 && !defined(AO_HAVE_test_and_set_read) \
54 && !defined(AO_HAVE_test_and_set_full)
57# if defined(AO_HAVE_fetch_compare_and_swap) \
58 && !defined(AO_HAVE_compare_and_swap)
64# define AO_HAVE_compare_and_swap
67# if defined(AO_HAVE_fetch_compare_and_swap_full) \
68 && !defined(AO_HAVE_compare_and_swap_full)
75# define AO_HAVE_compare_and_swap_full
78# if defined(AO_HAVE_fetch_compare_and_swap_acquire) \
79 && !defined(AO_HAVE_compare_and_swap_acquire)
87# define AO_HAVE_compare_and_swap_acquire
90# if defined(AO_HAVE_fetch_compare_and_swap_release) \
91 && !defined(AO_HAVE_compare_and_swap_release)
99# define AO_HAVE_compare_and_swap_release
102# if defined(AO_CHAR_TS_T)
103# define AO_TS_COMPARE_AND_SWAP_FULL(a,o,n) \
104 AO_char_compare_and_swap_full(a,o,n)
105# define AO_TS_COMPARE_AND_SWAP_ACQUIRE(a,o,n) \
106 AO_char_compare_and_swap_acquire(a,o,n)
107# define AO_TS_COMPARE_AND_SWAP_RELEASE(a,o,n) \
108 AO_char_compare_and_swap_release(a,o,n)
109# define AO_TS_COMPARE_AND_SWAP(a,o,n) AO_char_compare_and_swap(a,o,n)
112# if defined(AO_AO_TS_T)
113# define AO_TS_COMPARE_AND_SWAP_FULL(a,o,n) AO_compare_and_swap_full(a,o,n)
114# define AO_TS_COMPARE_AND_SWAP_ACQUIRE(a,o,n) \
115 AO_compare_and_swap_acquire(a,o,n)
116# define AO_TS_COMPARE_AND_SWAP_RELEASE(a,o,n) \
117 AO_compare_and_swap_release(a,o,n)
118# define AO_TS_COMPARE_AND_SWAP(a,o,n) AO_compare_and_swap(a,o,n)
121# if (defined(AO_AO_TS_T) && defined(AO_HAVE_compare_and_swap_full)) \
122 || (defined(AO_CHAR_TS_T) && defined(AO_HAVE_char_compare_and_swap_full))
131# define AO_HAVE_test_and_set_full
134# if (defined(AO_AO_TS_T) && defined(AO_HAVE_compare_and_swap_acquire)) \
135 || (defined(AO_CHAR_TS_T) \
136 && defined(AO_HAVE_char_compare_and_swap_acquire))
145# define AO_HAVE_test_and_set_acquire
148# if (defined(AO_AO_TS_T) && defined(AO_HAVE_compare_and_swap_release)) \
149 || (defined(AO_CHAR_TS_T) \
150 && defined(AO_HAVE_char_compare_and_swap_release))
159# define AO_HAVE_test_and_set_release
162# if (defined(AO_AO_TS_T) && defined(AO_HAVE_compare_and_swap)) \
163 || (defined(AO_CHAR_TS_T) && defined(AO_HAVE_char_compare_and_swap))
172# define AO_HAVE_test_and_set
177#if !defined(AO_HAVE_nop)
182#if defined(AO_HAVE_test_and_set_full) && !defined(AO_HAVE_nop_full)
189# define AO_HAVE_nop_full
192#if defined(AO_HAVE_nop_acquire) && !defined(CPPCHECK)
193# error AO_nop_acquire is useless: do not define.
196#if defined(AO_HAVE_nop_release) && !defined(CPPCHECK)
197# error AO_nop_release is useless: do not define.
200#if defined(AO_HAVE_nop_full) && !defined(AO_HAVE_nop_read)
201# define AO_nop_read() AO_nop_full()
202# define AO_HAVE_nop_read
205#if defined(AO_HAVE_nop_full) && !defined(AO_HAVE_nop_write)
206# define AO_nop_write() AO_nop_full()
207# define AO_HAVE_nop_write
211#if defined(AO_HAVE_test_and_set) && defined(AO_HAVE_nop_full) \
212 && !defined(AO_HAVE_test_and_set_release)
213# define AO_test_and_set_release(addr) (AO_nop_full(), AO_test_and_set(addr))
214# define AO_HAVE_test_and_set_release
217#if defined(AO_HAVE_test_and_set) && defined(AO_HAVE_nop_full) \
218 && !defined(AO_HAVE_test_and_set_acquire)
226# define AO_HAVE_test_and_set_acquire
229#if defined(AO_HAVE_test_and_set_full)
230# if !defined(AO_HAVE_test_and_set_release)
231# define AO_test_and_set_release(addr) AO_test_and_set_full(addr)
232# define AO_HAVE_test_and_set_release
234# if !defined(AO_HAVE_test_and_set_acquire)
235# define AO_test_and_set_acquire(addr) AO_test_and_set_full(addr)
236# define AO_HAVE_test_and_set_acquire
238# if !defined(AO_HAVE_test_and_set_write)
239# define AO_test_and_set_write(addr) AO_test_and_set_full(addr)
240# define AO_HAVE_test_and_set_write
242# if !defined(AO_HAVE_test_and_set_read)
243# define AO_test_and_set_read(addr) AO_test_and_set_full(addr)
244# define AO_HAVE_test_and_set_read
248#if !defined(AO_HAVE_test_and_set) && defined(AO_HAVE_test_and_set_release)
249# define AO_test_and_set(addr) AO_test_and_set_release(addr)
250# define AO_HAVE_test_and_set
252#if !defined(AO_HAVE_test_and_set) && defined(AO_HAVE_test_and_set_acquire)
253# define AO_test_and_set(addr) AO_test_and_set_acquire(addr)
254# define AO_HAVE_test_and_set
256#if !defined(AO_HAVE_test_and_set) && defined(AO_HAVE_test_and_set_write)
257# define AO_test_and_set(addr) AO_test_and_set_write(addr)
258# define AO_HAVE_test_and_set
260#if !defined(AO_HAVE_test_and_set) && defined(AO_HAVE_test_and_set_read)
261# define AO_test_and_set(addr) AO_test_and_set_read(addr)
262# define AO_HAVE_test_and_set
265#if defined(AO_HAVE_test_and_set_acquire) && defined(AO_HAVE_nop_full) \
266 && !defined(AO_HAVE_test_and_set_full)
267# define AO_test_and_set_full(addr) \
268 (AO_nop_full(), AO_test_and_set_acquire(addr))
269# define AO_HAVE_test_and_set_full
272#if !defined(AO_HAVE_test_and_set_release_write) \
273 && defined(AO_HAVE_test_and_set_write)
274# define AO_test_and_set_release_write(addr) AO_test_and_set_write(addr)
275# define AO_HAVE_test_and_set_release_write
277#if !defined(AO_HAVE_test_and_set_release_write) \
278 && defined(AO_HAVE_test_and_set_release)
279# define AO_test_and_set_release_write(addr) AO_test_and_set_release(addr)
280# define AO_HAVE_test_and_set_release_write
282#if !defined(AO_HAVE_test_and_set_acquire_read) \
283 && defined(AO_HAVE_test_and_set_read)
284# define AO_test_and_set_acquire_read(addr) AO_test_and_set_read(addr)
285# define AO_HAVE_test_and_set_acquire_read
287#if !defined(AO_HAVE_test_and_set_acquire_read) \
288 && defined(AO_HAVE_test_and_set_acquire)
289# define AO_test_and_set_acquire_read(addr) AO_test_and_set_acquire(addr)
290# define AO_HAVE_test_and_set_acquire_read
293#ifdef AO_NO_DD_ORDERING
294# if defined(AO_HAVE_test_and_set_acquire_read)
295# define AO_test_and_set_dd_acquire_read(addr) \
296 AO_test_and_set_acquire_read(addr)
297# define AO_HAVE_test_and_set_dd_acquire_read
300# if defined(AO_HAVE_test_and_set)
301# define AO_test_and_set_dd_acquire_read(addr) AO_test_and_set(addr)
302# define AO_HAVE_test_and_set_dd_acquire_read
311#ifdef AO_HAVE_DOUBLE_PTR_STORAGE
312# if defined(AO_HAVE_double_compare_and_swap) \
313 && !defined(AO_HAVE_compare_double_and_swap_double)
327# define AO_HAVE_compare_double_and_swap_double
329# if defined(AO_HAVE_double_compare_and_swap_acquire) \
330 && !defined(AO_HAVE_compare_double_and_swap_double_acquire)
344# define AO_HAVE_compare_double_and_swap_double_acquire
346# if defined(AO_HAVE_double_compare_and_swap_release) \
347 && !defined(AO_HAVE_compare_double_and_swap_double_release)
361# define AO_HAVE_compare_double_and_swap_double_release
363# if defined(AO_HAVE_double_compare_and_swap_full) \
364 && !defined(AO_HAVE_compare_double_and_swap_double_full)
378# define AO_HAVE_compare_double_and_swap_double_full
383#if defined(AO_HAVE_compare_double_and_swap_double) \
384 && defined(AO_HAVE_nop_full) \
385 && !defined(AO_HAVE_compare_double_and_swap_double_acquire)
395# define AO_HAVE_compare_double_and_swap_double_acquire
397#if defined(AO_HAVE_compare_double_and_swap_double) \
398 && defined(AO_HAVE_nop_full) \
399 && !defined(AO_HAVE_compare_double_and_swap_double_release)
400# define AO_compare_double_and_swap_double_release(addr,o1,o2,n1,n2) \
401 (AO_nop_full(), AO_compare_double_and_swap_double(addr,o1,o2,n1,n2))
402# define AO_HAVE_compare_double_and_swap_double_release
404#if defined(AO_HAVE_compare_double_and_swap_double_full)
405# if !defined(AO_HAVE_compare_double_and_swap_double_release)
406# define AO_compare_double_and_swap_double_release(addr,o1,o2,n1,n2) \
407 AO_compare_double_and_swap_double_full(addr,o1,o2,n1,n2)
408# define AO_HAVE_compare_double_and_swap_double_release
410# if !defined(AO_HAVE_compare_double_and_swap_double_acquire)
411# define AO_compare_double_and_swap_double_acquire(addr,o1,o2,n1,n2) \
412 AO_compare_double_and_swap_double_full(addr,o1,o2,n1,n2)
413# define AO_HAVE_compare_double_and_swap_double_acquire
415# if !defined(AO_HAVE_compare_double_and_swap_double_write)
416# define AO_compare_double_and_swap_double_write(addr,o1,o2,n1,n2) \
417 AO_compare_double_and_swap_double_full(addr,o1,o2,n1,n2)
418# define AO_HAVE_compare_double_and_swap_double_write
420# if !defined(AO_HAVE_compare_double_and_swap_double_read)
421# define AO_compare_double_and_swap_double_read(addr,o1,o2,n1,n2) \
422 AO_compare_double_and_swap_double_full(addr,o1,o2,n1,n2)
423# define AO_HAVE_compare_double_and_swap_double_read
427#if !defined(AO_HAVE_compare_double_and_swap_double) \
428 && defined(AO_HAVE_compare_double_and_swap_double_release)
429# define AO_compare_double_and_swap_double(addr,o1,o2,n1,n2) \
430 AO_compare_double_and_swap_double_release(addr,o1,o2,n1,n2)
431# define AO_HAVE_compare_double_and_swap_double
433#if !defined(AO_HAVE_compare_double_and_swap_double) \
434 && defined(AO_HAVE_compare_double_and_swap_double_acquire)
435# define AO_compare_double_and_swap_double(addr,o1,o2,n1,n2) \
436 AO_compare_double_and_swap_double_acquire(addr,o1,o2,n1,n2)
437# define AO_HAVE_compare_double_and_swap_double
439#if !defined(AO_HAVE_compare_double_and_swap_double) \
440 && defined(AO_HAVE_compare_double_and_swap_double_write)
441# define AO_compare_double_and_swap_double(addr,o1,o2,n1,n2) \
442 AO_compare_double_and_swap_double_write(addr,o1,o2,n1,n2)
443# define AO_HAVE_compare_double_and_swap_double
445#if !defined(AO_HAVE_compare_double_and_swap_double) \
446 && defined(AO_HAVE_compare_double_and_swap_double_read)
447# define AO_compare_double_and_swap_double(addr,o1,o2,n1,n2) \
448 AO_compare_double_and_swap_double_read(addr,o1,o2,n1,n2)
449# define AO_HAVE_compare_double_and_swap_double
452#if defined(AO_HAVE_compare_double_and_swap_double_acquire) \
453 && defined(AO_HAVE_nop_full) \
454 && !defined(AO_HAVE_compare_double_and_swap_double_full)
455# define AO_compare_double_and_swap_double_full(addr,o1,o2,n1,n2) \
457 AO_compare_double_and_swap_double_acquire(addr,o1,o2,n1,n2))
458# define AO_HAVE_compare_double_and_swap_double_full
461#if !defined(AO_HAVE_compare_double_and_swap_double_release_write) \
462 && defined(AO_HAVE_compare_double_and_swap_double_write)
463# define AO_compare_double_and_swap_double_release_write(addr,o1,o2,n1,n2) \
464 AO_compare_double_and_swap_double_write(addr,o1,o2,n1,n2)
465# define AO_HAVE_compare_double_and_swap_double_release_write
467#if !defined(AO_HAVE_compare_double_and_swap_double_release_write) \
468 && defined(AO_HAVE_compare_double_and_swap_double_release)
469# define AO_compare_double_and_swap_double_release_write(addr,o1,o2,n1,n2) \
470 AO_compare_double_and_swap_double_release(addr,o1,o2,n1,n2)
471# define AO_HAVE_compare_double_and_swap_double_release_write
473#if !defined(AO_HAVE_compare_double_and_swap_double_acquire_read) \
474 && defined(AO_HAVE_compare_double_and_swap_double_read)
475# define AO_compare_double_and_swap_double_acquire_read(addr,o1,o2,n1,n2) \
476 AO_compare_double_and_swap_double_read(addr,o1,o2,n1,n2)
477# define AO_HAVE_compare_double_and_swap_double_acquire_read
479#if !defined(AO_HAVE_compare_double_and_swap_double_acquire_read) \
480 && defined(AO_HAVE_compare_double_and_swap_double_acquire)
481# define AO_compare_double_and_swap_double_acquire_read(addr,o1,o2,n1,n2) \
482 AO_compare_double_and_swap_double_acquire(addr,o1,o2,n1,n2)
483# define AO_HAVE_compare_double_and_swap_double_acquire_read
486#ifdef AO_NO_DD_ORDERING
487# if defined(AO_HAVE_compare_double_and_swap_double_acquire_read)
488# define AO_compare_double_and_swap_double_dd_acquire_read(addr,o1,o2,n1,n2) \
489 AO_compare_double_and_swap_double_acquire_read(addr,o1,o2,n1,n2)
490# define AO_HAVE_compare_double_and_swap_double_dd_acquire_read
493# if defined(AO_HAVE_compare_double_and_swap_double)
494# define AO_compare_double_and_swap_double_dd_acquire_read(addr,o1,o2,n1,n2) \
495 AO_compare_double_and_swap_double(addr,o1,o2,n1,n2)
496# define AO_HAVE_compare_double_and_swap_double_dd_acquire_read
501#if defined(AO_HAVE_compare_and_swap_double) && defined(AO_HAVE_nop_full) \
502 && !defined(AO_HAVE_compare_and_swap_double_acquire)
504 AO_compare_and_swap_double_acquire(
volatile AO_double_t *addr,
508 int result = AO_compare_and_swap_double(addr, o1, n1, n2);
512# define AO_HAVE_compare_and_swap_double_acquire
514#if defined(AO_HAVE_compare_and_swap_double) \
515 && defined(AO_HAVE_nop_full) \
516 && !defined(AO_HAVE_compare_and_swap_double_release)
517# define AO_compare_and_swap_double_release(addr,o1,n1,n2) \
518 (AO_nop_full(), AO_compare_and_swap_double(addr,o1,n1,n2))
519# define AO_HAVE_compare_and_swap_double_release
521#if defined(AO_HAVE_compare_and_swap_double_full)
522# if !defined(AO_HAVE_compare_and_swap_double_release)
523# define AO_compare_and_swap_double_release(addr,o1,n1,n2) \
524 AO_compare_and_swap_double_full(addr,o1,n1,n2)
525# define AO_HAVE_compare_and_swap_double_release
527# if !defined(AO_HAVE_compare_and_swap_double_acquire)
528# define AO_compare_and_swap_double_acquire(addr,o1,n1,n2) \
529 AO_compare_and_swap_double_full(addr,o1,n1,n2)
530# define AO_HAVE_compare_and_swap_double_acquire
532# if !defined(AO_HAVE_compare_and_swap_double_write)
533# define AO_compare_and_swap_double_write(addr,o1,n1,n2) \
534 AO_compare_and_swap_double_full(addr,o1,n1,n2)
535# define AO_HAVE_compare_and_swap_double_write
537# if !defined(AO_HAVE_compare_and_swap_double_read)
538# define AO_compare_and_swap_double_read(addr,o1,n1,n2) \
539 AO_compare_and_swap_double_full(addr,o1,n1,n2)
540# define AO_HAVE_compare_and_swap_double_read
544#if !defined(AO_HAVE_compare_and_swap_double) \
545 && defined(AO_HAVE_compare_and_swap_double_release)
546# define AO_compare_and_swap_double(addr,o1,n1,n2) \
547 AO_compare_and_swap_double_release(addr,o1,n1,n2)
548# define AO_HAVE_compare_and_swap_double
550#if !defined(AO_HAVE_compare_and_swap_double) \
551 && defined(AO_HAVE_compare_and_swap_double_acquire)
552# define AO_compare_and_swap_double(addr,o1,n1,n2) \
553 AO_compare_and_swap_double_acquire(addr,o1,n1,n2)
554# define AO_HAVE_compare_and_swap_double
556#if !defined(AO_HAVE_compare_and_swap_double) \
557 && defined(AO_HAVE_compare_and_swap_double_write)
558# define AO_compare_and_swap_double(addr,o1,n1,n2) \
559 AO_compare_and_swap_double_write(addr,o1,n1,n2)
560# define AO_HAVE_compare_and_swap_double
562#if !defined(AO_HAVE_compare_and_swap_double) \
563 && defined(AO_HAVE_compare_and_swap_double_read)
564# define AO_compare_and_swap_double(addr,o1,n1,n2) \
565 AO_compare_and_swap_double_read(addr,o1,n1,n2)
566# define AO_HAVE_compare_and_swap_double
569#if defined(AO_HAVE_compare_and_swap_double_acquire) \
570 && defined(AO_HAVE_nop_full) \
571 && !defined(AO_HAVE_compare_and_swap_double_full)
572# define AO_compare_and_swap_double_full(addr,o1,n1,n2) \
573 (AO_nop_full(), AO_compare_and_swap_double_acquire(addr,o1,n1,n2))
574# define AO_HAVE_compare_and_swap_double_full
577#if !defined(AO_HAVE_compare_and_swap_double_release_write) \
578 && defined(AO_HAVE_compare_and_swap_double_write)
579# define AO_compare_and_swap_double_release_write(addr,o1,n1,n2) \
580 AO_compare_and_swap_double_write(addr,o1,n1,n2)
581# define AO_HAVE_compare_and_swap_double_release_write
583#if !defined(AO_HAVE_compare_and_swap_double_release_write) \
584 && defined(AO_HAVE_compare_and_swap_double_release)
585# define AO_compare_and_swap_double_release_write(addr,o1,n1,n2) \
586 AO_compare_and_swap_double_release(addr,o1,n1,n2)
587# define AO_HAVE_compare_and_swap_double_release_write
589#if !defined(AO_HAVE_compare_and_swap_double_acquire_read) \
590 && defined(AO_HAVE_compare_and_swap_double_read)
591# define AO_compare_and_swap_double_acquire_read(addr,o1,n1,n2) \
592 AO_compare_and_swap_double_read(addr,o1,n1,n2)
593# define AO_HAVE_compare_and_swap_double_acquire_read
595#if !defined(AO_HAVE_compare_and_swap_double_acquire_read) \
596 && defined(AO_HAVE_compare_and_swap_double_acquire)
597# define AO_compare_and_swap_double_acquire_read(addr,o1,n1,n2) \
598 AO_compare_and_swap_double_acquire(addr,o1,n1,n2)
599# define AO_HAVE_compare_and_swap_double_acquire_read
602#ifdef AO_NO_DD_ORDERING
603# if defined(AO_HAVE_compare_and_swap_double_acquire_read)
604# define AO_compare_and_swap_double_dd_acquire_read(addr,o1,n1,n2) \
605 AO_compare_and_swap_double_acquire_read(addr,o1,n1,n2)
606# define AO_HAVE_compare_and_swap_double_dd_acquire_read
609# if defined(AO_HAVE_compare_and_swap_double)
610# define AO_compare_and_swap_double_dd_acquire_read(addr,o1,n1,n2) \
611 AO_compare_and_swap_double(addr,o1,n1,n2)
612# define AO_HAVE_compare_and_swap_double_dd_acquire_read
618#if defined(AO_HAVE_compare_double_and_swap_double) \
619 && !defined(AO_HAVE_double_compare_and_swap)
628# define AO_HAVE_double_compare_and_swap
630#if defined(AO_HAVE_compare_double_and_swap_double_release) \
631 && !defined(AO_HAVE_double_compare_and_swap_release)
640# define AO_HAVE_double_compare_and_swap_release
642#if defined(AO_HAVE_compare_double_and_swap_double_acquire) \
643 && !defined(AO_HAVE_double_compare_and_swap_acquire)
652# define AO_HAVE_double_compare_and_swap_acquire
654#if defined(AO_HAVE_compare_double_and_swap_double_read) \
655 && !defined(AO_HAVE_double_compare_and_swap_read)
657 AO_double_compare_and_swap_read(
volatile AO_double_t *addr,
660 return AO_compare_double_and_swap_double_read(addr,
664# define AO_HAVE_double_compare_and_swap_read
666#if defined(AO_HAVE_compare_double_and_swap_double_write) \
667 && !defined(AO_HAVE_double_compare_and_swap_write)
669 AO_double_compare_and_swap_write(
volatile AO_double_t *addr,
672 return AO_compare_double_and_swap_double_write(addr,
676# define AO_HAVE_double_compare_and_swap_write
678#if defined(AO_HAVE_compare_double_and_swap_double_release_write) \
679 && !defined(AO_HAVE_double_compare_and_swap_release_write)
681 AO_double_compare_and_swap_release_write(
volatile AO_double_t *addr,
684 return AO_compare_double_and_swap_double_release_write(addr,
688# define AO_HAVE_double_compare_and_swap_release_write
690#if defined(AO_HAVE_compare_double_and_swap_double_acquire_read) \
691 && !defined(AO_HAVE_double_compare_and_swap_acquire_read)
693 AO_double_compare_and_swap_acquire_read(
volatile AO_double_t *addr,
696 return AO_compare_double_and_swap_double_acquire_read(addr,
700# define AO_HAVE_double_compare_and_swap_acquire_read
702#if defined(AO_HAVE_compare_double_and_swap_double_full) \
703 && !defined(AO_HAVE_double_compare_and_swap_full)
712# define AO_HAVE_double_compare_and_swap_full
715#ifndef AO_HAVE_double_compare_and_swap_dd_acquire_read
718# ifdef AO_NO_DD_ORDERING
719# if defined(AO_HAVE_double_compare_and_swap_acquire_read)
720# define AO_double_compare_and_swap_dd_acquire_read(addr, old, new_val) \
721 AO_double_compare_and_swap_acquire_read(addr, old, new_val)
722# define AO_HAVE_double_compare_and_swap_dd_acquire_read
724# elif defined(AO_HAVE_double_compare_and_swap)
725# define AO_double_compare_and_swap_dd_acquire_read(addr, old, new_val) \
726 AO_double_compare_and_swap(addr, old, new_val)
727# define AO_HAVE_double_compare_and_swap_dd_acquire_read
AO_INLINE int AO_double_compare_and_swap(volatile AO_double_t *addr, AO_double_t old_val, AO_double_t new_val)
AO_INLINE int AO_double_compare_and_swap_release(volatile AO_double_t *addr, AO_double_t old_val, AO_double_t new_val)
AO_INLINE int AO_double_compare_and_swap_acquire(volatile AO_double_t *addr, AO_double_t old_val, AO_double_t new_val)
AO_INLINE int AO_double_compare_and_swap_full(volatile AO_double_t *addr, AO_double_t old_val, AO_double_t new_val)
AO_INLINE int AO_compare_and_swap(volatile AO_t *addr, AO_t old, AO_t new_val)
AO_INLINE void AO_nop_full(void)
AO_INLINE int AO_compare_double_and_swap_double(volatile AO_double_t *addr, AO_t old_val1, AO_t old_val2, AO_t new_val1, AO_t new_val2)
AO_INLINE int AO_compare_double_and_swap_double_acquire(volatile AO_double_t *addr, AO_t old_val1, AO_t old_val2, AO_t new_val1, AO_t new_val2)
AO_INLINE int AO_compare_double_and_swap_double_release(volatile AO_double_t *addr, AO_t old_val1, AO_t old_val2, AO_t new_val1, AO_t new_val2)
#define AO_TS_INITIALIZER
AO_INLINE int AO_compare_and_swap_full(volatile AO_t *addr, AO_t old, AO_t new_val)
AO_INLINE AO_TS_VAL_t AO_test_and_set_full(volatile AO_TS_t *addr)
#define AO_compare_double_and_swap_double_full(addr, old1, old2, newval1, newval2)
#define AO_fetch_compare_and_swap_full(addr, old, newval)
AO_INLINE AO_t AO_fetch_compare_and_swap(volatile AO_t *addr, AO_t old_val, AO_t new_val)
AO_INLINE AO_TS_VAL_t AO_test_and_set(volatile AO_TS_t *addr)
AO_INLINE AO_t AO_fetch_compare_and_swap_release(volatile AO_t *addr, AO_t old, AO_t new_val)
AO_INLINE AO_t AO_fetch_compare_and_swap_acquire(volatile AO_t *addr, AO_t old, AO_t new_val)
AO_INLINE int AO_compare_and_swap_acquire(volatile AO_t *addr, AO_t old, AO_t new_val)
AO_INLINE int AO_compare_and_swap_release(volatile AO_t *addr, AO_t old, AO_t new_val)
AO_INLINE void AO_nop(void)
AO_INLINE AO_TS_VAL_t AO_test_and_set_acquire(volatile AO_TS_t *addr)
AO_INLINE AO_TS_VAL_t AO_test_and_set_release(volatile AO_TS_t *addr)