pa.c (attr_length_call): Revise condition for long pc-relative branch.
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>
Sat, 10 Mar 2007 01:34:23 +0000 (01:34 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Sat, 10 Mar 2007 01:34:23 +0000 (01:34 +0000)
* pa.c (attr_length_call): Revise condition for long pc-relative branch.
(output_call): Use "LONG_PIC_SDIFF" instruction sequence for long local
calls on the SOM target.  Don't use "LONG_PIC_PCREL" call sequence on
SOM target.

From-SVN: r122784

gcc/ChangeLog
gcc/config/pa/pa.c

index ea4a8d8b192556151d084f184b832351c1377b0a..7e7e061146a695779bb11873193b17abe857c7a0 100644 (file)
@@ -1,3 +1,10 @@
+2007-03-09  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * pa.c (attr_length_call): Revise condition for long pc-relative branch.
+       (output_call): Use "LONG_PIC_SDIFF" instruction sequence for long local
+       calls on the SOM target.  Don't use "LONG_PIC_PCREL" call sequence on
+       SOM target.
+
 2007-03-09  Geoffrey Keating  <geoffk@apple.com>
 
        * gcc.c: Document %{, in big comment at top.
index e39ddc79a325a69fe311ff98c3b00443cde55ca4..c69652020cbd962691c9ab9631f0532253418ce5 100644 (file)
@@ -7273,9 +7273,10 @@ attr_length_call (rtx insn, int sibcall)
     length += 12;
 
   /* long pc-relative branch sequence.  */
-  else if ((TARGET_SOM && TARGET_LONG_PIC_SDIFF_CALL)
+  else if ((TARGET_SOM && (TARGET_LONG_PIC_SDIFF_CALL || local_call))
           || (TARGET_64BIT && !TARGET_GAS)
-          || (TARGET_GAS && (TARGET_LONG_PIC_PCREL_CALL || local_call)))
+          || (TARGET_GAS && !TARGET_SOM
+              && (TARGET_LONG_PIC_PCREL_CALL || local_call)))
     {
       length += 20;
 
@@ -7385,8 +7386,9 @@ output_call (rtx insn, rtx call_dest, int sibcall)
             of increasing length and complexity.  In most cases,
              they don't allow an instruction in the delay slot.  */
          if (!((TARGET_LONG_ABS_CALL || local_call) && !flag_pic)
-             && !(TARGET_SOM && TARGET_LONG_PIC_SDIFF_CALL)
-             && !(TARGET_GAS && (TARGET_LONG_PIC_PCREL_CALL || local_call))
+             && !(TARGET_SOM && (TARGET_LONG_PIC_SDIFF_CALL || local_call))
+             && !(TARGET_GAS && !TARGET_SOM
+                  && (TARGET_LONG_PIC_PCREL_CALL || local_call))
              && !TARGET_64BIT)
            indirect_call = 1;
 
@@ -7432,7 +7434,7 @@ output_call (rtx insn, rtx call_dest, int sibcall)
            }
          else
            {
-             if ((TARGET_SOM && TARGET_LONG_PIC_SDIFF_CALL)
+             if ((TARGET_SOM && (TARGET_LONG_PIC_SDIFF_CALL || local_call))
                  || (TARGET_64BIT && !TARGET_GAS))
                {
                  /* The HP assembler and linker can handle relocations
@@ -7446,7 +7448,8 @@ output_call (rtx insn, rtx call_dest, int sibcall)
                                             CODE_LABEL_NUMBER (xoperands[1]));
                  output_asm_insn ("ldo R'%0-%l1(%%r1),%%r1", xoperands);
                }
-             else if (TARGET_GAS && (TARGET_LONG_PIC_PCREL_CALL || local_call))
+             else if (TARGET_GAS && !TARGET_SOM
+                      && (TARGET_LONG_PIC_PCREL_CALL || local_call))
                {
                  /*  GAS currently can't generate the relocations that
                      are needed for the SOM linker under HP-UX using this