mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-10 03:54:29 +08:00
ia64.c (ia64_expand_call): Don't add ar.pfs for sibcalls.
* config/ia64/ia64.c (ia64_expand_call): Don't add ar.pfs for sibcalls. (ia64_split_call): Only load descriptor for GP register inputs. (ia64_expand_epilogue): Check current_frame_info.mask not current_function_is_leaf to restore ar.pfs. From-SVN: r68549
This commit is contained in:
parent
49b83932ae
commit
4e14f1f90f
@ -2,6 +2,13 @@
|
|||||||
|
|
||||||
* config/ia64/ia64.h (REGISTER_NAMES): R0 is really AP.
|
* config/ia64/ia64.h (REGISTER_NAMES): R0 is really AP.
|
||||||
|
|
||||||
|
2003-06-26 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
* config/ia64/ia64.c (ia64_expand_call): Don't add ar.pfs for sibcalls.
|
||||||
|
(ia64_split_call): Only load descriptor for GP register inputs.
|
||||||
|
(ia64_expand_epilogue): Check current_frame_info.mask not
|
||||||
|
current_function_is_leaf to restore ar.pfs.
|
||||||
|
|
||||||
2003-06-26 Richard Henderson <rth@redhat.com>
|
2003-06-26 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
* emit-rtl.c (try_split): Append to new CALL_INSN_FUNCTION_USAGE
|
* emit-rtl.c (try_split): Append to new CALL_INSN_FUNCTION_USAGE
|
||||||
|
@ -1499,11 +1499,7 @@ ia64_expand_call (retval, addr, nextarg, sibcall_p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sibcall_p)
|
if (sibcall_p)
|
||||||
{
|
use_reg (&CALL_INSN_FUNCTION_USAGE (insn), b0);
|
||||||
use_reg (&CALL_INSN_FUNCTION_USAGE (insn), b0);
|
|
||||||
use_reg (&CALL_INSN_FUNCTION_USAGE (insn),
|
|
||||||
gen_rtx_REG (DImode, AR_PFS_REGNUM));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1557,7 +1553,7 @@ ia64_split_call (retval, addr, retaddr, scratch_r, scratch_b,
|
|||||||
|
|
||||||
/* If we find we're calling through a register, then we're actually
|
/* If we find we're calling through a register, then we're actually
|
||||||
calling through a descriptor, so load up the values. */
|
calling through a descriptor, so load up the values. */
|
||||||
if (REG_P (addr))
|
if (REG_P (addr) && GR_REGNO_P (REGNO (addr)))
|
||||||
{
|
{
|
||||||
rtx tmp;
|
rtx tmp;
|
||||||
bool addr_dead_p;
|
bool addr_dead_p;
|
||||||
@ -2785,7 +2781,7 @@ ia64_expand_epilogue (sibcall_p)
|
|||||||
reg = gen_rtx_REG (DImode, AR_PFS_REGNUM);
|
reg = gen_rtx_REG (DImode, AR_PFS_REGNUM);
|
||||||
emit_move_insn (reg, alt_reg);
|
emit_move_insn (reg, alt_reg);
|
||||||
}
|
}
|
||||||
else if (! current_function_is_leaf)
|
else if (TEST_HARD_REG_BIT (current_frame_info.mask, AR_PFS_REGNUM))
|
||||||
{
|
{
|
||||||
alt_regno = next_scratch_gr_reg ();
|
alt_regno = next_scratch_gr_reg ();
|
||||||
alt_reg = gen_rtx_REG (DImode, alt_regno);
|
alt_reg = gen_rtx_REG (DImode, alt_regno);
|
||||||
|
Loading…
Reference in New Issue
Block a user