diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2004-04-08 19:21:34 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2004-04-08 19:21:34 +0000 |
commit | 8c7f17b2aaa467718a52380f9b0e62f055caf819 (patch) | |
tree | f7c05196a426e13596375f3fce65f42ba0b05209 /gnu | |
parent | b0792cdde69af6a3c214dfcfe4e4429f4d94142a (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.
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/egcs/gcc/config/m88k/m88k.h | 16 |
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; \ } \ |