(movsf, movdf): Handle a move from an integer register before reload.
This can happen if the user uses asm to put a floating point variable in an integer register. From-SVN: r4666
This commit is contained in:
parent
11e5fe42ca
commit
785e6a26da
@ -2259,20 +2259,19 @@
|
||||
&& REGNO (SUBREG_REG (operands[1])) < FIRST_PSEUDO_REGISTER)
|
||||
operands[1] = alter_subreg (operands[1]);
|
||||
|
||||
/* If we are being called from reload, it is possible that operands[1]
|
||||
is a hard non-fp register. So handle those cases. */
|
||||
if (reload_in_progress && GET_CODE (operands[1]) == REG
|
||||
&& REGNO (operands[1]) < 32)
|
||||
if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 32)
|
||||
{
|
||||
rtx stack_slot;
|
||||
|
||||
/* Remember that we only see a pseudo here if it didn't get a hard
|
||||
register, so it is memory. */
|
||||
/* If this is a store to memory or another integer register do the
|
||||
move directly. Otherwise store to a temporary stack slot and
|
||||
load from there into a floating point register. */
|
||||
|
||||
if (GET_CODE (operands[0]) == MEM
|
||||
|| (GET_CODE (operands[0]) == REG
|
||||
&& (REGNO (operands[0]) < 32
|
||||
|| REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER))
|
||||
|| (GET_CODE (operands[0]) == REG && REGNO (operands[0]) < 32))
|
||||
|| (reload_in_progress
|
||||
&& REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER))))
|
||||
{
|
||||
emit_move_insn (operand_subword (operands[0], 0, 0, SFmode),
|
||||
operand_subword (operands[1], 0, 0, SFmode));
|
||||
@ -2371,19 +2370,19 @@
|
||||
&& REGNO (SUBREG_REG (operands[1])) < FIRST_PSEUDO_REGISTER)
|
||||
operands[1] = alter_subreg (operands[1]);
|
||||
|
||||
/* If we are being called from reload, it is possible that operands[1]
|
||||
is a hard non-fp register. So handle those cases. */
|
||||
if (reload_in_progress && GET_CODE (operands[1]) == REG
|
||||
&& REGNO (operands[1]) < 32)
|
||||
if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 32)
|
||||
{
|
||||
rtx stack_slot;
|
||||
|
||||
/* Remember that we only see a pseudo here if it didn't get a hard
|
||||
register, so it is memory. */
|
||||
/* If this is a store to memory or another integer register do the
|
||||
move directly. Otherwise store to a temporary stack slot and
|
||||
load from there into a floating point register. */
|
||||
|
||||
if (GET_CODE (operands[0]) == MEM
|
||||
|| (GET_CODE (operands[0]) == REG
|
||||
&& (REGNO (operands[0]) < 32
|
||||
|| REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)))
|
||||
|| (reload_in_progress
|
||||
&& REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER))))
|
||||
{
|
||||
emit_move_insn (operand_subword (operands[0], 0, 0, DFmode),
|
||||
operand_subword (operands[1], 0, 0, DFmode));
|
||||
|
Loading…
Reference in New Issue
Block a user