From 55b324a67cf91568372f4e93c7dae01a572de9f4 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 5 Aug 2010 11:04:58 -0700 Subject: [PATCH] re PR target/45189 (New stack alignment test failures) PR target/45189 Fix unwind for i386 stack re-alignment. From-SVN: r162919 --- gcc/ChangeLog | 8 +++++++- gcc/config/i386/i386.c | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1397b74eb99..0f5843141ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-08-05 Richard Henderson + + PR target/45189 + * config/i386/i386.c (ix86_emit_save_reg_using_mov): Make sure + the alignment constant is properly sign-extended. + 2010-08-05 Richard Guenther * expr.c (store_expr): Use emit_block_move only if both @@ -6,7 +12,7 @@ 2010-08-05 Richard Henderson - PR 45189 + PR debug/45188 * dwarf2out.c (DWARF2_UNWIND_INFO): Provide default definition. (INCOMING_RETURN_ADDR_RTX): Likewise. (dwarf2out_do_frame): Remove conditional compilation. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index dd818258637..204211a6bfc 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -8639,7 +8639,8 @@ ix86_emit_save_reg_using_mov (enum machine_mode mode, unsigned int regno, reference to the locations within the frame. Instead, simply compute the location of the aligned frame from the frame pointer. */ - addr = GEN_INT (-crtl->stack_alignment_needed / BITS_PER_UNIT); + addr = GEN_INT (-(HOST_WIDE_INT)crtl->stack_alignment_needed + / BITS_PER_UNIT); addr = gen_rtx_AND (Pmode, hard_frame_pointer_rtx, addr); addr = plus_constant (addr, -cfa_offset); mem = gen_rtx_MEM (mode, addr);