On 18/09/15 09:39, James Greenhalgh wrote:
On Thu, Sep 17, 2015 at 05:42:35PM +0100, Matthew Wahab wrote:
---
  gcc/config/aarch64/atomics.md | 41 +++++++++++++++++++++++++++++++++++++++++
  1 file changed, 41 insertions(+)

diff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md
index 0e71002..b7b6fb5 100644
--- a/gcc/config/aarch64/atomics.md
+++ b/gcc/config/aarch64/atomics.md
@@ -29,8 +29,25 @@
      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")])

There is precedent (atomic_optab, atomic_op_operand, const_atomic, etc.) for
these living in config/aarch64/iterators.md so they should be moved there.
Presumably the difficulty with that is to do with the position of the
"unspecv" define_c_enum? I'd argue that is in the wrong place too...

If you want to leave this to a cleanup patch in stage 3 that is fine.

This patch is OK for trunk.


I'd prefer to keep the clean-up separate from this series. I'll commit the patch as it is and the deal with the iterator move later.

Thanks,
Matthew

Reply via email to