diff options
author | Richard Henderson <rth@redhat.com> | 2010-11-22 13:20:52 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2010-11-22 13:20:52 -0800 |
commit | f8d0a23d6c6dcc0d7c6bb5f26adfecb8d64bbfa9 (patch) | |
tree | 83a2352dd2b7be0d6979d69070390c30908145d0 | |
parent | de9a793edf281596d955cf8d42a229d82d22ab27 (diff) | |
download | gcc-f8d0a23d6c6dcc0d7c6bb5f26adfecb8d64bbfa9.zip gcc-f8d0a23d6c6dcc0d7c6bb5f26adfecb8d64bbfa9.tar.gz gcc-f8d0a23d6c6dcc0d7c6bb5f26adfecb8d64bbfa9.tar.bz2 |
re PR target/46434 (crx-elf --enable-werror-always build fails)
PR target/46434
* config/crx/crx.c (crx_addr_reg): Rename from crx_addr_reg_p;
return the address register extracted.
(crx_decompose_address): Update the extracted address register.
From-SVN: r167053
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/crx/crx.c | 43 |
2 files changed, 29 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 43f4696..753b970 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-11-22 Richard Henderson <rth@redhat.com> + + PR target/46434 + * config/crx/crx.c (crx_addr_reg): Rename from crx_addr_reg_p; + return the address register extracted. + (crx_decompose_address): Update the extracted address register. + 2010-11-22 Dmitry Gorbachev <d.g.gorbachev@gmail.com> PR driver/43335 diff --git a/gcc/config/crx/crx.c b/gcc/config/crx/crx.c index 0691de6..d6b9022 100644 --- a/gcc/config/crx/crx.c +++ b/gcc/config/crx/crx.c @@ -590,30 +590,21 @@ crx_function_arg_regno_p (int n) * Scaled index --> reg + reg | 22-bit disp. + reg + reg | * 22-disp. + reg + reg + (2 | 4 | 8) */ -static int crx_addr_reg_p (rtx addr_reg) +static rtx +crx_addr_reg (rtx addr_reg) { - rtx reg; + if (GET_MODE (addr_reg) != Pmode) + return NULL_RTX; if (REG_P (addr_reg)) - { - reg = addr_reg; - } - else if ((GET_CODE (addr_reg) == SUBREG + return addr_reg; + else if (GET_CODE (addr_reg) == SUBREG && REG_P (SUBREG_REG (addr_reg)) - && GET_MODE_SIZE (GET_MODE (SUBREG_REG (addr_reg))) - <= UNITS_PER_WORD)) - { - reg = SUBREG_REG (addr_reg); - } + && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (addr_reg))) + <= UNITS_PER_WORD)) + return SUBREG_REG (addr_reg); else - return FALSE; - - if (GET_MODE (addr_reg) != Pmode) - { - return FALSE; - } - - return TRUE; + return NULL_RTX; } enum crx_addrtype @@ -752,8 +743,18 @@ crx_decompose_address (rtx addr, struct crx_address *out) return CRX_INVALID; } - if (base && !crx_addr_reg_p (base)) return CRX_INVALID; - if (index && !crx_addr_reg_p (index)) return CRX_INVALID; + if (base) + { + base = crx_addr_reg (base); + if (!base) + return CRX_INVALID; + } + if (index) + { + index = crx_addr_reg (index); + if (!index) + return CRX_INVALID; + } out->base = base; out->index = index; |