aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoern Rennecke <amylaar@gcc.gnu.org>1996-10-28 14:06:28 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>1996-10-28 14:06:28 +0000
commit0f68f06bf4d93a68339490f45921d895a21e6d07 (patch)
tree177c8c78394bf7bfcb140c9db48f49bc4933369e /gcc
parent7f74cc8d2062ae68efbf5be2130c8474fc039260 (diff)
downloadgcc-0f68f06bf4d93a68339490f45921d895a21e6d07.zip
gcc-0f68f06bf4d93a68339490f45921d895a21e6d07.tar.gz
gcc-0f68f06bf4d93a68339490f45921d895a21e6d07.tar.bz2
(SECONDARY_INPUT_RELOAD_CLASS): Define.
From-SVN: r13047
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/sh/sh.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h
index 0d7a5c9..217ce5a 100644
--- a/gcc/config/sh/sh.h
+++ b/gcc/config/sh/sh.h
@@ -585,6 +585,21 @@ extern enum reg_class reg_class_from_letter[];
#define PREFERRED_RELOAD_CLASS(X, CLASS) CLASS
+/* ??? Should make FPUL register a nn-fixed register and make it's
+ use explicit in the rtl; then change this definition here to
+ ... ? FPUL_REGS : NO_REGS) . */
+#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,X) \
+ ((((CLASS == FP_REGS || CLASS == FP0_REGS) \
+ && GET_CODE (X) == REG && REGNO (X) <= AP_REG) \
+ || (CLASS == GENERAL_REGS && GET_CODE (X) == REG \
+ && REGNO (X) <= FIRST_FP_REG && REGNO (X) >= LAST_FP_REG)) \
+ ? /* FPUL_REGS */ NO_REGS : NO_REGS)
+
+#define SECONDARY_INPUT_RELOAD_CLASS(CLASS,MODE,X) \
+ (((CLASS == FP_REGS || CLASS == FP0_REGS) && immediate_operand (X, MODE)\
+ && ! (fp_one_operand (X) || fp_one_operand (X))) \
+ ? R0_REGS : SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,X))
+
/* Return the maximum number of consecutive registers
needed to represent mode MODE in a register of class CLASS.