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>
|
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
|
__arch_compare_and_exchange_32_acq in return value definition. It
|
||||||
always exists.
|
always exists.
|
||||||
(atomic_bit_set): Renamed from atomic_set_bit.
|
(atomic_bit_set): Renamed from atomic_set_bit.
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
while (atomic_compare_and_exchange_acq (__memp, __oldval + __value, \
|
while (atomic_compare_and_exchange_acq (__memp, __oldval + __value, \
|
||||||
__oldval)); \
|
__oldval)); \
|
||||||
\
|
\
|
||||||
__value; })
|
__oldval; })
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,23 +74,53 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef atomic_increment_and_test
|
||||||
|
# define atomic_increment_and_test(mem) \
|
||||||
|
(atomic_exchange_and_add (mem, 1) == 0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifndef atomic_decrement
|
#ifndef atomic_decrement
|
||||||
# define atomic_decrement(mem) atomic_add (mem, -1)
|
# define atomic_decrement(mem) atomic_add (mem, -1)
|
||||||
#endif
|
#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
|
#ifndef atomic_bit_set
|
||||||
# define atomic_bit_set(mem, bit) \
|
# define atomic_bit_set(mem, bit) \
|
||||||
(void) ({ __typeof (mem) __memp = (mem); \
|
(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)); \
|
__typeof (*mem) __mask = (1 << (bit)); \
|
||||||
__typeof (*mem) __oldval; \
|
|
||||||
\
|
\
|
||||||
do \
|
do \
|
||||||
__oldval = *__memp; \
|
__oldval = (*__memp); \
|
||||||
while (atomic_compare_and_exchange_acq (__memp, \
|
while (atomic_compare_and_exchange_acq (__memp, \
|
||||||
__oldval | __mask, \
|
__oldval | __mask, __oldval)); \
|
||||||
__oldval)); \
|
\
|
||||||
}})
|
__oldval & __mask; })
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue