diff options
author | Anatoly Sokolov <aesok@post.ru> | 2010-11-16 18:47:31 +0300 |
---|---|---|
committer | Anatoly Sokolov <aesok@gcc.gnu.org> | 2010-11-16 18:47:31 +0300 |
commit | f2831cc91f95831e8ff6094262323e5413ffc3cb (patch) | |
tree | 77f80aff8a7a5fd3fd157ac2449305e66cb949c9 | |
parent | 64aad6898e8844529fa141d2795d72d369dc29be (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/mn10300/mn10300.c | 34 | ||||
-rw-r--r-- | gcc/config/mn10300/mn10300.h | 21 |
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) |