Hello One of the review comments for the v8.1 atomics patches was that the iterators and unspec declarations should be moved out of the atomics.md file (https://gcc.gnu.org/ml/gcc-patches/2015-09/msg01375.html).
The iterators in atomics.md are tied to the unspecv definition in the same file. This patch moves both into iterators.md. Tested aarch64-none-elf with cross-compiled check-gcc and aarch64-none-linux-gnu with native bootstrap and make check. Ok for trunk? Matthew gcc/ 2015-11-02 Matthew Wahab <matthew.wa...@arm.com> * config/aarch64/atomics.md (unspecv): Move to iterators.md. (ATOMIC_LDOP): Likewise. (atomic_ldop): Likewise. * config/aarch64/iterators.md (unspecv): Moved from atomics.md. (ATOMIC_LDOP): Likewise. (atomic_ldop): Likewise.
>From 90471e373421b838d1069cddb54abe0377fdc244 Mon Sep 17 00:00:00 2001 From: Matthew Wahab <matthew.wa...@arm.com> Date: Thu, 29 Oct 2015 15:44:41 +0000 Subject: [PATCH] [AArch64] Move atomics iterators into iteraors.md Change-Id: Ie83ae9c983762c10920db6bf3f2e2d4fa33167b2 --- gcc/config/aarch64/atomics.md | 28 ---------------------------- gcc/config/aarch64/iterators.md | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md index e7ac5f6..3c034fb 100644 --- a/gcc/config/aarch64/atomics.md +++ b/gcc/config/aarch64/atomics.md @@ -18,34 +18,6 @@ ;; along with GCC; see the file COPYING3. If not see ;; <http://www.gnu.org/licenses/>. -(define_c_enum "unspecv" - [ - UNSPECV_LX ; Represent a load-exclusive. - UNSPECV_SX ; Represent a store-exclusive. - UNSPECV_LDA ; Represent an atomic load or load-acquire. - UNSPECV_STL ; Represent an atomic store or store-release. - UNSPECV_ATOMIC_CMPSW ; Represent an atomic compare swap. - UNSPECV_ATOMIC_EXCHG ; Represent an atomic exchange. - UNSPECV_ATOMIC_CAS ; Represent an atomic CAS. - UNSPECV_ATOMIC_SWP ; Represent an atomic SWP. - UNSPECV_ATOMIC_OP ; Represent an atomic operation. - UNSPECV_ATOMIC_LDOP ; Represent an atomic load-operation - UNSPECV_ATOMIC_LDOP_OR ; Represent an atomic load-or - UNSPECV_ATOMIC_LDOP_BIC ; Represent an atomic load-bic - UNSPECV_ATOMIC_LDOP_XOR ; Represent an atomic load-xor - UNSPECV_ATOMIC_LDOP_PLUS ; Represent an atomic load-add -]) - -;; Iterators for load-operate instructions. - -(define_int_iterator ATOMIC_LDOP - [UNSPECV_ATOMIC_LDOP_OR UNSPECV_ATOMIC_LDOP_BIC - UNSPECV_ATOMIC_LDOP_XOR UNSPECV_ATOMIC_LDOP_PLUS]) - -(define_int_attr atomic_ldop - [(UNSPECV_ATOMIC_LDOP_OR "set") (UNSPECV_ATOMIC_LDOP_BIC "clr") - (UNSPECV_ATOMIC_LDOP_XOR "eor") (UNSPECV_ATOMIC_LDOP_PLUS "add")]) - ;; Instruction patterns. (define_expand "atomic_compare_and_swap<mode>" diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index 964f8f1..fe7ca39 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -305,6 +305,29 @@ UNSPEC_VEC_SHR ; Used in aarch64-simd.md. ]) +;; ------------------------------------------------------------------ +;; Unspec enumerations for Atomics. They are here so that they can be +;; used in the int_iterators for atomic operations. +;; ------------------------------------------------------------------ + +(define_c_enum "unspecv" + [ + UNSPECV_LX ; Represent a load-exclusive. + UNSPECV_SX ; Represent a store-exclusive. + UNSPECV_LDA ; Represent an atomic load or load-acquire. + UNSPECV_STL ; Represent an atomic store or store-release. + UNSPECV_ATOMIC_CMPSW ; Represent an atomic compare swap. + UNSPECV_ATOMIC_EXCHG ; Represent an atomic exchange. + UNSPECV_ATOMIC_CAS ; Represent an atomic CAS. + UNSPECV_ATOMIC_SWP ; Represent an atomic SWP. + UNSPECV_ATOMIC_OP ; Represent an atomic operation. + UNSPECV_ATOMIC_LDOP ; Represent an atomic load-operation + UNSPECV_ATOMIC_LDOP_OR ; Represent an atomic load-or + UNSPECV_ATOMIC_LDOP_BIC ; Represent an atomic load-bic + UNSPECV_ATOMIC_LDOP_XOR ; Represent an atomic load-xor + UNSPECV_ATOMIC_LDOP_PLUS ; Represent an atomic load-add +]) + ;; ------------------------------------------------------------------- ;; Mode attributes ;; ------------------------------------------------------------------- @@ -958,6 +981,16 @@ (define_int_iterator CRYPTO_SHA256 [UNSPEC_SHA256H UNSPEC_SHA256H2]) +;; Iterators for atomic operations. + +(define_int_iterator ATOMIC_LDOP + [UNSPECV_ATOMIC_LDOP_OR UNSPECV_ATOMIC_LDOP_BIC + UNSPECV_ATOMIC_LDOP_XOR UNSPECV_ATOMIC_LDOP_PLUS]) + +(define_int_attr atomic_ldop + [(UNSPECV_ATOMIC_LDOP_OR "set") (UNSPECV_ATOMIC_LDOP_BIC "clr") + (UNSPECV_ATOMIC_LDOP_XOR "eor") (UNSPECV_ATOMIC_LDOP_PLUS "add")]) + ;; ------------------------------------------------------------------- ;; Int Iterators Attributes. ;; ------------------------------------------------------------------- -- 2.1.4