From 0de71e1f517fd3f97f072d400991e10879d2867c Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Thu, 7 Jan 2016 20:06:37 +0100 Subject: [PATCH] re PR target/69140 (stack alignment + O1 breaks with Microsoft ABI) 2016-01-07 Uros Bizjak PR target/69140 * config/i386/i386.c (ix86_frame_pointer_required): Enable frame pointer for TARGET_64BIT_MS_ABI when stack is misaligned. 2016-01-07 Uros Bizjak Revert 2016-01-06 Uros Bizjak PR target/69140 * config/i386/i386.c (ix86_expand_prologue): Declare fs.sp_valid depending on frame_pointer_needed before remaining integer and SSE registers are saved. From-SVN: r232140 --- gcc/ChangeLog | 16 ++++++++++++++++ gcc/config/i386/i386.c | 6 ++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 215a366b02e9..db0b95922948 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2016-01-07 Uros Bizjak + + PR target/69140 + * config/i386/i386.c (ix86_frame_pointer_required): Enable + frame pointer for TARGET_64BIT_MS_ABI when stack is misaligned. + +2016-01-07 Uros Bizjak + + Revert + 2016-01-06 Uros Bizjak + + PR target/69140 + * config/i386/i386.c (ix86_expand_prologue): Declare fs.sp_valid + depending on frame_pointer_needed before remaining integer and SSE + registers are saved. + 2016-01-07 Sandra Loosemore PR 1078 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 9c3fa70b752c..aac0847db7ee 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -10903,6 +10903,10 @@ ix86_frame_pointer_required (void) if (TARGET_64BIT_MS_ABI && get_frame_size () > SEH_MAX_FRAME_SIZE) return true; + /* SSE saves require frame-pointer when stack is misaligned. */ + if (TARGET_64BIT_MS_ABI && ix86_incoming_stack_boundary < 128) + return true; + /* In ix86_option_override_internal, TARGET_OMIT_LEAF_FRAME_POINTER turns off the frame pointer by default. Turn it back on now if we've not got a leaf function. */ @@ -13065,8 +13069,6 @@ ix86_expand_prologue (void) m->fs.fp_valid = true; } - m->fs.sp_valid = !frame_pointer_needed; - if (!int_registers_saved) ix86_emit_save_regs_using_mov (frame.reg_save_offset); if (!sse_registers_saved) -- 2.47.2