V4 JIT: fix stack space reserving code
authorErik Verbruggen <erik.verbruggen@digia.com>
Thu, 6 Mar 2014 11:39:45 +0000 (12:39 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Fri, 7 Mar 2014 11:20:24 +0000 (12:20 +0100)
sub32 will truncate the register's content, which is a bit problematic
when the stack is located outside the first 4G (e.g. on win64).

Change-Id: I8c2c55c0e08f4e5b67295ba6a8a26d7d55d4477f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/qml/jit/qv4assembler_p.h

index 29e94ea..d8efea1 100644 (file)
@@ -965,7 +965,7 @@ public:
         if (stackSpaceNeeded) {
             Q_ASSERT(stackSpaceNeeded < (INT_MAX - StackAlignment));
             stackSpaceNeeded = static_cast<int>(WTF::roundUpToMultipleOf(StackAlignment, stackSpaceNeeded));
-            sub32(TrustedImm32(stackSpaceNeeded), StackPointerRegister);
+            subPtr(TrustedImm32(stackSpaceNeeded), StackPointerRegister);
         }
 
         // First save any arguments that reside in registers, because they could be overwritten
@@ -995,7 +995,7 @@ public:
         callAbsolute(functionName, function);
 
         if (stackSpaceNeeded)
-            add32(TrustedImm32(stackSpaceNeeded), StackPointerRegister);
+            addPtr(TrustedImm32(stackSpaceNeeded), StackPointerRegister);
 
         if (ExceptionCheck<Callable>::NeedsCheck) {
             checkException();