* config/linux/wait.h (do_spin): New inline, largely copied
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 Jul 2011 19:46:11 +0000 (19:46 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 Jul 2011 19:46:11 +0000 (19:46 +0000)
commit4dcd09ad839fb64979ea50967f9a4995700d4f7c
tree3db1d5696a3515cfad06bdd05a17d82acd4e5ab8
parent9736d0ec9e0384939f72ba048c7411e1e547f729
* config/linux/wait.h (do_spin): New inline, largely copied
from do_wait, just don't do futex_wait here, instead return true if
it should be done.
(do_wait): Implement using do_spin.
* config/linux/mutex.h (gomp_mutex_lock_slow): Add an int argument
to prototype.
(gomp_mutex_lock): Use __sync_val_compare_and_swap instead of
__sync_bool_compare_and_swap, pass the oldval to
gomp_mutex_lock_slow.
* config/linux/mutex.c (gomp_mutex_lock_slow): Add oldval argument.
If all mutex contenders are just spinning and not sleeping, don't
change state to 2 unnecessarily.  Optimize the loop when state has
already become 2 to use just one atomic operation per loop instead
of two.
* config/linux/ia64/mutex.h (gomp_mutex_lock_slow): Add an int argument
to prototype.
(gomp_mutex_lock): Use __sync_val_compare_and_swap instead of
__sync_bool_compare_and_swap, pass the oldval to
gomp_mutex_lock_slow.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@176326 138bc75d-0d04-0410-961f-82ee72b054a4
libgomp/ChangeLog
libgomp/config/linux/ia64/mutex.h
libgomp/config/linux/mutex.c
libgomp/config/linux/mutex.h
libgomp/config/linux/wait.h