Fixed a vrsave problem in the presense of save_world call in the prologue.

Oked by Dale Johannesen.

From-SVN: r99236
This commit is contained in:
Fariborz Jahanian 2005-05-04 22:44:14 +00:00 committed by Fariborz Jahanian
parent cc73528f07
commit bcb604b6be
2 changed files with 17 additions and 8 deletions

View file

@ -1,3 +1,9 @@
2005-05-04 Fariborz Jahanian <fjahanian@apple.com>
* config/rs6000/rs6000.c (rs6000_emit_prologue): Emit
setting of vrsave register for current function after
call to save_world is emitted.
2005-05-05 Hans-Peter Nilsson <hp@bitrange.com>
* config/mmix/predicates.md: New file.

View file

@ -13271,7 +13271,7 @@ rs6000_emit_prologue (void)
epilogue. */
if (TARGET_ALTIVEC && TARGET_ALTIVEC_VRSAVE
&& !WORLD_SAVE_P (info) && info->vrsave_mask != 0)
&& info->vrsave_mask != 0)
{
rtx reg, mem, vrsave;
int offset;
@ -13286,13 +13286,16 @@ rs6000_emit_prologue (void)
else
emit_insn (gen_rtx_SET (VOIDmode, reg, vrsave));
/* Save VRSAVE. */
offset = info->vrsave_save_offset + sp_offset;
mem
= gen_rtx_MEM (SImode,
gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (offset)));
set_mem_alias_set (mem, rs6000_sr_alias_set);
insn = emit_move_insn (mem, reg);
if (!WORLD_SAVE_P (info))
{
/* Save VRSAVE. */
offset = info->vrsave_save_offset + sp_offset;
mem
= gen_rtx_MEM (SImode,
gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (offset)));
set_mem_alias_set (mem, rs6000_sr_alias_set);
insn = emit_move_insn (mem, reg);
}
/* Include the registers in the mask. */
emit_insn (gen_iorsi3 (reg, reg, GEN_INT ((int) info->vrsave_mask)));