* pa.c (output_call): Only use sr4 for long interspace calls if
authordanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 25 Nov 2009 00:31:11 +0000 (00:31 +0000)
committerdanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 25 Nov 2009 00:31:11 +0000 (00:31 +0000)
call binds local and generating non PIC code.
(attr_length_call): Adjust length calculation for above.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154527 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 0e6d118..16356a3 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-24  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * pa.c (output_call): Only use sr4 for long interspace calls if
+       call binds local and generating non PIC code.
+       (attr_length_call): Adjust length calculation for above.
+
 2009-11-25  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.md (plusminus_carry_mnemonic): New code attribute.
index 62a58c5..d4caad2 100644 (file)
@@ -7504,7 +7504,7 @@ attr_length_call (rtx insn, int sibcall)
     {
       length += 20;
 
-      if (!TARGET_PA_20 && !TARGET_NO_SPACE_REGS && flag_pic)
+      if (!TARGET_PA_20 && !TARGET_NO_SPACE_REGS && (!local_call || flag_pic))
        length += 8;
     }
 
@@ -7524,7 +7524,7 @@ attr_length_call (rtx insn, int sibcall)
          if (!sibcall)
            length += 8;
 
-         if (!TARGET_NO_SPACE_REGS && flag_pic)
+         if (!TARGET_NO_SPACE_REGS && (!local_call || flag_pic))
            length += 8;
        }
     }
@@ -7721,7 +7721,7 @@ output_call (rtx insn, rtx call_dest, int sibcall)
                  if (!sibcall && !TARGET_PA_20)
                    {
                      output_asm_insn ("{bl|b,l} .+8,%%r2", xoperands);
-                     if (TARGET_NO_SPACE_REGS)
+                     if (TARGET_NO_SPACE_REGS || (local_call && !flag_pic))
                        output_asm_insn ("addi 8,%%r2,%%r2", xoperands);
                      else
                        output_asm_insn ("addi 16,%%r2,%%r2", xoperands);
@@ -7746,20 +7746,20 @@ output_call (rtx insn, rtx call_dest, int sibcall)
                }
              else
                {
-                 if (!TARGET_NO_SPACE_REGS && flag_pic)
+                 if (!TARGET_NO_SPACE_REGS && (!local_call || flag_pic))
                    output_asm_insn ("ldsid (%%r1),%%r31\n\tmtsp %%r31,%%sr0",
                                     xoperands);
 
                  if (sibcall)
                    {
-                     if (TARGET_NO_SPACE_REGS || !flag_pic)
+                     if (TARGET_NO_SPACE_REGS || (local_call && !flag_pic))
                        output_asm_insn ("be 0(%%sr4,%%r1)", xoperands);
                      else
                        output_asm_insn ("be 0(%%sr0,%%r1)", xoperands);
                    }
                  else
                    {
-                     if (TARGET_NO_SPACE_REGS || !flag_pic)
+                     if (TARGET_NO_SPACE_REGS || (local_call && !flag_pic))
                        output_asm_insn ("ble 0(%%sr4,%%r1)", xoperands);
                      else
                        output_asm_insn ("ble 0(%%sr0,%%r1)", xoperands);