Title: [166266] trunk/Source/_javascript_Core
Revision
166266
Author
fpi...@apple.com
Date
2014-03-25 16:28:48 -0700 (Tue, 25 Mar 2014)

Log Message

Fix 32-bit getter call alignment.

Reviewed by Mark Hahnenberg.

* jit/Repatch.cpp:
(JSC::generateGetByIdStub):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (166265 => 166266)


--- trunk/Source/_javascript_Core/ChangeLog	2014-03-25 23:20:14 UTC (rev 166265)
+++ trunk/Source/_javascript_Core/ChangeLog	2014-03-25 23:28:48 UTC (rev 166266)
@@ -1,5 +1,14 @@
 2014-03-25  Filip Pizlo  <fpi...@apple.com>
 
+        Fix 32-bit getter call alignment.
+
+        Reviewed by Mark Hahnenberg.
+
+        * jit/Repatch.cpp:
+        (JSC::generateGetByIdStub):
+
+2014-03-25  Filip Pizlo  <fpi...@apple.com>
+
         Repatch should plant calls to getters directly rather than through a C helper
         https://bugs.webkit.org/show_bug.cgi?id=129589
 

Modified: trunk/Source/_javascript_Core/jit/Repatch.cpp (166265 => 166266)


--- trunk/Source/_javascript_Core/jit/Repatch.cpp	2014-03-25 23:20:14 UTC (rev 166265)
+++ trunk/Source/_javascript_Core/jit/Repatch.cpp	2014-03-25 23:28:48 UTC (rev 166266)
@@ -340,8 +340,8 @@
             // - Any byte between FP (exclusive) and SP (inclusive) could be live in the calling
             //   code.
             //
-            // Therefore, we temporary grow the stack for the purpose of the call and then
-            // degrow it after.
+            // Therefore, we temporarily grow the stack for the purpose of the call and then
+            // shrink it after.
             
             callLinkInfo = std::make_unique<CallLinkInfo>();
             callLinkInfo->callType = CallLinkInfo::Call;
@@ -363,15 +363,14 @@
             unsigned numberOfRegsForCall =
                 JSStack::CallFrameHeaderSize + numberOfParameters;
             
-            unsigned alignedNumberOfNeededRegs =
-                WTF::roundUpToMultipleOf(stackAlignmentRegisters(), numberOfRegsForCall);
+            unsigned numberOfBytesForCall =
+                numberOfRegsForCall * sizeof(Register) - sizeof(CallerFrameAndPC);
             
-            unsigned alignedNumberOfNeededBytes =
-                alignedNumberOfNeededRegs * sizeof(Register);
+            unsigned alignedNumberOfBytesForCall =
+                WTF::roundUpToMultipleOf(stackAlignmentBytes(), numberOfBytesForCall);
             
             stubJit.subPtr(
-                MacroAssembler::TrustedImm32(
-                    alignedNumberOfNeededBytes - sizeof(CallerFrameAndPC)),
+                MacroAssembler::TrustedImm32(alignedNumberOfBytesForCall),
                 MacroAssembler::stackPointerRegister);
             
             MacroAssembler::Address calleeFrame = MacroAssembler::Address(
@@ -404,8 +403,7 @@
             fastPathCall = stubJit.nearCall();
             
             stubJit.addPtr(
-                MacroAssembler::TrustedImm32(
-                    alignedNumberOfNeededBytes - sizeof(CallerFrameAndPC)),
+                MacroAssembler::TrustedImm32(alignedNumberOfBytesForCall),
                 MacroAssembler::stackPointerRegister);
             
             done.append(stubJit.jump());
@@ -419,8 +417,7 @@
             slowPathCall = stubJit.nearCall();
             
             stubJit.addPtr(
-                MacroAssembler::TrustedImm32(
-                    alignedNumberOfNeededBytes - sizeof(CallerFrameAndPC)),
+                MacroAssembler::TrustedImm32(alignedNumberOfBytesForCall),
                 MacroAssembler::stackPointerRegister);
             
             done.append(stubJit.jump());
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to