aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMans Rullgard <mans@mansr.com>2012-11-19 16:55:05 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2012-11-19 11:55:05 -0500
commit8192d7302c410d22ccafc740b8650801e84624ef (patch)
tree723071228058318074fc62b1c7bb783ce60d4245
parent041af827a036308ca15fc0e11ba4b4b49f847efc (diff)
downloadgcc-8192d7302c410d22ccafc740b8650801e84624ef.zip
gcc-8192d7302c410d22ccafc740b8650801e84624ef.tar.gz
gcc-8192d7302c410d22ccafc740b8650801e84624ef.tar.bz2
rs6000.c (rs6000_stack_info): Always set vrsave_mask for TARGET_ALTIVEC_ABI.
2012-11-19 Mans Rullgard <mans@mansr.com> * config/rs6000/rs6000.c (rs6000_stack_info): Always set vrsave_mask for TARGET_ALTIVEC_ABI. Zero vrsave_save_offset if !TARGET_ALTIVEC_VRSAVE. (rs6000_emit_prologue): For SAVE_INLINE_VLRs, check vrsave_size not vrsave_mask. From-SVN: r193627
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/rs6000/rs6000.c8
2 files changed, 12 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 34c3f0c..ee15058 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2012-11-19 Mans Rullgard <mans@mansr.com>
+
+ * config/rs6000/rs6000.c (rs6000_stack_info): Always set vrsave_mask
+ for TARGET_ALTIVEC_ABI. Zero vrsave_save_offset if
+ !TARGET_ALTIVEC_VRSAVE.
+ (rs6000_emit_prologue): For SAVE_INLINE_VLRs, check vrsave_size
+ not vrsave_mask.
+
2012-11-19 David Edelsohn <dje.gcc@gmail.com>
* system.h (vec_free): Undef.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 4bde320..f55597f 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -17838,8 +17838,7 @@ rs6000_stack_info (void)
else
info_ptr->spe_gp_size = 0;
- /* Set VRSAVE register if it is saved and restored. */
- if (TARGET_ALTIVEC_ABI && TARGET_ALTIVEC_VRSAVE)
+ if (TARGET_ALTIVEC_ABI)
info_ptr->vrsave_mask = compute_vrsave_mask ();
else
info_ptr->vrsave_mask = 0;
@@ -18027,7 +18026,8 @@ rs6000_stack_info (void)
if (! TARGET_ALTIVEC_ABI || info_ptr->altivec_size == 0)
info_ptr->altivec_save_offset = 0;
- if (! TARGET_ALTIVEC_ABI || info_ptr->vrsave_mask == 0)
+ /* Zero VRSAVE offset if not saved and restored. */
+ if (! TARGET_ALTIVEC_VRSAVE || info_ptr->vrsave_mask == 0)
info_ptr->vrsave_save_offset = 0;
if (! TARGET_SPE_ABI
@@ -20058,7 +20058,7 @@ rs6000_emit_prologue (void)
|| (info->altivec_size != 0
&& (info->altivec_save_offset + info->altivec_size - 16
+ info->total_size - frame_off) > 32767)
- || (info->vrsave_mask != 0
+ || (info->vrsave_size != 0
&& (info->vrsave_save_offset
+ info->total_size - frame_off) > 32767))
{