diff options
author | Lars Knoll <lars.knoll@qt.io> | 2017-08-12 00:27:01 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@qt.io> | 2017-08-18 09:59:34 +0000 |
commit | a520b3188ba5b8eb114d9d8e609ffe6cbcceeb7e (patch) | |
tree | 2e23710944b3e81bdde7342baa77c2b0b9aeecd3 /src | |
parent | d33966ba9d2d6a916ce11f1ad2635f8a118888c3 (diff) |
Emit JumpStrict(Not)Equal instructions where needed
Instead of falling back to the generic binop instruction.
Change-Id: Ib13014ee003eae6b25f6a5743fc52070af377255
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/compiler/qv4codegen.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp index 6492bb6028..24907144ac 100644 --- a/src/qml/compiler/qv4codegen.cpp +++ b/src/qml/compiler/qv4codegen.cpp @@ -980,6 +980,8 @@ Codegen::Reference Codegen::binopHelper(QSOperator::Op oper, Reference &left, Re bytecodeGenerator->addInstruction(binop); break; } + case QSOperator::StrictEqual: + case QSOperator::StrictNotEqual: case QSOperator::Equal: case QSOperator::NotEqual: case QSOperator::Gt: @@ -1008,6 +1010,8 @@ Codegen::Reference Codegen::binopHelper(QSOperator::Op oper, Reference &left, Re static QSOperator::Op invert(QSOperator::Op oper) { switch (oper) { + case QSOperator::StrictEqual: return QSOperator::StrictNotEqual; + case QSOperator::StrictNotEqual: return QSOperator::StrictEqual; case QSOperator::Equal: return QSOperator::NotEqual; case QSOperator::NotEqual: return QSOperator::Equal; case QSOperator::Gt: return QSOperator::Le; @@ -1029,6 +1033,18 @@ Codegen::Reference Codegen::jumpBinop(QSOperator::Op oper, Reference &left, Refe } switch (oper) { + case QSOperator::StrictEqual: { + Instruction::JumpStrictEqual cjump; + cjump.lhs = left.stackSlot(); + bytecodeGenerator->addJumpInstruction(cjump).link(*jumpTarget); + break; + } + case QSOperator::StrictNotEqual: { + Instruction::JumpStrictNotEqual cjump; + cjump.lhs = left.stackSlot(); + bytecodeGenerator->addJumpInstruction(cjump).link(*jumpTarget); + break; + } case QSOperator::Equal: { Instruction::CmpJmpEq cjump; cjump.lhs = left.stackSlot(); |