m_assembler.cvtsi2sd_mr(src.m_ptr, dest);
}
+#if 0 // FIXME: UNTESTED!
+ void convertUInt32ToDouble(RegisterID src, FPRegisterID dest, FPRegisterID scratch)
+ {
+ // compare this with what the Clang compiler with -O3 generates for:
+ // double f(unsigned u) { return (double) u; }
+ static const double magic = 4.503600e+15; // 0x4330000000000000
+ m_assembler.loadDouble(&magic, scratch);
+ m_assembler.movd_rr(src, dst);
+ m_assembler.orpd_rr(scratch, dest);
+ m_assembler.subsd(scratch, dest);
+ }
+#endif
+
void store32(TrustedImm32 imm, void* address)
{
m_assembler.movl_i32m(imm.m_value, address);
m_assembler.cvtsi2sd_rr(scratchRegister, dest);
}
+ void convertUInt32ToDouble(RegisterID src, FPRegisterID dest, FPRegisterID /*scratch*/)
+ {
+ zeroExtend32ToPtr(src, src);
+ m_assembler.cvtsiq2sd_rr(src, dest);
+ }
+
void store32(TrustedImm32 imm, void* address)
{
move(TrustedImmPtr(address), scratchRegister);
}
#endif
+#if CPU(X86_64)
+ void cvtsiq2sd_rr(RegisterID src, FPRegisterID dst)
+ {
+ m_formatter.prefix(PRE_SSE_F2);
+ m_formatter.twoByteOp64(OP2_CVTSI2SD_VsdEd, (RegisterID)dst, src);
+ }
+
+#endif
+
void cvttsd2si_rr(XMMRegisterID src, RegisterID dst)
{
m_formatter.prefix(PRE_SSE_F2);