aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@qt.io>2018-11-29 15:31:56 +0100
committerErik Verbruggen <erik.verbruggen@qt.io>2019-01-31 11:47:57 +0000
commite09519bad7ff266e466ea2d2d66187fbb13457f9 (patch)
tree83f268a7334e851b8ad195673864c85d292f37ac
parent3f2efbd1b904cdc9358ed328235502e338b020bf (diff)
V4: Move relative-to-absolute offset calculation to base class
Now other subclasses of the BytecodeHandler can also use the method. Change-Id: Ib1a19e5ef6beb6c62b6a0214a6658f57b7e74a1a Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r--src/qml/compiler/qv4bytecodehandler_p.h2
-rw-r--r--src/qml/jit/qv4baselinejit.cpp33
-rw-r--r--src/qml/jit/qv4baselinejit_p.h4
3 files changed, 28 insertions, 11 deletions
diff --git a/src/qml/compiler/qv4bytecodehandler_p.h b/src/qml/compiler/qv4bytecodehandler_p.h
index 10626ddb74..797d25b8d0 100644
--- a/src/qml/compiler/qv4bytecodehandler_p.h
+++ b/src/qml/compiler/qv4bytecodehandler_p.h
@@ -99,6 +99,8 @@ public:
int currentInstructionOffset() const { return _currentOffset; }
int nextInstructionOffset() const { return _nextOffset; }
+ int absoluteOffset(int relativeOffset) const
+ { return nextInstructionOffset() + relativeOffset; }
protected:
FOR_EACH_MOTH_INSTR(BYTECODE_HANDLER_DEFINE_VIRTUAL_BYTECODE_HANDLER)
diff --git a/src/qml/jit/qv4baselinejit.cpp b/src/qml/jit/qv4baselinejit.cpp
index df3af1fce3..8de0259509 100644
--- a/src/qml/jit/qv4baselinejit.cpp
+++ b/src/qml/jit/qv4baselinejit.cpp
@@ -593,7 +593,7 @@ void BaselineJIT::generate_ConstructWithSpread(int func, int argc, int argv)
void BaselineJIT::generate_SetUnwindHandler(int offset)
{
if (offset)
- labels.insert(as->setUnwindHandler(absoluteOffsetForJump(offset)));
+ labels.insert(as->setUnwindHandler(absoluteOffset(offset)));
else
as->clearUnwindHandler();
}
@@ -605,7 +605,7 @@ void BaselineJIT::generate_UnwindDispatch()
void BaselineJIT::generate_UnwindToLabel(int level, int offset)
{
- labels.insert(as->unwindToLabel(level, absoluteOffsetForJump(offset)));
+ labels.insert(as->unwindToLabel(level, absoluteOffset(offset)));
}
void BaselineJIT::generate_DeadTemporalZoneCheck(int name)
@@ -872,11 +872,30 @@ void BaselineJIT::generate_ToObject()
}
-void BaselineJIT::generate_Jump(int offset) { labels.insert(as->jump(absoluteOffsetForJump(offset))); }
-void BaselineJIT::generate_JumpTrue(int /*traceSlot*/, int offset) { labels.insert(as->jumpTrue(absoluteOffsetForJump(offset))); }
-void BaselineJIT::generate_JumpFalse(int /*traceSlot*/, int offset) { labels.insert(as->jumpFalse(absoluteOffsetForJump(offset))); }
-void BaselineJIT::generate_JumpNoException(int offset) { labels.insert(as->jumpNoException(absoluteOffsetForJump(offset))); }
-void BaselineJIT::generate_JumpNotUndefined(int offset) { labels.insert(as->jumpNotUndefined(absoluteOffsetForJump(offset))); }
+void BaselineJIT::generate_Jump(int offset)
+{
+ labels.insert(as->jump(absoluteOffset(offset)));
+}
+
+void BaselineJIT::generate_JumpTrue(int /*traceSlot*/, int offset)
+{
+ labels.insert(as->jumpTrue(absoluteOffset(offset)));
+}
+
+void BaselineJIT::generate_JumpFalse(int /*traceSlot*/, int offset)
+{
+ labels.insert(as->jumpFalse(absoluteOffset(offset)));
+}
+
+void BaselineJIT::generate_JumpNoException(int offset)
+{
+ labels.insert(as->jumpNoException(absoluteOffset(offset)));
+}
+
+void BaselineJIT::generate_JumpNotUndefined(int offset)
+{
+ labels.insert(as->jumpNotUndefined(absoluteOffset(offset)));
+}
void BaselineJIT::generate_CmpEqNull() { as->cmpeqNull(); }
void BaselineJIT::generate_CmpNeNull() { as->cmpneNull(); }
diff --git a/src/qml/jit/qv4baselinejit_p.h b/src/qml/jit/qv4baselinejit_p.h
index 385fbf72f3..998f9f110b 100644
--- a/src/qml/jit/qv4baselinejit_p.h
+++ b/src/qml/jit/qv4baselinejit_p.h
@@ -220,10 +220,6 @@ public:
void startInstruction(Moth::Instr::Type instr) override;
void endInstruction(Moth::Instr::Type instr) override;
-protected:
- int absoluteOffsetForJump(int relativeOffset) const
- { return nextInstructionOffset() + relativeOffset; }
-
private:
QV4::Function *function;
QScopedPointer<BaselineAssembler> as;