aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-02-17 23:32:16 +0000
committerRichard Stallman <rms@gnu.org>1993-02-17 23:32:16 +0000
commit4de54e922f4123559dba5215e0cd160dd7bcd264 (patch)
tree5654cc8e69ddb5926111442594269dd8cfac2638
parentcd3383a39384cc899be7cac6383fafc2dc37a800 (diff)
downloadgcc-4de54e922f4123559dba5215e0cd160dd7bcd264.zip
gcc-4de54e922f4123559dba5215e0cd160dd7bcd264.tar.gz
gcc-4de54e922f4123559dba5215e0cd160dd7bcd264.tar.bz2
(CONST_COSTS): Updated to better reflect
the actual constant costs on a we32k. (GO_IF_LEGITIMATE_ADDRESS): Added support for deferred addressing. From-SVN: r3482
-rw-r--r--gcc/config/we32k/we32k.h26
1 files changed, 16 insertions, 10 deletions
diff --git a/gcc/config/we32k/we32k.h b/gcc/config/we32k/we32k.h
index 05fb13d..974b8e60 100644
--- a/gcc/config/we32k/we32k.h
+++ b/gcc/config/we32k/we32k.h
@@ -580,10 +580,14 @@ enum reg_class { NO_REGS, GENERAL_REGS,
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL) \
{ register rtx Addr = X; \
- if (REG_P(Addr) && REG_OK_FOR_BASE_P(Addr)) \
- goto LABEL; \
+ if ((MODE) == QImode || (MODE) == HImode || \
+ (MODE) == PSImode || (MODE) == SImode || (MODE) == SFmode) \
+ if (GET_CODE(Addr) == MEM) \
+ Addr = XEXP(Addr, 0); \
if (CONSTANT_ADDRESS_P(Addr)) \
goto LABEL; \
+ if (REG_P(Addr) && REG_OK_FOR_BASE_P(Addr)) \
+ goto LABEL; \
if (GET_CODE(Addr) == PLUS && \
((REG_P(XEXP(Addr, 0)) && REG_OK_FOR_BASE_P(XEXP(Addr, 0)) && \
CONSTANT_ADDRESS_P(XEXP(Addr, 1))) || \
@@ -672,14 +676,16 @@ enum reg_class { NO_REGS, GENERAL_REGS,
of a switch statement. If the code is computed here,
return it with a return statement. Otherwise, break from the switch. */
-#define CONST_COSTS(RTX,CODE, OUTER_CODE) \
- case CONST_INT: \
- if ((unsigned) INTVAL (RTX) < 077) return 1; \
- case CONST: \
- case LABEL_REF: \
- case SYMBOL_REF: \
- return 3; \
- case CONST_DOUBLE: \
+#define CONST_COSTS(RTX,CODE, OUTER_CODE) \
+ case CONST_INT: \
+ if (INTVAL (RTX) >= -16 && INTVAL (RTX) <= 63) return 0; \
+ if (INTVAL (RTX) >= -128 && INTVAL (RTX) <= 127) return 1; \
+ if (INTVAL (RTX) >= -32768 && INTVAL (RTX) <= 32767) return 2; \
+ case CONST: \
+ case LABEL_REF: \
+ case SYMBOL_REF: \
+ return 3; \
+ case CONST_DOUBLE: \
return 5;
/* Tell final.c how to eliminate redundant test instructions. */