From: John David Anglin Date: Tue, 7 Feb 2006 22:09:52 +0000 (+0000) Subject: re PR target/26109 (ICE: Segmentation fault (program cc1) compiling _muldi3.o in... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=40fc2e0b74a1b4d2f89c39e2487862b7cbdd7293;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6149afe467b..053e26d6ca2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2006-02-07 John David Anglin + + 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.. + 2006-02-07 Dirk Mueller PR c++/18150 diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 1b90e6bb9f8..b6b1ef74152 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";