summaryrefslogtreecommitdiff
path: root/src/atomic_ops.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2012-03-26 08:06:19 +0400
committerIvan Maidanski <ivmai@mail.ru>2012-03-26 13:28:08 +0400
commitcc51941b02fddc75952831eb8e28b06d340d2bef (patch)
treeac630d4da3705b8e65cabea9f19b974805ebc073 /src/atomic_ops.c
parentc55bbf932a82af9601a4dff347a0734d4c955b06 (diff)
downloadlibatomic_ops-cc51941b02fddc75952831eb8e28b06d340d2bef.tar.gz
Use __builtin_expect in CAS failure loop condition checks (GCC only)
* src/atomic_ops.c (lock, block_all_signals): Use AO_EXPECT_FALSE. * src/atomic_ops.h (AO_EXPECT_FALSE): New macro. * src/atomic_ops/generalize-small.template (AO_XSIZE_fetch_and_add_full, AO_XSIZE_fetch_and_add_acquire, AO_XSIZE_fetch_and_add_release): Use AO_EXPECT_FALSE for CAS failure check. * src/atomic_ops/generalize.h (AO_fetch_and_add_full, AO_fetch_and_add_acquire, AO_fetch_and_add_release, AO_fetch_and_add, AO_and_full, AO_or_full, AO_xor_full): Likewise. * src/atomic_ops/sysdeps/gcc/arm.h (AO_compare_double_and_swap_double): Likewise. * src/atomic_ops_stack.c (AO_stack_push_explicit_aux_release, AO_stack_pop_explicit_aux_acquire, AO_stack_push_release, AO_stack_pop_acquire): Likewise. * src/atomic_ops/generalize-small.h: Regenerate.
Diffstat (limited to 'src/atomic_ops.c')
-rw-r--r--src/atomic_ops.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/atomic_ops.c b/src/atomic_ops.c
index 79ae28f..c432f2a 100644
--- a/src/atomic_ops.c
+++ b/src/atomic_ops.c
@@ -150,7 +150,7 @@ static void lock_ool(volatile AO_TS_t *l)
AO_INLINE void lock(volatile AO_TS_t *l)
{
- if (AO_test_and_set_acquire(l) == AO_TS_SET)
+ if (AO_EXPECT_FALSE(AO_test_and_set_acquire(l) == AO_TS_SET))
lock_ool(l);
}
@@ -166,7 +166,7 @@ AO_INLINE void unlock(volatile AO_TS_t *l)
AO_INLINE void block_all_signals(sigset_t *old_sigs_ptr)
{
- if (!AO_load_acquire(&initialized))
+ if (AO_EXPECT_FALSE(!AO_load_acquire(&initialized)))
{
lock(&init_lock);
if (!initialized)