{
if (TARGET_POWER2 || TARGET_POWERPC)
{
- rtx stack_slot, temp = gen_reg_rtx (DImode);
+ rtx stack_slot = assign_stack_temp (DImode, 8, 0),
+ temp = gen_reg_rtx (DImode);
+
emit_insn (gen_fpcvtsi (temp, operands[1]));
- stack_slot = gen_rtx (MEM, DImode,
- plus_constant (stack_pointer_rtx, 8));
emit_move_insn (stack_slot, temp);
emit_move_insn (operands[0],
operand_subword (stack_slot, 1, 0, DImode));
(set_attr "length" "8")])
(define_insn ""
- [(set (match_operand:DI 0 "gpc_reg_operand" "=r")
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
(mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
(sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
- "TARGET_POWERPC"
+ "TARGET_POWERPC && ! TARGET_POWERPC64"
"mulhw %0,%1,%2\;mullw %L0,%1,%2"
[(set_attr "type" "imul")
(set_attr "length" "8")])
if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 32)
{
- rtx stack_slot;
+ 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
DONE;
}
- stack_slot = gen_rtx (MEM, SFmode, plus_constant (stack_pointer_rtx, 4));
emit_move_insn (stack_slot, operands[1]);
emit_move_insn (operands[0], stack_slot);
DONE;
if (GET_CODE (operands[0]) == REG && REGNO (operands[0]) < 32)
{
- rtx stack_slot;
+ 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)
DONE;
}
- if (reload_in_progress)
- stack_slot = gen_rtx (MEM, SFmode,
- plus_constant (stack_pointer_rtx, 4));
- else
- stack_slot = assign_stack_temp (SFmode, 4, 0);
emit_move_insn (stack_slot, operands[1]);
emit_move_insn (operands[0], stack_slot);
DONE;
|| (FP_REGNO_P (REGNO (operands[1]))
&& ! FP_REGNO_P (REGNO (operands[0])))))
{
- rtx stack_slot;
+ rtx stack_slot = assign_stack_temp (DImode, 8, 0);
- if (reload_in_progress)
- stack_slot = gen_rtx (MEM, DImode,
- plus_constant (stack_pointer_rtx, 8));
- else
- stack_slot = assign_stack_temp (DImode, 8, 0);
emit_move_insn (stack_slot, operands[1]);
emit_move_insn (operands[0], stack_slot);
DONE;