[Patch 6/7 AArch64] Deprecate *_BY_PIECES_P, move to hookized version
authorJames Greenhalgh <james.greenhalgh@arm.com>
Sat, 1 Nov 2014 10:15:51 +0000 (10:15 +0000)
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>
Sat, 1 Nov 2014 10:15:51 +0000 (10:15 +0000)
gcc/

* config/aarch64/aarch64.c
(aarch64_use_by_pieces_infrastructre_p): New.
(TARGET_USE_BY_PIECES_INFRASTRUCTURE): Likewise.
* config/aarch64/aarch64.h (STORE_BY_PIECES_P): Delete.

From-SVN: r217003

gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.h

index 7e9ae04ab2027a05f18debcba8e7ea627113c276..99150b4f934c4b40cac4bbe7a465603e8e840799 100644 (file)
@@ -1,3 +1,10 @@
+2014-11-01  James Greenhalgh  <james.greenhalgh@arm.com>
+
+       * config/aarch64/aarch64.c
+       (aarch64_use_by_pieces_infrastructre_p): New.
+       (TARGET_USE_BY_PIECES_INFRASTRUCTURE): Likewise.
+       * config/aarch64/aarch64.h (STORE_BY_PIECES_P): Delete.
+
 2014-11-01  James Greenhalgh  <james.greenhalgh@arm.com>
 
        * config/mips/mips.h (MOVE_BY_PIECES_P): Remove.
index 0400fd503d26b2bb482589a14d10e032edba83b3..9aeac7c2f052a78a05d9cc2882b45a7809673eac 100644 (file)
@@ -10001,6 +10001,22 @@ aarch64_asan_shadow_offset (void)
   return (HOST_WIDE_INT_1 << 36);
 }
 
+static bool
+aarch64_use_by_pieces_infrastructure_p (unsigned int size,
+                                       unsigned int align,
+                                       enum by_pieces_operation op,
+                                       bool speed_p)
+{
+  /* STORE_BY_PIECES can be used when copying a constant string, but
+     in that case each 64-bit chunk takes 5 insns instead of 2 (LDR/STR).
+     For now we always fail this and let the move_by_pieces code copy
+     the string from read-only memory.  */
+  if (op == STORE_BY_PIECES)
+    return false;
+
+  return default_use_by_pieces_infrastructure_p (size, align, op, speed_p);
+}
+
 #undef TARGET_ADDRESS_COST
 #define TARGET_ADDRESS_COST aarch64_address_cost
 
@@ -10253,6 +10269,10 @@ aarch64_asan_shadow_offset (void)
 #undef TARGET_LEGITIMIZE_ADDRESS
 #define TARGET_LEGITIMIZE_ADDRESS aarch64_legitimize_address
 
+#undef TARGET_USE_BY_PIECES_INFRASTRUCTURE_P
+#define TARGET_USE_BY_PIECES_INFRASTRUCTURE_P \
+  aarch64_use_by_pieces_infrastructure_p
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 
 #include "gt-aarch64.h"
index 97b184875938a39c595744994701ecf2e243bcd9..e22163e62af23c80a9bc54a6c7b80812e14de623 100644 (file)
@@ -723,12 +723,6 @@ do {                                                                            \
 #define SET_RATIO(speed) \
   ((speed) ? 15 : AARCH64_CALL_RATIO - 2)
 
-/* STORE_BY_PIECES_P can be used when copying a constant string, but
-   in that case each 64-bit chunk takes 5 insns instead of 2 (LDR/STR).
-   For now we always fail this and let the move_by_pieces code copy
-   the string from read-only memory.  */
-#define STORE_BY_PIECES_P(SIZE, ALIGN) 0
-
 /* Disable auto-increment in move_by_pieces et al.  Use of auto-increment is
    rarely a good idea in straight-line code since it adds an extra address
    dependency between each instruction.  Better to use incrementing offsets.  */