diff options
author | Kai Tietz <kai.tietz@onevision.com> | 2008-06-12 09:19:35 +0000 |
---|---|---|
committer | Kai Tietz <ktietz@gcc.gnu.org> | 2008-06-12 11:19:35 +0200 |
commit | 394a378ca94d23f47d17a863ee7a0627c48a3754 (patch) | |
tree | e368696b56b9bd13bd1b13ecf15328baba24b569 /gcc | |
parent | 001c371924eda53a20082894f1d5c0414f8063f3 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 12 |
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; |