summaryrefslogtreecommitdiffstats
path: root/contrib/gcc
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2013-12-04 21:17:39 +0000
committerpfg <pfg@FreeBSD.org>2013-12-04 21:17:39 +0000
commit6e411c7e1916ef76b0aa51ded38fa235d3313371 (patch)
tree4a0a3d284549c7a3d4f14b9a74dbefac38e6a16f /contrib/gcc
parent689c48e66fe6ff18917d596d4f819a0b3d129343 (diff)
downloadFreeBSD-src-6e411c7e1916ef76b0aa51ded38fa235d3313371.zip
FreeBSD-src-6e411c7e1916ef76b0aa51ded38fa235d3313371.tar.gz
gcc: On rs6000 update sp_offset depending only on size.
This fixes a nasty bug introduced in r258651. Reported and tested by: Justin Hibbits Obtained from: gcc pre-4.3 (rev. 125116; GPLv2) MFC after: 2 weeks
Diffstat (limited to 'contrib/gcc')
-rw-r--r--contrib/gcc/ChangeLog.gcc4310
-rw-r--r--contrib/gcc/config/rs6000/rs6000.c14
2 files changed, 20 insertions, 4 deletions
diff --git a/contrib/gcc/ChangeLog.gcc43 b/contrib/gcc/ChangeLog.gcc43
index 5931bd3..5c6701a 100644
--- a/contrib/gcc/ChangeLog.gcc43
+++ b/contrib/gcc/ChangeLog.gcc43
@@ -51,12 +51,20 @@
* doc/extend.texi: Document the 0b-prefixed binary integer
constant extension.
-2007-05-31 Eric Christopher <echristo@apple.com>
+2007-05-31 Eric Christopher <echristo@apple.com> (r125246)
* expr.c (convert_move): Assert that we don't have a BLKmode
operand.
(store_expr): Handle BLKmode moves by calling emit_block_move.
+2007-05-27 Eric Christopher <echristo@apple.com> (r125116)
+
+ * config/rs6000/rs6000.c (rs6000_emit_prologue): Update
+ sp_offset depending on stack size. Save r12 depending
+ on registers we're saving later.
+ (rs6000_emit_epilogue): Update sp_offset depending only
+ on stack size.
+
2007-05-24 Richard Sandiford <rsandifo@nildram.co.uk> (r125037)
* postreload-gcse.c (reg_changed_after_insn_p): New function.
diff --git a/contrib/gcc/config/rs6000/rs6000.c b/contrib/gcc/config/rs6000/rs6000.c
index 7735c46..287902f 100644
--- a/contrib/gcc/config/rs6000/rs6000.c
+++ b/contrib/gcc/config/rs6000/rs6000.c
@@ -14704,8 +14704,17 @@ rs6000_emit_prologue (void)
if (!WORLD_SAVE_P (info) && info->push_p
&& !(DEFAULT_ABI == ABI_V4 || current_function_calls_eh_return))
{
- rs6000_emit_allocate_stack (info->total_size, FALSE);
+ if (info->total_size < 32767)
sp_offset = info->total_size;
+ else
+ frame_reg_rtx = frame_ptr_rtx;
+ rs6000_emit_allocate_stack (info->total_size,
+ (frame_reg_rtx != sp_reg_rtx
+ && ((info->altivec_size != 0)
+ || (info->vrsave_mask != 0)
+ )));
+ if (frame_reg_rtx != sp_reg_rtx)
+ rs6000_emit_stack_tie ();
}
/* Set frame pointer, if needed. */
@@ -15046,8 +15055,7 @@ rs6000_emit_epilogue (int sibcall)
}
/* Set sp_offset based on the stack push from the prologue. */
- if ((DEFAULT_ABI == ABI_V4 || current_function_calls_eh_return)
- && info->total_size < 32767)
+ if (info->total_size < 32767)
sp_offset = info->total_size;
/* Restore AltiVec registers if needed. */
OpenPOWER on IntegriCloud