aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1999-07-13 09:48:04 +0000
committerJeff Law <law@gcc.gnu.org>1999-07-13 03:48:04 -0600
commit02441cd6c686b750375d51db3b47758150cdc716 (patch)
tree9b13432a16acff44627796351c071a87cd355a0d
parentac6fed4fd48f679e25da1da4b33b5cfad8669864 (diff)
downloadgcc-02441cd6c686b750375d51db3b47758150cdc716.zip
gcc-02441cd6c686b750375d51db3b47758150cdc716.tar.gz
gcc-02441cd6c686b750375d51db3b47758150cdc716.tar.bz2
rs6000.c (find_addr_reg): Do not select r0 as an address register.
* rs6000.c (find_addr_reg): Do not select r0 as an address register. From-SVN: r28084
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000.c14
2 files changed, 15 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a356b64..423cc0d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Tue Jul 13 10:45:58 1999 Jeffrey A Law (law@cygnus.com)
+
+ * rs6000.c (find_addr_reg): Do not select r0 as an address
+ register.
+
Tue Jul 13 00:46:18 1999 Philippe De Muyter <phdm@macqel.be>
* m68k/x-mot3300 (XCFLAGS): List of big files now includes `cse.o'.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index c49fd07..f568bed 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -5697,7 +5697,11 @@ rs6000_encode_section_info (decl)
/* Return a REG that occurs in ADDR with coefficient 1.
- ADDR can be effectively incremented by incrementing REG. */
+ ADDR can be effectively incremented by incrementing REG.
+
+ r0 is special and we must not select it as an address
+ register by this routine since our caller will try to
+ increment the returned register via an "la" instruction. */
struct rtx_def *
find_addr_reg (addr)
@@ -5705,9 +5709,11 @@ find_addr_reg (addr)
{
while (GET_CODE (addr) == PLUS)
{
- if (GET_CODE (XEXP (addr, 0)) == REG)
+ if (GET_CODE (XEXP (addr, 0)) == REG
+ && REGNO (XEXP (addr, 0)) != 0)
addr = XEXP (addr, 0);
- else if (GET_CODE (XEXP (addr, 1)) == REG)
+ else if (GET_CODE (XEXP (addr, 1)) == REG
+ && REGNO (XEXP (addr, 1)) != 0)
addr = XEXP (addr, 1);
else if (CONSTANT_P (XEXP (addr, 0)))
addr = XEXP (addr, 1);
@@ -5716,7 +5722,7 @@ find_addr_reg (addr)
else
abort ();
}
- if (GET_CODE (addr) == REG)
+ if (GET_CODE (addr) == REG && REGNO (addr) != 0)
return addr;
abort ();
}