mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-09 17:25:13 +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.
|
||||
|
||||
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>
|
||||
|
||||
* 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)
|
||||
{
|
||||
use_reg (&CALL_INSN_FUNCTION_USAGE (insn), b0);
|
||||
use_reg (&CALL_INSN_FUNCTION_USAGE (insn),
|
||||
gen_rtx_REG (DImode, AR_PFS_REGNUM));
|
||||
}
|
||||
use_reg (&CALL_INSN_FUNCTION_USAGE (insn), b0);
|
||||
}
|
||||
|
||||
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
|
||||
calling through a descriptor, so load up the values. */
|
||||
if (REG_P (addr))
|
||||
if (REG_P (addr) && GR_REGNO_P (REGNO (addr)))
|
||||
{
|
||||
rtx tmp;
|
||||
bool addr_dead_p;
|
||||
@ -2785,7 +2781,7 @@ ia64_expand_epilogue (sibcall_p)
|
||||
reg = gen_rtx_REG (DImode, AR_PFS_REGNUM);
|
||||
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_reg = gen_rtx_REG (DImode, alt_regno);
|
||||
|
Loading…
Reference in New Issue
Block a user