]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000.c (secondary_reload_class): For TARGET_ELF...
authorJeff Law <law@gcc.gnu.org>
Mon, 17 Aug 1998 20:09:31 +0000 (14:09 -0600)
committerJeff Law <law@gcc.gnu.org>
Mon, 17 Aug 1998 20:09:31 +0000 (14:09 -0600)

        * rs6000.c (secondary_reload_class): For TARGET_ELF, indicate that
        a BASE_REGS register is needed as an intermediate when copying
        a symbolic value into any register class other than BASE_REGS.

From-SVN: r21806

gcc/config/rs6000/rs6000.c

index b23923bc91b4396a734fca92145b5f86c1efd1b1..a8389238022c7ab498efbba29f302b6197fa4cf1 100644 (file)
@@ -2187,6 +2187,16 @@ secondary_reload_class (class, mode, in)
   if (regno >= FIRST_PSEUDO_REGISTER)
     regno = -1;
 
+  /* We can not copy a symbolic operand directly into anyting other than
+     BASE_REGS for TARGET_ELF.  So indicate that a register from BASE_REGS
+     is needed as an intermediate register.  */
+  if (TARGET_ELF
+      && class != BASE_REGS
+      && (GET_CODE (in) == SYMBOL_REF
+         || GET_CODE (in) == LABEL_REF
+         || GET_CODE (in) == CONST))
+    return BASE_REGS;
+
   /* We can place anything into GENERAL_REGS and can put GENERAL_REGS
      into anything.  */
   if (class == GENERAL_REGS || class == BASE_REGS