Commit 40fc2e0b by John David Anglin Committed by John David Anglin

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
parent cb2bbc67
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
......
......@@ -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";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment