diff options
author | Erik Verbruggen <erik.verbruggen@me.com> | 2013-08-15 13:49:40 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-08-20 19:29:29 +0200 |
commit | 35ed1695f06aca61a86f7f47360f048a40180add (patch) | |
tree | bd96af32268b779b51929005384099bb7a7c555e /src/3rdparty/masm | |
parent | 461892e492e0bef399714557498380703b3e029b (diff) |
Change convertUInt32ToDouble to use an int scratch register.
Only on X86, and still untested.
Change-Id: I746daa47ed019ce0017a67a228a719983b1ebaa6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/3rdparty/masm')
-rw-r--r-- | src/3rdparty/masm/assembler/MacroAssemblerX86.h | 20 | ||||
-rw-r--r-- | src/3rdparty/masm/assembler/MacroAssemblerX86_64.h | 2 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/3rdparty/masm/assembler/MacroAssemblerX86.h b/src/3rdparty/masm/assembler/MacroAssemblerX86.h index 471bf173f5..eb0702d464 100644 --- a/src/3rdparty/masm/assembler/MacroAssemblerX86.h +++ b/src/3rdparty/masm/assembler/MacroAssemblerX86.h @@ -124,15 +124,17 @@ public: } #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); + void convertUInt32ToDouble(RegisterID src, FPRegisterID dest, RegisterID scratch) + { + Jump intRange = branch32(GreaterThanOrEqual, src, TrustedImm32(0)); + and32(TrustedImm32(INT_MAX), src, scratch); + convertInt32ToDouble(scratch, dst); + static const double magic = INT_MAX + 1; + addDouble(&magic, dst); + Jump done = jump(); + intRange.link(this); + convertInt32ToDouble(src, dst); + done.link(this); } #endif diff --git a/src/3rdparty/masm/assembler/MacroAssemblerX86_64.h b/src/3rdparty/masm/assembler/MacroAssemblerX86_64.h index 80aa1dbe1d..3aaa0fd1bc 100644 --- a/src/3rdparty/masm/assembler/MacroAssemblerX86_64.h +++ b/src/3rdparty/masm/assembler/MacroAssemblerX86_64.h @@ -110,7 +110,7 @@ public: m_assembler.cvtsi2sd_rr(scratchRegister, dest); } - void convertUInt32ToDouble(RegisterID src, FPRegisterID dest, FPRegisterID /*scratch*/) + void convertUInt32ToDouble(RegisterID src, FPRegisterID dest, RegisterID /*scratch*/) { zeroExtend32ToPtr(src, src); m_assembler.cvtsiq2sd_rr(src, dest); |