From: John David Anglin Date: Sun, 11 Jul 2004 04:31:51 +0000 (+0000) Subject: pa.c (output_indirect_call): Only use %r2 as the link register in indirect calls... X-Git-Tag: releases/gcc-3.3.5~123 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0021e544c6103c9aa5fb9e75becd574aa2ad9a8b;p=thirdparty%2Fgcc.git pa.c (output_indirect_call): Only use %r2 as the link register in indirect calls with the long PA 2.0... * pa.c (output_indirect_call): Only use %r2 as the link register in indirect calls with the long PA 2.0 pc-relative branch. From-SVN: r84492 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 58350654df1b..2cde39f75100 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,7 @@ -2004-07-09 John David Anglin +2004-07-10 John David Anglin + + * pa.c (output_indirect_call): Only use %r2 as the link register in + indirect calls with the long PA 2.0 pc-relative branch. PR target/16459 * pa.c (output_indirect_call): Use %r2 as the link register when diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 907f0d69432b..b3a264588f4d 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -6932,7 +6932,15 @@ output_indirect_call (insn, call_dest) No need to check target flags as the length uniquely identifies the remaining cases. */ if (attr_length_indirect_call (insn) == 8) - return ".CALL\tARGW0=GR\n\t{bl|b,l} $$dyncall,%%r2\n\tcopy %%r2,%%r31"; + { + /* 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) + 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"; + } /* Long millicode call, but we are not generating PIC or portable runtime code. */