summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2004-04-08 19:21:34 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2004-04-08 19:21:34 +0000
commit8c7f17b2aaa467718a52380f9b0e62f055caf819 (patch)
treef7c05196a426e13596375f3fce65f42ba0b05209
parentb0792cdde69af6a3c214dfcfe4e4429f4d94142a (diff)
In GO_IF_LREGITIMATE_ADDRESS(), use RTX_OK_FOR_BASE_P() to check for a
valid base register for indexed addressing, rather than providing an incomplete inline version. This allows constructs such as (plus:SI (reg:SI (subreg:SI (reg:DI 1)))) to properly pass through the reload phase if optimization is enabled. Such a construct can be generated with buf[index + index2] = value; if either index or index2 are long long. Fixes the ICE in zsh Src/Zle/computil.c.
-rw-r--r--gnu/egcs/gcc/config/m88k/m88k.h16
1 files changed, 5 insertions, 11 deletions
diff --git a/gnu/egcs/gcc/config/m88k/m88k.h b/gnu/egcs/gcc/config/m88k/m88k.h
index ac5e6e98679..846baae8050 100644
--- a/gnu/egcs/gcc/config/m88k/m88k.h
+++ b/gnu/egcs/gcc/config/m88k/m88k.h
@@ -1320,23 +1320,17 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
? RTX_OK_FOR_BASE_P (_x1) \
: (GET_CODE (_x1) == SYMBOL_REF \
|| GET_CODE (_x1) == LABEL_REF))) \
- || (REG_P (_x0) \
- && (REG_OK_FOR_BASE_P (_x0) \
- && LEGITIMATE_INDEX_P (_x1, MODE))) \
- || (REG_P (_x1) \
- && (REG_OK_FOR_BASE_P (_x1) \
- && LEGITIMATE_INDEX_P (_x0, MODE)))) \
+ || (RTX_OK_FOR_BASE_P (_x0) \
+ && LEGITIMATE_INDEX_P (_x1, MODE)) \
+ || (RTX_OK_FOR_BASE_P (_x1) \
+ && LEGITIMATE_INDEX_P (_x0, MODE))) \
goto ADDR; \
} \
else if (GET_CODE (X) == LO_SUM) \
{ \
register rtx _x0 = XEXP (X, 0); \
register rtx _x1 = XEXP (X, 1); \
- if (((REG_P (_x0) \
- && REG_OK_FOR_BASE_P (_x0)) \
- || (GET_CODE (_x0) == SUBREG \
- && REG_P (SUBREG_REG (_x0)) \
- && REG_OK_FOR_BASE_P (SUBREG_REG (_x0)))) \
+ if (RTX_OK_FOR_BASE_P (_x0) \
&& CONSTANT_P (_x1)) \
goto ADDR; \
} \