2014-07-16 Yvan Roux <yvan.roux@linaro.org>
+ Backport from trunk r211408, 211416.
+ 2014-06-10 Marcus Shawcroft <marcus.shawcroft@arm.com>
+
+ * config/aarch64/aarch64.c (aarch64_save_or_restore_fprs): Fix
+ REG_CFA_RESTORE mode.
+
+ 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-07-16 Yvan Roux <yvan.roux@linaro.org>
+
Backport from trunk r211418.
2014-06-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
rtx (*gen_mem_ref)(enum machine_mode, rtx)
= (frame_pointer_needed)? gen_frame_mem : gen_rtx_MEM;
-
for (regno = V0_REGNUM; regno <= V31_REGNUM; regno++)
{
if (aarch64_register_saved_on_entry (regno))
{
/* Empty loop. */
}
+
if (regno2 <= V31_REGNUM &&
aarch64_register_saved_on_entry (regno2))
{
rtx mem2;
+
/* Next highest register to be saved. */
mem2 = gen_mem_ref (DFmode,
plus_constant
gen_rtx_REG (DFmode, regno2));
}
- /* The first part of a frame-related parallel insn
- is always assumed to be relevant to the frame
- calculations; subsequent parts, are only
- frame-related if explicitly marked. */
+ /* The first part of a frame-related parallel insn is
+ always assumed to be relevant to the frame
+ calculations; subsequent parts, are only
+ frame-related if explicitly marked. */
RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1;
regno = regno2;
start_offset += increment * 2;
{
insn = emit_move_insn (gen_rtx_REG (DFmode, regno), mem);
add_reg_note (insn, REG_CFA_RESTORE,
- gen_rtx_REG (DImode, regno));
+ gen_rtx_REG (DFmode, regno));
}
start_offset += increment;
}
RTX_FRAME_RELATED_P (insn) = 1;
}
}
-
}
restore's have to happen. */
static void
aarch64_save_or_restore_callee_save_registers (HOST_WIDE_INT offset,
- bool restore)
+ bool restore)
{
rtx insn;
rtx base_rtx = stack_pointer_rtx;
aarch64_register_saved_on_entry (regno2))
{
rtx mem2;
+
/* Next highest register to be saved. */
mem2 = gen_mem_ref (Pmode,
plus_constant
add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (DImode, regno2));
}
- /* The first part of a frame-related parallel insn
- is always assumed to be relevant to the frame
- calculations; subsequent parts, are only
- frame-related if explicitly marked. */
- RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0,
- 1)) = 1;
+ /* The first part of a frame-related parallel insn is
+ always assumed to be relevant to the frame
+ calculations; subsequent parts, are only
+ frame-related if explicitly marked. */
+ RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1;
regno = regno2;
start_offset += increment * 2;
}
}
aarch64_save_or_restore_fprs (start_offset, increment, restore, base_rtx);
-
}
/* AArch64 stack frames generated by this compiler look like: