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
This commit is contained in:
John David Anglin 2006-02-07 22:09:52 +00:00 committed by John David Anglin
parent cb2bbc673b
commit 40fc2e0b74
2 changed files with 14 additions and 5 deletions

View File

@ -1,3 +1,11 @@
2006-02-07 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
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 <dmueller@suse.com>
PR c++/18150

View File

@ -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";