* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@21808
138bc75d-0d04-0410-961f-
82ee72b054a4
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