i386.c (legitimize_pic_address): Make static.
authorRichard Henderson <rth@redhat.com>
Tue, 6 Jul 2004 22:40:16 +0000 (15:40 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 6 Jul 2004 22:40:16 +0000 (15:40 -0700)
        * config/i386/i386.c (legitimize_pic_address): Make static.
        (legitimize_address): Handle CONST with TLS operand.
        (ix86_expand_move): Don't call legitimize_pic_address directly.
        * config/i386/i386-protos.h (legitimize_pic_address): Remove.

From-SVN: r84173

gcc/ChangeLog
gcc/config/i386/i386-protos.h
gcc/config/i386/i386.c

index eb2dc4e67d0978a55dd7232c63f41012d5681f0f..5ae46ce891f2ccfeaf778c6e387e9433d6a10b25 100644 (file)
@@ -1,3 +1,10 @@
+2004-07-06  Richard Henderson  <rth@redhat.com>
+
+       * config/i386/i386.c (legitimize_pic_address): Make static.
+       (legitimize_address): Handle CONST with TLS operand.
+       (ix86_expand_move): Don't call legitimize_pic_address directly.
+       * config/i386/i386-protos.h (legitimize_pic_address): Remove.
+
 2004-07-06  Roger Sayle  <roger@eyesopen.com>
 
        * ifcvt.c (struct noce_if_info): Add a Boolean b_unconditional field.
index 42771f95051a7e688f5c38124908fae4584e4ad9..66e1e136f2748e4315a0f90a608ee3fbf773dfc8 100644 (file)
@@ -104,7 +104,6 @@ extern bool constant_address_p (rtx);
 extern bool legitimate_pic_operand_p (rtx);
 extern int legitimate_pic_address_disp_p (rtx);
 extern int legitimate_address_p (enum machine_mode, rtx, int);
-extern rtx legitimize_pic_address (rtx, rtx);
 extern rtx legitimize_address (rtx, rtx, enum machine_mode);
 
 extern void print_reg (rtx, int, FILE*);
index 4b1e389641b4129478e87cdbe3939bc3233472be..1ce078d90a6f8319b6a3f5bdec168e6a0380d28c 100644 (file)
@@ -6291,7 +6291,7 @@ ix86_GOT_alias_set (void)
    GO_IF_LEGITIMATE_ADDRESS rejects symbolic references unless the PIC
    reg also appears in the address.  */
 
-rtx
+static rtx
 legitimize_pic_address (rtx orig, rtx reg)
 {
   rtx addr = orig;
@@ -6621,6 +6621,13 @@ legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED, enum machine_mode mode)
   log = tls_symbolic_operand (x, mode);
   if (log)
     return legitimize_tls_address (x, log, false);
+  if (GET_CODE (x) == CONST
+      && GET_CODE (XEXP (x, 0)) == PLUS
+      && (log = tls_symbolic_operand (XEXP (XEXP (x, 0), 0), Pmode)))
+    {
+      rtx t = legitimize_tls_address (XEXP (XEXP (x, 0), 0), log, false);
+      return gen_rtx_PLUS (Pmode, t, XEXP (XEXP (x, 0), 1));
+    }
 
   if (flag_pic && SYMBOLIC_CONST (x))
     return legitimize_pic_address (x, 0);
@@ -8414,15 +8421,7 @@ ix86_expand_move (enum machine_mode mode, rtx operands[])
       if (GET_CODE (op0) == MEM)
        op1 = force_reg (Pmode, op1);
       else
-       {
-         rtx temp = op0;
-         if (GET_CODE (temp) != REG)
-           temp = gen_reg_rtx (Pmode);
-         temp = legitimize_pic_address (op1, temp);
-         if (temp == op0)
-           return;
-         op1 = temp;
-       }
+       op1 = legitimize_address (op1, op1, Pmode);
 #endif /* TARGET_MACHO */
     }
   else