24#if defined(AO_HAVE_char_fetch_compare_and_swap) \
25 && defined(AO_HAVE_nop_full) \
26 && !defined(AO_HAVE_char_fetch_compare_and_swap_acquire)
29 unsignedchar old_val,
unsignedchar new_val)
31 unsignedchar result = AO_char_fetch_compare_and_swap(addr, old_val, new_val);
35# define AO_HAVE_char_fetch_compare_and_swap_acquire
37#if defined(AO_HAVE_char_fetch_compare_and_swap) \
38 && defined(AO_HAVE_nop_full) \
39 && !defined(AO_HAVE_char_fetch_compare_and_swap_release)
40# define AO_char_fetch_compare_and_swap_release(addr, old_val, new_val) \
42 AO_char_fetch_compare_and_swap(addr, old_val, new_val))
43# define AO_HAVE_char_fetch_compare_and_swap_release
45#if defined(AO_HAVE_char_fetch_compare_and_swap_full)
46# if !defined(AO_HAVE_char_fetch_compare_and_swap_release)
47# define AO_char_fetch_compare_and_swap_release(addr, old_val, new_val) \
48 AO_char_fetch_compare_and_swap_full(addr, old_val, new_val)
49# define AO_HAVE_char_fetch_compare_and_swap_release
51# if !defined(AO_HAVE_char_fetch_compare_and_swap_acquire)
52# define AO_char_fetch_compare_and_swap_acquire(addr, old_val, new_val) \
53 AO_char_fetch_compare_and_swap_full(addr, old_val, new_val)
54# define AO_HAVE_char_fetch_compare_and_swap_acquire
56# if !defined(AO_HAVE_char_fetch_compare_and_swap_write)
57# define AO_char_fetch_compare_and_swap_write(addr, old_val, new_val) \
58 AO_char_fetch_compare_and_swap_full(addr, old_val, new_val)
59# define AO_HAVE_char_fetch_compare_and_swap_write
61# if !defined(AO_HAVE_char_fetch_compare_and_swap_read)
62# define AO_char_fetch_compare_and_swap_read(addr, old_val, new_val) \
63 AO_char_fetch_compare_and_swap_full(addr, old_val, new_val)
64# define AO_HAVE_char_fetch_compare_and_swap_read
68#if !defined(AO_HAVE_char_fetch_compare_and_swap) \
69 && defined(AO_HAVE_char_fetch_compare_and_swap_release)
70# define AO_char_fetch_compare_and_swap(addr, old_val, new_val) \
71 AO_char_fetch_compare_and_swap_release(addr, old_val, new_val)
72# define AO_HAVE_char_fetch_compare_and_swap
74#if !defined(AO_HAVE_char_fetch_compare_and_swap) \
75 && defined(AO_HAVE_char_fetch_compare_and_swap_acquire)
76# define AO_char_fetch_compare_and_swap(addr, old_val, new_val) \
77 AO_char_fetch_compare_and_swap_acquire(addr, old_val, new_val)
78# define AO_HAVE_char_fetch_compare_and_swap
80#if !defined(AO_HAVE_char_fetch_compare_and_swap) \
81 && defined(AO_HAVE_char_fetch_compare_and_swap_write)
82# define AO_char_fetch_compare_and_swap(addr, old_val, new_val) \
83 AO_char_fetch_compare_and_swap_write(addr, old_val, new_val)
84# define AO_HAVE_char_fetch_compare_and_swap
86#if !defined(AO_HAVE_char_fetch_compare_and_swap) \
87 && defined(AO_HAVE_char_fetch_compare_and_swap_read)
88# define AO_char_fetch_compare_and_swap(addr, old_val, new_val) \
89 AO_char_fetch_compare_and_swap_read(addr, old_val, new_val)
90# define AO_HAVE_char_fetch_compare_and_swap
93#if defined(AO_HAVE_char_fetch_compare_and_swap_acquire) \
94 && defined(AO_HAVE_nop_full) \
95 && !defined(AO_HAVE_char_fetch_compare_and_swap_full)
96# define AO_char_fetch_compare_and_swap_full(addr, old_val, new_val) \
98 AO_char_fetch_compare_and_swap_acquire(addr, old_val, new_val))
99# define AO_HAVE_char_fetch_compare_and_swap_full
102#if !defined(AO_HAVE_char_fetch_compare_and_swap_release_write) \
103 && defined(AO_HAVE_char_fetch_compare_and_swap_write)
104# define AO_char_fetch_compare_and_swap_release_write(addr,old_val,new_val) \
105 AO_char_fetch_compare_and_swap_write(addr, old_val, new_val)
106# define AO_HAVE_char_fetch_compare_and_swap_release_write
108#if !defined(AO_HAVE_char_fetch_compare_and_swap_release_write) \
109 && defined(AO_HAVE_char_fetch_compare_and_swap_release)
110# define AO_char_fetch_compare_and_swap_release_write(addr,old_val,new_val) \
111 AO_char_fetch_compare_and_swap_release(addr, old_val, new_val)
112# define AO_HAVE_char_fetch_compare_and_swap_release_write
114#if !defined(AO_HAVE_char_fetch_compare_and_swap_acquire_read) \
115 && defined(AO_HAVE_char_fetch_compare_and_swap_read)
116# define AO_char_fetch_compare_and_swap_acquire_read(addr,old_val,new_val) \
117 AO_char_fetch_compare_and_swap_read(addr, old_val, new_val)
118# define AO_HAVE_char_fetch_compare_and_swap_acquire_read
120#if !defined(AO_HAVE_char_fetch_compare_and_swap_acquire_read) \
121 && defined(AO_HAVE_char_fetch_compare_and_swap_acquire)
122# define AO_char_fetch_compare_and_swap_acquire_read(addr,old_val,new_val) \
123 AO_char_fetch_compare_and_swap_acquire(addr, old_val, new_val)
124# define AO_HAVE_char_fetch_compare_and_swap_acquire_read
127#ifdef AO_NO_DD_ORDERING
128# if defined(AO_HAVE_char_fetch_compare_and_swap_acquire_read)
129# define AO_char_fetch_compare_and_swap_dd_acquire_read(addr,old_val,new_val) \
130 AO_char_fetch_compare_and_swap_acquire_read(addr, old_val, new_val)
131# define AO_HAVE_char_fetch_compare_and_swap_dd_acquire_read
134# if defined(AO_HAVE_char_fetch_compare_and_swap)
135# define AO_char_fetch_compare_and_swap_dd_acquire_read(addr,old_val,new_val) \
136 AO_char_fetch_compare_and_swap(addr, old_val, new_val)
137# define AO_HAVE_char_fetch_compare_and_swap_dd_acquire_read
142#if defined(AO_HAVE_char_compare_and_swap) && defined(AO_HAVE_nop_full) \
143 && !defined(AO_HAVE_char_compare_and_swap_acquire)
145 AO_char_compare_and_swap_acquire(
volatile unsignedchar *addr,
unsignedchar old,
146 unsignedchar new_val)
148 int result = AO_char_compare_and_swap(addr, old, new_val);
152# define AO_HAVE_char_compare_and_swap_acquire
154#if defined(AO_HAVE_char_compare_and_swap) && defined(AO_HAVE_nop_full) \
155 && !defined(AO_HAVE_char_compare_and_swap_release)
156# define AO_char_compare_and_swap_release(addr, old, new_val) \
157 (AO_nop_full(), AO_char_compare_and_swap(addr, old, new_val))
158# define AO_HAVE_char_compare_and_swap_release
160#if defined(AO_HAVE_char_compare_and_swap_full)
161# if !defined(AO_HAVE_char_compare_and_swap_release)
162# define AO_char_compare_and_swap_release(addr, old, new_val) \
163 AO_char_compare_and_swap_full(addr, old, new_val)
164# define AO_HAVE_char_compare_and_swap_release
166# if !defined(AO_HAVE_char_compare_and_swap_acquire)
167# define AO_char_compare_and_swap_acquire(addr, old, new_val) \
168 AO_char_compare_and_swap_full(addr, old, new_val)
169# define AO_HAVE_char_compare_and_swap_acquire
171# if !defined(AO_HAVE_char_compare_and_swap_write)
172# define AO_char_compare_and_swap_write(addr, old, new_val) \
173 AO_char_compare_and_swap_full(addr, old, new_val)
174# define AO_HAVE_char_compare_and_swap_write
176# if !defined(AO_HAVE_char_compare_and_swap_read)
177# define AO_char_compare_and_swap_read(addr, old, new_val) \
178 AO_char_compare_and_swap_full(addr, old, new_val)
179# define AO_HAVE_char_compare_and_swap_read
183#if !defined(AO_HAVE_char_compare_and_swap) \
184 && defined(AO_HAVE_char_compare_and_swap_release)
185# define AO_char_compare_and_swap(addr, old, new_val) \
186 AO_char_compare_and_swap_release(addr, old, new_val)
187# define AO_HAVE_char_compare_and_swap
189#if !defined(AO_HAVE_char_compare_and_swap) \
190 && defined(AO_HAVE_char_compare_and_swap_acquire)
191# define AO_char_compare_and_swap(addr, old, new_val) \
192 AO_char_compare_and_swap_acquire(addr, old, new_val)
193# define AO_HAVE_char_compare_and_swap
195#if !defined(AO_HAVE_char_compare_and_swap) \
196 && defined(AO_HAVE_char_compare_and_swap_write)
197# define AO_char_compare_and_swap(addr, old, new_val) \
198 AO_char_compare_and_swap_write(addr, old, new_val)
199# define AO_HAVE_char_compare_and_swap
201#if !defined(AO_HAVE_char_compare_and_swap) \
202 && defined(AO_HAVE_char_compare_and_swap_read)
203# define AO_char_compare_and_swap(addr, old, new_val) \
204 AO_char_compare_and_swap_read(addr, old, new_val)
205# define AO_HAVE_char_compare_and_swap
208#if defined(AO_HAVE_char_compare_and_swap_acquire) \
209 && defined(AO_HAVE_nop_full) \
210 && !defined(AO_HAVE_char_compare_and_swap_full)
211# define AO_char_compare_and_swap_full(addr, old, new_val) \
213 AO_char_compare_and_swap_acquire(addr, old, new_val))
214# define AO_HAVE_char_compare_and_swap_full
217#if !defined(AO_HAVE_char_compare_and_swap_release_write) \
218 && defined(AO_HAVE_char_compare_and_swap_write)
219# define AO_char_compare_and_swap_release_write(addr, old, new_val) \
220 AO_char_compare_and_swap_write(addr, old, new_val)
221# define AO_HAVE_char_compare_and_swap_release_write
223#if !defined(AO_HAVE_char_compare_and_swap_release_write) \
224 && defined(AO_HAVE_char_compare_and_swap_release)
225# define AO_char_compare_and_swap_release_write(addr, old, new_val) \
226 AO_char_compare_and_swap_release(addr, old, new_val)
227# define AO_HAVE_char_compare_and_swap_release_write
229#if !defined(AO_HAVE_char_compare_and_swap_acquire_read) \
230 && defined(AO_HAVE_char_compare_and_swap_read)
231# define AO_char_compare_and_swap_acquire_read(addr, old, new_val) \
232 AO_char_compare_and_swap_read(addr, old, new_val)
233# define AO_HAVE_char_compare_and_swap_acquire_read
235#if !defined(AO_HAVE_char_compare_and_swap_acquire_read) \
236 && defined(AO_HAVE_char_compare_and_swap_acquire)
237# define AO_char_compare_and_swap_acquire_read(addr, old, new_val) \
238 AO_char_compare_and_swap_acquire(addr, old, new_val)
239# define AO_HAVE_char_compare_and_swap_acquire_read
242#ifdef AO_NO_DD_ORDERING
243# if defined(AO_HAVE_char_compare_and_swap_acquire_read)
244# define AO_char_compare_and_swap_dd_acquire_read(addr, old, new_val) \
245 AO_char_compare_and_swap_acquire_read(addr, old, new_val)
246# define AO_HAVE_char_compare_and_swap_dd_acquire_read
249# if defined(AO_HAVE_char_compare_and_swap)
250# define AO_char_compare_and_swap_dd_acquire_read(addr, old, new_val) \
251 AO_char_compare_and_swap(addr, old, new_val)
252# define AO_HAVE_char_compare_and_swap_dd_acquire_read
257#if defined(AO_HAVE_char_load_full) && !defined(AO_HAVE_char_load_acquire)
258# define AO_char_load_acquire(addr) AO_char_load_full(addr)
259# define AO_HAVE_char_load_acquire
262#if defined(AO_HAVE_char_load_acquire) && !defined(AO_HAVE_char_load)
263# define AO_char_load(addr) AO_char_load_acquire(addr)
264# define AO_HAVE_char_load
267#if defined(AO_HAVE_char_load_full) && !defined(AO_HAVE_char_load_read)
268# define AO_char_load_read(addr) AO_char_load_full(addr)
269# define AO_HAVE_char_load_read
272#if !defined(AO_HAVE_char_load_acquire_read) \
273 && defined(AO_HAVE_char_load_acquire)
274# define AO_char_load_acquire_read(addr) AO_char_load_acquire(addr)
275# define AO_HAVE_char_load_acquire_read
278#if defined(AO_HAVE_char_load) && defined(AO_HAVE_nop_full) \
279 && !defined(AO_HAVE_char_load_acquire)
290# define AO_HAVE_char_load_acquire
293#if defined(AO_HAVE_char_load) && defined(AO_HAVE_nop_read) \
294 && !defined(AO_HAVE_char_load_read)
296 AO_char_load_read(
const volatile unsignedchar *addr)
303# define AO_HAVE_char_load_read
306#if defined(AO_HAVE_char_load_acquire) && defined(AO_HAVE_nop_full) \
307 && !defined(AO_HAVE_char_load_full)
308# define AO_char_load_full(addr) (AO_nop_full(), AO_char_load_acquire(addr))
309# define AO_HAVE_char_load_full
312#if defined(AO_HAVE_char_compare_and_swap_read) \
313 && !defined(AO_HAVE_char_load_read)
314# define AO_char_CAS_BASED_LOAD_READ
317 AO_char_load_read(
const volatile unsignedchar *addr)
322 result = *(
const unsignedchar *)addr;
324 (
volatile unsignedchar *)addr,
328# define AO_HAVE_char_load_read
331#if !defined(AO_HAVE_char_load_acquire_read) \
332 && defined(AO_HAVE_char_load_read)
333# define AO_char_load_acquire_read(addr) AO_char_load_read(addr)
334# define AO_HAVE_char_load_acquire_read
337#if defined(AO_HAVE_char_load_acquire_read) && !defined(AO_HAVE_char_load) \
338 && (!defined(AO_char_CAS_BASED_LOAD_READ) \
339 || !defined(AO_HAVE_char_compare_and_swap))
340# define AO_char_load(addr) AO_char_load_acquire_read(addr)
341# define AO_HAVE_char_load
344#if defined(AO_HAVE_char_compare_and_swap_full) \
345 && !defined(AO_HAVE_char_load_full)
353 result = *(
const unsignedchar *)addr;
355 (
volatile unsignedchar *)addr,
359# define AO_HAVE_char_load_full
362#if defined(AO_HAVE_char_compare_and_swap_acquire) \
363 && !defined(AO_HAVE_char_load_acquire)
371 result = *(
const unsignedchar *)addr;
373 (
volatile unsignedchar *)addr,
377# define AO_HAVE_char_load_acquire
380#if defined(AO_HAVE_char_compare_and_swap) && !defined(AO_HAVE_char_load)
388 result = *(
const unsignedchar *)addr;
390 (
volatile unsignedchar *)addr,
394# define AO_HAVE_char_load
397#ifdef AO_NO_DD_ORDERING
398# if defined(AO_HAVE_char_load_acquire_read)
399# define AO_char_load_dd_acquire_read(addr) \
400 AO_char_load_acquire_read(addr)
401# define AO_HAVE_char_load_dd_acquire_read
404# if defined(AO_HAVE_char_load)
405# define AO_char_load_dd_acquire_read(addr) AO_char_load(addr)
406# define AO_HAVE_char_load_dd_acquire_read
411#if defined(AO_HAVE_char_store_full) && !defined(AO_HAVE_char_store_release)
412# define AO_char_store_release(addr, val) AO_char_store_full(addr, val)
413# define AO_HAVE_char_store_release
416#if defined(AO_HAVE_char_store_release) && !defined(AO_HAVE_char_store)
417# define AO_char_store(addr, val) AO_char_store_release(addr, val)
418# define AO_HAVE_char_store
421#if defined(AO_HAVE_char_store_full) && !defined(AO_HAVE_char_store_write)
422# define AO_char_store_write(addr, val) AO_char_store_full(addr, val)
423# define AO_HAVE_char_store_write
426#if defined(AO_HAVE_char_store_release) \
427 && !defined(AO_HAVE_char_store_release_write)
428# define AO_char_store_release_write(addr, val) \
429 AO_char_store_release(addr, val)
430# define AO_HAVE_char_store_release_write
433#if defined(AO_HAVE_char_store_write) && !defined(AO_HAVE_char_store)
434# define AO_char_store(addr, val) AO_char_store_write(addr, val)
435# define AO_HAVE_char_store
438#if defined(AO_HAVE_char_store) && defined(AO_HAVE_nop_full) \
439 && !defined(AO_HAVE_char_store_release)
440# define AO_char_store_release(addr, val) \
441 (AO_nop_full(), AO_char_store(addr, val))
442# define AO_HAVE_char_store_release
445#if defined(AO_HAVE_char_store) && defined(AO_HAVE_nop_write) \
446 && !defined(AO_HAVE_char_store_write)
447# define AO_char_store_write(addr, val) \
448 (AO_nop_write(), AO_char_store(addr, val))
449# define AO_HAVE_char_store_write
452#if defined(AO_HAVE_char_compare_and_swap_write) \
453 && !defined(AO_HAVE_char_store_write)
456 AO_char_store_write(
volatile unsignedchar *addr,
unsignedchar new_val)
458 unsignedchar old_val;
461 old_val = *(
unsignedchar *)addr;
462 }
while (
AO_EXPECT_FALSE(!AO_char_compare_and_swap_write(addr, old_val,
465# define AO_HAVE_char_store_write
468#if defined(AO_HAVE_char_store_write) \
469 && !defined(AO_HAVE_char_store_release_write)
470# define AO_char_store_release_write(addr, val) \
471 AO_char_store_write(addr, val)
472# define AO_HAVE_char_store_release_write
475#if defined(AO_HAVE_char_store_release) && defined(AO_HAVE_nop_full) \
476 && !defined(AO_HAVE_char_store_full)
477# define AO_char_store_full(addr, val) \
478 (AO_char_store_release(addr, val), \
480# define AO_HAVE_char_store_full
483#if defined(AO_HAVE_char_compare_and_swap) && !defined(AO_HAVE_char_store)
486 AO_char_store(
volatile unsignedchar *addr,
unsignedchar new_val)
488 unsignedchar old_val;
491 old_val = *(
unsignedchar *)addr;
495# define AO_HAVE_char_store
498#if defined(AO_HAVE_char_compare_and_swap_release) \
499 && !defined(AO_HAVE_char_store_release)
504 unsignedchar old_val;
507 old_val = *(
unsignedchar *)addr;
508 }
while (
AO_EXPECT_FALSE(!AO_char_compare_and_swap_release(addr, old_val,
511# define AO_HAVE_char_store_release
514#if defined(AO_HAVE_char_compare_and_swap_full) \
515 && !defined(AO_HAVE_char_store_full)
520 unsignedchar old_val;
523 old_val = *(
unsignedchar *)addr;
527# define AO_HAVE_char_store_full
552#if defined(AO_HAVE_short_fetch_compare_and_swap) \
553 && defined(AO_HAVE_nop_full) \
554 && !defined(AO_HAVE_short_fetch_compare_and_swap_acquire)
557 unsignedshort old_val,
unsignedshort new_val)
559 unsignedshort result = AO_short_fetch_compare_and_swap(addr, old_val, new_val);
563# define AO_HAVE_short_fetch_compare_and_swap_acquire
565#if defined(AO_HAVE_short_fetch_compare_and_swap) \
566 && defined(AO_HAVE_nop_full) \
567 && !defined(AO_HAVE_short_fetch_compare_and_swap_release)
568# define AO_short_fetch_compare_and_swap_release(addr, old_val, new_val) \
570 AO_short_fetch_compare_and_swap(addr, old_val, new_val))
571# define AO_HAVE_short_fetch_compare_and_swap_release
573#if defined(AO_HAVE_short_fetch_compare_and_swap_full)
574# if !defined(AO_HAVE_short_fetch_compare_and_swap_release)
575# define AO_short_fetch_compare_and_swap_release(addr, old_val, new_val) \
576 AO_short_fetch_compare_and_swap_full(addr, old_val, new_val)
577# define AO_HAVE_short_fetch_compare_and_swap_release
579# if !defined(AO_HAVE_short_fetch_compare_and_swap_acquire)
580# define AO_short_fetch_compare_and_swap_acquire(addr, old_val, new_val) \
581 AO_short_fetch_compare_and_swap_full(addr, old_val, new_val)
582# define AO_HAVE_short_fetch_compare_and_swap_acquire
584# if !defined(AO_HAVE_short_fetch_compare_and_swap_write)
585# define AO_short_fetch_compare_and_swap_write(addr, old_val, new_val) \
586 AO_short_fetch_compare_and_swap_full(addr, old_val, new_val)
587# define AO_HAVE_short_fetch_compare_and_swap_write
589# if !defined(AO_HAVE_short_fetch_compare_and_swap_read)
590# define AO_short_fetch_compare_and_swap_read(addr, old_val, new_val) \
591 AO_short_fetch_compare_and_swap_full(addr, old_val, new_val)
592# define AO_HAVE_short_fetch_compare_and_swap_read
596#if !defined(AO_HAVE_short_fetch_compare_and_swap) \
597 && defined(AO_HAVE_short_fetch_compare_and_swap_release)
598# define AO_short_fetch_compare_and_swap(addr, old_val, new_val) \
599 AO_short_fetch_compare_and_swap_release(addr, old_val, new_val)
600# define AO_HAVE_short_fetch_compare_and_swap
602#if !defined(AO_HAVE_short_fetch_compare_and_swap) \
603 && defined(AO_HAVE_short_fetch_compare_and_swap_acquire)
604# define AO_short_fetch_compare_and_swap(addr, old_val, new_val) \
605 AO_short_fetch_compare_and_swap_acquire(addr, old_val, new_val)
606# define AO_HAVE_short_fetch_compare_and_swap
608#if !defined(AO_HAVE_short_fetch_compare_and_swap) \
609 && defined(AO_HAVE_short_fetch_compare_and_swap_write)
610# define AO_short_fetch_compare_and_swap(addr, old_val, new_val) \
611 AO_short_fetch_compare_and_swap_write(addr, old_val, new_val)
612# define AO_HAVE_short_fetch_compare_and_swap
614#if !defined(AO_HAVE_short_fetch_compare_and_swap) \
615 && defined(AO_HAVE_short_fetch_compare_and_swap_read)
616# define AO_short_fetch_compare_and_swap(addr, old_val, new_val) \
617 AO_short_fetch_compare_and_swap_read(addr, old_val, new_val)
618# define AO_HAVE_short_fetch_compare_and_swap
621#if defined(AO_HAVE_short_fetch_compare_and_swap_acquire) \
622 && defined(AO_HAVE_nop_full) \
623 && !defined(AO_HAVE_short_fetch_compare_and_swap_full)
624# define AO_short_fetch_compare_and_swap_full(addr, old_val, new_val) \
626 AO_short_fetch_compare_and_swap_acquire(addr, old_val, new_val))
627# define AO_HAVE_short_fetch_compare_and_swap_full
630#if !defined(AO_HAVE_short_fetch_compare_and_swap_release_write) \
631 && defined(AO_HAVE_short_fetch_compare_and_swap_write)
632# define AO_short_fetch_compare_and_swap_release_write(addr,old_val,new_val) \
633 AO_short_fetch_compare_and_swap_write(addr, old_val, new_val)
634# define AO_HAVE_short_fetch_compare_and_swap_release_write
636#if !defined(AO_HAVE_short_fetch_compare_and_swap_release_write) \
637 && defined(AO_HAVE_short_fetch_compare_and_swap_release)
638# define AO_short_fetch_compare_and_swap_release_write(addr,old_val,new_val) \
639 AO_short_fetch_compare_and_swap_release(addr, old_val, new_val)
640# define AO_HAVE_short_fetch_compare_and_swap_release_write
642#if !defined(AO_HAVE_short_fetch_compare_and_swap_acquire_read) \
643 && defined(AO_HAVE_short_fetch_compare_and_swap_read)
644# define AO_short_fetch_compare_and_swap_acquire_read(addr,old_val,new_val) \
645 AO_short_fetch_compare_and_swap_read(addr, old_val, new_val)
646# define AO_HAVE_short_fetch_compare_and_swap_acquire_read
648#if !defined(AO_HAVE_short_fetch_compare_and_swap_acquire_read) \
649 && defined(AO_HAVE_short_fetch_compare_and_swap_acquire)
650# define AO_short_fetch_compare_and_swap_acquire_read(addr,old_val,new_val) \
651 AO_short_fetch_compare_and_swap_acquire(addr, old_val, new_val)
652# define AO_HAVE_short_fetch_compare_and_swap_acquire_read
655#ifdef AO_NO_DD_ORDERING
656# if defined(AO_HAVE_short_fetch_compare_and_swap_acquire_read)
657# define AO_short_fetch_compare_and_swap_dd_acquire_read(addr,old_val,new_val) \
658 AO_short_fetch_compare_and_swap_acquire_read(addr, old_val, new_val)
659# define AO_HAVE_short_fetch_compare_and_swap_dd_acquire_read
662# if defined(AO_HAVE_short_fetch_compare_and_swap)
663# define AO_short_fetch_compare_and_swap_dd_acquire_read(addr,old_val,new_val) \
664 AO_short_fetch_compare_and_swap(addr, old_val, new_val)
665# define AO_HAVE_short_fetch_compare_and_swap_dd_acquire_read
670#if defined(AO_HAVE_short_compare_and_swap) && defined(AO_HAVE_nop_full) \
671 && !defined(AO_HAVE_short_compare_and_swap_acquire)
673 AO_short_compare_and_swap_acquire(
volatile unsignedshort *addr,
unsignedshort old,
674 unsignedshort new_val)
676 int result = AO_short_compare_and_swap(addr, old, new_val);
680# define AO_HAVE_short_compare_and_swap_acquire
682#if defined(AO_HAVE_short_compare_and_swap) && defined(AO_HAVE_nop_full) \
683 && !defined(AO_HAVE_short_compare_and_swap_release)
684# define AO_short_compare_and_swap_release(addr, old, new_val) \
685 (AO_nop_full(), AO_short_compare_and_swap(addr, old, new_val))
686# define AO_HAVE_short_compare_and_swap_release
688#if defined(AO_HAVE_short_compare_and_swap_full)
689# if !defined(AO_HAVE_short_compare_and_swap_release)
690# define AO_short_compare_and_swap_release(addr, old, new_val) \
691 AO_short_compare_and_swap_full(addr, old, new_val)
692# define AO_HAVE_short_compare_and_swap_release
694# if !defined(AO_HAVE_short_compare_and_swap_acquire)
695# define AO_short_compare_and_swap_acquire(addr, old, new_val) \
696 AO_short_compare_and_swap_full(addr, old, new_val)
697# define AO_HAVE_short_compare_and_swap_acquire
699# if !defined(AO_HAVE_short_compare_and_swap_write)
700# define AO_short_compare_and_swap_write(addr, old, new_val) \
701 AO_short_compare_and_swap_full(addr, old, new_val)
702# define AO_HAVE_short_compare_and_swap_write
704# if !defined(AO_HAVE_short_compare_and_swap_read)
705# define AO_short_compare_and_swap_read(addr, old, new_val) \
706 AO_short_compare_and_swap_full(addr, old, new_val)
707# define AO_HAVE_short_compare_and_swap_read
711#if !defined(AO_HAVE_short_compare_and_swap) \
712 && defined(AO_HAVE_short_compare_and_swap_release)
713# define AO_short_compare_and_swap(addr, old, new_val) \
714 AO_short_compare_and_swap_release(addr, old, new_val)
715# define AO_HAVE_short_compare_and_swap
717#if !defined(AO_HAVE_short_compare_and_swap) \
718 && defined(AO_HAVE_short_compare_and_swap_acquire)
719# define AO_short_compare_and_swap(addr, old, new_val) \
720 AO_short_compare_and_swap_acquire(addr, old, new_val)
721# define AO_HAVE_short_compare_and_swap
723#if !defined(AO_HAVE_short_compare_and_swap) \
724 && defined(AO_HAVE_short_compare_and_swap_write)
725# define AO_short_compare_and_swap(addr, old, new_val) \
726 AO_short_compare_and_swap_write(addr, old, new_val)
727# define AO_HAVE_short_compare_and_swap
729#if !defined(AO_HAVE_short_compare_and_swap) \
730 && defined(AO_HAVE_short_compare_and_swap_read)
731# define AO_short_compare_and_swap(addr, old, new_val) \
732 AO_short_compare_and_swap_read(addr, old, new_val)
733# define AO_HAVE_short_compare_and_swap
736#if defined(AO_HAVE_short_compare_and_swap_acquire) \
737 && defined(AO_HAVE_nop_full) \
738 && !defined(AO_HAVE_short_compare_and_swap_full)
739# define AO_short_compare_and_swap_full(addr, old, new_val) \
741 AO_short_compare_and_swap_acquire(addr, old, new_val))
742# define AO_HAVE_short_compare_and_swap_full
745#if !defined(AO_HAVE_short_compare_and_swap_release_write) \
746 && defined(AO_HAVE_short_compare_and_swap_write)
747# define AO_short_compare_and_swap_release_write(addr, old, new_val) \
748 AO_short_compare_and_swap_write(addr, old, new_val)
749# define AO_HAVE_short_compare_and_swap_release_write
751#if !defined(AO_HAVE_short_compare_and_swap_release_write) \
752 && defined(AO_HAVE_short_compare_and_swap_release)
753# define AO_short_compare_and_swap_release_write(addr, old, new_val) \
754 AO_short_compare_and_swap_release(addr, old, new_val)
755# define AO_HAVE_short_compare_and_swap_release_write
757#if !defined(AO_HAVE_short_compare_and_swap_acquire_read) \
758 && defined(AO_HAVE_short_compare_and_swap_read)
759# define AO_short_compare_and_swap_acquire_read(addr, old, new_val) \
760 AO_short_compare_and_swap_read(addr, old, new_val)
761# define AO_HAVE_short_compare_and_swap_acquire_read
763#if !defined(AO_HAVE_short_compare_and_swap_acquire_read) \
764 && defined(AO_HAVE_short_compare_and_swap_acquire)
765# define AO_short_compare_and_swap_acquire_read(addr, old, new_val) \
766 AO_short_compare_and_swap_acquire(addr, old, new_val)
767# define AO_HAVE_short_compare_and_swap_acquire_read
770#ifdef AO_NO_DD_ORDERING
771# if defined(AO_HAVE_short_compare_and_swap_acquire_read)
772# define AO_short_compare_and_swap_dd_acquire_read(addr, old, new_val) \
773 AO_short_compare_and_swap_acquire_read(addr, old, new_val)
774# define AO_HAVE_short_compare_and_swap_dd_acquire_read
777# if defined(AO_HAVE_short_compare_and_swap)
778# define AO_short_compare_and_swap_dd_acquire_read(addr, old, new_val) \
779 AO_short_compare_and_swap(addr, old, new_val)
780# define AO_HAVE_short_compare_and_swap_dd_acquire_read
785#if defined(AO_HAVE_short_load_full) && !defined(AO_HAVE_short_load_acquire)
786# define AO_short_load_acquire(addr) AO_short_load_full(addr)
787# define AO_HAVE_short_load_acquire
790#if defined(AO_HAVE_short_load_acquire) && !defined(AO_HAVE_short_load)
791# define AO_short_load(addr) AO_short_load_acquire(addr)
792# define AO_HAVE_short_load
795#if defined(AO_HAVE_short_load_full) && !defined(AO_HAVE_short_load_read)
796# define AO_short_load_read(addr) AO_short_load_full(addr)
797# define AO_HAVE_short_load_read
800#if !defined(AO_HAVE_short_load_acquire_read) \
801 && defined(AO_HAVE_short_load_acquire)
802# define AO_short_load_acquire_read(addr) AO_short_load_acquire(addr)
803# define AO_HAVE_short_load_acquire_read
806#if defined(AO_HAVE_short_load) && defined(AO_HAVE_nop_full) \
807 && !defined(AO_HAVE_short_load_acquire)
818# define AO_HAVE_short_load_acquire
821#if defined(AO_HAVE_short_load) && defined(AO_HAVE_nop_read) \
822 && !defined(AO_HAVE_short_load_read)
824 AO_short_load_read(
const volatile unsignedshort *addr)
831# define AO_HAVE_short_load_read
834#if defined(AO_HAVE_short_load_acquire) && defined(AO_HAVE_nop_full) \
835 && !defined(AO_HAVE_short_load_full)
836# define AO_short_load_full(addr) (AO_nop_full(), AO_short_load_acquire(addr))
837# define AO_HAVE_short_load_full
840#if defined(AO_HAVE_short_compare_and_swap_read) \
841 && !defined(AO_HAVE_short_load_read)
842# define AO_short_CAS_BASED_LOAD_READ
845 AO_short_load_read(
const volatile unsignedshort *addr)
850 result = *(
const unsignedshort *)addr;
852 (
volatile unsignedshort *)addr,
856# define AO_HAVE_short_load_read
859#if !defined(AO_HAVE_short_load_acquire_read) \
860 && defined(AO_HAVE_short_load_read)
861# define AO_short_load_acquire_read(addr) AO_short_load_read(addr)
862# define AO_HAVE_short_load_acquire_read
865#if defined(AO_HAVE_short_load_acquire_read) && !defined(AO_HAVE_short_load) \
866 && (!defined(AO_short_CAS_BASED_LOAD_READ) \
867 || !defined(AO_HAVE_short_compare_and_swap))
868# define AO_short_load(addr) AO_short_load_acquire_read(addr)
869# define AO_HAVE_short_load
872#if defined(AO_HAVE_short_compare_and_swap_full) \
873 && !defined(AO_HAVE_short_load_full)
881 result = *(
const unsignedshort *)addr;
883 (
volatile unsignedshort *)addr,
887# define AO_HAVE_short_load_full
890#if defined(AO_HAVE_short_compare_and_swap_acquire) \
891 && !defined(AO_HAVE_short_load_acquire)
899 result = *(
const unsignedshort *)addr;
901 (
volatile unsignedshort *)addr,
905# define AO_HAVE_short_load_acquire
908#if defined(AO_HAVE_short_compare_and_swap) && !defined(AO_HAVE_short_load)
916 result = *(
const unsignedshort *)addr;
918 (
volatile unsignedshort *)addr,
922# define AO_HAVE_short_load
925#ifdef AO_NO_DD_ORDERING
926# if defined(AO_HAVE_short_load_acquire_read)
927# define AO_short_load_dd_acquire_read(addr) \
928 AO_short_load_acquire_read(addr)
929# define AO_HAVE_short_load_dd_acquire_read
932# if defined(AO_HAVE_short_load)
933# define AO_short_load_dd_acquire_read(addr) AO_short_load(addr)
934# define AO_HAVE_short_load_dd_acquire_read
939#if defined(AO_HAVE_short_store_full) && !defined(AO_HAVE_short_store_release)
940# define AO_short_store_release(addr, val) AO_short_store_full(addr, val)
941# define AO_HAVE_short_store_release
944#if defined(AO_HAVE_short_store_release) && !defined(AO_HAVE_short_store)
945# define AO_short_store(addr, val) AO_short_store_release(addr, val)
946# define AO_HAVE_short_store
949#if defined(AO_HAVE_short_store_full) && !defined(AO_HAVE_short_store_write)
950# define AO_short_store_write(addr, val) AO_short_store_full(addr, val)
951# define AO_HAVE_short_store_write
954#if defined(AO_HAVE_short_store_release) \
955 && !defined(AO_HAVE_short_store_release_write)
956# define AO_short_store_release_write(addr, val) \
957 AO_short_store_release(addr, val)
958# define AO_HAVE_short_store_release_write
961#if defined(AO_HAVE_short_store_write) && !defined(AO_HAVE_short_store)
962# define AO_short_store(addr, val) AO_short_store_write(addr, val)
963# define AO_HAVE_short_store
966#if defined(AO_HAVE_short_store) && defined(AO_HAVE_nop_full) \
967 && !defined(AO_HAVE_short_store_release)
968# define AO_short_store_release(addr, val) \
969 (AO_nop_full(), AO_short_store(addr, val))
970# define AO_HAVE_short_store_release
973#if defined(AO_HAVE_short_store) && defined(AO_HAVE_nop_write) \
974 && !defined(AO_HAVE_short_store_write)
975# define AO_short_store_write(addr, val) \
976 (AO_nop_write(), AO_short_store(addr, val))
977# define AO_HAVE_short_store_write
980#if defined(AO_HAVE_short_compare_and_swap_write) \
981 && !defined(AO_HAVE_short_store_write)
984 AO_short_store_write(
volatile unsignedshort *addr,
unsignedshort new_val)
986 unsignedshort old_val;
989 old_val = *(
unsignedshort *)addr;
990 }
while (
AO_EXPECT_FALSE(!AO_short_compare_and_swap_write(addr, old_val,
993# define AO_HAVE_short_store_write
996#if defined(AO_HAVE_short_store_write) \
997 && !defined(AO_HAVE_short_store_release_write)
998# define AO_short_store_release_write(addr, val) \
999 AO_short_store_write(addr, val)
1000# define AO_HAVE_short_store_release_write
1003#if defined(AO_HAVE_short_store_release) && defined(AO_HAVE_nop_full) \
1004 && !defined(AO_HAVE_short_store_full)
1005# define AO_short_store_full(addr, val) \
1006 (AO_short_store_release(addr, val), \
1008# define AO_HAVE_short_store_full
1011#if defined(AO_HAVE_short_compare_and_swap) && !defined(AO_HAVE_short_store)
1014 AO_short_store(
volatile unsignedshort *addr,
unsignedshort new_val)
1016 unsignedshort old_val;
1019 old_val = *(
unsignedshort *)addr;
1021 old_val, new_val)));
1023# define AO_HAVE_short_store
1026#if defined(AO_HAVE_short_compare_and_swap_release) \
1027 && !defined(AO_HAVE_short_store_release)
1032 unsignedshort old_val;
1035 old_val = *(
unsignedshort *)addr;
1036 }
while (
AO_EXPECT_FALSE(!AO_short_compare_and_swap_release(addr, old_val,
1039# define AO_HAVE_short_store_release
1042#if defined(AO_HAVE_short_compare_and_swap_full) \
1043 && !defined(AO_HAVE_short_store_full)
1048 unsignedshort old_val;
1051 old_val = *(
unsignedshort *)addr;
1052 }
while (
AO_EXPECT_FALSE(!AO_short_compare_and_swap_full(addr, old_val,
1055# define AO_HAVE_short_store_full
1080#if defined(AO_HAVE_int_fetch_compare_and_swap) \
1081 && defined(AO_HAVE_nop_full) \
1082 && !defined(AO_HAVE_int_fetch_compare_and_swap_acquire)
1085 unsigned old_val,
unsigned new_val)
1087 unsigned result = AO_int_fetch_compare_and_swap(addr, old_val, new_val);
1091# define AO_HAVE_int_fetch_compare_and_swap_acquire
1093#if defined(AO_HAVE_int_fetch_compare_and_swap) \
1094 && defined(AO_HAVE_nop_full) \
1095 && !defined(AO_HAVE_int_fetch_compare_and_swap_release)
1096# define AO_int_fetch_compare_and_swap_release(addr, old_val, new_val) \
1098 AO_int_fetch_compare_and_swap(addr, old_val, new_val))
1099# define AO_HAVE_int_fetch_compare_and_swap_release
1101#if defined(AO_HAVE_int_fetch_compare_and_swap_full)
1102# if !defined(AO_HAVE_int_fetch_compare_and_swap_release)
1103# define AO_int_fetch_compare_and_swap_release(addr, old_val, new_val) \
1104 AO_int_fetch_compare_and_swap_full(addr, old_val, new_val)
1105# define AO_HAVE_int_fetch_compare_and_swap_release
1107# if !defined(AO_HAVE_int_fetch_compare_and_swap_acquire)
1108# define AO_int_fetch_compare_and_swap_acquire(addr, old_val, new_val) \
1109 AO_int_fetch_compare_and_swap_full(addr, old_val, new_val)
1110# define AO_HAVE_int_fetch_compare_and_swap_acquire
1112# if !defined(AO_HAVE_int_fetch_compare_and_swap_write)
1113# define AO_int_fetch_compare_and_swap_write(addr, old_val, new_val) \
1114 AO_int_fetch_compare_and_swap_full(addr, old_val, new_val)
1115# define AO_HAVE_int_fetch_compare_and_swap_write
1117# if !defined(AO_HAVE_int_fetch_compare_and_swap_read)
1118# define AO_int_fetch_compare_and_swap_read(addr, old_val, new_val) \
1119 AO_int_fetch_compare_and_swap_full(addr, old_val, new_val)
1120# define AO_HAVE_int_fetch_compare_and_swap_read
1124#if !defined(AO_HAVE_int_fetch_compare_and_swap) \
1125 && defined(AO_HAVE_int_fetch_compare_and_swap_release)
1126# define AO_int_fetch_compare_and_swap(addr, old_val, new_val) \
1127 AO_int_fetch_compare_and_swap_release(addr, old_val, new_val)
1128# define AO_HAVE_int_fetch_compare_and_swap
1130#if !defined(AO_HAVE_int_fetch_compare_and_swap) \
1131 && defined(AO_HAVE_int_fetch_compare_and_swap_acquire)
1132# define AO_int_fetch_compare_and_swap(addr, old_val, new_val) \
1133 AO_int_fetch_compare_and_swap_acquire(addr, old_val, new_val)
1134# define AO_HAVE_int_fetch_compare_and_swap
1136#if !defined(AO_HAVE_int_fetch_compare_and_swap) \
1137 && defined(AO_HAVE_int_fetch_compare_and_swap_write)
1138# define AO_int_fetch_compare_and_swap(addr, old_val, new_val) \
1139 AO_int_fetch_compare_and_swap_write(addr, old_val, new_val)
1140# define AO_HAVE_int_fetch_compare_and_swap
1142#if !defined(AO_HAVE_int_fetch_compare_and_swap) \
1143 && defined(AO_HAVE_int_fetch_compare_and_swap_read)
1144# define AO_int_fetch_compare_and_swap(addr, old_val, new_val) \
1145 AO_int_fetch_compare_and_swap_read(addr, old_val, new_val)
1146# define AO_HAVE_int_fetch_compare_and_swap
1149#if defined(AO_HAVE_int_fetch_compare_and_swap_acquire) \
1150 && defined(AO_HAVE_nop_full) \
1151 && !defined(AO_HAVE_int_fetch_compare_and_swap_full)
1152# define AO_int_fetch_compare_and_swap_full(addr, old_val, new_val) \
1154 AO_int_fetch_compare_and_swap_acquire(addr, old_val, new_val))
1155# define AO_HAVE_int_fetch_compare_and_swap_full
1158#if !defined(AO_HAVE_int_fetch_compare_and_swap_release_write) \
1159 && defined(AO_HAVE_int_fetch_compare_and_swap_write)
1160# define AO_int_fetch_compare_and_swap_release_write(addr,old_val,new_val) \
1161 AO_int_fetch_compare_and_swap_write(addr, old_val, new_val)
1162# define AO_HAVE_int_fetch_compare_and_swap_release_write
1164#if !defined(AO_HAVE_int_fetch_compare_and_swap_release_write) \
1165 && defined(AO_HAVE_int_fetch_compare_and_swap_release)
1166# define AO_int_fetch_compare_and_swap_release_write(addr,old_val,new_val) \
1167 AO_int_fetch_compare_and_swap_release(addr, old_val, new_val)
1168# define AO_HAVE_int_fetch_compare_and_swap_release_write
1170#if !defined(AO_HAVE_int_fetch_compare_and_swap_acquire_read) \
1171 && defined(AO_HAVE_int_fetch_compare_and_swap_read)
1172# define AO_int_fetch_compare_and_swap_acquire_read(addr,old_val,new_val) \
1173 AO_int_fetch_compare_and_swap_read(addr, old_val, new_val)
1174# define AO_HAVE_int_fetch_compare_and_swap_acquire_read
1176#if !defined(AO_HAVE_int_fetch_compare_and_swap_acquire_read) \
1177 && defined(AO_HAVE_int_fetch_compare_and_swap_acquire)
1178# define AO_int_fetch_compare_and_swap_acquire_read(addr,old_val,new_val) \
1179 AO_int_fetch_compare_and_swap_acquire(addr, old_val, new_val)
1180# define AO_HAVE_int_fetch_compare_and_swap_acquire_read
1183#ifdef AO_NO_DD_ORDERING
1184# if defined(AO_HAVE_int_fetch_compare_and_swap_acquire_read)
1185# define AO_int_fetch_compare_and_swap_dd_acquire_read(addr,old_val,new_val) \
1186 AO_int_fetch_compare_and_swap_acquire_read(addr, old_val, new_val)
1187# define AO_HAVE_int_fetch_compare_and_swap_dd_acquire_read
1190# if defined(AO_HAVE_int_fetch_compare_and_swap)
1191# define AO_int_fetch_compare_and_swap_dd_acquire_read(addr,old_val,new_val) \
1192 AO_int_fetch_compare_and_swap(addr, old_val, new_val)
1193# define AO_HAVE_int_fetch_compare_and_swap_dd_acquire_read
1198#if defined(AO_HAVE_int_compare_and_swap) && defined(AO_HAVE_nop_full) \
1199 && !defined(AO_HAVE_int_compare_and_swap_acquire)
1201 AO_int_compare_and_swap_acquire(
volatile unsigned *addr,
unsigned old,
1204 int result = AO_int_compare_and_swap(addr, old, new_val);
1208# define AO_HAVE_int_compare_and_swap_acquire
1210#if defined(AO_HAVE_int_compare_and_swap) && defined(AO_HAVE_nop_full) \
1211 && !defined(AO_HAVE_int_compare_and_swap_release)
1212# define AO_int_compare_and_swap_release(addr, old, new_val) \
1213 (AO_nop_full(), AO_int_compare_and_swap(addr, old, new_val))
1214# define AO_HAVE_int_compare_and_swap_release
1216#if defined(AO_HAVE_int_compare_and_swap_full)
1217# if !defined(AO_HAVE_int_compare_and_swap_release)
1218# define AO_int_compare_and_swap_release(addr, old, new_val) \
1219 AO_int_compare_and_swap_full(addr, old, new_val)
1220# define AO_HAVE_int_compare_and_swap_release
1222# if !defined(AO_HAVE_int_compare_and_swap_acquire)
1223# define AO_int_compare_and_swap_acquire(addr, old, new_val) \
1224 AO_int_compare_and_swap_full(addr, old, new_val)
1225# define AO_HAVE_int_compare_and_swap_acquire
1227# if !defined(AO_HAVE_int_compare_and_swap_write)
1228# define AO_int_compare_and_swap_write(addr, old, new_val) \
1229 AO_int_compare_and_swap_full(addr, old, new_val)
1230# define AO_HAVE_int_compare_and_swap_write
1232# if !defined(AO_HAVE_int_compare_and_swap_read)
1233# define AO_int_compare_and_swap_read(addr, old, new_val) \
1234 AO_int_compare_and_swap_full(addr, old, new_val)
1235# define AO_HAVE_int_compare_and_swap_read
1239#if !defined(AO_HAVE_int_compare_and_swap) \
1240 && defined(AO_HAVE_int_compare_and_swap_release)
1241# define AO_int_compare_and_swap(addr, old, new_val) \
1242 AO_int_compare_and_swap_release(addr, old, new_val)
1243# define AO_HAVE_int_compare_and_swap
1245#if !defined(AO_HAVE_int_compare_and_swap) \
1246 && defined(AO_HAVE_int_compare_and_swap_acquire)
1247# define AO_int_compare_and_swap(addr, old, new_val) \
1248 AO_int_compare_and_swap_acquire(addr, old, new_val)
1249# define AO_HAVE_int_compare_and_swap
1251#if !defined(AO_HAVE_int_compare_and_swap) \
1252 && defined(AO_HAVE_int_compare_and_swap_write)
1253# define AO_int_compare_and_swap(addr, old, new_val) \
1254 AO_int_compare_and_swap_write(addr, old, new_val)
1255# define AO_HAVE_int_compare_and_swap
1257#if !defined(AO_HAVE_int_compare_and_swap) \
1258 && defined(AO_HAVE_int_compare_and_swap_read)
1259# define AO_int_compare_and_swap(addr, old, new_val) \
1260 AO_int_compare_and_swap_read(addr, old, new_val)
1261# define AO_HAVE_int_compare_and_swap
1264#if defined(AO_HAVE_int_compare_and_swap_acquire) \
1265 && defined(AO_HAVE_nop_full) \
1266 && !defined(AO_HAVE_int_compare_and_swap_full)
1267# define AO_int_compare_and_swap_full(addr, old, new_val) \
1269 AO_int_compare_and_swap_acquire(addr, old, new_val))
1270# define AO_HAVE_int_compare_and_swap_full
1273#if !defined(AO_HAVE_int_compare_and_swap_release_write) \
1274 && defined(AO_HAVE_int_compare_and_swap_write)
1275# define AO_int_compare_and_swap_release_write(addr, old, new_val) \
1276 AO_int_compare_and_swap_write(addr, old, new_val)
1277# define AO_HAVE_int_compare_and_swap_release_write
1279#if !defined(AO_HAVE_int_compare_and_swap_release_write) \
1280 && defined(AO_HAVE_int_compare_and_swap_release)
1281# define AO_int_compare_and_swap_release_write(addr, old, new_val) \
1282 AO_int_compare_and_swap_release(addr, old, new_val)
1283# define AO_HAVE_int_compare_and_swap_release_write
1285#if !defined(AO_HAVE_int_compare_and_swap_acquire_read) \
1286 && defined(AO_HAVE_int_compare_and_swap_read)
1287# define AO_int_compare_and_swap_acquire_read(addr, old, new_val) \
1288 AO_int_compare_and_swap_read(addr, old, new_val)
1289# define AO_HAVE_int_compare_and_swap_acquire_read
1291#if !defined(AO_HAVE_int_compare_and_swap_acquire_read) \
1292 && defined(AO_HAVE_int_compare_and_swap_acquire)
1293# define AO_int_compare_and_swap_acquire_read(addr, old, new_val) \
1294 AO_int_compare_and_swap_acquire(addr, old, new_val)
1295# define AO_HAVE_int_compare_and_swap_acquire_read
1298#ifdef AO_NO_DD_ORDERING
1299# if defined(AO_HAVE_int_compare_and_swap_acquire_read)
1300# define AO_int_compare_and_swap_dd_acquire_read(addr, old, new_val) \
1301 AO_int_compare_and_swap_acquire_read(addr, old, new_val)
1302# define AO_HAVE_int_compare_and_swap_dd_acquire_read
1305# if defined(AO_HAVE_int_compare_and_swap)
1306# define AO_int_compare_and_swap_dd_acquire_read(addr, old, new_val) \
1307 AO_int_compare_and_swap(addr, old, new_val)
1308# define AO_HAVE_int_compare_and_swap_dd_acquire_read
1313#if defined(AO_HAVE_int_load_full) && !defined(AO_HAVE_int_load_acquire)
1314# define AO_int_load_acquire(addr) AO_int_load_full(addr)
1315# define AO_HAVE_int_load_acquire
1318#if defined(AO_HAVE_int_load_acquire) && !defined(AO_HAVE_int_load)
1319# define AO_int_load(addr) AO_int_load_acquire(addr)
1320# define AO_HAVE_int_load
1323#if defined(AO_HAVE_int_load_full) && !defined(AO_HAVE_int_load_read)
1324# define AO_int_load_read(addr) AO_int_load_full(addr)
1325# define AO_HAVE_int_load_read
1328#if !defined(AO_HAVE_int_load_acquire_read) \
1329 && defined(AO_HAVE_int_load_acquire)
1330# define AO_int_load_acquire_read(addr) AO_int_load_acquire(addr)
1331# define AO_HAVE_int_load_acquire_read
1334#if defined(AO_HAVE_int_load) && defined(AO_HAVE_nop_full) \
1335 && !defined(AO_HAVE_int_load_acquire)
1346# define AO_HAVE_int_load_acquire
1349#if defined(AO_HAVE_int_load) && defined(AO_HAVE_nop_read) \
1350 && !defined(AO_HAVE_int_load_read)
1352 AO_int_load_read(
const volatile unsigned *addr)
1359# define AO_HAVE_int_load_read
1362#if defined(AO_HAVE_int_load_acquire) && defined(AO_HAVE_nop_full) \
1363 && !defined(AO_HAVE_int_load_full)
1364# define AO_int_load_full(addr) (AO_nop_full(), AO_int_load_acquire(addr))
1365# define AO_HAVE_int_load_full
1368#if defined(AO_HAVE_int_compare_and_swap_read) \
1369 && !defined(AO_HAVE_int_load_read)
1370# define AO_int_CAS_BASED_LOAD_READ
1373 AO_int_load_read(
const volatile unsigned *addr)
1378 result = *(
const unsigned *)addr;
1380 (
volatile unsigned *)addr,
1384# define AO_HAVE_int_load_read
1387#if !defined(AO_HAVE_int_load_acquire_read) \
1388 && defined(AO_HAVE_int_load_read)
1389# define AO_int_load_acquire_read(addr) AO_int_load_read(addr)
1390# define AO_HAVE_int_load_acquire_read
1393#if defined(AO_HAVE_int_load_acquire_read) && !defined(AO_HAVE_int_load) \
1394 && (!defined(AO_int_CAS_BASED_LOAD_READ) \
1395 || !defined(AO_HAVE_int_compare_and_swap))
1396# define AO_int_load(addr) AO_int_load_acquire_read(addr)
1397# define AO_HAVE_int_load
1400#if defined(AO_HAVE_int_compare_and_swap_full) \
1401 && !defined(AO_HAVE_int_load_full)
1409 result = *(
const unsigned *)addr;
1411 (
volatile unsigned *)addr,
1415# define AO_HAVE_int_load_full
1418#if defined(AO_HAVE_int_compare_and_swap_acquire) \
1419 && !defined(AO_HAVE_int_load_acquire)
1427 result = *(
const unsigned *)addr;
1429 (
volatile unsigned *)addr,
1433# define AO_HAVE_int_load_acquire
1436#if defined(AO_HAVE_int_compare_and_swap) && !defined(AO_HAVE_int_load)
1444 result = *(
const unsigned *)addr;
1446 (
volatile unsigned *)addr,
1450# define AO_HAVE_int_load
1453#ifdef AO_NO_DD_ORDERING
1454# if defined(AO_HAVE_int_load_acquire_read)
1455# define AO_int_load_dd_acquire_read(addr) \
1456 AO_int_load_acquire_read(addr)
1457# define AO_HAVE_int_load_dd_acquire_read
1460# if defined(AO_HAVE_int_load)
1461# define AO_int_load_dd_acquire_read(addr) AO_int_load(addr)
1462# define AO_HAVE_int_load_dd_acquire_read
1467#if defined(AO_HAVE_int_store_full) && !defined(AO_HAVE_int_store_release)
1468# define AO_int_store_release(addr, val) AO_int_store_full(addr, val)
1469# define AO_HAVE_int_store_release
1472#if defined(AO_HAVE_int_store_release) && !defined(AO_HAVE_int_store)
1473# define AO_int_store(addr, val) AO_int_store_release(addr, val)
1474# define AO_HAVE_int_store
1477#if defined(AO_HAVE_int_store_full) && !defined(AO_HAVE_int_store_write)
1478# define AO_int_store_write(addr, val) AO_int_store_full(addr, val)
1479# define AO_HAVE_int_store_write
1482#if defined(AO_HAVE_int_store_release) \
1483 && !defined(AO_HAVE_int_store_release_write)
1484# define AO_int_store_release_write(addr, val) \
1485 AO_int_store_release(addr, val)
1486# define AO_HAVE_int_store_release_write
1489#if defined(AO_HAVE_int_store_write) && !defined(AO_HAVE_int_store)
1490# define AO_int_store(addr, val) AO_int_store_write(addr, val)
1491# define AO_HAVE_int_store
1494#if defined(AO_HAVE_int_store) && defined(AO_HAVE_nop_full) \
1495 && !defined(AO_HAVE_int_store_release)
1496# define AO_int_store_release(addr, val) \
1497 (AO_nop_full(), AO_int_store(addr, val))
1498# define AO_HAVE_int_store_release
1501#if defined(AO_HAVE_int_store) && defined(AO_HAVE_nop_write) \
1502 && !defined(AO_HAVE_int_store_write)
1503# define AO_int_store_write(addr, val) \
1504 (AO_nop_write(), AO_int_store(addr, val))
1505# define AO_HAVE_int_store_write
1508#if defined(AO_HAVE_int_compare_and_swap_write) \
1509 && !defined(AO_HAVE_int_store_write)
1512 AO_int_store_write(
volatile unsigned *addr,
unsigned new_val)
1517 old_val = *(
unsigned *)addr;
1518 }
while (
AO_EXPECT_FALSE(!AO_int_compare_and_swap_write(addr, old_val,
1521# define AO_HAVE_int_store_write
1524#if defined(AO_HAVE_int_store_write) \
1525 && !defined(AO_HAVE_int_store_release_write)
1526# define AO_int_store_release_write(addr, val) \
1527 AO_int_store_write(addr, val)
1528# define AO_HAVE_int_store_release_write
1531#if defined(AO_HAVE_int_store_release) && defined(AO_HAVE_nop_full) \
1532 && !defined(AO_HAVE_int_store_full)
1533# define AO_int_store_full(addr, val) \
1534 (AO_int_store_release(addr, val), \
1536# define AO_HAVE_int_store_full
1539#if defined(AO_HAVE_int_compare_and_swap) && !defined(AO_HAVE_int_store)
1542 AO_int_store(
volatile unsigned *addr,
unsigned new_val)
1547 old_val = *(
unsigned *)addr;
1549 old_val, new_val)));
1551# define AO_HAVE_int_store
1554#if defined(AO_HAVE_int_compare_and_swap_release) \
1555 && !defined(AO_HAVE_int_store_release)
1563 old_val = *(
unsigned *)addr;
1564 }
while (
AO_EXPECT_FALSE(!AO_int_compare_and_swap_release(addr, old_val,
1567# define AO_HAVE_int_store_release
1570#if defined(AO_HAVE_int_compare_and_swap_full) \
1571 && !defined(AO_HAVE_int_store_full)
1579 old_val = *(
unsigned *)addr;
1583# define AO_HAVE_int_store_full
1608#if defined(AO_HAVE_fetch_compare_and_swap) \
1609 && defined(AO_HAVE_nop_full) \
1610 && !defined(AO_HAVE_fetch_compare_and_swap_acquire)
1619# define AO_HAVE_fetch_compare_and_swap_acquire
1621#if defined(AO_HAVE_fetch_compare_and_swap) \
1622 && defined(AO_HAVE_nop_full) \
1623 && !defined(AO_HAVE_fetch_compare_and_swap_release)
1624# define AO_fetch_compare_and_swap_release(addr, old_val, new_val) \
1626 AO_fetch_compare_and_swap(addr, old_val, new_val))
1627# define AO_HAVE_fetch_compare_and_swap_release
1629#if defined(AO_HAVE_fetch_compare_and_swap_full)
1630# if !defined(AO_HAVE_fetch_compare_and_swap_release)
1631# define AO_fetch_compare_and_swap_release(addr, old_val, new_val) \
1632 AO_fetch_compare_and_swap_full(addr, old_val, new_val)
1633# define AO_HAVE_fetch_compare_and_swap_release
1635# if !defined(AO_HAVE_fetch_compare_and_swap_acquire)
1636# define AO_fetch_compare_and_swap_acquire(addr, old_val, new_val) \
1637 AO_fetch_compare_and_swap_full(addr, old_val, new_val)
1638# define AO_HAVE_fetch_compare_and_swap_acquire
1640# if !defined(AO_HAVE_fetch_compare_and_swap_write)
1641# define AO_fetch_compare_and_swap_write(addr, old_val, new_val) \
1642 AO_fetch_compare_and_swap_full(addr, old_val, new_val)
1643# define AO_HAVE_fetch_compare_and_swap_write
1645# if !defined(AO_HAVE_fetch_compare_and_swap_read)
1646# define AO_fetch_compare_and_swap_read(addr, old_val, new_val) \
1647 AO_fetch_compare_and_swap_full(addr, old_val, new_val)
1648# define AO_HAVE_fetch_compare_and_swap_read
1652#if !defined(AO_HAVE_fetch_compare_and_swap) \
1653 && defined(AO_HAVE_fetch_compare_and_swap_release)
1654# define AO_fetch_compare_and_swap(addr, old_val, new_val) \
1655 AO_fetch_compare_and_swap_release(addr, old_val, new_val)
1656# define AO_HAVE_fetch_compare_and_swap
1658#if !defined(AO_HAVE_fetch_compare_and_swap) \
1659 && defined(AO_HAVE_fetch_compare_and_swap_acquire)
1660# define AO_fetch_compare_and_swap(addr, old_val, new_val) \
1661 AO_fetch_compare_and_swap_acquire(addr, old_val, new_val)
1662# define AO_HAVE_fetch_compare_and_swap
1664#if !defined(AO_HAVE_fetch_compare_and_swap) \
1665 && defined(AO_HAVE_fetch_compare_and_swap_write)
1666# define AO_fetch_compare_and_swap(addr, old_val, new_val) \
1667 AO_fetch_compare_and_swap_write(addr, old_val, new_val)
1668# define AO_HAVE_fetch_compare_and_swap
1670#if !defined(AO_HAVE_fetch_compare_and_swap) \
1671 && defined(AO_HAVE_fetch_compare_and_swap_read)
1672# define AO_fetch_compare_and_swap(addr, old_val, new_val) \
1673 AO_fetch_compare_and_swap_read(addr, old_val, new_val)
1674# define AO_HAVE_fetch_compare_and_swap
1677#if defined(AO_HAVE_fetch_compare_and_swap_acquire) \
1678 && defined(AO_HAVE_nop_full) \
1679 && !defined(AO_HAVE_fetch_compare_and_swap_full)
1680# define AO_fetch_compare_and_swap_full(addr, old_val, new_val) \
1682 AO_fetch_compare_and_swap_acquire(addr, old_val, new_val))
1683# define AO_HAVE_fetch_compare_and_swap_full
1686#if !defined(AO_HAVE_fetch_compare_and_swap_release_write) \
1687 && defined(AO_HAVE_fetch_compare_and_swap_write)
1688# define AO_fetch_compare_and_swap_release_write(addr,old_val,new_val) \
1689 AO_fetch_compare_and_swap_write(addr, old_val, new_val)
1690# define AO_HAVE_fetch_compare_and_swap_release_write
1692#if !defined(AO_HAVE_fetch_compare_and_swap_release_write) \
1693 && defined(AO_HAVE_fetch_compare_and_swap_release)
1694# define AO_fetch_compare_and_swap_release_write(addr,old_val,new_val) \
1695 AO_fetch_compare_and_swap_release(addr, old_val, new_val)
1696# define AO_HAVE_fetch_compare_and_swap_release_write
1698#if !defined(AO_HAVE_fetch_compare_and_swap_acquire_read) \
1699 && defined(AO_HAVE_fetch_compare_and_swap_read)
1700# define AO_fetch_compare_and_swap_acquire_read(addr,old_val,new_val) \
1701 AO_fetch_compare_and_swap_read(addr, old_val, new_val)
1702# define AO_HAVE_fetch_compare_and_swap_acquire_read
1704#if !defined(AO_HAVE_fetch_compare_and_swap_acquire_read) \
1705 && defined(AO_HAVE_fetch_compare_and_swap_acquire)
1706# define AO_fetch_compare_and_swap_acquire_read(addr,old_val,new_val) \
1707 AO_fetch_compare_and_swap_acquire(addr, old_val, new_val)
1708# define AO_HAVE_fetch_compare_and_swap_acquire_read
1711#ifdef AO_NO_DD_ORDERING
1712# if defined(AO_HAVE_fetch_compare_and_swap_acquire_read)
1713# define AO_fetch_compare_and_swap_dd_acquire_read(addr,old_val,new_val) \
1714 AO_fetch_compare_and_swap_acquire_read(addr, old_val, new_val)
1715# define AO_HAVE_fetch_compare_and_swap_dd_acquire_read
1718# if defined(AO_HAVE_fetch_compare_and_swap)
1719# define AO_fetch_compare_and_swap_dd_acquire_read(addr,old_val,new_val) \
1720 AO_fetch_compare_and_swap(addr, old_val, new_val)
1721# define AO_HAVE_fetch_compare_and_swap_dd_acquire_read
1726#if defined(AO_HAVE_compare_and_swap) && defined(AO_HAVE_nop_full) \
1727 && !defined(AO_HAVE_compare_and_swap_acquire)
1736# define AO_HAVE_compare_and_swap_acquire
1738#if defined(AO_HAVE_compare_and_swap) && defined(AO_HAVE_nop_full) \
1739 && !defined(AO_HAVE_compare_and_swap_release)
1740# define AO_compare_and_swap_release(addr, old, new_val) \
1741 (AO_nop_full(), AO_compare_and_swap(addr, old, new_val))
1742# define AO_HAVE_compare_and_swap_release
1744#if defined(AO_HAVE_compare_and_swap_full)
1745# if !defined(AO_HAVE_compare_and_swap_release)
1746# define AO_compare_and_swap_release(addr, old, new_val) \
1747 AO_compare_and_swap_full(addr, old, new_val)
1748# define AO_HAVE_compare_and_swap_release
1750# if !defined(AO_HAVE_compare_and_swap_acquire)
1751# define AO_compare_and_swap_acquire(addr, old, new_val) \
1752 AO_compare_and_swap_full(addr, old, new_val)
1753# define AO_HAVE_compare_and_swap_acquire
1755# if !defined(AO_HAVE_compare_and_swap_write)
1756# define AO_compare_and_swap_write(addr, old, new_val) \
1757 AO_compare_and_swap_full(addr, old, new_val)
1758# define AO_HAVE_compare_and_swap_write
1760# if !defined(AO_HAVE_compare_and_swap_read)
1761# define AO_compare_and_swap_read(addr, old, new_val) \
1762 AO_compare_and_swap_full(addr, old, new_val)
1763# define AO_HAVE_compare_and_swap_read
1767#if !defined(AO_HAVE_compare_and_swap) \
1768 && defined(AO_HAVE_compare_and_swap_release)
1769# define AO_compare_and_swap(addr, old, new_val) \
1770 AO_compare_and_swap_release(addr, old, new_val)
1771# define AO_HAVE_compare_and_swap
1773#if !defined(AO_HAVE_compare_and_swap) \
1774 && defined(AO_HAVE_compare_and_swap_acquire)
1775# define AO_compare_and_swap(addr, old, new_val) \
1776 AO_compare_and_swap_acquire(addr, old, new_val)
1777# define AO_HAVE_compare_and_swap
1779#if !defined(AO_HAVE_compare_and_swap) \
1780 && defined(AO_HAVE_compare_and_swap_write)
1781# define AO_compare_and_swap(addr, old, new_val) \
1782 AO_compare_and_swap_write(addr, old, new_val)
1783# define AO_HAVE_compare_and_swap
1785#if !defined(AO_HAVE_compare_and_swap) \
1786 && defined(AO_HAVE_compare_and_swap_read)
1787# define AO_compare_and_swap(addr, old, new_val) \
1788 AO_compare_and_swap_read(addr, old, new_val)
1789# define AO_HAVE_compare_and_swap
1792#if defined(AO_HAVE_compare_and_swap_acquire) \
1793 && defined(AO_HAVE_nop_full) \
1794 && !defined(AO_HAVE_compare_and_swap_full)
1795# define AO_compare_and_swap_full(addr, old, new_val) \
1797 AO_compare_and_swap_acquire(addr, old, new_val))
1798# define AO_HAVE_compare_and_swap_full
1801#if !defined(AO_HAVE_compare_and_swap_release_write) \
1802 && defined(AO_HAVE_compare_and_swap_write)
1803# define AO_compare_and_swap_release_write(addr, old, new_val) \
1804 AO_compare_and_swap_write(addr, old, new_val)
1805# define AO_HAVE_compare_and_swap_release_write
1807#if !defined(AO_HAVE_compare_and_swap_release_write) \
1808 && defined(AO_HAVE_compare_and_swap_release)
1809# define AO_compare_and_swap_release_write(addr, old, new_val) \
1810 AO_compare_and_swap_release(addr, old, new_val)
1811# define AO_HAVE_compare_and_swap_release_write
1813#if !defined(AO_HAVE_compare_and_swap_acquire_read) \
1814 && defined(AO_HAVE_compare_and_swap_read)
1815# define AO_compare_and_swap_acquire_read(addr, old, new_val) \
1816 AO_compare_and_swap_read(addr, old, new_val)
1817# define AO_HAVE_compare_and_swap_acquire_read
1819#if !defined(AO_HAVE_compare_and_swap_acquire_read) \
1820 && defined(AO_HAVE_compare_and_swap_acquire)
1821# define AO_compare_and_swap_acquire_read(addr, old, new_val) \
1822 AO_compare_and_swap_acquire(addr, old, new_val)
1823# define AO_HAVE_compare_and_swap_acquire_read
1826#ifdef AO_NO_DD_ORDERING
1827# if defined(AO_HAVE_compare_and_swap_acquire_read)
1828# define AO_compare_and_swap_dd_acquire_read(addr, old, new_val) \
1829 AO_compare_and_swap_acquire_read(addr, old, new_val)
1830# define AO_HAVE_compare_and_swap_dd_acquire_read
1833# if defined(AO_HAVE_compare_and_swap)
1834# define AO_compare_and_swap_dd_acquire_read(addr, old, new_val) \
1835 AO_compare_and_swap(addr, old, new_val)
1836# define AO_HAVE_compare_and_swap_dd_acquire_read
1841#if defined(AO_HAVE_load_full) && !defined(AO_HAVE_load_acquire)
1842# define AO_load_acquire(addr) AO_load_full(addr)
1843# define AO_HAVE_load_acquire
1846#if defined(AO_HAVE_load_acquire) && !defined(AO_HAVE_load)
1847# define AO_load(addr) AO_load_acquire(addr)
1848# define AO_HAVE_load
1851#if defined(AO_HAVE_load_full) && !defined(AO_HAVE_load_read)
1852# define AO_load_read(addr) AO_load_full(addr)
1853# define AO_HAVE_load_read
1856#if !defined(AO_HAVE_load_acquire_read) \
1857 && defined(AO_HAVE_load_acquire)
1858# define AO_load_acquire_read(addr) AO_load_acquire(addr)
1859# define AO_HAVE_load_acquire_read
1862#if defined(AO_HAVE_load) && defined(AO_HAVE_nop_full) \
1863 && !defined(AO_HAVE_load_acquire)
1874# define AO_HAVE_load_acquire
1877#if defined(AO_HAVE_load) && defined(AO_HAVE_nop_read) \
1878 && !defined(AO_HAVE_load_read)
1880 AO_load_read(
const volatile AO_t *addr)
1887# define AO_HAVE_load_read
1890#if defined(AO_HAVE_load_acquire) && defined(AO_HAVE_nop_full) \
1891 && !defined(AO_HAVE_load_full)
1892# define AO_load_full(addr) (AO_nop_full(), AO_load_acquire(addr))
1893# define AO_HAVE_load_full
1896#if defined(AO_HAVE_compare_and_swap_read) \
1897 && !defined(AO_HAVE_load_read)
1898# define AO_CAS_BASED_LOAD_READ
1901 AO_load_read(
const volatile AO_t *addr)
1908 (
volatile AO_t *)addr,
1912# define AO_HAVE_load_read
1915#if !defined(AO_HAVE_load_acquire_read) \
1916 && defined(AO_HAVE_load_read)
1917# define AO_load_acquire_read(addr) AO_load_read(addr)
1918# define AO_HAVE_load_acquire_read
1921#if defined(AO_HAVE_load_acquire_read) && !defined(AO_HAVE_load) \
1922 && (!defined(AO_CAS_BASED_LOAD_READ) \
1923 || !defined(AO_HAVE_compare_and_swap))
1924# define AO_load(addr) AO_load_acquire_read(addr)
1925# define AO_HAVE_load
1928#if defined(AO_HAVE_compare_and_swap_full) \
1929 && !defined(AO_HAVE_load_full)
1939 (
volatile AO_t *)addr,
1943# define AO_HAVE_load_full
1946#if defined(AO_HAVE_compare_and_swap_acquire) \
1947 && !defined(AO_HAVE_load_acquire)
1957 (
volatile AO_t *)addr,
1961# define AO_HAVE_load_acquire
1964#if defined(AO_HAVE_compare_and_swap) && !defined(AO_HAVE_load)
1974 (
volatile AO_t *)addr,
1978# define AO_HAVE_load
1981#ifdef AO_NO_DD_ORDERING
1982# if defined(AO_HAVE_load_acquire_read)
1983# define AO_load_dd_acquire_read(addr) \
1984 AO_load_acquire_read(addr)
1985# define AO_HAVE_load_dd_acquire_read
1988# if defined(AO_HAVE_load)
1989# define AO_load_dd_acquire_read(addr) AO_load(addr)
1990# define AO_HAVE_load_dd_acquire_read
1995#if defined(AO_HAVE_store_full) && !defined(AO_HAVE_store_release)
1996# define AO_store_release(addr, val) AO_store_full(addr, val)
1997# define AO_HAVE_store_release
2000#if defined(AO_HAVE_store_release) && !defined(AO_HAVE_store)
2001# define AO_store(addr, val) AO_store_release(addr, val)
2002# define AO_HAVE_store
2005#if defined(AO_HAVE_store_full) && !defined(AO_HAVE_store_write)
2006# define AO_store_write(addr, val) AO_store_full(addr, val)
2007# define AO_HAVE_store_write
2010#if defined(AO_HAVE_store_release) \
2011 && !defined(AO_HAVE_store_release_write)
2012# define AO_store_release_write(addr, val) \
2013 AO_store_release(addr, val)
2014# define AO_HAVE_store_release_write
2017#if defined(AO_HAVE_store_write) && !defined(AO_HAVE_store)
2018# define AO_store(addr, val) AO_store_write(addr, val)
2019# define AO_HAVE_store
2022#if defined(AO_HAVE_store) && defined(AO_HAVE_nop_full) \
2023 && !defined(AO_HAVE_store_release)
2024# define AO_store_release(addr, val) \
2025 (AO_nop_full(), AO_store(addr, val))
2026# define AO_HAVE_store_release
2029#if defined(AO_HAVE_store) && defined(AO_HAVE_nop_write) \
2030 && !defined(AO_HAVE_store_write)
2031# define AO_store_write(addr, val) \
2032 (AO_nop_write(), AO_store(addr, val))
2033# define AO_HAVE_store_write
2036#if defined(AO_HAVE_compare_and_swap_write) \
2037 && !defined(AO_HAVE_store_write)
2040 AO_store_write(
volatile AO_t *addr,
AO_t new_val)
2045 old_val = *(
AO_t *)addr;
2049# define AO_HAVE_store_write
2052#if defined(AO_HAVE_store_write) \
2053 && !defined(AO_HAVE_store_release_write)
2054# define AO_store_release_write(addr, val) \
2055 AO_store_write(addr, val)
2056# define AO_HAVE_store_release_write
2059#if defined(AO_HAVE_store_release) && defined(AO_HAVE_nop_full) \
2060 && !defined(AO_HAVE_store_full)
2061# define AO_store_full(addr, val) \
2062 (AO_store_release(addr, val), \
2064# define AO_HAVE_store_full
2067#if defined(AO_HAVE_compare_and_swap) && !defined(AO_HAVE_store)
2075 old_val = *(
AO_t *)addr;
2077 old_val, new_val)));
2079# define AO_HAVE_store
2082#if defined(AO_HAVE_compare_and_swap_release) \
2083 && !defined(AO_HAVE_store_release)
2091 old_val = *(
AO_t *)addr;
2095# define AO_HAVE_store_release
2098#if defined(AO_HAVE_compare_and_swap_full) \
2099 && !defined(AO_HAVE_store_full)
2107 old_val = *(
AO_t *)addr;
2111# define AO_HAVE_store_full
2136#if defined(AO_HAVE_double_fetch_compare_and_swap) \
2137 && defined(AO_HAVE_nop_full) \
2138 && !defined(AO_HAVE_double_fetch_compare_and_swap_acquire)
2140 AO_double_fetch_compare_and_swap_acquire(
volatile AO_double_t *addr,
2147# define AO_HAVE_double_fetch_compare_and_swap_acquire
2149#if defined(AO_HAVE_double_fetch_compare_and_swap) \
2150 && defined(AO_HAVE_nop_full) \
2151 && !defined(AO_HAVE_double_fetch_compare_and_swap_release)
2152# define AO_double_fetch_compare_and_swap_release(addr, old_val, new_val) \
2154 AO_double_fetch_compare_and_swap(addr, old_val, new_val))
2155# define AO_HAVE_double_fetch_compare_and_swap_release
2157#if defined(AO_HAVE_double_fetch_compare_and_swap_full)
2158# if !defined(AO_HAVE_double_fetch_compare_and_swap_release)
2159# define AO_double_fetch_compare_and_swap_release(addr, old_val, new_val) \
2160 AO_double_fetch_compare_and_swap_full(addr, old_val, new_val)
2161# define AO_HAVE_double_fetch_compare_and_swap_release
2163# if !defined(AO_HAVE_double_fetch_compare_and_swap_acquire)
2164# define AO_double_fetch_compare_and_swap_acquire(addr, old_val, new_val) \
2165 AO_double_fetch_compare_and_swap_full(addr, old_val, new_val)
2166# define AO_HAVE_double_fetch_compare_and_swap_acquire
2168# if !defined(AO_HAVE_double_fetch_compare_and_swap_write)
2169# define AO_double_fetch_compare_and_swap_write(addr, old_val, new_val) \
2170 AO_double_fetch_compare_and_swap_full(addr, old_val, new_val)
2171# define AO_HAVE_double_fetch_compare_and_swap_write
2173# if !defined(AO_HAVE_double_fetch_compare_and_swap_read)
2174# define AO_double_fetch_compare_and_swap_read(addr, old_val, new_val) \
2175 AO_double_fetch_compare_and_swap_full(addr, old_val, new_val)
2176# define AO_HAVE_double_fetch_compare_and_swap_read
2180#if !defined(AO_HAVE_double_fetch_compare_and_swap) \
2181 && defined(AO_HAVE_double_fetch_compare_and_swap_release)
2182# define AO_double_fetch_compare_and_swap(addr, old_val, new_val) \
2183 AO_double_fetch_compare_and_swap_release(addr, old_val, new_val)
2184# define AO_HAVE_double_fetch_compare_and_swap
2186#if !defined(AO_HAVE_double_fetch_compare_and_swap) \
2187 && defined(AO_HAVE_double_fetch_compare_and_swap_acquire)
2188# define AO_double_fetch_compare_and_swap(addr, old_val, new_val) \
2189 AO_double_fetch_compare_and_swap_acquire(addr, old_val, new_val)
2190# define AO_HAVE_double_fetch_compare_and_swap
2192#if !defined(AO_HAVE_double_fetch_compare_and_swap) \
2193 && defined(AO_HAVE_double_fetch_compare_and_swap_write)
2194# define AO_double_fetch_compare_and_swap(addr, old_val, new_val) \
2195 AO_double_fetch_compare_and_swap_write(addr, old_val, new_val)
2196# define AO_HAVE_double_fetch_compare_and_swap
2198#if !defined(AO_HAVE_double_fetch_compare_and_swap) \
2199 && defined(AO_HAVE_double_fetch_compare_and_swap_read)
2200# define AO_double_fetch_compare_and_swap(addr, old_val, new_val) \
2201 AO_double_fetch_compare_and_swap_read(addr, old_val, new_val)
2202# define AO_HAVE_double_fetch_compare_and_swap
2205#if defined(AO_HAVE_double_fetch_compare_and_swap_acquire) \
2206 && defined(AO_HAVE_nop_full) \
2207 && !defined(AO_HAVE_double_fetch_compare_and_swap_full)
2208# define AO_double_fetch_compare_and_swap_full(addr, old_val, new_val) \
2210 AO_double_fetch_compare_and_swap_acquire(addr, old_val, new_val))
2211# define AO_HAVE_double_fetch_compare_and_swap_full
2214#if !defined(AO_HAVE_double_fetch_compare_and_swap_release_write) \
2215 && defined(AO_HAVE_double_fetch_compare_and_swap_write)
2216# define AO_double_fetch_compare_and_swap_release_write(addr,old_val,new_val) \
2217 AO_double_fetch_compare_and_swap_write(addr, old_val, new_val)
2218# define AO_HAVE_double_fetch_compare_and_swap_release_write
2220#if !defined(AO_HAVE_double_fetch_compare_and_swap_release_write) \
2221 && defined(AO_HAVE_double_fetch_compare_and_swap_release)
2222# define AO_double_fetch_compare_and_swap_release_write(addr,old_val,new_val) \
2223 AO_double_fetch_compare_and_swap_release(addr, old_val, new_val)
2224# define AO_HAVE_double_fetch_compare_and_swap_release_write
2226#if !defined(AO_HAVE_double_fetch_compare_and_swap_acquire_read) \
2227 && defined(AO_HAVE_double_fetch_compare_and_swap_read)
2228# define AO_double_fetch_compare_and_swap_acquire_read(addr,old_val,new_val) \
2229 AO_double_fetch_compare_and_swap_read(addr, old_val, new_val)
2230# define AO_HAVE_double_fetch_compare_and_swap_acquire_read
2232#if !defined(AO_HAVE_double_fetch_compare_and_swap_acquire_read) \
2233 && defined(AO_HAVE_double_fetch_compare_and_swap_acquire)
2234# define AO_double_fetch_compare_and_swap_acquire_read(addr,old_val,new_val) \
2235 AO_double_fetch_compare_and_swap_acquire(addr, old_val, new_val)
2236# define AO_HAVE_double_fetch_compare_and_swap_acquire_read
2239#ifdef AO_NO_DD_ORDERING
2240# if defined(AO_HAVE_double_fetch_compare_and_swap_acquire_read)
2241# define AO_double_fetch_compare_and_swap_dd_acquire_read(addr,old_val,new_val) \
2242 AO_double_fetch_compare_and_swap_acquire_read(addr, old_val, new_val)
2243# define AO_HAVE_double_fetch_compare_and_swap_dd_acquire_read
2246# if defined(AO_HAVE_double_fetch_compare_and_swap)
2247# define AO_double_fetch_compare_and_swap_dd_acquire_read(addr,old_val,new_val) \
2248 AO_double_fetch_compare_and_swap(addr, old_val, new_val)
2249# define AO_HAVE_double_fetch_compare_and_swap_dd_acquire_read
2254#if defined(AO_HAVE_double_compare_and_swap) && defined(AO_HAVE_nop_full) \
2255 && !defined(AO_HAVE_double_compare_and_swap_acquire)
2264# define AO_HAVE_double_compare_and_swap_acquire
2266#if defined(AO_HAVE_double_compare_and_swap) && defined(AO_HAVE_nop_full) \
2267 && !defined(AO_HAVE_double_compare_and_swap_release)
2268# define AO_double_compare_and_swap_release(addr, old, new_val) \
2269 (AO_nop_full(), AO_double_compare_and_swap(addr, old, new_val))
2270# define AO_HAVE_double_compare_and_swap_release
2272#if defined(AO_HAVE_double_compare_and_swap_full)
2273# if !defined(AO_HAVE_double_compare_and_swap_release)
2274# define AO_double_compare_and_swap_release(addr, old, new_val) \
2275 AO_double_compare_and_swap_full(addr, old, new_val)
2276# define AO_HAVE_double_compare_and_swap_release
2278# if !defined(AO_HAVE_double_compare_and_swap_acquire)
2279# define AO_double_compare_and_swap_acquire(addr, old, new_val) \
2280 AO_double_compare_and_swap_full(addr, old, new_val)
2281# define AO_HAVE_double_compare_and_swap_acquire
2283# if !defined(AO_HAVE_double_compare_and_swap_write)
2284# define AO_double_compare_and_swap_write(addr, old, new_val) \
2285 AO_double_compare_and_swap_full(addr, old, new_val)
2286# define AO_HAVE_double_compare_and_swap_write
2288# if !defined(AO_HAVE_double_compare_and_swap_read)
2289# define AO_double_compare_and_swap_read(addr, old, new_val) \
2290 AO_double_compare_and_swap_full(addr, old, new_val)
2291# define AO_HAVE_double_compare_and_swap_read
2295#if !defined(AO_HAVE_double_compare_and_swap) \
2296 && defined(AO_HAVE_double_compare_and_swap_release)
2297# define AO_double_compare_and_swap(addr, old, new_val) \
2298 AO_double_compare_and_swap_release(addr, old, new_val)
2299# define AO_HAVE_double_compare_and_swap
2301#if !defined(AO_HAVE_double_compare_and_swap) \
2302 && defined(AO_HAVE_double_compare_and_swap_acquire)
2303# define AO_double_compare_and_swap(addr, old, new_val) \
2304 AO_double_compare_and_swap_acquire(addr, old, new_val)
2305# define AO_HAVE_double_compare_and_swap
2307#if !defined(AO_HAVE_double_compare_and_swap) \
2308 && defined(AO_HAVE_double_compare_and_swap_write)
2309# define AO_double_compare_and_swap(addr, old, new_val) \
2310 AO_double_compare_and_swap_write(addr, old, new_val)
2311# define AO_HAVE_double_compare_and_swap
2313#if !defined(AO_HAVE_double_compare_and_swap) \
2314 && defined(AO_HAVE_double_compare_and_swap_read)
2315# define AO_double_compare_and_swap(addr, old, new_val) \
2316 AO_double_compare_and_swap_read(addr, old, new_val)
2317# define AO_HAVE_double_compare_and_swap
2320#if defined(AO_HAVE_double_compare_and_swap_acquire) \
2321 && defined(AO_HAVE_nop_full) \
2322 && !defined(AO_HAVE_double_compare_and_swap_full)
2323# define AO_double_compare_and_swap_full(addr, old, new_val) \
2325 AO_double_compare_and_swap_acquire(addr, old, new_val))
2326# define AO_HAVE_double_compare_and_swap_full
2329#if !defined(AO_HAVE_double_compare_and_swap_release_write) \
2330 && defined(AO_HAVE_double_compare_and_swap_write)
2331# define AO_double_compare_and_swap_release_write(addr, old, new_val) \
2332 AO_double_compare_and_swap_write(addr, old, new_val)
2333# define AO_HAVE_double_compare_and_swap_release_write
2335#if !defined(AO_HAVE_double_compare_and_swap_release_write) \
2336 && defined(AO_HAVE_double_compare_and_swap_release)
2337# define AO_double_compare_and_swap_release_write(addr, old, new_val) \
2338 AO_double_compare_and_swap_release(addr, old, new_val)
2339# define AO_HAVE_double_compare_and_swap_release_write
2341#if !defined(AO_HAVE_double_compare_and_swap_acquire_read) \
2342 && defined(AO_HAVE_double_compare_and_swap_read)
2343# define AO_double_compare_and_swap_acquire_read(addr, old, new_val) \
2344 AO_double_compare_and_swap_read(addr, old, new_val)
2345# define AO_HAVE_double_compare_and_swap_acquire_read
2347#if !defined(AO_HAVE_double_compare_and_swap_acquire_read) \
2348 && defined(AO_HAVE_double_compare_and_swap_acquire)
2349# define AO_double_compare_and_swap_acquire_read(addr, old, new_val) \
2350 AO_double_compare_and_swap_acquire(addr, old, new_val)
2351# define AO_HAVE_double_compare_and_swap_acquire_read
2354#ifdef AO_NO_DD_ORDERING
2355# if defined(AO_HAVE_double_compare_and_swap_acquire_read)
2356# define AO_double_compare_and_swap_dd_acquire_read(addr, old, new_val) \
2357 AO_double_compare_and_swap_acquire_read(addr, old, new_val)
2358# define AO_HAVE_double_compare_and_swap_dd_acquire_read
2361# if defined(AO_HAVE_double_compare_and_swap)
2362# define AO_double_compare_and_swap_dd_acquire_read(addr, old, new_val) \
2363 AO_double_compare_and_swap(addr, old, new_val)
2364# define AO_HAVE_double_compare_and_swap_dd_acquire_read
2369#if defined(AO_HAVE_double_load_full) && !defined(AO_HAVE_double_load_acquire)
2370# define AO_double_load_acquire(addr) AO_double_load_full(addr)
2371# define AO_HAVE_double_load_acquire
2374#if defined(AO_HAVE_double_load_acquire) && !defined(AO_HAVE_double_load)
2375# define AO_double_load(addr) AO_double_load_acquire(addr)
2376# define AO_HAVE_double_load
2379#if defined(AO_HAVE_double_load_full) && !defined(AO_HAVE_double_load_read)
2380# define AO_double_load_read(addr) AO_double_load_full(addr)
2381# define AO_HAVE_double_load_read
2384#if !defined(AO_HAVE_double_load_acquire_read) \
2385 && defined(AO_HAVE_double_load_acquire)
2386# define AO_double_load_acquire_read(addr) AO_double_load_acquire(addr)
2387# define AO_HAVE_double_load_acquire_read
2390#if defined(AO_HAVE_double_load) && defined(AO_HAVE_nop_full) \
2391 && !defined(AO_HAVE_double_load_acquire)
2402# define AO_HAVE_double_load_acquire
2405#if defined(AO_HAVE_double_load) && defined(AO_HAVE_nop_read) \
2406 && !defined(AO_HAVE_double_load_read)
2408 AO_double_load_read(
const volatile AO_double_t *addr)
2415# define AO_HAVE_double_load_read
2418#if defined(AO_HAVE_double_load_acquire) && defined(AO_HAVE_nop_full) \
2419 && !defined(AO_HAVE_double_load_full)
2420# define AO_double_load_full(addr) (AO_nop_full(), AO_double_load_acquire(addr))
2421# define AO_HAVE_double_load_full
2424#if defined(AO_HAVE_double_compare_and_swap_read) \
2425 && !defined(AO_HAVE_double_load_read)
2426# define AO_double_CAS_BASED_LOAD_READ
2429 AO_double_load_read(
const volatile AO_double_t *addr)
2440# define AO_HAVE_double_load_read
2443#if !defined(AO_HAVE_double_load_acquire_read) \
2444 && defined(AO_HAVE_double_load_read)
2445# define AO_double_load_acquire_read(addr) AO_double_load_read(addr)
2446# define AO_HAVE_double_load_acquire_read
2449#if defined(AO_HAVE_double_load_acquire_read) && !defined(AO_HAVE_double_load) \
2450 && (!defined(AO_double_CAS_BASED_LOAD_READ) \
2451 || !defined(AO_HAVE_double_compare_and_swap))
2452# define AO_double_load(addr) AO_double_load_acquire_read(addr)
2453# define AO_HAVE_double_load
2456#if defined(AO_HAVE_double_compare_and_swap_full) \
2457 && !defined(AO_HAVE_double_load_full)
2471# define AO_HAVE_double_load_full
2474#if defined(AO_HAVE_double_compare_and_swap_acquire) \
2475 && !defined(AO_HAVE_double_load_acquire)
2489# define AO_HAVE_double_load_acquire
2492#if defined(AO_HAVE_double_compare_and_swap) && !defined(AO_HAVE_double_load)
2506# define AO_HAVE_double_load
2509#ifdef AO_NO_DD_ORDERING
2510# if defined(AO_HAVE_double_load_acquire_read)
2511# define AO_double_load_dd_acquire_read(addr) \
2512 AO_double_load_acquire_read(addr)
2513# define AO_HAVE_double_load_dd_acquire_read
2516# if defined(AO_HAVE_double_load)
2517# define AO_double_load_dd_acquire_read(addr) AO_double_load(addr)
2518# define AO_HAVE_double_load_dd_acquire_read
2523#if defined(AO_HAVE_double_store_full) && !defined(AO_HAVE_double_store_release)
2524# define AO_double_store_release(addr, val) AO_double_store_full(addr, val)
2525# define AO_HAVE_double_store_release
2528#if defined(AO_HAVE_double_store_release) && !defined(AO_HAVE_double_store)
2529# define AO_double_store(addr, val) AO_double_store_release(addr, val)
2530# define AO_HAVE_double_store
2533#if defined(AO_HAVE_double_store_full) && !defined(AO_HAVE_double_store_write)
2534# define AO_double_store_write(addr, val) AO_double_store_full(addr, val)
2535# define AO_HAVE_double_store_write
2538#if defined(AO_HAVE_double_store_release) \
2539 && !defined(AO_HAVE_double_store_release_write)
2540# define AO_double_store_release_write(addr, val) \
2541 AO_double_store_release(addr, val)
2542# define AO_HAVE_double_store_release_write
2545#if defined(AO_HAVE_double_store_write) && !defined(AO_HAVE_double_store)
2546# define AO_double_store(addr, val) AO_double_store_write(addr, val)
2547# define AO_HAVE_double_store
2550#if defined(AO_HAVE_double_store) && defined(AO_HAVE_nop_full) \
2551 && !defined(AO_HAVE_double_store_release)
2552# define AO_double_store_release(addr, val) \
2553 (AO_nop_full(), AO_double_store(addr, val))
2554# define AO_HAVE_double_store_release
2557#if defined(AO_HAVE_double_store) && defined(AO_HAVE_nop_write) \
2558 && !defined(AO_HAVE_double_store_write)
2559# define AO_double_store_write(addr, val) \
2560 (AO_nop_write(), AO_double_store(addr, val))
2561# define AO_HAVE_double_store_write
2564#if defined(AO_HAVE_double_compare_and_swap_write) \
2565 && !defined(AO_HAVE_double_store_write)
2574 }
while (
AO_EXPECT_FALSE(!AO_double_compare_and_swap_write(addr, old_val,
2577# define AO_HAVE_double_store_write
2580#if defined(AO_HAVE_double_store_write) \
2581 && !defined(AO_HAVE_double_store_release_write)
2582# define AO_double_store_release_write(addr, val) \
2583 AO_double_store_write(addr, val)
2584# define AO_HAVE_double_store_release_write
2587#if defined(AO_HAVE_double_store_release) && defined(AO_HAVE_nop_full) \
2588 && !defined(AO_HAVE_double_store_full)
2589# define AO_double_store_full(addr, val) \
2590 (AO_double_store_release(addr, val), \
2592# define AO_HAVE_double_store_full
2595#if defined(AO_HAVE_double_compare_and_swap) && !defined(AO_HAVE_double_store)
2605 old_val, new_val)));
2607# define AO_HAVE_double_store
2610#if defined(AO_HAVE_double_compare_and_swap_release) \
2611 && !defined(AO_HAVE_double_store_release)
2623# define AO_HAVE_double_store_release
2626#if defined(AO_HAVE_double_compare_and_swap_full) \
2627 && !defined(AO_HAVE_double_store_full)
2639# define AO_HAVE_double_store_full
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 void AO_double_store_release(volatile AO_double_t *addr, AO_double_t value)
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 AO_double_t AO_double_load_acquire(const volatile AO_double_t *addr)
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 AO_double_t AO_double_load(const volatile AO_double_t *addr)
AO_INLINE void AO_double_store(volatile AO_double_t *addr, AO_double_t value)
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)
#define AO_ATTR_NO_SANITIZE_THREAD
#define AO_EXPECT_FALSE(expr)
#define AO_ATTR_NO_SANITIZE_MEMORY
AO_INLINE int AO_compare_and_swap_full(volatile AO_t *addr, AO_t old, AO_t new_val)
#define AO_store_full(addr, val)
AO_INLINE AO_t AO_fetch_compare_and_swap(volatile AO_t *addr, AO_t old_val, AO_t new_val)
AO_INLINE unsigned short AO_short_fetch_compare_and_swap_acquire(volatile unsigned short *addr, unsigned short old, unsigned short new_val)
AO_INLINE unsigned char AO_char_fetch_compare_and_swap_acquire(volatile unsigned char *addr, unsigned char old, unsigned char new_val)
AO_INLINE unsigned int AO_int_fetch_compare_and_swap_acquire(volatile unsigned int *addr, unsigned int old, unsigned int 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_char_store(volatile unsignedchar *addr, unsignedchar value)
AO_INLINE unsigned short AO_short_load(const volatile unsignedshort *addr)
AO_INLINE unsigned AO_int_load_acquire(const volatile unsigned *addr)
AO_INLINE void AO_store_release(volatile AO_t *addr, AO_t value)
AO_INLINE unsigned AO_int_load(const volatile unsigned *addr)
AO_INLINE unsigned char AO_char_load_acquire(const volatile unsignedchar *addr)
AO_INLINE void AO_char_store_release(volatile unsignedchar *addr, unsignedchar value)
AO_INLINE void AO_int_store_release(volatile unsigned *addr, unsigned value)
AO_INLINE unsigned short AO_short_load_acquire(const volatile unsignedshort *addr)
AO_INLINE void AO_store(volatile AO_t *addr, AO_t value)
AO_INLINE void AO_short_store(volatile unsignedshort *addr, unsignedshort value)
AO_INLINE AO_t AO_load(const volatile AO_t *addr)
AO_INLINE void AO_int_store(volatile unsigned *addr, unsigned value)
AO_INLINE unsigned char AO_char_load(const volatile unsignedchar *addr)
AO_INLINE void AO_short_store_release(volatile unsignedshort *addr, unsignedshort value)
AO_INLINE AO_t AO_load_acquire(const volatile AO_t *addr)
AO_INLINE void AO_double_store_full(volatile AO_double_t *addr, AO_double_t value)
AO_INLINE unsigned short AO_short_load_full(const volatile unsigned short *addr)
AO_INLINE void AO_int_store_full(volatile unsigned int *addr, unsigned int val)
AO_INLINE unsigned int AO_int_load_full(const volatile unsigned int *addr)
AO_INLINE void AO_short_store_full(volatile unsigned short *addr, unsigned short val)
AO_INLINE void AO_char_store_full(volatile unsigned char *addr, unsigned char val)
AO_INLINE AO_double_t AO_double_load_full(const volatile AO_double_t *addr)
AO_INLINE unsigned char AO_char_load_full(const volatile unsigned char *addr)
AO_INLINE AO_t AO_load_full(const volatile AO_t *addr)