mirror of git://gcc.gnu.org/git/gcc.git
[AArch64] Fix layout of frame layout code.
From-SVN: r211416
This commit is contained in:
parent
2a74759f9e
commit
dadf084c7d
|
|
@ -1,3 +1,8 @@
|
||||||
|
2014-06-10 Jiong Wang <jiong.wang@arm.com>
|
||||||
|
|
||||||
|
* config/aarch64/aarch64.c (aarch64_save_or_restore_fprs)
|
||||||
|
(aarch64_save_or_restore_callee_save_registers): Fix layout.
|
||||||
|
|
||||||
2014-06-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
2014-06-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||||
|
|
||||||
* config/aarch64/aarch64-simd.md (aarch64_sqdmulh_lane<mode>):
|
* config/aarch64/aarch64-simd.md (aarch64_sqdmulh_lane<mode>):
|
||||||
|
|
|
||||||
|
|
@ -1917,7 +1917,6 @@ aarch64_save_or_restore_fprs (int start_offset, int increment,
|
||||||
rtx (*gen_mem_ref)(enum machine_mode, rtx)
|
rtx (*gen_mem_ref)(enum machine_mode, rtx)
|
||||||
= (frame_pointer_needed)? gen_frame_mem : gen_rtx_MEM;
|
= (frame_pointer_needed)? gen_frame_mem : gen_rtx_MEM;
|
||||||
|
|
||||||
|
|
||||||
for (regno = V0_REGNUM; regno <= V31_REGNUM; regno++)
|
for (regno = V0_REGNUM; regno <= V31_REGNUM; regno++)
|
||||||
{
|
{
|
||||||
if (aarch64_register_saved_on_entry (regno))
|
if (aarch64_register_saved_on_entry (regno))
|
||||||
|
|
@ -1935,10 +1934,12 @@ aarch64_save_or_restore_fprs (int start_offset, int increment,
|
||||||
{
|
{
|
||||||
/* Empty loop. */
|
/* Empty loop. */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (regno2 <= V31_REGNUM &&
|
if (regno2 <= V31_REGNUM &&
|
||||||
aarch64_register_saved_on_entry (regno2))
|
aarch64_register_saved_on_entry (regno2))
|
||||||
{
|
{
|
||||||
rtx mem2;
|
rtx mem2;
|
||||||
|
|
||||||
/* Next highest register to be saved. */
|
/* Next highest register to be saved. */
|
||||||
mem2 = gen_mem_ref (DFmode,
|
mem2 = gen_mem_ref (DFmode,
|
||||||
plus_constant
|
plus_constant
|
||||||
|
|
@ -1964,10 +1965,10 @@ aarch64_save_or_restore_fprs (int start_offset, int increment,
|
||||||
gen_rtx_REG (DFmode, regno2));
|
gen_rtx_REG (DFmode, regno2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The first part of a frame-related parallel insn
|
/* The first part of a frame-related parallel insn is
|
||||||
is always assumed to be relevant to the frame
|
always assumed to be relevant to the frame
|
||||||
calculations; subsequent parts, are only
|
calculations; subsequent parts, are only
|
||||||
frame-related if explicitly marked. */
|
frame-related if explicitly marked. */
|
||||||
RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1;
|
RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1;
|
||||||
regno = regno2;
|
regno = regno2;
|
||||||
start_offset += increment * 2;
|
start_offset += increment * 2;
|
||||||
|
|
@ -1987,7 +1988,6 @@ aarch64_save_or_restore_fprs (int start_offset, int increment,
|
||||||
RTX_FRAME_RELATED_P (insn) = 1;
|
RTX_FRAME_RELATED_P (insn) = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1995,7 +1995,7 @@ aarch64_save_or_restore_fprs (int start_offset, int increment,
|
||||||
restore's have to happen. */
|
restore's have to happen. */
|
||||||
static void
|
static void
|
||||||
aarch64_save_or_restore_callee_save_registers (HOST_WIDE_INT offset,
|
aarch64_save_or_restore_callee_save_registers (HOST_WIDE_INT offset,
|
||||||
bool restore)
|
bool restore)
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx insn;
|
||||||
rtx base_rtx = stack_pointer_rtx;
|
rtx base_rtx = stack_pointer_rtx;
|
||||||
|
|
@ -2027,6 +2027,7 @@ aarch64_save_or_restore_callee_save_registers (HOST_WIDE_INT offset,
|
||||||
aarch64_register_saved_on_entry (regno2))
|
aarch64_register_saved_on_entry (regno2))
|
||||||
{
|
{
|
||||||
rtx mem2;
|
rtx mem2;
|
||||||
|
|
||||||
/* Next highest register to be saved. */
|
/* Next highest register to be saved. */
|
||||||
mem2 = gen_mem_ref (Pmode,
|
mem2 = gen_mem_ref (Pmode,
|
||||||
plus_constant
|
plus_constant
|
||||||
|
|
@ -2050,12 +2051,11 @@ aarch64_save_or_restore_callee_save_registers (HOST_WIDE_INT offset,
|
||||||
add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (DImode, regno2));
|
add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (DImode, regno2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The first part of a frame-related parallel insn
|
/* The first part of a frame-related parallel insn is
|
||||||
is always assumed to be relevant to the frame
|
always assumed to be relevant to the frame
|
||||||
calculations; subsequent parts, are only
|
calculations; subsequent parts, are only
|
||||||
frame-related if explicitly marked. */
|
frame-related if explicitly marked. */
|
||||||
RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0,
|
RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1;
|
||||||
1)) = 1;
|
|
||||||
regno = regno2;
|
regno = regno2;
|
||||||
start_offset += increment * 2;
|
start_offset += increment * 2;
|
||||||
}
|
}
|
||||||
|
|
@ -2075,7 +2075,6 @@ aarch64_save_or_restore_callee_save_registers (HOST_WIDE_INT offset,
|
||||||
}
|
}
|
||||||
|
|
||||||
aarch64_save_or_restore_fprs (start_offset, increment, restore, base_rtx);
|
aarch64_save_or_restore_fprs (start_offset, increment, restore, base_rtx);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* AArch64 stack frames generated by this compiler look like:
|
/* AArch64 stack frames generated by this compiler look like:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue