aboutsummaryrefslogtreecommitdiffstats
path: root/src/3rdparty/masm
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@me.com>2013-08-15 13:49:40 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-08-20 19:29:29 +0200
commit35ed1695f06aca61a86f7f47360f048a40180add (patch)
treebd96af32268b779b51929005384099bb7a7c555e /src/3rdparty/masm
parent461892e492e0bef399714557498380703b3e029b (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.h20
-rw-r--r--src/3rdparty/masm/assembler/MacroAssemblerX86_64.h2
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);