diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-08-14 16:35:18 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2013-08-15 09:11:42 +0200 |
commit | 335a903d4b1de7511be76d55f736c9f0c7643727 (patch) | |
tree | 0422350992de812faed44bfd4b016562c6bcb810 /src/qml | |
parent | 3e49617bc6dddcc7a053d0ec643c8994d84a8c5e (diff) |
Move the masm compilation unit entirely into qv4isel_masm
Change-Id: If24b6a761dc2f2443520b31b5130ab44b739cdf3
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/compiler/qv4compileddata.cpp | 24 | ||||
-rw-r--r-- | src/qml/compiler/qv4compileddata_p.h | 13 | ||||
-rw-r--r-- | src/qml/compiler/qv4isel_masm.cpp | 35 | ||||
-rw-r--r-- | src/qml/compiler/qv4isel_masm_p.h | 13 | ||||
-rw-r--r-- | src/qml/compiler/qv4isel_p.cpp | 7 | ||||
-rw-r--r-- | src/qml/compiler/qv4isel_p.h | 3 |
6 files changed, 43 insertions, 52 deletions
diff --git a/src/qml/compiler/qv4compileddata.cpp b/src/qml/compiler/qv4compileddata.cpp index 1f4ab476ae..2a39f6237d 100644 --- a/src/qml/compiler/qv4compileddata.cpp +++ b/src/qml/compiler/qv4compileddata.cpp @@ -70,30 +70,6 @@ QV4::Function *CompilationUnit::linkToEngine(ExecutionEngine *engine) return linkBackendToEngine(engine); } -// ### Move to masm -QV4::Function *MasmCompilationUnit::linkBackendToEngine(ExecutionEngine *engine) -{ - QV4::Function *rootRuntimeFunction = 0; - - const CompiledData::Function *compiledRootFunction = data->functionAt(data->indexOfRootFunction); - - for (int i = 0 ;i < runtimeFunctions.size(); ++i) { - QV4::Function *runtimeFunction = runtimeFunctions.at(i); - const CompiledData::Function *compiledFunction = data->functionAt(i); - - runtimeFunction->compilationUnit = this; - runtimeFunction->compilationUnit->ref(); - runtimeFunction->compiledFunction = compiledFunction; - - if (compiledFunction == compiledRootFunction) { - assert(!rootRuntimeFunction); - rootRuntimeFunction = runtimeFunction; - } - } - - return rootRuntimeFunction; -} - } } diff --git a/src/qml/compiler/qv4compileddata_p.h b/src/qml/compiler/qv4compileddata_p.h index ff3d3e8091..859f4f4d5b 100644 --- a/src/qml/compiler/qv4compileddata_p.h +++ b/src/qml/compiler/qv4compileddata_p.h @@ -256,19 +256,6 @@ protected: virtual QV4::Function *linkBackendToEngine(QV4::ExecutionEngine *engine) = 0; }; -struct MasmCompilationUnit : public CompilationUnit -{ - virtual ~MasmCompilationUnit() { - // free all jitted code - } - - virtual QV4::Function *linkBackendToEngine(QV4::ExecutionEngine *engine); - - // Coderef + execution engine - - QList<QV4::Function *> runtimeFunctions; -}; - struct MothCompilationUnit : public CompilationUnit { virtual ~MothCompilationUnit() { diff --git a/src/qml/compiler/qv4isel_masm.cpp b/src/qml/compiler/qv4isel_masm.cpp index ca16080a9d..32c69ae70b 100644 --- a/src/qml/compiler/qv4isel_masm.cpp +++ b/src/qml/compiler/qv4isel_masm.cpp @@ -64,6 +64,29 @@ using namespace QQmlJS; using namespace QQmlJS::MASM; using namespace QV4; +QV4::Function *CompilationUnit::linkBackendToEngine(ExecutionEngine *engine) +{ + QV4::Function *rootRuntimeFunction = 0; + + const CompiledData::Function *compiledRootFunction = data->functionAt(data->indexOfRootFunction); + + for (int i = 0 ;i < runtimeFunctions.size(); ++i) { + QV4::Function *runtimeFunction = runtimeFunctions.at(i); + const CompiledData::Function *compiledFunction = data->functionAt(i); + + runtimeFunction->compilationUnit = this; + runtimeFunction->compilationUnit->ref(); + runtimeFunction->compiledFunction = compiledFunction; + + if (compiledFunction == compiledRootFunction) { + assert(!rootRuntimeFunction); + rootRuntimeFunction = runtimeFunction; + } + } + + return rootRuntimeFunction; +} + namespace { class ConvertTemps: protected V4IR::StmtVisitor, protected V4IR::ExprVisitor { @@ -640,8 +663,7 @@ InstructionSelection::InstructionSelection(QV4::ExecutionEngine *engine, V4IR::M , _as(0) , _locals(0) { - QV4::CompiledData::MasmCompilationUnit *masmUnit = new QV4::CompiledData::MasmCompilationUnit; - compilationUnit = masmUnit; + compilationUnit = new CompilationUnit; } InstructionSelection::~InstructionSelection() @@ -734,12 +756,13 @@ void InstructionSelection::run(QV4::Function *vmFunction, V4IR::Function *functi _as = oldAssembler; } -void InstructionSelection::backendCompileStep() +QV4::CompiledData::CompilationUnit *InstructionSelection::backendCompileStep() { - QV4::CompiledData::MasmCompilationUnit *masmUnit = static_cast<QV4::CompiledData::MasmCompilationUnit*>(compilationUnit); - masmUnit->runtimeFunctions.reserve(jsUnitGenerator.irModule->functions.size()); + compilationUnit->data = jsUnitGenerator.generateUnit(); + compilationUnit->runtimeFunctions.reserve(jsUnitGenerator.irModule->functions.size()); foreach (V4IR::Function *irFunction, jsUnitGenerator.irModule->functions) - masmUnit->runtimeFunctions << _irToVM[irFunction]; + compilationUnit->runtimeFunctions << _irToVM[irFunction]; + return compilationUnit; } void InstructionSelection::callBuiltinInvalid(V4IR::Name *func, V4IR::ExprList *args, V4IR::Temp *result) diff --git a/src/qml/compiler/qv4isel_masm_p.h b/src/qml/compiler/qv4isel_masm_p.h index 6aad2cd3b1..bf3d405ca1 100644 --- a/src/qml/compiler/qv4isel_masm_p.h +++ b/src/qml/compiler/qv4isel_masm_p.h @@ -58,6 +58,15 @@ QT_BEGIN_NAMESPACE namespace QQmlJS { namespace MASM { +struct CompilationUnit : public QV4::CompiledData::CompilationUnit +{ + virtual QV4::Function *linkBackendToEngine(QV4::ExecutionEngine *engine); + + // Coderef + execution engine + + QList<QV4::Function *> runtimeFunctions; +}; + class Assembler : public JSC::MacroAssembler { public: @@ -787,7 +796,7 @@ public: virtual void run(QV4::Function *vmFunction, V4IR::Function *function); protected: - virtual void backendCompileStep(); + virtual QV4::CompiledData::CompilationUnit *backendCompileStep(); virtual void callBuiltinInvalid(V4IR::Name *func, V4IR::ExprList *args, V4IR::Temp *result); virtual void callBuiltinTypeofMember(V4IR::Temp *base, const QString &name, V4IR::Temp *result); @@ -920,6 +929,8 @@ private: Assembler* _as; QSet<V4IR::BasicBlock*> _reentryBlocks; int _locals; + + CompilationUnit *compilationUnit; }; class Q_QML_EXPORT ISelFactory: public EvalISelFactory diff --git a/src/qml/compiler/qv4isel_p.cpp b/src/qml/compiler/qv4isel_p.cpp index a3e9e97461..7081bc8686 100644 --- a/src/qml/compiler/qv4isel_p.cpp +++ b/src/qml/compiler/qv4isel_p.cpp @@ -62,7 +62,6 @@ EvalInstructionSelection::EvalInstructionSelection(QV4::ExecutionEngine *engine, : _engine(engine) , useFastLookups(true) , jsUnitGenerator(engine, module) - , compilationUnit(0) { assert(engine); assert(module); @@ -111,11 +110,7 @@ QV4::CompiledData::CompilationUnit *EvalInstructionSelection::compile() run(it.value(), it.key()); } - compilationUnit->data = jsUnitGenerator.generateUnit(); - - backendCompileStep(); - - return compilationUnit; + return backendCompileStep(); } void IRDecoder::visitMove(V4IR::Move *s) diff --git a/src/qml/compiler/qv4isel_p.h b/src/qml/compiler/qv4isel_p.h index 7a049a88a3..ef0cd06969 100644 --- a/src/qml/compiler/qv4isel_p.h +++ b/src/qml/compiler/qv4isel_p.h @@ -73,7 +73,7 @@ protected: QV4::Function *createFunctionMapping(QV4::Function *outer, V4IR::Function *irFunction); QV4::ExecutionEngine *engine() const { return _engine; } virtual void run(QV4::Function *vmFunction, V4IR::Function *function) = 0; - virtual void backendCompileStep() {} + virtual QV4::CompiledData::CompilationUnit *backendCompileStep() { return 0; } int stringId(const QString &str) { return jsUnitGenerator.registerString(str); } @@ -83,7 +83,6 @@ protected: QHash<V4IR::Function *, QV4::Function *> _irToVM; bool useFastLookups; QV4::Compiler::JSUnitGenerator jsUnitGenerator; - QV4::CompiledData::CompilationUnit *compilationUnit; // subclass ctor needs to initialize. }; class Q_QML_EXPORT EvalISelFactory |