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

@ -5952,15 +5952,29 @@ void drcbe_x64::op_fmov(x86code *&dst, const instruction &inst)
// 32-bit form // 32-bit form
if (inst.size() == 4) if (inst.size() == 4)
{ {
emit_movss_r128_p32(dst, dstreg, srcp); // movss dstreg,srcp if (srcp.is_float_register())
emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg {
emit_movss_p32_r128(dst, dstp, srcp.ireg()); // movss dstp,srcp
}
else
{
emit_movss_r128_p32(dst, dstreg, srcp); // movss dstreg,srcp
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)
{ {
emit_movsd_r128_p64(dst, dstreg, srcp); // movsd dstreg,srcp if (srcp.is_float_register())
emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg {
emit_movsd_p64_r128(dst, dstp, srcp.ireg()); // movsd dstp,srcp
}
else
{
emit_movsd_r128_p64(dst, dstreg, srcp); // movsd dstreg,srcp
emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg
}
} }
// resolve the jump // resolve the jump