V4 JIT: optimize constant-to-register loading.
authorErik Verbruggen <erik.verbruggen@me.com>
Wed, 25 Sep 2013 09:58:03 +0000 (11:58 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Sat, 28 Sep 2013 21:56:53 +0000 (23:56 +0200)
Change-Id: I02e3cdd5f9a68fbf6bfd7805c385d807b344155b
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/qml/compiler/qv4isel_masm_p.h

index 86a4dd6..a9355bd 100644 (file)
@@ -1224,9 +1224,12 @@ public:
     {
         if (V4IR::Const *c = e->asConst()) {
 #if QT_POINTER_SIZE == 8
-            load64(constantTable().loadValueAddress(c, ScratchRegister), ReturnValueRegister);
-            move(TrustedImm64(QV4::Value::NaNEncodeMask), ScratchRegister);
-            xor64(ScratchRegister, ReturnValueRegister);
+            union {
+                double d;
+                int64_t i;
+            } u;
+            u.d = c->value;
+            move(TrustedImm64(u.i), ReturnValueRegister);
             move64ToDouble(ReturnValueRegister, target);
 #else
             JSC::MacroAssembler::loadDouble(constantTable().loadValueAddress(c, ScratchRegister), target);