diff options
| author | Ivan Maidanski <ivmai@mail.ru> | 2012-03-26 08:06:19 +0400 |
|---|---|---|
| committer | Ivan Maidanski <ivmai@mail.ru> | 2012-03-26 13:28:08 +0400 |
| commit | cc51941b02fddc75952831eb8e28b06d340d2bef (patch) | |
| tree | ac630d4da3705b8e65cabea9f19b974805ebc073 /src/atomic_ops.c | |
| parent | c55bbf932a82af9601a4dff347a0734d4c955b06 (diff) | |
| download | libatomic_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.c | 4 |
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) |
