From 6ce027dc6df0aab1fc811ed45c08ad0b49aed589 Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Tue, 10 Dec 2013 17:52:23 +0100 Subject: [PATCH] re PR target/56807 (mingw32: Conflict between stack realignment and stack probe destroys function argument in EAX) PR target/56807 * config/i386/i386.c (ix86_expand_prologue): Address saved registers stack-relative, not via frame-pointer. From-SVN: r205864 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/i386.c | 7 ++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 649926ba2021..f850dfaa0aa5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-12-10 Kai Tietz + + PR target/56807 + * config/i386/i386.c (ix86_expand_prologue): Address saved + registers stack-relative, not via frame-pointer. + 2013-12-03 Marek Polacek Backport from mainline diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index c74dba0506ac..067503148048 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -10431,14 +10431,15 @@ ix86_expand_prologue (void) if (r10_live && eax_live) { - t = choose_baseaddr (m->fs.sp_offset - allocate); + t = plus_constant (Pmode, stack_pointer_rtx, allocate); emit_move_insn (r10, gen_frame_mem (Pmode, t)); - t = choose_baseaddr (m->fs.sp_offset - allocate - UNITS_PER_WORD); + t = plus_constant (Pmode, stack_pointer_rtx, + allocate - UNITS_PER_WORD); emit_move_insn (eax, gen_frame_mem (Pmode, t)); } else if (eax_live || r10_live) { - t = choose_baseaddr (m->fs.sp_offset - allocate); + t = plus_constant (Pmode, stack_pointer_rtx, allocate); emit_move_insn ((eax_live ? eax : r10), gen_frame_mem (Pmode, t)); } } -- 2.47.2