From f8d0a23d6c6dcc0d7c6bb5f26adfecb8d64bbfa9 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Mon, 22 Nov 2010 13:20:52 -0800 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/config/crx/crx.c | 43 ++++++++++++++++++++++--------------------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 43f469670ee..753b9702ba0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-11-22 Richard Henderson + + 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 PR driver/43335 diff --git a/gcc/config/crx/crx.c b/gcc/config/crx/crx.c index 0691de69b2f..d6b9022b239 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; -- 2.30.2