drcbex64: optimize FMOV (nw)

This commit is contained in:
Ville Linde 2016-04-14 19:44:23 +03:00
parent 8a9e872224
commit bfbd0443fe

View File

@ -5951,17 +5951,31 @@ void drcbe_x64::op_fmov(x86code *&dst, const instruction &inst)
// 32-bit form // 32-bit form
if (inst.size() == 4) if (inst.size() == 4)
{
if (srcp.is_float_register())
{
emit_movss_p32_r128(dst, dstp, srcp.ireg()); // movss dstp,srcp
}
else
{ {
emit_movss_r128_p32(dst, dstreg, srcp); // movss dstreg,srcp emit_movss_r128_p32(dst, dstreg, srcp); // movss dstreg,srcp
emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg
} }
}
// 64-bit form // 64-bit form
else if (inst.size() == 8) else if (inst.size() == 8)
{
if (srcp.is_float_register())
{
emit_movsd_p64_r128(dst, dstp, srcp.ireg()); // movsd dstp,srcp
}
else
{ {
emit_movsd_r128_p64(dst, dstreg, srcp); // movsd dstreg,srcp emit_movsd_r128_p64(dst, dstreg, srcp); // movsd dstreg,srcp
emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg
} }
}
// resolve the jump // resolve the jump
if (inst.condition() != uml::COND_ALWAYS) if (inst.condition() != uml::COND_ALWAYS)