aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Greenhalgh <james.greenhalgh@arm.com>2014-11-01 10:14:08 +0000
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>2014-11-01 10:14:08 +0000
commita10ce561035bc1e1ca234dcb233f6bcdb32bfbc0 (patch)
tree311320e72f232631eb491aefbc5ad871f1aa4889
parentae59bd31fe8c3fb7933d7b87aa69d755ae02cc29 (diff)
downloadgcc-a10ce561035bc1e1ca234dcb233f6bcdb32bfbc0.zip
gcc-a10ce561035bc1e1ca234dcb233f6bcdb32bfbc0.tar.gz
gcc-a10ce561035bc1e1ca234dcb233f6bcdb32bfbc0.tar.bz2
[Patch 5/7 mips] Deprecate *_BY_PIECES_P, move to hookized version
gcc/ * config/mips/mips.h (MOVE_BY_PIECES_P): Remove. (STORE_BY_PIECES_P): Likewise. * config/mips/mips.c (TARGET_USE_BY_PIECES_INFRASTRUCTURE_P): New. (mips_move_by_pieces_p): Rename to... (mips_use_by_pieces_infrastructure_p): ...this, use new hook parameters, use the default hook implementation as a fall-back. From-SVN: r217002
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/mips/mips.c24
-rw-r--r--gcc/config/mips/mips.h6
3 files changed, 26 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f193459..7e9ae04 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,15 @@
2014-11-01 James Greenhalgh <james.greenhalgh@arm.com>
+ * config/mips/mips.h (MOVE_BY_PIECES_P): Remove.
+ (STORE_BY_PIECES_P): Likewise.
+ * config/mips/mips.c (TARGET_USE_BY_PIECES_INFRASTRUCTURE_P): New.
+ (mips_move_by_pieces_p): Rename to...
+ (mips_use_by_pieces_infrastructure_p): ...this, use new hook
+ parameters, use the default hook implementation as a
+ fall-back.
+
+2014-11-01 James Greenhalgh <james.greenhalgh@arm.com>
+
* config/sh/sh.c (TARGET_USE_BY_PIECES_INFRASTRUCTURE_P): New.
(sh_use_by_pieces_infrastructure_p): Likewise.
* config/sh/sh.h (MOVE_BY_PIECES_P): Remove.
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 3d9db92..ac7746c 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -7172,12 +7172,17 @@ mips_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
return true;
}
-/* Implement MOVE_BY_PIECES_P. */
+/* Implement TARGET_USE_MOVE_BY_PIECES_INFRASTRUCTURE_P. */
bool
-mips_move_by_pieces_p (unsigned HOST_WIDE_INT size, unsigned int align)
+mips_use_by_pieces_infrastructure_p (unsigned int size,
+ unsigned int align,
+ enum by_pieces_operation op,
+ bool speed_p)
{
- if (HAVE_movmemsi)
+ if (op == STORE_BY_PIECES)
+ return mips_store_by_pieces_p (size, align);
+ if (op == MOVE_BY_PIECES && HAVE_movmemsi)
{
/* movmemsi is meant to generate code that is at least as good as
move_by_pieces. However, movmemsi effectively uses a by-pieces
@@ -7194,13 +7199,12 @@ mips_move_by_pieces_p (unsigned HOST_WIDE_INT size, unsigned int align)
return size < UNITS_PER_WORD;
return size <= MIPS_MAX_MOVE_BYTES_STRAIGHT;
}
- /* The default value. If this becomes a target hook, we should
- call the default definition instead. */
- return (move_by_pieces_ninsns (size, align, MOVE_MAX_PIECES + 1)
- < (unsigned int) MOVE_RATIO (optimize_insn_for_speed_p ()));
+
+ return default_use_by_pieces_infrastructure_p (size, align, op, speed_p);
}
-/* Implement STORE_BY_PIECES_P. */
+/* Implement a handler for STORE_BY_PIECES operations
+ for TARGET_USE_MOVE_BY_PIECES_INFRASTRUCTURE_P. */
bool
mips_store_by_pieces_p (unsigned HOST_WIDE_INT size, unsigned int align)
@@ -19119,6 +19123,10 @@ mips_lra_p (void)
#undef TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS
#define TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS true
+#undef TARGET_USE_BY_PIECES_INFRASTRUCTURE_P
+#define TARGET_USE_BY_PIECES_INFRASTRUCTURE_P \
+ mips_use_by_pieces_infrastructure_p
+
#undef TARGET_SPILL_CLASS
#define TARGET_SPILL_CLASS mips_spill_class
#undef TARGET_LRA_P
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index c7b998b..bf19920 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -2872,9 +2872,6 @@ while (0)
? MIPS_MAX_MOVE_BYTES_STRAIGHT / MOVE_MAX \
: MIPS_CALL_RATIO / 2)
-#define MOVE_BY_PIECES_P(SIZE, ALIGN) \
- mips_move_by_pieces_p (SIZE, ALIGN)
-
/* For CLEAR_RATIO, when optimizing for size, give a better estimate
of the length of a memset call, but use the default otherwise. */
@@ -2887,9 +2884,6 @@ while (0)
#define SET_RATIO(speed) \
((speed) ? 15 : MIPS_CALL_RATIO - 2)
-
-#define STORE_BY_PIECES_P(SIZE, ALIGN) \
- mips_store_by_pieces_p (SIZE, ALIGN)
/* Since the bits of the _init and _fini function is spread across
many object files, each potentially with its own GP, we must assume