aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn David Anglin <danglin@gcc.gnu.org>2019-10-03 22:39:49 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2019-10-03 22:39:49 +0000
commit4a6cb9c0da73ce8733a68fc802b1f5a332cfebdc (patch)
treefaeb4961425d216e2c75340e31332326cd54e920
parent5d8bb3897ef3fba6b4ac677e64188b1da86eda39 (diff)
downloadgcc-4a6cb9c0da73ce8733a68fc802b1f5a332cfebdc.zip
gcc-4a6cb9c0da73ce8733a68fc802b1f5a332cfebdc.tar.gz
gcc-4a6cb9c0da73ce8733a68fc802b1f5a332cfebdc.tar.bz2
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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/pa/pa.c30
2 files changed, 13 insertions, 22 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 73c45b3..2068d05 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 55637df..4f48c41 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -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
{