diff options
Diffstat (limited to 'src/qml/jit/qv4isel_masm_p.h')
-rw-r--r-- | src/qml/jit/qv4isel_masm_p.h | 164 |
1 files changed, 82 insertions, 82 deletions
diff --git a/src/qml/jit/qv4isel_masm_p.h b/src/qml/jit/qv4isel_masm_p.h index b6af385887..69317cb062 100644 --- a/src/qml/jit/qv4isel_masm_p.h +++ b/src/qml/jit/qv4isel_masm_p.h @@ -59,15 +59,15 @@ QT_BEGIN_NAMESPACE -namespace QQmlJS { -namespace MASM { +namespace QV4 { +namespace JIT { class Q_QML_EXPORT InstructionSelection: - protected V4IR::IRDecoder, + protected IR::IRDecoder, public EvalInstructionSelection { public: - InstructionSelection(QQmlEnginePrivate *qmlEngine, QV4::ExecutableAllocator *execAllocator, V4IR::Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator); + InstructionSelection(QQmlEnginePrivate *qmlEngine, QV4::ExecutableAllocator *execAllocator, IR::Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator); ~InstructionSelection(); virtual void run(int functionIndex); @@ -76,56 +76,56 @@ public: protected: virtual QV4::CompiledData::CompilationUnit *backendCompileStep(); - virtual void callBuiltinInvalid(V4IR::Name *func, V4IR::ExprList *args, V4IR::Temp *result); - virtual void callBuiltinTypeofMember(V4IR::Expr *base, const QString &name, V4IR::Temp *result); - virtual void callBuiltinTypeofSubscript(V4IR::Expr *base, V4IR::Expr *index, V4IR::Temp *result); - virtual void callBuiltinTypeofName(const QString &name, V4IR::Temp *result); - virtual void callBuiltinTypeofValue(V4IR::Expr *value, V4IR::Temp *result); - virtual void callBuiltinDeleteMember(V4IR::Temp *base, const QString &name, V4IR::Temp *result); - virtual void callBuiltinDeleteSubscript(V4IR::Temp *base, V4IR::Expr *index, V4IR::Temp *result); - virtual void callBuiltinDeleteName(const QString &name, V4IR::Temp *result); - virtual void callBuiltinDeleteValue(V4IR::Temp *result); - virtual void callBuiltinThrow(V4IR::Expr *arg); + virtual void callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Temp *result); + virtual void callBuiltinTypeofMember(IR::Expr *base, const QString &name, IR::Temp *result); + virtual void callBuiltinTypeofSubscript(IR::Expr *base, IR::Expr *index, IR::Temp *result); + virtual void callBuiltinTypeofName(const QString &name, IR::Temp *result); + virtual void callBuiltinTypeofValue(IR::Expr *value, IR::Temp *result); + virtual void callBuiltinDeleteMember(IR::Temp *base, const QString &name, IR::Temp *result); + virtual void callBuiltinDeleteSubscript(IR::Temp *base, IR::Expr *index, IR::Temp *result); + virtual void callBuiltinDeleteName(const QString &name, IR::Temp *result); + virtual void callBuiltinDeleteValue(IR::Temp *result); + virtual void callBuiltinThrow(IR::Expr *arg); virtual void callBuiltinReThrow(); - virtual void callBuiltinUnwindException(V4IR::Temp *); + virtual void callBuiltinUnwindException(IR::Temp *); virtual void callBuiltinPushCatchScope(const QString &exceptionName); - virtual void callBuiltinForeachIteratorObject(V4IR::Temp *arg, V4IR::Temp *result); - virtual void callBuiltinForeachNextPropertyname(V4IR::Temp *arg, V4IR::Temp *result); - virtual void callBuiltinPushWithScope(V4IR::Temp *arg); + virtual void callBuiltinForeachIteratorObject(IR::Temp *arg, IR::Temp *result); + virtual void callBuiltinForeachNextPropertyname(IR::Temp *arg, IR::Temp *result); + virtual void callBuiltinPushWithScope(IR::Temp *arg); virtual void callBuiltinPopScope(); virtual void callBuiltinDeclareVar(bool deletable, const QString &name); - virtual void callBuiltinDefineGetterSetter(V4IR::Temp *object, const QString &name, V4IR::Temp *getter, V4IR::Temp *setter); - virtual void callBuiltinDefineProperty(V4IR::Temp *object, const QString &name, V4IR::Expr *value); - virtual void callBuiltinDefineArray(V4IR::Temp *result, V4IR::ExprList *args); - virtual void callBuiltinDefineObjectLiteral(V4IR::Temp *result, V4IR::ExprList *args); - virtual void callBuiltinSetupArgumentObject(V4IR::Temp *result); + virtual void callBuiltinDefineGetterSetter(IR::Temp *object, const QString &name, IR::Temp *getter, IR::Temp *setter); + virtual void callBuiltinDefineProperty(IR::Temp *object, const QString &name, IR::Expr *value); + virtual void callBuiltinDefineArray(IR::Temp *result, IR::ExprList *args); + virtual void callBuiltinDefineObjectLiteral(IR::Temp *result, IR::ExprList *args); + virtual void callBuiltinSetupArgumentObject(IR::Temp *result); virtual void callBuiltinConvertThisToObject(); - virtual void callValue(V4IR::Temp *value, V4IR::ExprList *args, V4IR::Temp *result); - virtual void callProperty(V4IR::Expr *base, const QString &name, V4IR::ExprList *args, V4IR::Temp *result); - virtual void callSubscript(V4IR::Expr *base, V4IR::Expr *index, V4IR::ExprList *args, V4IR::Temp *result); - virtual void convertType(V4IR::Temp *source, V4IR::Temp *target); - virtual void loadThisObject(V4IR::Temp *temp); - virtual void loadQmlIdArray(V4IR::Temp *temp); - virtual void loadQmlImportedScripts(V4IR::Temp *temp); - virtual void loadQmlContextObject(V4IR::Temp *temp); - virtual void loadQmlScopeObject(V4IR::Temp *temp); - virtual void loadQmlSingleton(const QString &name, V4IR::Temp *temp); - virtual void loadConst(V4IR::Const *sourceConst, V4IR::Temp *targetTemp); - virtual void loadString(const QString &str, V4IR::Temp *targetTemp); - virtual void loadRegexp(V4IR::RegExp *sourceRegexp, V4IR::Temp *targetTemp); - virtual void getActivationProperty(const V4IR::Name *name, V4IR::Temp *temp); - virtual void setActivationProperty(V4IR::Expr *source, const QString &targetName); - virtual void initClosure(V4IR::Closure *closure, V4IR::Temp *target); - virtual void getProperty(V4IR::Expr *base, const QString &name, V4IR::Temp *target); - virtual void setProperty(V4IR::Expr *source, V4IR::Expr *targetBase, const QString &targetName); - virtual void setQObjectProperty(V4IR::Expr *source, V4IR::Expr *targetBase, int propertyIndex); - virtual void getQObjectProperty(V4IR::Expr *base, int propertyIndex, bool captureRequired, int attachedPropertiesId, V4IR::Temp *target); - virtual void getElement(V4IR::Expr *base, V4IR::Expr *index, V4IR::Temp *target); - virtual void setElement(V4IR::Expr *source, V4IR::Expr *targetBase, V4IR::Expr *targetIndex); - virtual void copyValue(V4IR::Temp *sourceTemp, V4IR::Temp *targetTemp); - virtual void swapValues(V4IR::Temp *sourceTemp, V4IR::Temp *targetTemp); - virtual void unop(V4IR::AluOp oper, V4IR::Temp *sourceTemp, V4IR::Temp *targetTemp); - virtual void binop(V4IR::AluOp oper, V4IR::Expr *leftSource, V4IR::Expr *rightSource, V4IR::Temp *target); + virtual void callValue(IR::Temp *value, IR::ExprList *args, IR::Temp *result); + virtual void callProperty(IR::Expr *base, const QString &name, IR::ExprList *args, IR::Temp *result); + virtual void callSubscript(IR::Expr *base, IR::Expr *index, IR::ExprList *args, IR::Temp *result); + virtual void convertType(IR::Temp *source, IR::Temp *target); + virtual void loadThisObject(IR::Temp *temp); + virtual void loadQmlIdArray(IR::Temp *temp); + virtual void loadQmlImportedScripts(IR::Temp *temp); + virtual void loadQmlContextObject(IR::Temp *temp); + virtual void loadQmlScopeObject(IR::Temp *temp); + virtual void loadQmlSingleton(const QString &name, IR::Temp *temp); + virtual void loadConst(IR::Const *sourceConst, IR::Temp *targetTemp); + virtual void loadString(const QString &str, IR::Temp *targetTemp); + virtual void loadRegexp(IR::RegExp *sourceRegexp, IR::Temp *targetTemp); + virtual void getActivationProperty(const IR::Name *name, IR::Temp *temp); + virtual void setActivationProperty(IR::Expr *source, const QString &targetName); + virtual void initClosure(IR::Closure *closure, IR::Temp *target); + virtual void getProperty(IR::Expr *base, const QString &name, IR::Temp *target); + virtual void setProperty(IR::Expr *source, IR::Expr *targetBase, const QString &targetName); + virtual void setQObjectProperty(IR::Expr *source, IR::Expr *targetBase, int propertyIndex); + virtual void getQObjectProperty(IR::Expr *base, int propertyIndex, bool captureRequired, int attachedPropertiesId, IR::Temp *target); + virtual void getElement(IR::Expr *base, IR::Expr *index, IR::Temp *target); + virtual void setElement(IR::Expr *source, IR::Expr *targetBase, IR::Expr *targetIndex); + virtual void copyValue(IR::Temp *sourceTemp, IR::Temp *targetTemp); + virtual void swapValues(IR::Temp *sourceTemp, IR::Temp *targetTemp); + virtual void unop(IR::AluOp oper, IR::Temp *sourceTemp, IR::Temp *targetTemp); + virtual void binop(IR::AluOp oper, IR::Expr *leftSource, IR::Expr *rightSource, IR::Temp *target); typedef Assembler::Address Address; typedef Assembler::Pointer Pointer; @@ -150,34 +150,34 @@ protected: return _as->stackLayout().callDataAddress(); } - virtual void constructActivationProperty(V4IR::Name *func, V4IR::ExprList *args, V4IR::Temp *result); - virtual void constructProperty(V4IR::Temp *base, const QString &name, V4IR::ExprList *args, V4IR::Temp *result); - virtual void constructValue(V4IR::Temp *value, V4IR::ExprList *args, V4IR::Temp *result); + virtual void constructActivationProperty(IR::Name *func, IR::ExprList *args, IR::Temp *result); + virtual void constructProperty(IR::Temp *base, const QString &name, IR::ExprList *args, IR::Temp *result); + virtual void constructValue(IR::Temp *value, IR::ExprList *args, IR::Temp *result); - virtual void visitJump(V4IR::Jump *); - virtual void visitCJump(V4IR::CJump *); - virtual void visitRet(V4IR::Ret *); + virtual void visitJump(IR::Jump *); + virtual void visitCJump(IR::CJump *); + virtual void visitRet(IR::Ret *); - bool visitCJumpDouble(V4IR::AluOp op, V4IR::Expr *left, V4IR::Expr *right, - V4IR::BasicBlock *iftrue, V4IR::BasicBlock *iffalse); - void visitCJumpStrict(V4IR::Binop *binop, V4IR::BasicBlock *trueBlock, V4IR::BasicBlock *falseBlock); - bool visitCJumpStrictNullUndefined(V4IR::Type nullOrUndef, V4IR::Binop *binop, - V4IR::BasicBlock *trueBlock, V4IR::BasicBlock *falseBlock); - bool visitCJumpStrictBool(V4IR::Binop *binop, V4IR::BasicBlock *trueBlock, V4IR::BasicBlock *falseBlock); - bool visitCJumpNullUndefined(V4IR::Type nullOrUndef, V4IR::Binop *binop, - V4IR::BasicBlock *trueBlock, V4IR::BasicBlock *falseBlock); - void visitCJumpEqual(V4IR::Binop *binop, V4IR::BasicBlock *trueBlock, V4IR::BasicBlock *falseBlock); + bool visitCJumpDouble(IR::AluOp op, IR::Expr *left, IR::Expr *right, + IR::BasicBlock *iftrue, IR::BasicBlock *iffalse); + void visitCJumpStrict(IR::Binop *binop, IR::BasicBlock *trueBlock, IR::BasicBlock *falseBlock); + bool visitCJumpStrictNullUndefined(IR::Type nullOrUndef, IR::Binop *binop, + IR::BasicBlock *trueBlock, IR::BasicBlock *falseBlock); + bool visitCJumpStrictBool(IR::Binop *binop, IR::BasicBlock *trueBlock, IR::BasicBlock *falseBlock); + bool visitCJumpNullUndefined(IR::Type nullOrUndef, IR::Binop *binop, + IR::BasicBlock *trueBlock, IR::BasicBlock *falseBlock); + void visitCJumpEqual(IR::Binop *binop, IR::BasicBlock *trueBlock, IR::BasicBlock *falseBlock); private: - void convertTypeSlowPath(V4IR::Temp *source, V4IR::Temp *target); - void convertTypeToDouble(V4IR::Temp *source, V4IR::Temp *target); - void convertTypeToBool(V4IR::Temp *source, V4IR::Temp *target); - void convertTypeToSInt32(V4IR::Temp *source, V4IR::Temp *target); - void convertTypeToUInt32(V4IR::Temp *source, V4IR::Temp *target); + void convertTypeSlowPath(IR::Temp *source, IR::Temp *target); + void convertTypeToDouble(IR::Temp *source, IR::Temp *target); + void convertTypeToBool(IR::Temp *source, IR::Temp *target); + void convertTypeToSInt32(IR::Temp *source, IR::Temp *target); + void convertTypeToUInt32(IR::Temp *source, IR::Temp *target); - void convertIntToDouble(V4IR::Temp *source, V4IR::Temp *target) + void convertIntToDouble(IR::Temp *source, IR::Temp *target) { - if (target->kind == V4IR::Temp::PhysicalRegister) { + if (target->kind == IR::Temp::PhysicalRegister) { _as->convertInt32ToDouble(_as->toInt32Register(source, Assembler::ScratchRegister), (Assembler::FPRegisterID) target->index); } else { @@ -187,12 +187,12 @@ private: } } - void convertUIntToDouble(V4IR::Temp *source, V4IR::Temp *target) + void convertUIntToDouble(IR::Temp *source, IR::Temp *target) { Assembler::RegisterID tmpReg = Assembler::ScratchRegister; Assembler::RegisterID reg = _as->toInt32Register(source, tmpReg); - if (target->kind == V4IR::Temp::PhysicalRegister) { + if (target->kind == IR::Temp::PhysicalRegister) { _as->convertUInt32ToDouble(reg, (Assembler::FPRegisterID) target->index, tmpReg); } else { _as->convertUInt32ToDouble(_as->toUInt32Register(source, tmpReg), @@ -201,9 +201,9 @@ private: } } - void convertIntToBool(V4IR::Temp *source, V4IR::Temp *target) + void convertIntToBool(IR::Temp *source, IR::Temp *target) { - Assembler::RegisterID reg = target->kind == V4IR::Temp::PhysicalRegister + Assembler::RegisterID reg = target->kind == IR::Temp::PhysicalRegister ? (Assembler::RegisterID) target->index : Assembler::ScratchRegister; @@ -218,8 +218,8 @@ private: #define generateFunctionCall(t, function, ...) \ _as->generateFunctionCallImp(t, isel_stringIfy(function), function, __VA_ARGS__) - int prepareVariableArguments(V4IR::ExprList* args); - int prepareCallData(V4IR::ExprList* args, V4IR::Expr *thisObject); + int prepareVariableArguments(IR::ExprList* args); + int prepareCallData(IR::ExprList* args, IR::Expr *thisObject); template <typename Retval, typename Arg1, typename Arg2, typename Arg3> void generateLookupCall(Retval retval, uint index, uint getterSetterOffset, Arg1 arg1, Arg2 arg2, Arg3 arg3) @@ -245,8 +245,8 @@ private: generateLookupCall(retval, index, getterSetterOffset, arg1, arg2, Assembler::VoidType()); } - V4IR::BasicBlock *_block; - QSet<V4IR::Jump *> _removableJumps; + IR::BasicBlock *_block; + QSet<IR::Jump *> _removableJumps; Assembler* _as; CompilationUnit *compilationUnit; @@ -257,14 +257,14 @@ class Q_QML_EXPORT ISelFactory: public EvalISelFactory { public: virtual ~ISelFactory() {} - virtual EvalInstructionSelection *create(QQmlEnginePrivate *qmlEngine, QV4::ExecutableAllocator *execAllocator, V4IR::Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator) + virtual EvalInstructionSelection *create(QQmlEnginePrivate *qmlEngine, QV4::ExecutableAllocator *execAllocator, IR::Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator) { return new InstructionSelection(qmlEngine, execAllocator, module, jsGenerator); } virtual bool jitCompileRegexps() const { return true; } }; -} // end of namespace MASM -} // end of namespace QQmlJS +} // end of namespace JIT +} // end of namespace QV4 QT_END_NAMESPACE |