aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2017-08-12 00:27:01 +0200
committerErik Verbruggen <erik.verbruggen@qt.io>2017-08-18 09:59:34 +0000
commita520b3188ba5b8eb114d9d8e609ffe6cbcceeb7e (patch)
tree2e23710944b3e81bdde7342baa77c2b0b9aeecd3 /src
parentd33966ba9d2d6a916ce11f1ad2635f8a118888c3 (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.cpp16
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();