diff options
author | Jeffrey A Law <law@cygnus.com> | 1999-07-13 09:48:04 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-07-13 03:48:04 -0600 |
commit | 02441cd6c686b750375d51db3b47758150cdc716 (patch) | |
tree | 9b13432a16acff44627796351c071a87cd355a0d | |
parent | ac6fed4fd48f679e25da1da4b33b5cfad8669864 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 14 |
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 (); } |