diff options
author | John David Anglin <dave.anglin@nrc-cnrc.gc.ca> | 2006-02-07 22:09:52 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2006-02-07 22:09:52 +0000 |
commit | 40fc2e0b74a1b4d2f89c39e2487862b7cbdd7293 (patch) | |
tree | be647bd6ca0753648be30cd91b66b28377dca133 /gcc/config/pa | |
parent | cb2bbc673b91b08de12c199259368a05484dbba2 (diff) | |
download | gcc-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.c | 11 |
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"; |