optab.c (maybe_emit_atomic_exchange): New.
authorAndrew MacLeod <amacleod@redhat.com>
Thu, 24 Nov 2011 23:14:31 +0000 (23:14 +0000)
committerAndrew Macleod <amacleod@gcc.gnu.org>
Thu, 24 Nov 2011 23:14:31 +0000 (23:14 +0000)
commit744accb21bd7b45ad5d0bfd63dda028d86e2a09b
treebf092826976e956804e16b109cecf1f0d3830700
parentbee51209f65f0d80bc8cfd7a494d1d6c4f730c2b
optab.c (maybe_emit_atomic_exchange): New.

2011-11-24  Andrew MacLeod  <amacleod@redhat.com>

* optab.c (maybe_emit_atomic_exchange): New.  Try to emit an
atomic_exchange pattern.
(maybe_emit_sync_lock_test_and_set): New.  Try to emit an exchange
using __sync_lock_test_and_set.
(maybe_emit_compare_and_swap_exchange_loop): New. Try to emit an
exchange using a compare_and_swap loop.
(expand_sync_lock_test_and_set): New.  Expand sync_lock_test_and_set.
(expand_atomic_test_and_set): New.  Expand test_and_set operation.
(expand_atomic_exchange): Use new maybe_emit_* functions.
(expand_atomic_store): Use new maybe_emit_* functions.
* builtins.c (expand_builtin_sync_lock_test_and_set): Call
expand_sync_lock_test_and_set routine.
(expand_builtin_atomic_exchange): Remove parameter from call.
(expand_builtin_atomic_clear): Use atomic_clear pattern if present.
(expand_builtin_atomic_test_and_set): Add target and simply call
expand_atomic_test_and_set.
(expand_builtin): Add target to expand_builtin_atomic_test_and_set.
* expr.h (expand_atomic_exchange): Add parameter.
(expand_sync_lock_test_and_set): New prototype.
(expand_atomic_test_and_set, expand_atomic_clear): New prototypes.

From-SVN: r181702
gcc/ChangeLog
gcc/builtins.c
gcc/expr.h
gcc/optabs.c