[Bug target/37010] -Os passes __m128 on stack with wrong alignment
hjl dot tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Aug 3 18:41:00 GMT 2008
------- Comment #3 from hjl dot tools at gmail dot com 2008-08-03 18:40 -------
Joey, when we compute frame layout, we don't count the duplicated
return address pushed onto stack when DRAP is used. Also when we
push return address, shouldn't we use -UNITS_PER_WORD, instead of
-(STACK_BOUNDARY / BITS_PER_UNIT))? On MacOS, STACK_BOUNDARY is
128 on ia32. Does this patch make sense?
--- ./i386.c.drap 2008-08-03 09:50:05.000000000 -0700
+++ ./i386.c 2008-08-03 11:36:40.000000000 -0700
@@ -7291,6 +7291,10 @@ ix86_compute_frame_layout (struct ix86_f
if (stack_realign_fp)
offset = (offset + stack_alignment_needed -1) & -stack_alignment_needed;
+ /* Duplicated return address when DRAP is used. */
+ if (crtl->drap_reg && crtl->stack_realign_needed)
+ offset += UNITS_PER_WORD;
+
/* Register save area */
offset += frame->nregs * UNITS_PER_WORD;
@@ -7692,8 +7696,7 @@ ix86_expand_prologue (void)
expand_builtin_return_addr etc. */
x = crtl->drap_reg;
x = gen_frame_mem (Pmode,
- plus_constant (x,
- -(STACK_BOUNDARY / BITS_PER_UNIT)));
+ plus_constant (x, -UNITS_PER_WORD));
insn = emit_insn (gen_push (x));
RTX_FRAME_RELATED_P (insn) = 1;
}
--
hjl dot tools at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |hubicka at ucw dot cz
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37010
More information about the Gcc-bugs
mailing list