aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/3rdparty/masm/masm-defs.pri17
-rw-r--r--src/3rdparty/masm/masm.pri11
-rw-r--r--src/3rdparty/masm/wtf/Platform.h9
-rw-r--r--src/qml/compiler/compiler.pri11
-rw-r--r--src/qml/compiler/qv4isel_masm.cpp4
-rw-r--r--src/qml/compiler/qv4isel_masm_p.h5
-rw-r--r--src/qml/jsruntime/qv4global_p.h31
7 files changed, 54 insertions, 34 deletions
diff --git a/src/3rdparty/masm/masm-defs.pri b/src/3rdparty/masm/masm-defs.pri
index aa6acc9094..cc97440257 100644
--- a/src/3rdparty/masm/masm-defs.pri
+++ b/src/3rdparty/masm/masm-defs.pri
@@ -1,19 +1,5 @@
-wince*: CONFIG += disable_jit
-ios: CONFIG += disable_jit
-if(win*:isEqual(QT_ARCH, "x86_64")): CONFIG += disable_jit
-equals(ANDROID_TARGET_ARCH, armeabi): CONFIG += disable_jit
-
-disable_jit: DEFINES += ENABLE_YARR_JIT=0
-else: DEFINES += V4_ENABLE_JIT ENABLE_YARR_JIT=1
-
-# On Qt/Android/ARM release builds are thumb and debug builds arm,
-# but we'll force the JIT to always generate thumb2
-contains(DEFINES, V4_ENABLE_JIT):android:isEqual(QT_ARCH, "arm") {
- DEFINES += WTF_CPU_ARM_THUMB2
-}
-
DEFINES += WTF_EXPORT_PRIVATE="" JS_EXPORT_PRIVATE=""
win*: DEFINES += NOMINMAX
@@ -22,11 +8,8 @@ DEFINES += ENABLE_LLINT=0
DEFINES += ENABLE_DFG_JIT=0
DEFINES += ENABLE_DFG_JIT_UTILITY_METHODS=1
DEFINES += ENABLE_JIT_CONSTANT_BLINDING=0
-DEFINES += ENABLE_ASSEMBLER=1
DEFINES += BUILDING_QT__
-DEFINES += ENABLE_JIT=1
-
INCLUDEPATH += $$PWD/jit
INCLUDEPATH += $$PWD/assembler
INCLUDEPATH += $$PWD/runtime
diff --git a/src/3rdparty/masm/masm.pri b/src/3rdparty/masm/masm.pri
index 63537f26d5..d7b315602e 100644
--- a/src/3rdparty/masm/masm.pri
+++ b/src/3rdparty/masm/masm.pri
@@ -1,11 +1,6 @@
-contains(DEFINES, V4_ENABLE_JIT) {
- HEADERS += $$PWD/assembler/*.h
- SOURCES += $$PWD/assembler/ARMAssembler.cpp
- SOURCES += $$PWD/assembler/ARMv7Assembler.cpp
- SOURCES += $$PWD/assembler/MacroAssemblerARM.cpp
- SOURCES += $$PWD/assembler/MacroAssemblerSH4.cpp
- SOURCES += $$PWD/assembler/LinkBuffer.cpp
-}
+HEADERS += $$PWD/assembler/*.h
+SOURCES += $$PWD/assembler/ARMv7Assembler.cpp
+SOURCES += $$PWD/assembler/LinkBuffer.cpp
HEADERS += $$PWD/wtf/*.h
SOURCES += $$PWD/wtf/PrintStream.cpp
diff --git a/src/3rdparty/masm/wtf/Platform.h b/src/3rdparty/masm/wtf/Platform.h
index b8402a991f..c81a9fe40f 100644
--- a/src/3rdparty/masm/wtf/Platform.h
+++ b/src/3rdparty/masm/wtf/Platform.h
@@ -28,6 +28,10 @@
#ifndef WTF_Platform_h
#define WTF_Platform_h
+#if defined(__cplusplus)
+#include <private/qv4global_p.h>
+#endif
+
/* Include compiler specific macros */
#include <wtf/Compiler.h>
@@ -767,7 +771,8 @@
#endif
/* If the jit is not available, enable the LLInt C Loop: */
-#if !ENABLE(JIT)
+/* Not for Qml. We have our own interpreter. */
+#if 0 /* !ENABLE(JIT) */
#undef ENABLE_LLINT /* Undef so that we can redefine it. */
#undef ENABLE_LLINT_C_LOOP /* Undef so that we can redefine it. */
#undef ENABLE_DFG_JIT /* Undef so that we can redefine it. */
@@ -778,7 +783,7 @@
/* Do a sanity check to make sure that we at least have one execution engine in
use: */
-#if !(ENABLE(JIT) || ENABLE(LLINT))
+#if 0 /* !(ENABLE(JIT) || ENABLE(LLINT)) */
#error You have to have at least one execution model enabled to build JSC
#endif
diff --git a/src/qml/compiler/compiler.pri b/src/qml/compiler/compiler.pri
index 3a1af30b88..df4f5e8dc3 100644
--- a/src/qml/compiler/compiler.pri
+++ b/src/qml/compiler/compiler.pri
@@ -14,7 +14,8 @@ HEADERS += \
$$PWD/qv4isel_util_p.h \
$$PWD/qv4ssa_p.h \
$$PWD/qv4regalloc_p.h \
- $$PWD/qqmlcodegenerator_p.h
+ $$PWD/qqmlcodegenerator_p.h \
+ $$PWD/qv4isel_masm_p.h
SOURCES += \
$$PWD/qv4compileddata.cpp \
@@ -26,11 +27,7 @@ SOURCES += \
$$PWD/qv4jsir.cpp \
$$PWD/qv4ssa.cpp \
$$PWD/qv4regalloc.cpp \
- $$PWD/qqmlcodegenerator.cpp
-
-contains(DEFINES, V4_ENABLE_JIT) {
- HEADERS += $$PWD/qv4isel_masm_p.h
- SOURCES += $$PWD/qv4isel_masm.cpp
-}
+ $$PWD/qqmlcodegenerator.cpp \
+ $$PWD/qv4isel_masm.cpp
include(../../3rdparty/masm/masm.pri)
diff --git a/src/qml/compiler/qv4isel_masm.cpp b/src/qml/compiler/qv4isel_masm.cpp
index 1155322df2..888d11a6c5 100644
--- a/src/qml/compiler/qv4isel_masm.cpp
+++ b/src/qml/compiler/qv4isel_masm.cpp
@@ -56,6 +56,8 @@
#include <iostream>
#include <cassert>
+#if ENABLE(ASSEMBLER)
+
#if USE(UDIS86)
# include <udis86.h>
#endif
@@ -2566,3 +2568,5 @@ bool InstructionSelection::int32Binop(V4IR::AluOp oper, V4IR::Expr *leftSource,
return false;
}
}
+
+#endif // ENABLE(ASSEMBLER)
diff --git a/src/qml/compiler/qv4isel_masm_p.h b/src/qml/compiler/qv4isel_masm_p.h
index 02ddd158a9..bd4c564ab9 100644
--- a/src/qml/compiler/qv4isel_masm_p.h
+++ b/src/qml/compiler/qv4isel_masm_p.h
@@ -51,6 +51,9 @@
#include <QtCore/QHash>
#include <config.h>
#include <wtf/Vector.h>
+
+#if ENABLE(ASSEMBLER)
+
#include <assembler/MacroAssembler.h>
#include <assembler/MacroAssemblerCodeRef.h>
@@ -1606,4 +1609,6 @@ public:
QT_END_NAMESPACE
+#endif // ENABLE(ASSEMBLER)
+
#endif // QV4ISEL_MASM_P_H
diff --git a/src/qml/jsruntime/qv4global_p.h b/src/qml/jsruntime/qv4global_p.h
index 3569247459..2050ccd746 100644
--- a/src/qml/jsruntime/qv4global_p.h
+++ b/src/qml/jsruntime/qv4global_p.h
@@ -64,6 +64,37 @@ inline double trunc(double d) { return d > 0 ? floor(d) : ceil(d); }
#define qOffsetOf(s, m) ((size_t)((((char *)&(((s *)64)->m)) - 64)))
+// Decide whether to enable or disable the JIT
+
+// White list architectures
+
+#if defined(Q_PROCESSOR_X86)
+#define V4_ENABLE_JIT
+#elif defined(Q_PROCESSOR_X86_64)
+#define V4_ENABLE_JIT
+#elif defined(Q_PROCESSOR_ARM_32) && __TARGET_ARCH_THUMB-0 == 4
+#define V4_ENABLE_JIT
+#endif
+
+// Black list some platforms
+#if defined(V4_ENABLE_JIT)
+#if defined(Q_OS_WINCE) || defined(Q_OS_IOS) || defined(Q_OS_WIN64)
+ #undef V4_ENABLE_JIT
+#endif
+#endif
+
+// Do certain things depending on whether the JIT is enabled or disabled
+
+#ifdef V4_ENABLE_JIT
+#define ENABLE_YARR_JIT 1
+#define ENABLE_JIT 1
+#define ENABLE_ASSEMBLER 1
+#else
+#define ENABLE_YARR_JIT 0
+#define ENABLE_ASSEMBLER 0
+#define ENABLE_JIT 0
+#endif
+
#if defined(Q_OS_QNX)
#include <math.h>
#undef isnan