re PR target/26109 (ICE: Segmentation fault (program cc1) compiling _muldi3.o in...
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>
Tue, 7 Feb 2006 22:09:52 +0000 (22:09 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Tue, 7 Feb 2006 22:09:52 +0000 (22:09 +0000)
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

gcc/ChangeLog
gcc/config/pa/pa.c

index 6149afe467b0344bbe1353037f4293c78b1423d4..053e26d6ca2545b7d78f20329a46e35249c2c59f 100644 (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
index 1b90e6bb9f8cbc0d585667d8c4cbf27f8db02cd9..b6b1ef741528c4575664b4fbf812bb5a18ad8fd5 100644 (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";