diff options
-rw-r--r-- | src/3rdparty/masm/masm-defs.pri | 17 | ||||
-rw-r--r-- | src/3rdparty/masm/masm.pri | 11 | ||||
-rw-r--r-- | src/3rdparty/masm/wtf/Platform.h | 9 | ||||
-rw-r--r-- | src/qml/compiler/compiler.pri | 11 | ||||
-rw-r--r-- | src/qml/compiler/qv4isel_masm.cpp | 4 | ||||
-rw-r--r-- | src/qml/compiler/qv4isel_masm_p.h | 5 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4global_p.h | 31 |
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 |