From 0831e1d14944d254d6edffa87cbf859a0e4d655f Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Wed, 25 Nov 2009 00:31:11 +0000 Subject: [PATCH] pa.c (output_call): Only use sr4 for long interspace calls if call binds local and generating non... * pa.c (output_call): Only use sr4 for long interspace calls if call binds local and generating non PIC code. (attr_length_call): Adjust length calculation for above. From-SVN: r154527 --- gcc/ChangeLog | 6 ++++++ gcc/config/pa/pa.c | 12 ++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0e6d1188294..16356a33d9b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-11-24 John David Anglin + + * pa.c (output_call): Only use sr4 for long interspace calls if + call binds local and generating non PIC code. + (attr_length_call): Adjust length calculation for above. + 2009-11-25 Uros Bizjak * config/i386/i386.md (plusminus_carry_mnemonic): New code attribute. diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 62a58c590c1..d4caad2deb7 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -7504,7 +7504,7 @@ attr_length_call (rtx insn, int sibcall) { length += 20; - if (!TARGET_PA_20 && !TARGET_NO_SPACE_REGS && flag_pic) + if (!TARGET_PA_20 && !TARGET_NO_SPACE_REGS && (!local_call || flag_pic)) length += 8; } @@ -7524,7 +7524,7 @@ attr_length_call (rtx insn, int sibcall) if (!sibcall) length += 8; - if (!TARGET_NO_SPACE_REGS && flag_pic) + if (!TARGET_NO_SPACE_REGS && (!local_call || flag_pic)) length += 8; } } @@ -7721,7 +7721,7 @@ output_call (rtx insn, rtx call_dest, int sibcall) if (!sibcall && !TARGET_PA_20) { output_asm_insn ("{bl|b,l} .+8,%%r2", xoperands); - if (TARGET_NO_SPACE_REGS) + if (TARGET_NO_SPACE_REGS || (local_call && !flag_pic)) output_asm_insn ("addi 8,%%r2,%%r2", xoperands); else output_asm_insn ("addi 16,%%r2,%%r2", xoperands); @@ -7746,20 +7746,20 @@ output_call (rtx insn, rtx call_dest, int sibcall) } else { - if (!TARGET_NO_SPACE_REGS && flag_pic) + if (!TARGET_NO_SPACE_REGS && (!local_call || flag_pic)) output_asm_insn ("ldsid (%%r1),%%r31\n\tmtsp %%r31,%%sr0", xoperands); if (sibcall) { - if (TARGET_NO_SPACE_REGS || !flag_pic) + if (TARGET_NO_SPACE_REGS || (local_call && !flag_pic)) output_asm_insn ("be 0(%%sr4,%%r1)", xoperands); else output_asm_insn ("be 0(%%sr0,%%r1)", xoperands); } else { - if (TARGET_NO_SPACE_REGS || !flag_pic) + if (TARGET_NO_SPACE_REGS || (local_call && !flag_pic)) output_asm_insn ("ble 0(%%sr4,%%r1)", xoperands); else output_asm_insn ("ble 0(%%sr0,%%r1)", xoperands); -- 2.30.2