diff options
author | Lars Knoll <lars.knoll@digia.com> | 2012-10-25 16:31:12 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2012-11-12 09:40:06 +0100 |
commit | fa3b6bd3fc7f2cc7060286b7c8ad14450533a5a6 (patch) | |
tree | 39b714b2956d0b94bb35a77913f5b3208a1d5459 /qv4isel_masm.cpp | |
parent | bc42b47a117df146bf57a0bd6ec43acd515de4d6 (diff) |
Allow Const's as operands to Binop
This allows us to use expressions such as
%x = %y + const
in the IR.
This still requires an implementation for moth.
Change-Id: I134e96ddad08bcbe4f3ea5fa27c5338a96acac80
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'qv4isel_masm.cpp')
-rw-r--r-- | qv4isel_masm.cpp | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/qv4isel_masm.cpp b/qv4isel_masm.cpp index 2deab59719..250d3241a3 100644 --- a/qv4isel_masm.cpp +++ b/qv4isel_masm.cpp @@ -440,9 +440,8 @@ void InstructionSelection::visitMove(IR::Move *s) return; } } else if (IR::Binop *b = s->source->asBinop()) { - IR::Temp *l = b->left->asTemp(); - IR::Temp *r = b->right->asTemp(); - if (l && r) { + if ((b->left->asTemp() || b->left->asConst()) && + (b->right->asTemp() || b->right->asConst())) { Value (*op)(const Value, const Value, Context *) = 0; const char* opName = 0; @@ -485,7 +484,7 @@ void InstructionSelection::visitMove(IR::Move *s) } if (op) { - generateFunctionCallImp(t, opName, op, l, r, ContextRegister); + generateFunctionCallImp(t, opName, op, b->left, b->right, ContextRegister); } return; } @@ -670,9 +669,8 @@ void InstructionSelection::visitCJump(IR::CJump *s) jumpToBlock(s->iffalse); return; } else if (IR::Binop *b = s->cond->asBinop()) { - IR::Temp *l = b->left->asTemp(); - IR::Temp *r = b->right->asTemp(); - if (l && r) { + if ((b->left->asTemp() || b->left->asConst()) && + (b->right->asTemp() || b->right->asConst())) { Bool (*op)(const Value, const Value, Context *ctx) = 0; const char *opName = 0; switch (b->op) { @@ -689,7 +687,7 @@ void InstructionSelection::visitCJump(IR::CJump *s) case IR::OpIn: setOp(op, opName, __qmljs_cmp_in); break; } // switch - generateFunctionCallImp(ReturnValueRegister, opName, op, l, r, ContextRegister); + generateFunctionCallImp(ReturnValueRegister, opName, op, b->left, b->right, ContextRegister); Jump target = branch32(NotEqual, ReturnValueRegister, TrustedImm32(0)); _patches[s->iftrue].append(target); |