From d3006da6f1f3b24d4274597c30f460e2241fb9e4 Mon Sep 17 00:00:00 2001 From: James Greenhalgh Date: Sat, 1 Nov 2014 10:15:51 +0000 Subject: [PATCH] [Patch 6/7 AArch64] Deprecate *_BY_PIECES_P, move to hookized version 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 | 7 +++++++ gcc/config/aarch64/aarch64.c | 20 ++++++++++++++++++++ gcc/config/aarch64/aarch64.h | 6 ------ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7e9ae04ab20..99150b4f934 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-11-01 James Greenhalgh + + * 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 * config/mips/mips.h (MOVE_BY_PIECES_P): Remove. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 0400fd503d2..9aeac7c2f05 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -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" diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 97b18487593..e22163e62af 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -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. */ -- 2.30.2