mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-27 03:33:33 +08:00
Update.
* atomic.h: Add a couple more default implementations. (atomic_compare_and_exchange_acq): Use
This commit is contained in:
parent
d45e874013
commit
ec609a8e77
@ -1,6 +1,7 @@
|
||||
2003-02-04 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* atomic.h (atomic_compare_and_exchange_acq): Use
|
||||
* atomic.h: Add a couple more default implementations.
|
||||
(atomic_compare_and_exchange_acq): Use
|
||||
__arch_compare_and_exchange_32_acq in return value definition. It
|
||||
always exists.
|
||||
(atomic_bit_set): Renamed from atomic_set_bit.
|
||||
|
@ -60,7 +60,7 @@
|
||||
while (atomic_compare_and_exchange_acq (__memp, __oldval + __value, \
|
||||
__oldval)); \
|
||||
\
|
||||
__value; })
|
||||
__oldval; })
|
||||
#endif
|
||||
|
||||
|
||||
@ -74,23 +74,53 @@
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef atomic_increment_and_test
|
||||
# define atomic_increment_and_test(mem) \
|
||||
(atomic_exchange_and_add (mem, 1) == 0)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef atomic_decrement
|
||||
# define atomic_decrement(mem) atomic_add (mem, -1)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef atomic_decrement_and_test
|
||||
# define atomic_decrement_and_test(mem) \
|
||||
(atomic_exchange_and_add (mem, -1) == 0)
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef atomic_add_negative
|
||||
# define atomic_add_negative(mem, value) \
|
||||
(atomic_exchange_and_add (mem, value) < 0)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef atomic_add_zero
|
||||
# define atomic_add_zero(mem, value) \
|
||||
(atomic_exchange_and_add (mem, value) == 0)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef atomic_bit_set
|
||||
# define atomic_bit_set(mem, bit) \
|
||||
(void) ({ __typeof (mem) __memp = (mem); \
|
||||
__typeof (*mem) __mask = (1 << (bit)); \
|
||||
__typeof (*mem) __oldval; \
|
||||
(void) atomic_bit_test_set(mem, bit)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef atomic_bit_test_set
|
||||
# define atomic_bit_test_set(mem, bit) \
|
||||
({ __typeof (*mem) __oldval; \
|
||||
__typeof (mem) __memp = (mem); \
|
||||
__typeof (*mem) __mask = (1 << (bit)); \
|
||||
\
|
||||
do \
|
||||
__oldval = *__memp; \
|
||||
while (atomic_compare_and_exchange_acq (__memp, \
|
||||
__oldval | __mask, \
|
||||
__oldval)); \
|
||||
}})
|
||||
do \
|
||||
__oldval = (*__memp); \
|
||||
while (atomic_compare_and_exchange_acq (__memp, \
|
||||
__oldval | __mask, __oldval)); \
|
||||
\
|
||||
__oldval & __mask; })
|
||||
#endif
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user