aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2010-11-22 13:20:52 -0800
committerRichard Henderson <rth@gcc.gnu.org>2010-11-22 13:20:52 -0800
commitf8d0a23d6c6dcc0d7c6bb5f26adfecb8d64bbfa9 (patch)
tree83a2352dd2b7be0d6979d69070390c30908145d0 /gcc
parentde9a793edf281596d955cf8d42a229d82d22ab27 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/crx/crx.c43
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;