aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@me.com>2013-10-14 15:20:31 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-14 16:43:06 +0200
commit3f7f6be40947f19ef4e40a8f10307a1a6dcb31e0 (patch)
tree87ec1bf5caccb2ea5ccf82a4f8adfea1fb432ea2 /src/qml
parentf106d905df58de637f291111ed3e1ccf1dfdf23e (diff)
V4 JIT: fix stack size calculation on 32bit.
Registers containing outgoing parameters for calls are saved as Value (so, 8 bytes long) instead of native register size. For 64 bit this is the same, but not for 32 bits. Change-Id: If1d55e9d552a301782816c9228390dc5611c6d00 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml')
-rw-r--r--src/qml/compiler/qv4isel_masm_p.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/qml/compiler/qv4isel_masm_p.h b/src/qml/compiler/qv4isel_masm_p.h
index a0f81a7412..fb990d0d53 100644
--- a/src/qml/compiler/qv4isel_masm_p.h
+++ b/src/qml/compiler/qv4isel_masm_p.h
@@ -289,7 +289,7 @@ public:
qDebug("calleeSavedRegCount.....: %d",calleeSavedRegCount);
qDebug("maxOutgoingArgumentCount: %d",maxOutgoingArgumentCount);
qDebug("localCount..............: %d",localCount);
- qDebug("savedConstCount.........: %d",savedConstCount);
+ qDebug("savedConstCount.........: %d",savedRegCount);
for (int i = 0; i < maxOutgoingArgumentCount; ++i)
qDebug("argumentAddressForCall(%d) = 0x%x / -0x%x", i,
argumentAddressForCall(i).offset, -argumentAddressForCall(i).offset);
@@ -313,7 +313,8 @@ public:
+ RegisterSize; // saved StackFrameRegister
// space for the callee saved registers
- int frameSize = RegisterSize * (calleeSavedRegisterCount + savedRegCount);
+ int frameSize = RegisterSize * calleeSavedRegisterCount;
+ frameSize += savedRegCount * sizeof(QV4::SafeValue); // these get written out as Values, not as native registers
frameSize = WTF::roundUpToMultipleOf(StackAlignment, frameSize + stackSpaceAllocatedOtherwise);
frameSize -= stackSpaceAllocatedOtherwise;