diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 1f287253605..747355ade64 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -3763,8 +3763,6 @@ if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 32) { - rtx stack_slot = assign_stack_temp (SFmode, 4, 0); - /* 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. */ @@ -3779,10 +3777,14 @@ operand_subword (operands[1], 0, 0, SFmode)); DONE; } + else + { + rtx stack_slot = assign_stack_temp (SFmode, 4, 0); - emit_move_insn (stack_slot, operands[1]); - emit_move_insn (operands[0], stack_slot); - DONE; + emit_move_insn (stack_slot, operands[1]); + emit_move_insn (operands[0], stack_slot); + DONE; + } } if (GET_CODE (operands[0]) == MEM) @@ -3790,8 +3792,6 @@ if (GET_CODE (operands[0]) == REG && REGNO (operands[0]) < 32) { - rtx stack_slot = assign_stack_temp (SFmode, 4, 0); - if (GET_CODE (operands[1]) == MEM #if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT && ! defined(REAL_IS_NOT_DOUBLE) || GET_CODE (operands[1]) == CONST_DOUBLE @@ -3805,10 +3805,14 @@ operand_subword (operands[1], 0, 0, SFmode)); DONE; } + else + { + rtx stack_slot = assign_stack_temp (SFmode, 4, 0); - emit_move_insn (stack_slot, operands[1]); - emit_move_insn (operands[0], stack_slot); - DONE; + emit_move_insn (stack_slot, operands[1]); + emit_move_insn (operands[0], stack_slot); + DONE; + } } if (CONSTANT_P (operands[1]))