i386.c (ix86_split_long_move): Fix base register mode for XFmode splits for TARGET_64BIT.
* config/i386/i386.c (ix86_split_long_move): Fix base register mode for XFmode splits for TARGET_64BIT. From-SVN: r66589
This commit is contained in:
parent
0212907f54
commit
8231b3f9ff
@ -1,3 +1,8 @@
|
|||||||
|
2003-05-07 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
* config/i386/i386.c (ix86_split_long_move): Fix base register
|
||||||
|
mode for XFmode splits for TARGET_64BIT.
|
||||||
|
|
||||||
2003-05-07 Richard Henderson <rth@redhat.com>
|
2003-05-07 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
* sched-ebb.c (schedule_ebb): Supply the correct starting
|
* sched-ebb.c (schedule_ebb): Supply the correct starting
|
||||||
|
@ -10593,15 +10593,24 @@ ix86_split_long_move (operands)
|
|||||||
Do an lea to the last part and use only one colliding move. */
|
Do an lea to the last part and use only one colliding move. */
|
||||||
else if (collisions > 1)
|
else if (collisions > 1)
|
||||||
{
|
{
|
||||||
|
rtx base;
|
||||||
|
|
||||||
collisions = 1;
|
collisions = 1;
|
||||||
emit_insn (gen_rtx_SET (VOIDmode, part[0][nparts - 1],
|
|
||||||
XEXP (part[1][0], 0)));
|
base = part[0][nparts - 1];
|
||||||
part[1][0] = change_address (part[1][0],
|
|
||||||
TARGET_64BIT ? DImode : SImode,
|
/* Handle the case when the last part isn't valid for lea.
|
||||||
part[0][nparts - 1]);
|
Happens in 64-bit mode storing the 12-byte XFmode. */
|
||||||
part[1][1] = adjust_address (part[1][0], VOIDmode, UNITS_PER_WORD);
|
if (GET_MODE (base) != Pmode)
|
||||||
|
base = gen_rtx_REG (Pmode, REGNO (base));
|
||||||
|
|
||||||
|
emit_insn (gen_rtx_SET (VOIDmode, base, XEXP (part[1][0], 0)));
|
||||||
|
part[1][0] = replace_equiv_address (part[1][0], base);
|
||||||
|
part[1][1] = replace_equiv_address (part[1][1],
|
||||||
|
plus_constant (base, UNITS_PER_WORD));
|
||||||
if (nparts == 3)
|
if (nparts == 3)
|
||||||
part[1][2] = adjust_address (part[1][0], VOIDmode, 8);
|
part[1][2] = replace_equiv_address (part[1][2],
|
||||||
|
plus_constant (base, 8));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user