summaryrefslogtreecommitdiff
path: root/src/qml/compiler/qv4isel_masm.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-10-30 13:33:49 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-01 23:01:27 +0100
commitaff3202b9fdd36ed64f55d658d1e4d066c5259d3 (patch)
tree18a55d42cabd2eb802fb195779c02ed845238832 /src/qml/compiler/qv4isel_masm.cpp
parent2c078cc2912275c6b83be1f9670fb455e25ad7b6 (diff)
downloadqtdeclarative-aff3202b9fdd36ed64f55d658d1e4d066c5259d3.tar.gz
Avoid unnecessary saving of the instruction pointer in the JIT
We only need to save it when the line number changes, not for each and every call. Change-Id: I1a6fdf97abd3dd654bbd97d2a99cd09e9c20f64f Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/compiler/qv4isel_masm.cpp')
-rw-r--r--src/qml/compiler/qv4isel_masm.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/qml/compiler/qv4isel_masm.cpp b/src/qml/compiler/qv4isel_masm.cpp
index 4eeab0f184..0b372fec03 100644
--- a/src/qml/compiler/qv4isel_masm.cpp
+++ b/src/qml/compiler/qv4isel_masm.cpp
@@ -697,14 +697,20 @@ void InstructionSelection::run(int functionIndex)
_as->addPtr(Assembler::TrustedImm32(sizeof(QV4::SafeValue)*locals), Assembler::LocalsRegister);
_as->storePtr(Assembler::LocalsRegister, Address(Assembler::ScratchRegister, qOffsetOf(ExecutionEngine, jsStackTop)));
+ int lastLine = -1;
for (int i = 0, ei = _function->basicBlocks.size(); i != ei; ++i) {
V4IR::BasicBlock *nextBlock = (i < ei - 1) ? _function->basicBlocks[i + 1] : 0;
_block = _function->basicBlocks[i];
_as->registerBlock(_block, nextBlock);
foreach (V4IR::Stmt *s, _block->statements) {
- if (s->location.isValid())
+ if (s->location.isValid()) {
_as->recordLineNumber(s->location.startLine);
+ if (s->location.startLine != lastLine) {
+ _as->saveInstructionPointer(Assembler::ScratchRegister);
+ lastLine = s->location.startLine;
+ }
+ }
s->accept(this);
}
}