This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
RE: [PATCH][ARM][1/2] Load-acquire, store-release atomics in AArch32 ARMv8
- From: "Kyrylo Tkachov" <kyrylo dot tkachov at arm dot com>
- To: <gcc-patches at gcc dot gnu dot org>
- Cc: "Ramana Radhakrishnan" <Ramana dot Radhakrishnan at arm dot com>, "Richard Earnshaw" <Richard dot Earnshaw at arm dot com>
- Date: Fri, 22 Mar 2013 12:09:25 -0000
- Subject: RE: [PATCH][ARM][1/2] Load-acquire, store-release atomics in AArch32 ARMv8
- References: <001901cdff02$28d09c30$7a71d490$ at tkachov@arm.com>
Ping?
http://gcc.gnu.org/ml/gcc-patches/2013-01/msg01441.html
I thought this was ok'd for 4.9 but I can't seem to find the ok email in the
archives.
Thanks,
Kyrill
> -----Original Message-----
> From: gcc-patches-owner@gcc.gnu.org [mailto:gcc-patches-
> owner@gcc.gnu.org] On Behalf Of Kyrylo Tkachov
> Sent: 30 January 2013 15:55
> To: gcc-patches@gcc.gnu.org
> Cc: Ramana Radhakrishnan; Richard Earnshaw
> Subject: [PATCH][ARM][1/2] Load-acquire, store-release atomics in
> AArch32 ARMv8
>
> Hi all,
>
> This patch implements the atomic built-ins using the new ARMv8 load-
> acquire
> and store-release instructions.
> They allow us to generate barrier-free code for a variety of atomic
> operations such as: atomic load, atomic store, atomic compare and swap,
> atomic {or, and, add, sub, xor}.
>
> Tests will come in a separate patch soon.
> No regressions on arm-none-eabi. Bootstrap on armv7l-unknown-linux-
> gnueabihf
> successful.
>
> Ok for trunk (now or when stage 1 reopens)?
>
> Thanks,
> Kyrill
>
> gcc/ChangeLog
>
> 2013-01-23 Kyrylo Tkachov <kyrylo.tkachov at 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.