]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
pa.c (emit_move_sequence): Force problematical constants into memory during the reloa...
authorJeff Law <law@gcc.gnu.org>
Fri, 5 May 1995 18:55:27 +0000 (12:55 -0600)
committerJeff Law <law@gcc.gnu.org>
Fri, 5 May 1995 18:55:27 +0000 (12:55 -0600)
* pa.c (emit_move_sequence): Force problematical constants
into memory during the reload pass when generating PIC.

From-SVN: r9581

gcc/config/pa/pa.c

index 6afbbcf8a69fb48db8029247bd166fb1be10ab0f..70722cc089fe5013dc7fa2db170f1d453ec8cb73 100644 (file)
@@ -976,6 +976,21 @@ emit_move_sequence (operands, mode, scratch_reg)
                  operands[1] = force_const_mem (mode, operand1);
                  emit_move_sequence (operands, mode, temp);
                }
+             /* Likewise for (const (plus (symbol) (const_int)) when generating
+                pic code during or after reload and const_int will not fit
+                in 14 bits.  */
+             else if (GET_CODE (operand1) == CONST
+                      && GET_CODE (XEXP (operand1, 0)) == PLUS
+                      && GET_CODE (XEXP (XEXP (operand1, 0), 1)) == CONST_INT
+                      && !INT_14_BITS (XEXP (XEXP (operand1, 0), 1))
+                      && (reload_completed || reload_in_progress)
+                      && flag_pic)
+               {
+                 operands[1] = force_const_mem (mode, operand1);
+                 operands[1] = legitimize_pic_address (XEXP (operands[1], 0),
+                                                       mode, temp);
+                 emit_move_sequence (operands, mode, temp);
+               }
              else
                {
                  operands[1] = legitimize_pic_address (operand1, mode, temp);