mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-14 01:00:07 +00:00
Add __glibc_unlikely hint in lll_trylock, lll_cond_trylock.
The macros lll_trylock, lll_cond_trylock are extended by an __glibc_unlikely hint. Now the trylock macros are based on the same assumption about a free/busy lock as lll_lock. With the hint gcc emits code in e.g. pthread_mutex_trylock which does not use jumps if the lock is free. Without the hint it had to jump away if the lock is free. Tested on s390x, ppc. ChangeLog: * sysdeps/nptl/lowlevellock.h (lll_trylock, lll_cond_trylock): Add __glibc_unlikely hint.
This commit is contained in:
parent
f2d7f23a30
commit
df3a4e104f
@ -1,3 +1,8 @@
|
||||
2017-02-06 Stefan Liebler <stli@linux.vnet.ibm.com>
|
||||
|
||||
* sysdeps/nptl/lowlevellock.h (lll_trylock, lll_cond_trylock):
|
||||
Add __glibc_unlikely hint.
|
||||
|
||||
2017-02-06 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
|
||||
[BZ #16640]
|
||||
|
@ -64,13 +64,13 @@
|
||||
0. Otherwise leave lock unchanged and return non-zero to indicate that the
|
||||
lock was not acquired. */
|
||||
#define lll_trylock(lock) \
|
||||
atomic_compare_and_exchange_bool_acq (&(lock), 1, 0)
|
||||
__glibc_unlikely (atomic_compare_and_exchange_bool_acq (&(lock), 1, 0))
|
||||
|
||||
/* If LOCK is 0 (not acquired), set to 2 (acquired, possibly with waiters) and
|
||||
return 0. Otherwise leave lock unchanged and return non-zero to indicate
|
||||
that the lock was not acquired. */
|
||||
#define lll_cond_trylock(lock) \
|
||||
atomic_compare_and_exchange_bool_acq (&(lock), 2, 0)
|
||||
__glibc_unlikely (atomic_compare_and_exchange_bool_acq (&(lock), 2, 0))
|
||||
|
||||
extern void __lll_lock_wait_private (int *futex) attribute_hidden;
|
||||
extern void __lll_lock_wait (int *futex, int private) attribute_hidden;
|
||||
|
Loading…
Reference in New Issue
Block a user