aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-08-14 16:35:18 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2013-08-15 09:11:42 +0200
commit335a903d4b1de7511be76d55f736c9f0c7643727 (patch)
tree0422350992de812faed44bfd4b016562c6bcb810 /src/qml
parent3e49617bc6dddcc7a053d0ec643c8994d84a8c5e (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.cpp24
-rw-r--r--src/qml/compiler/qv4compileddata_p.h13
-rw-r--r--src/qml/compiler/qv4isel_masm.cpp35
-rw-r--r--src/qml/compiler/qv4isel_masm_p.h13
-rw-r--r--src/qml/compiler/qv4isel_p.cpp7
-rw-r--r--src/qml/compiler/qv4isel_p.h3
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