Commit 0831e1d1 by John David Anglin Committed by John David Anglin

pa.c (output_call): Only use sr4 for long interspace calls if call binds local…

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
parent f9a37893
2009-11-24 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* 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 <ubizjak@gmail.com> 2009-11-25 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (plusminus_carry_mnemonic): New code attribute. * config/i386/i386.md (plusminus_carry_mnemonic): New code attribute.
...@@ -7504,7 +7504,7 @@ attr_length_call (rtx insn, int sibcall) ...@@ -7504,7 +7504,7 @@ attr_length_call (rtx insn, int sibcall)
{ {
length += 20; 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; length += 8;
} }
...@@ -7524,7 +7524,7 @@ attr_length_call (rtx insn, int sibcall) ...@@ -7524,7 +7524,7 @@ attr_length_call (rtx insn, int sibcall)
if (!sibcall) if (!sibcall)
length += 8; length += 8;
if (!TARGET_NO_SPACE_REGS && flag_pic) if (!TARGET_NO_SPACE_REGS && (!local_call || flag_pic))
length += 8; length += 8;
} }
} }
...@@ -7721,7 +7721,7 @@ output_call (rtx insn, rtx call_dest, int sibcall) ...@@ -7721,7 +7721,7 @@ output_call (rtx insn, rtx call_dest, int sibcall)
if (!sibcall && !TARGET_PA_20) if (!sibcall && !TARGET_PA_20)
{ {
output_asm_insn ("{bl|b,l} .+8,%%r2", xoperands); 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); output_asm_insn ("addi 8,%%r2,%%r2", xoperands);
else else
output_asm_insn ("addi 16,%%r2,%%r2", xoperands); output_asm_insn ("addi 16,%%r2,%%r2", xoperands);
...@@ -7746,20 +7746,20 @@ output_call (rtx insn, rtx call_dest, int sibcall) ...@@ -7746,20 +7746,20 @@ output_call (rtx insn, rtx call_dest, int sibcall)
} }
else 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", output_asm_insn ("ldsid (%%r1),%%r31\n\tmtsp %%r31,%%sr0",
xoperands); xoperands);
if (sibcall) 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); output_asm_insn ("be 0(%%sr4,%%r1)", xoperands);
else else
output_asm_insn ("be 0(%%sr0,%%r1)", xoperands); output_asm_insn ("be 0(%%sr0,%%r1)", xoperands);
} }
else 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); output_asm_insn ("ble 0(%%sr4,%%r1)", xoperands);
else else
output_asm_insn ("ble 0(%%sr0,%%r1)", xoperands); output_asm_insn ("ble 0(%%sr0,%%r1)", xoperands);
......
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