diff options
author | Richard Stallman <rms@gnu.org> | 1993-02-17 23:32:16 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1993-02-17 23:32:16 +0000 |
commit | 4de54e922f4123559dba5215e0cd160dd7bcd264 (patch) | |
tree | 5654cc8e69ddb5926111442594269dd8cfac2638 | |
parent | cd3383a39384cc899be7cac6383fafc2dc37a800 (diff) | |
download | gcc-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.h | 26 |
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. */ |