Message ID | AANLkTi=Y6GsEgZ11mCF5OXXvSSU1bAXfhUt9iQH-u8gA@mail.gmail.com |
---|---|
State | New |
Headers | show |
On 08/05/2010 11:30 AM, H.J. Lu wrote: > I think this patch is clearer and also fixes the issue. > - addr = GEN_INT (-crtl->stack_alignment_needed / BITS_PER_UNIT); > + addr = GEN_INT (-(crtl->stack_alignment_needed > + / BITS_PER_UNIT)); Not quite. Here you get 0xfffffff0u not -16, which is different for 64-bit HOST_WIDE_INT. Which technically works, but the unwind info is larger since -16 encodes smaller. r~
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index d809d44..ecccef1 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, unsi gned 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 (-(crtl->stack_alignment_needed + / BITS_PER_UNIT)); addr = gen_rtx_AND (Pmode, hard_frame_pointer_rtx, addr); addr = plus_constant (addr, -cfa_offset);