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:
parent
cc73528f07
commit
bcb604b6be
2 changed files with 17 additions and 8 deletions
|
@ -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.
|
||||
|
|
|
@ -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)));
|
||||
|
|
Loading…
Add table
Reference in a new issue