diff options
author | Mans Rullgard <mans@mansr.com> | 2012-11-19 16:55:05 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2012-11-19 11:55:05 -0500 |
commit | 8192d7302c410d22ccafc740b8650801e84624ef (patch) | |
tree | 723071228058318074fc62b1c7bb783ce60d4245 | |
parent | 041af827a036308ca15fc0e11ba4b4b49f847efc (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 8 |
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)) { |