i386.c (ix86_compute_frame_layout): Disable red zone for w64 abi.
authorKai Tietz <kai.tietz@onevision.com>
Thu, 12 Jun 2008 09:19:35 +0000 (09:19 +0000)
committerKai Tietz <ktietz@gcc.gnu.org>
Thu, 12 Jun 2008 09:19:35 +0000 (11:19 +0200)
2008-06-11  Kai Tietz  <kai.tietz@onevision.com>

* config/i386/i386.c (ix86_compute_frame_layout): Disable red zone for
w64 abi.
(ix86_expand_prologue): Likewise.
(ix86_force_to_memory): Likewise.
(ix86_free_from_memory): Likewise.

From-SVN: r136693

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

index d66d335dad96a108b4d37f27ab842b741cd8b489..e1c11b1a15fffb180ff43633f29a3bb6ad886526 100644 (file)
@@ -1,3 +1,11 @@
+2008-06-12  Kai Tietz  <kai.tietz@onevision.com>
+
+       * config/i386/i386.c (ix86_compute_frame_layout): Disable red zone for
+       w64 abi.
+       (ix86_expand_prologue): Likewise.
+       (ix86_force_to_memory): Likewise.
+       (ix86_free_from_memory): Likewise.
+
 2008-06-11  Edmar Wienskoski  <edmar@freescale.com>
 
        PR target/36425
index 6fd4c0266d00a705ed65683e86501d351fec5b3c..d7a07136791e3431a9c0f06810800de8dab2872f 100644 (file)
@@ -6388,7 +6388,7 @@ ix86_compute_frame_layout (struct ix86_frame *frame)
       || (TARGET_64BIT && frame->to_allocate >= (HOST_WIDE_INT) 0x80000000))
     frame->save_regs_using_mov = false;
 
-  if (TARGET_RED_ZONE && current_function_sp_is_unchanging
+  if (!TARGET_64BIT_MS_ABI && TARGET_RED_ZONE && current_function_sp_is_unchanging
       && current_function_is_leaf
       && !ix86_current_function_calls_tls_descriptor)
     {
@@ -6631,7 +6631,7 @@ ix86_expand_prologue (void)
      avoid doing this if I am going to have to probe the stack since
      at least on x86_64 the stack probe can turn into a call that clobbers
      a red zone location */
-  if (TARGET_RED_ZONE && frame.save_regs_using_mov
+  if (!TARGET_64BIT_MS_ABI && TARGET_RED_ZONE && frame.save_regs_using_mov
       && (! TARGET_STACK_PROBE || allocate < CHECK_STACK_LIMIT))
     ix86_emit_save_regs_using_mov (frame_pointer_needed ? hard_frame_pointer_rtx
                                   : stack_pointer_rtx,
@@ -6689,7 +6689,7 @@ ix86_expand_prologue (void)
     }
 
   if (frame.save_regs_using_mov
-      && !(TARGET_RED_ZONE
+      && !(!TARGET_64BIT_MS_ABI && TARGET_RED_ZONE
          && (! TARGET_STACK_PROBE || allocate < CHECK_STACK_LIMIT)))
     {
       if (!frame_pointer_needed || !frame.to_allocate)
@@ -21943,7 +21943,7 @@ ix86_force_to_memory (enum machine_mode mode, rtx operand)
   rtx result;
 
   gcc_assert (reload_completed);
-  if (TARGET_RED_ZONE)
+  if (!TARGET_64BIT_MS_ABI && TARGET_RED_ZONE)
     {
       result = gen_rtx_MEM (mode,
                            gen_rtx_PLUS (Pmode,
@@ -21951,7 +21951,7 @@ ix86_force_to_memory (enum machine_mode mode, rtx operand)
                                          GEN_INT (-RED_ZONE_SIZE)));
       emit_move_insn (result, operand);
     }
-  else if (!TARGET_RED_ZONE && TARGET_64BIT)
+  else if ((TARGET_64BIT_MS_ABI || !TARGET_RED_ZONE) && TARGET_64BIT)
     {
       switch (mode)
        {
@@ -22018,7 +22018,7 @@ ix86_force_to_memory (enum machine_mode mode, rtx operand)
 void
 ix86_free_from_memory (enum machine_mode mode)
 {
-  if (!TARGET_RED_ZONE)
+  if (!TARGET_RED_ZONE || TARGET_64BIT_MS_ABI)
     {
       int size;