[committed] pa: Remove 64-bit sibcall call sequence

Message ID fb4e8ff1-b3c3-a5df-cef5-0e66afb6048e@bell.net
State New
Headers show
Series
  • [committed] pa: Remove 64-bit sibcall call sequence
Related show

Commit Message

John David Anglin Oct. 3, 2019, 10:50 p.m.
64-bit sibling calls are disabled on all PA-RISC targets.  This is because the argument pointer
handling is incompatible with doing sibcalls.  Thus, we can remove the non-local sibcall sequence
that was used in testing.

Tested on hppa64-hp-hpux11.11.

Dave

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.

Patch

Index: config/pa/pa.c
===================================================================
--- config/pa/pa.c	(revision 276299)
+++ config/pa/pa.c	(working copy)
@@ -7845,7 +7845,7 @@ 

   /* 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,12 +7917,9 @@ 
 	  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);
@@ -7929,26 +7926,15 @@ 

 	      /* 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
 	{