pa.c (pa_output_call): Remove 64-bit sibcall sequence.
authorJohn David Anglin <danglin@gcc.gnu.org>
Thu, 3 Oct 2019 22:39:49 +0000 (22:39 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Thu, 3 Oct 2019 22:39:49 +0000 (22:39 +0000)
* config/pa/pa.c (pa_output_call): Remove 64-bit sibcall sequence.
(pa_attr_length_call): Adjust length for 64-bit plabel sequence.

From-SVN: r276543

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

index 73c45b340f4d0515207951383ffc392623a7cdb9..2068d05bdfa7853b46bfa85892282f3814e8f0c8 100644 (file)
@@ -1,3 +1,8 @@
+2019-10-03  John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/pa/pa.c (pa_output_call): Remove 64-bit sibcall sequence.
+       (pa_attr_length_call): Adjust length for 64-bit plabel sequence.
+
 2019-10-03  Aaron Sawdey <acsawdey@linux.ibm.com>
 
        * expr.c (emit_block_move_hints): Slightly cleaner fix to
index 55637df120a884d3442cf204cf7ba0ed6e662942..4f48c416e2de7d0ff36e3e4b1529ccf5d6d838c3 100644 (file)
@@ -7845,7 +7845,7 @@ pa_attr_length_call (rtx_insn *insn, int sibcall)
 
   /* 64-bit plabel sequence.  */
   else if (TARGET_64BIT && !local_call)
-    length += sibcall ? 28 : 24;
+    length += 24;
 
   /* non-pic long absolute branch sequence.  */
   else if ((TARGET_LONG_ABS_CALL || local_call) && !flag_pic)
@@ -7917,38 +7917,24 @@ pa_output_call (rtx_insn *insn, rtx call_dest, int sibcall)
          xoperands[0] = pa_get_deferred_plabel (call_dest);
          xoperands[1] = gen_label_rtx ();
 
-         /* If this isn't a sibcall, we put the load of %r27 into the
-            delay slot.  We can't do this in a sibcall as we don't
-            have a second call-clobbered scratch register available.
-            We don't need to do anything when generating fast indirect
-            calls.  */
-         if (seq_length != 0 && !sibcall)
+         /* Put the load of %r27 into the delay slot.  We don't need to
+            do anything when generating fast indirect calls.  */
+         if (seq_length != 0)
            {
              final_scan_insn (NEXT_INSN (insn), asm_out_file,
                               optimize, 0, NULL);
 
              /* Now delete the delay insn.  */
              SET_INSN_DELETED (NEXT_INSN (insn));
-             seq_length = 0;
            }
 
          output_asm_insn ("addil LT'%0,%%r27", xoperands);
          output_asm_insn ("ldd RT'%0(%%r1),%%r1", xoperands);
          output_asm_insn ("ldd 0(%%r1),%%r1", xoperands);
-
-         if (sibcall)
-           {
-             output_asm_insn ("ldd 24(%%r1),%%r27", xoperands);
-             output_asm_insn ("ldd 16(%%r1),%%r1", xoperands);
-             output_asm_insn ("bve (%%r1)", xoperands);
-           }
-         else
-           {
-             output_asm_insn ("ldd 16(%%r1),%%r2", xoperands);
-             output_asm_insn ("bve,l (%%r2),%%r2", xoperands);
-             output_asm_insn ("ldd 24(%%r1),%%r27", xoperands);
-             seq_length = 1;
-           }
+         output_asm_insn ("ldd 16(%%r1),%%r2", xoperands);
+         output_asm_insn ("bve,l (%%r2),%%r2", xoperands);
+         output_asm_insn ("ldd 24(%%r1),%%r27", xoperands);
+         seq_length = 1;
        }
       else
        {