i386.c (setup_incoming_varargs_64): Tolerate 64bit preferred stack boundary.
authorJan Hubicka <jh@suse.cz>
Fri, 3 Aug 2007 23:07:25 +0000 (01:07 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Fri, 3 Aug 2007 23:07:25 +0000 (23:07 +0000)
* i386.c (setup_incoming_varargs_64): Tolerate 64bit preferred
stack boundary.

From-SVN: r127189

gcc/ChangeLog
gcc/config/i386/i386.c

index 05e5dcc..5878f50 100644 (file)
@@ -1,3 +1,8 @@
+2007-08-03  Jan Hubicka  <jh@suse.cz>
+
+       * i386.c (setup_incoming_varargs_64): Tolerate 64bit preferred
+       stack boundary.
+
 2007-08-03  David Edelsohn  <edelsohn@gnu.org>
 
        * config/rs6000/rs6000.c (struct processor_cost): Change
index 28471ba..de03780 100644 (file)
@@ -4694,7 +4694,14 @@ setup_incoming_varargs_64 (CUMULATIVE_ARGS *cum)
 
   /* Indicate to allocate space on the stack for varargs save area.  */
   ix86_save_varrargs_registers = 1;
-  cfun->stack_alignment_needed = 128;
+  /* We need 16-byte stack alignment to save SSE registers.  If user
+     asked for lower preferred_stack_boundary, lets just hope that he knows
+     what he is doing and won't varargs SSE values.  
+
+     We also may end up assuming that only 64bit values are stored in SSE
+     register let some floating point program work.  */
+  if (ix86_preferred_stack_boundary >= 128)
+    cfun->stack_alignment_needed = 128;
 
   save_area = frame_pointer_rtx;
   set = get_varargs_alias_set ();