aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Tietz <kai.tietz@onevision.com>2008-06-12 09:19:35 +0000
committerKai Tietz <ktietz@gcc.gnu.org>2008-06-12 11:19:35 +0200
commit394a378ca94d23f47d17a863ee7a0627c48a3754 (patch)
treee368696b56b9bd13bd1b13ecf15328baba24b569
parent001c371924eda53a20082894f1d5c0414f8063f3 (diff)
downloadgcc-394a378ca94d23f47d17a863ee7a0627c48a3754.zip
gcc-394a378ca94d23f47d17a863ee7a0627c48a3754.tar.gz
gcc-394a378ca94d23f47d17a863ee7a0627c48a3754.tar.bz2
i386.c (ix86_compute_frame_layout): Disable red zone for w64 abi.
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
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.c12
2 files changed, 14 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d66d335..e1c11b1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 6fd4c02..d7a0713 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -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;