aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/pa
diff options
context:
space:
mode:
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>2006-02-07 22:09:52 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2006-02-07 22:09:52 +0000
commit40fc2e0b74a1b4d2f89c39e2487862b7cbdd7293 (patch)
treebe647bd6ca0753648be30cd91b66b28377dca133 /gcc/config/pa
parentcb2bbc673b91b08de12c199259368a05484dbba2 (diff)
downloadgcc-40fc2e0b74a1b4d2f89c39e2487862b7cbdd7293.zip
gcc-40fc2e0b74a1b4d2f89c39e2487862b7cbdd7293.tar.gz
gcc-40fc2e0b74a1b4d2f89c39e2487862b7cbdd7293.tar.bz2
re PR target/26109 (ICE: Segmentation fault (program cc1) compiling _muldi3.o in stage1)
PR target/26109 * pa.c (attr_length_indirect_call): Don't return length 8 for distances >= 240000 when generating code for SOM runtime. (output_indirect_call): Don't use "b,l" instruction for indirect calls to $$dyncall when generating code for SOM runtime.. From-SVN: r110721
Diffstat (limited to 'gcc/config/pa')
-rw-r--r--gcc/config/pa/pa.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 1b90e6b..b6b1ef7 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -7447,7 +7447,8 @@ attr_length_indirect_call (rtx insn)
if (TARGET_FAST_INDIRECT_CALLS
|| (!TARGET_PORTABLE_RUNTIME
- && ((TARGET_PA_20 && distance < 7600000) || distance < 240000)))
+ && ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000)
+ || distance < 240000)))
return 8;
if (flag_pic)
@@ -7484,10 +7485,10 @@ output_indirect_call (rtx insn, rtx call_dest)
the remaining cases. */
if (attr_length_indirect_call (insn) == 8)
{
- /* The HP linker substitutes a BLE for millicode calls using
- the short PIC PCREL form. Thus, we must use %r31 as the
- link register when generating PA 1.x code. */
- if (TARGET_PA_20)
+ /* The HP linker sometimes substitutes a BLE for BL/B,L calls to
+ $$dyncall. Since BLE uses %r31 as the link register, the 22-bit
+ variant of the B,L instruction can't be used on the SOM target. */
+ if (TARGET_PA_20 && !TARGET_SOM)
return ".CALL\tARGW0=GR\n\tb,l $$dyncall,%%r2\n\tcopy %%r2,%%r31";
else
return ".CALL\tARGW0=GR\n\tbl $$dyncall,%%r31\n\tcopy %%r31,%%r2";