aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatoly Sokolov <aesok@post.ru>2010-11-16 18:47:31 +0300
committerAnatoly Sokolov <aesok@gcc.gnu.org>2010-11-16 18:47:31 +0300
commitf2831cc91f95831e8ff6094262323e5413ffc3cb (patch)
tree77f80aff8a7a5fd3fd157ac2449305e66cb949c9
parent64aad6898e8844529fa141d2795d72d369dc29be (diff)
downloadgcc-f2831cc91f95831e8ff6094262323e5413ffc3cb.zip
gcc-f2831cc91f95831e8ff6094262323e5413ffc3cb.tar.gz
gcc-f2831cc91f95831e8ff6094262323e5413ffc3cb.tar.bz2
mn10300.h (PREFERRED_RELOAD_CLASS, [...]): Remove.
* config/mn10300/mn10300.h (PREFERRED_RELOAD_CLASS, PREFERRED_OUTPUT_RELOAD_CLASS): Remove. * config/mn10300/mn10300.c (TARGET_PREFERRED_RELOAD_CLASS, TARGET_PREFERRED_OUTPUT_RELOAD_CLASS): Define. (mn10300_preferred_reload_class, mn10300_preferred_output_reload_class): New functions. From-SVN: r166805
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/mn10300/mn10300.c34
-rw-r--r--gcc/config/mn10300/mn10300.h21
3 files changed, 43 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0016f51..03c109a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2010-11-16 Anatoly Sokolov <aesok@post.ru>
+
+ * config/mn10300/mn10300.h (PREFERRED_RELOAD_CLASS,
+ PREFERRED_OUTPUT_RELOAD_CLASS): Remove.
+ * config/mn10300/mn10300.c (TARGET_PREFERRED_RELOAD_CLASS,
+ TARGET_PREFERRED_OUTPUT_RELOAD_CLASS): Define.
+ (mn10300_preferred_reload_class,
+ mn10300_preferred_output_reload_class): New functions.
+
2010-11-16 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* gensupport.c (MNEMONIC_ATTR_NAME, MNEMONIC_HTAB_SIZE): New
diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c
index 78d7aa2..868208a 100644
--- a/gcc/config/mn10300/mn10300.c
+++ b/gcc/config/mn10300/mn10300.c
@@ -1270,6 +1270,35 @@ mn10300_store_multiple_operation (rtx op,
return mask;
}
+/* Implement TARGET_PREFERRED_RELOAD_CLASS. */
+
+static reg_class_t
+mn10300_preferred_reload_class (rtx x, reg_class_t rclass)
+{
+ if (x == stack_pointer_rtx && rclass != SP_REGS)
+ return ADDRESS_OR_EXTENDED_REGS;
+ else if (MEM_P (x)
+ || (REG_P (x)
+ && !HARD_REGISTER_P (x))
+ || (GET_CODE (x) == SUBREG
+ && REG_P (SUBREG_REG (x))
+ && !HARD_REGISTER_P (SUBREG_REG (x))))
+ return LIMIT_RELOAD_CLASS (GET_MODE (x), rclass);
+ else
+ return rclass;
+}
+
+/* Implement TARGET_PREFERRED_OUTPUT_RELOAD_CLASS. */
+
+static reg_class_t
+mn10300_preferred_output_reload_class (rtx x, reg_class_t rclass)
+{
+ if (x == stack_pointer_rtx && rclass != SP_REGS)
+ return ADDRESS_OR_EXTENDED_REGS;
+
+ return rclass;
+}
+
/* What (if any) secondary registers are needed to move IN with mode
MODE into a register in register class RCLASS.
@@ -2460,6 +2489,11 @@ mn10300_adjust_sched_cost (rtx insn, rtx link, rtx dep, int cost)
#undef TARGET_LEGITIMATE_ADDRESS_P
#define TARGET_LEGITIMATE_ADDRESS_P mn10300_legitimate_address_p
+#undef TARGET_PREFERRED_RELOAD_CLASS
+#define TARGET_PREFERRED_RELOAD_CLASS mn10300_preferred_reload_class
+#undef TARGET_PREFERRED_OUTPUT_RELOAD_CLASS
+#define TARGET_PREFERRED_OUTPUT_RELOAD_CLASS mn10300_preferred_output_reload_class
+
#undef TARGET_ASM_TRAMPOLINE_TEMPLATE
#define TARGET_ASM_TRAMPOLINE_TEMPLATE mn10300_asm_trampoline_template
#undef TARGET_TRAMPOLINE_INIT
diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h
index c9f76f8..7367d1b 100644
--- a/gcc/config/mn10300/mn10300.h
+++ b/gcc/config/mn10300/mn10300.h
@@ -422,27 +422,6 @@ enum reg_class
#define REG_OK_FOR_INDEX_P(X) \
(REGNO_OK_FOR_INDEX_P (REGNO (X)))
-/* Given an rtx X being reloaded into a reg required to be
- in class CLASS, return the class of reg to actually use.
- In general this is just CLASS; but on some machines
- in some cases it is preferable to use a more restrictive class. */
-
-#define PREFERRED_RELOAD_CLASS(X,CLASS) \
- ((X) == stack_pointer_rtx && (CLASS) != SP_REGS \
- ? ADDRESS_OR_EXTENDED_REGS \
- : (MEM_P (X) \
- || (REG_P (X) \
- && REGNO (X) >= FIRST_PSEUDO_REGISTER) \
- || (GET_CODE (X) == SUBREG \
- && REG_P (SUBREG_REG (X)) \
- && REGNO (SUBREG_REG (X)) >= FIRST_PSEUDO_REGISTER) \
- ? LIMIT_RELOAD_CLASS (GET_MODE (X), CLASS) \
- : (CLASS)))
-
-#define PREFERRED_OUTPUT_RELOAD_CLASS(X,CLASS) \
- (X == stack_pointer_rtx && CLASS != SP_REGS \
- ? ADDRESS_OR_EXTENDED_REGS : CLASS)
-
#define LIMIT_RELOAD_CLASS(MODE, CLASS) \
(!TARGET_AM33 && (MODE == QImode || MODE == HImode) ? DATA_REGS : CLASS)