From 2c774817bd0ad2c1b7ca16fd0310b567bab5b9c6 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Sat, 10 Jul 2004 20:15:44 +0000 Subject: [PATCH] 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: r84471 --- gcc/ChangeLog | 5 +++++ gcc/config/pa/pa.c | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ce75e9dbb8..8089a55cda6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +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. + 2004-07-10 Daniel Jacobowitz * config/i386/i386.c (override_options): Pick a 64-bit CPU diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index da065ce6dec..ee781af6d78 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -7545,7 +7545,15 @@ output_indirect_call (rtx insn, rtx 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. */ -- 2.30.2