Commit 4a6cb9c0 by John David Anglin

pa.c (pa_output_call): Remove 64-bit sibcall sequence.

	* 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
parent 5d8bb389
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> 2019-10-03 Aaron Sawdey <acsawdey@linux.ibm.com>
* expr.c (emit_block_move_hints): Slightly cleaner fix to * expr.c (emit_block_move_hints): Slightly cleaner fix to
......
...@@ -7845,7 +7845,7 @@ pa_attr_length_call (rtx_insn *insn, int sibcall) ...@@ -7845,7 +7845,7 @@ pa_attr_length_call (rtx_insn *insn, int sibcall)
/* 64-bit plabel sequence. */ /* 64-bit plabel sequence. */
else if (TARGET_64BIT && !local_call) else if (TARGET_64BIT && !local_call)
length += sibcall ? 28 : 24; length += 24;
/* non-pic long absolute branch sequence. */ /* non-pic long absolute branch sequence. */
else if ((TARGET_LONG_ABS_CALL || local_call) && !flag_pic) 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) ...@@ -7917,38 +7917,24 @@ pa_output_call (rtx_insn *insn, rtx call_dest, int sibcall)
xoperands[0] = pa_get_deferred_plabel (call_dest); xoperands[0] = pa_get_deferred_plabel (call_dest);
xoperands[1] = gen_label_rtx (); xoperands[1] = gen_label_rtx ();
/* If this isn't a sibcall, we put the load of %r27 into the /* Put the load of %r27 into the delay slot. We don't need to
delay slot. We can't do this in a sibcall as we don't do anything when generating fast indirect calls. */
have a second call-clobbered scratch register available. if (seq_length != 0)
We don't need to do anything when generating fast indirect
calls. */
if (seq_length != 0 && !sibcall)
{ {
final_scan_insn (NEXT_INSN (insn), asm_out_file, final_scan_insn (NEXT_INSN (insn), asm_out_file,
optimize, 0, NULL); optimize, 0, NULL);
/* Now delete the delay insn. */ /* Now delete the delay insn. */
SET_INSN_DELETED (NEXT_INSN (insn)); SET_INSN_DELETED (NEXT_INSN (insn));
seq_length = 0;
} }
output_asm_insn ("addil LT'%0,%%r27", xoperands); output_asm_insn ("addil LT'%0,%%r27", xoperands);
output_asm_insn ("ldd RT'%0(%%r1),%%r1", xoperands); output_asm_insn ("ldd RT'%0(%%r1),%%r1", xoperands);
output_asm_insn ("ldd 0(%%r1),%%r1", xoperands); output_asm_insn ("ldd 0(%%r1),%%r1", xoperands);
output_asm_insn ("ldd 16(%%r1),%%r2", xoperands);
if (sibcall) output_asm_insn ("bve,l (%%r2),%%r2", xoperands);
{ output_asm_insn ("ldd 24(%%r1),%%r27", xoperands);
output_asm_insn ("ldd 24(%%r1),%%r27", xoperands); seq_length = 1;
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;
}
} }
else else
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment