return \"mov{l}\\t{%1, %0|%0, %1}\";
case 5:
case 6:
+ if (TARGET_PARTIAL_REG_DEPENDENCY
+ && register_operand (operands[0], VOIDmode)
+ && register_operand (operands[1], VOIDmode))
+ return \"movaps\\t{%1, %0|%0, %1}\";
return \"movss\\t{%1, %0|%0, %1}\";
default:
return \"#\";
case 5:
case 6:
+ if (TARGET_PARTIAL_REG_DEPENDENCY
+ && register_operand (operands[0], VOIDmode)
+ && register_operand (operands[1], VOIDmode))
+ return \"movapd\\t{%1, %0|%0, %1}\";
return \"movsd\\t{%1, %0|%0, %1}\";
default:
(set_attr "mode" "SF,SF")])
(define_insn "*truncdfsf2_1_sse"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f,Y")
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=*!m,?f,Y")
(float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "f,0,mY")))
(clobber (match_operand:SF 2 "memory_operand" "=X,m,X"))]
(set_attr "mode" "SF,SF,DF")])
(define_insn "*truncdfsf2_2"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=m,Y")
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=Y,!m")
(float_truncate:SF
- (match_operand:DF 1 "nonimmediate_operand" "f,mY")))]
- "TARGET_80387 && TARGET_SSE2"
+ (match_operand:DF 1 "nonimmediate_operand" "mY,f")))]
+ "TARGET_80387 && TARGET_SSE2
+ && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"*
{
switch (which_alternative)
{
case 0:
+ return \"cvtsd2ss\\t{%1, %0|%0, %1}\";
+ case 1:
if (find_regno_note (insn, REG_DEAD, REGNO (operands[1])))
return \"fstp%z0\\t%y0\";
else
return \"fst%z0\\t%y0\";
- case 1:
- case 2:
- return \"cvtsd2ss\\t{%1, %0|%0, %1}\";
}
}"
- [(set_attr "type" "fmov,sse")
- (set_attr "mode" "SF,DF")])
+ [(set_attr "type" "sse,fmov")
+ (set_attr "mode" "DF,SF")])
(define_insn "truncdfsf2_3"
[(set (match_operand:SF 0 "nonimmediate_operand" "=m")