aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/pa
diff options
context:
space:
mode:
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>2007-03-10 01:34:23 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2007-03-10 01:34:23 +0000
commit751d985534820f549c59935311cc26282e2b37bb (patch)
treea5eca2e9d0bf1bbbe48011f7dc7d60eaf048d758 /gcc/config/pa
parent48137d59c3cf49628dee903213567c9556cb6adb (diff)
downloadgcc-751d985534820f549c59935311cc26282e2b37bb.zip
gcc-751d985534820f549c59935311cc26282e2b37bb.tar.gz
gcc-751d985534820f549c59935311cc26282e2b37bb.tar.bz2
pa.c (attr_length_call): Revise condition for long pc-relative branch.
* pa.c (attr_length_call): Revise condition for long pc-relative branch. (output_call): Use "LONG_PIC_SDIFF" instruction sequence for long local calls on the SOM target. Don't use "LONG_PIC_PCREL" call sequence on SOM target. From-SVN: r122784
Diffstat (limited to 'gcc/config/pa')
-rw-r--r--gcc/config/pa/pa.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index e39ddc7..c696520 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -7273,9 +7273,10 @@ attr_length_call (rtx insn, int sibcall)
length += 12;
/* long pc-relative branch sequence. */
- else if ((TARGET_SOM && TARGET_LONG_PIC_SDIFF_CALL)
+ else if ((TARGET_SOM && (TARGET_LONG_PIC_SDIFF_CALL || local_call))
|| (TARGET_64BIT && !TARGET_GAS)
- || (TARGET_GAS && (TARGET_LONG_PIC_PCREL_CALL || local_call)))
+ || (TARGET_GAS && !TARGET_SOM
+ && (TARGET_LONG_PIC_PCREL_CALL || local_call)))
{
length += 20;
@@ -7385,8 +7386,9 @@ output_call (rtx insn, rtx call_dest, int sibcall)
of increasing length and complexity. In most cases,
they don't allow an instruction in the delay slot. */
if (!((TARGET_LONG_ABS_CALL || local_call) && !flag_pic)
- && !(TARGET_SOM && TARGET_LONG_PIC_SDIFF_CALL)
- && !(TARGET_GAS && (TARGET_LONG_PIC_PCREL_CALL || local_call))
+ && !(TARGET_SOM && (TARGET_LONG_PIC_SDIFF_CALL || local_call))
+ && !(TARGET_GAS && !TARGET_SOM
+ && (TARGET_LONG_PIC_PCREL_CALL || local_call))
&& !TARGET_64BIT)
indirect_call = 1;
@@ -7432,7 +7434,7 @@ output_call (rtx insn, rtx call_dest, int sibcall)
}
else
{
- if ((TARGET_SOM && TARGET_LONG_PIC_SDIFF_CALL)
+ if ((TARGET_SOM && (TARGET_LONG_PIC_SDIFF_CALL || local_call))
|| (TARGET_64BIT && !TARGET_GAS))
{
/* The HP assembler and linker can handle relocations
@@ -7446,7 +7448,8 @@ output_call (rtx insn, rtx call_dest, int sibcall)
CODE_LABEL_NUMBER (xoperands[1]));
output_asm_insn ("ldo R'%0-%l1(%%r1),%%r1", xoperands);
}
- else if (TARGET_GAS && (TARGET_LONG_PIC_PCREL_CALL || local_call))
+ else if (TARGET_GAS && !TARGET_SOM
+ && (TARGET_LONG_PIC_PCREL_CALL || local_call))
{
/* GAS currently can't generate the relocations that
are needed for the SOM linker under HP-UX using this