--- a/gcc/config/i386/i386.c 2016/01/18 16:18:49 232527 +++ b/gcc/config/i386/i386.c 2016/01/18 16:19:53 232528 @@ -9690,6 +9690,10 @@ 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,6 +13065,8 @@ 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)