arm.c (arm_emit_load_exclusive): Add acq parameter.
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Mon, 25 Mar 2013 14:41:37 +0000 (14:41 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Mon, 25 Mar 2013 14:41:37 +0000 (14:41 +0000)
commit5ad29f129eac4c5f092578dd1ae4550abf430557
treecdf161b0c85b58ca6485f683a6aee55bcc1831f4
parent03a7dddbdb976cfbc51b5fd64a2fc993e0328398
arm.c (arm_emit_load_exclusive): Add acq parameter.

2013-03-25  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

* config/arm/arm.c (arm_emit_load_exclusive): Add acq parameter.
Emit load-acquire versions when acq is true.
(arm_emit_store_exclusive): Add rel parameter.
Emit store-release versions when rel is true.
(arm_split_compare_and_swap): Use acquire-release instructions
instead.
of barriers when appropriate.
(arm_split_atomic_op): Likewise.
* config/arm/arm.h (TARGET_HAVE_LDACQ): New macro.
* config/arm/unspecs.md (VUNSPEC_LAX): New unspec.
(VUNSPEC_SLX): Likewise.
(VUNSPEC_LDA): Likewise.
(VUNSPEC_STL): Likewise.
* config/arm/sync.md (atomic_load<mode>): New pattern.
(atomic_store<mode>): Likewise.
(arm_load_acquire_exclusive<mode>): Likewise.
(arm_load_acquire_exclusivesi): Likewise.
(arm_load_acquire_exclusivedi): Likewise.
(arm_store_release_exclusive<mode>): Likewise.

From-SVN: r197046
gcc/ChangeLog
gcc/config/arm/arm.c
gcc/config/arm/arm.h
gcc/config/arm/sync.md
gcc/config/arm/unspecs.md