summaryrefslogtreecommitdiff
path: root/src/qml/compiler/qv4isel_masm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/compiler/qv4isel_masm.cpp')
-rw-r--r--src/qml/compiler/qv4isel_masm.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/qml/compiler/qv4isel_masm.cpp b/src/qml/compiler/qv4isel_masm.cpp
index e33d3fdaf9..ff6fed2f30 100644
--- a/src/qml/compiler/qv4isel_masm.cpp
+++ b/src/qml/compiler/qv4isel_masm.cpp
@@ -1446,7 +1446,7 @@ Assembler::Jump InstructionSelection::genInlineBinop(V4IR::AluOp oper, V4IR::Exp
void InstructionSelection::binop(V4IR::AluOp oper, V4IR::Expr *leftSource, V4IR::Expr *rightSource, V4IR::Temp *target)
{
- if (oper != V4IR:: OpMod
+ if (oper != V4IR::OpMod
&& leftSource->type == V4IR::DoubleType && rightSource->type == V4IR::DoubleType
&& isPregOrConst(leftSource) && isPregOrConst(rightSource)) {
doubleBinop(oper, leftSource, rightSource, target);
@@ -1462,7 +1462,14 @@ void InstructionSelection::binop(V4IR::AluOp oper, V4IR::Expr *leftSource, V4IR:
done = genInlineBinop(oper, leftSource, rightSource, target);
// TODO: inline var===null and var!==null
- const Assembler::BinaryOperationInfo& info = Assembler::binaryOperation(oper);
+ Assembler::BinaryOperationInfo info = Assembler::binaryOperation(oper);
+
+ if (oper == V4IR::OpAdd &&
+ (leftSource->type == V4IR::StringType || rightSource->type == V4IR::StringType)) {
+ const Assembler::BinaryOperationInfo stringAdd = OPCONTEXT(__qmljs_add_string);
+ info = stringAdd;
+ }
+
if (info.fallbackImplementation) {
_as->generateFunctionCallImp(target, info.name, info.fallbackImplementation,
Assembler::PointerToValue(leftSource),