Title: [159693] trunk/Source/_javascript_Core
Revision
159693
Author
[email protected]
Date
2013-11-22 09:34:04 -0800 (Fri, 22 Nov 2013)

Log Message

Unreviewed, rolling out r159652.
http://trac.webkit.org/changeset/159652
https://bugs.webkit.org/show_bug.cgi?id=124778

broke fast/dom/gc-attribute-node.html (Requested by ap on
#webkit).

* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitCall):
(JSC::BytecodeGenerator::emitConstruct):
* bytecompiler/BytecodeGenerator.h:
(JSC::CallArguments::registerOffset):
(JSC::CallArguments::argumentCountIncludingThis):
* bytecompiler/NodesCodegen.cpp:
(JSC::CallArguments::CallArguments):
(JSC::CallArguments::newArgument):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (159692 => 159693)


--- trunk/Source/_javascript_Core/ChangeLog	2013-11-22 17:27:59 UTC (rev 159692)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-11-22 17:34:04 UTC (rev 159693)
@@ -1,3 +1,22 @@
+2013-11-22  Commit Queue  <[email protected]>
+
+        Unreviewed, rolling out r159652.
+        http://trac.webkit.org/changeset/159652
+        https://bugs.webkit.org/show_bug.cgi?id=124778
+
+        broke fast/dom/gc-attribute-node.html (Requested by ap on
+        #webkit).
+
+        * bytecompiler/BytecodeGenerator.cpp:
+        (JSC::BytecodeGenerator::emitCall):
+        (JSC::BytecodeGenerator::emitConstruct):
+        * bytecompiler/BytecodeGenerator.h:
+        (JSC::CallArguments::registerOffset):
+        (JSC::CallArguments::argumentCountIncludingThis):
+        * bytecompiler/NodesCodegen.cpp:
+        (JSC::CallArguments::CallArguments):
+        (JSC::CallArguments::newArgument):
+
 2013-11-21  Filip Pizlo  <[email protected]>
 
         Fix a typo (requriements->requirements).

Modified: trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp (159692 => 159693)


--- trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp	2013-11-22 17:27:59 UTC (rev 159692)
+++ trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp	2013-11-22 17:34:04 UTC (rev 159693)
@@ -1739,10 +1739,10 @@
     UnlinkedValueProfile profile = ""
     ASSERT(dst);
     ASSERT(dst != ignoredResult());
-    instructions().append(dst->index());
-    instructions().append(func->index());
-    instructions().append(callArguments.argumentCountIncludingThis());
-    instructions().append(callArguments.stackOffset());
+    instructions().append(dst->index()); // result
+    instructions().append(func->index()); // func
+    instructions().append(callArguments.argumentCountIncludingThis()); // argCount
+    instructions().append(callArguments.registerOffset()); // registerOffset
 #if ENABLE(LLINT)
     instructions().append(m_codeBlock->addLLIntCallLinkInfo());
 #else
@@ -1853,9 +1853,9 @@
     UnlinkedValueProfile profile = ""
     ASSERT(dst != ignoredResult());
     instructions().append(dst->index());
-    instructions().append(func->index());
-    instructions().append(callArguments.argumentCountIncludingThis());
-    instructions().append(callArguments.stackOffset());
+    instructions().append(func->index()); // func
+    instructions().append(callArguments.argumentCountIncludingThis()); // argCount
+    instructions().append(callArguments.registerOffset()); // registerOffset
 #if ENABLE(LLINT)
     instructions().append(m_codeBlock->addLLIntCallLinkInfo());
 #else

Modified: trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.h (159692 => 159693)


--- trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.h	2013-11-22 17:27:59 UTC (rev 159692)
+++ trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.h	2013-11-22 17:34:04 UTC (rev 159693)
@@ -69,16 +69,17 @@
 
         RegisterID* thisRegister() { return m_argv[0].get(); }
         RegisterID* argumentRegister(unsigned i) { return m_argv[i + 1].get(); }
-        unsigned stackOffset() { return -m_argv[0]->index() + JSStack::CallFrameHeaderSize; }
-        unsigned argumentCountIncludingThis() { return m_argv.size() - m_padding; }
+        unsigned registerOffset() { return -m_argv.last()->index() + CallFrame::offsetFor(argumentCountIncludingThis()); }
+        unsigned argumentCountIncludingThis() { return m_argv.size(); }
         RegisterID* profileHookRegister() { return m_profileHookRegister.get(); }
         ArgumentsNode* argumentsNode() { return m_argumentsNode; }
 
     private:
+        void newArgument(BytecodeGenerator&);
+
         RefPtr<RegisterID> m_profileHookRegister;
         ArgumentsNode* m_argumentsNode;
         Vector<RefPtr<RegisterID>, 8, UnsafeVectorOverflow> m_argv;
-        unsigned m_padding;
     };
 
     struct FinallyContext {

Modified: trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp (159692 => 159693)


--- trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp	2013-11-22 17:27:59 UTC (rev 159692)
+++ trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp	2013-11-22 17:34:04 UTC (rev 159693)
@@ -44,7 +44,6 @@
 #include "RegExpCache.h"
 #include "RegExpObject.h"
 #include "SamplingTool.h"
-#include "StackAlignment.h"
 #include <wtf/Assertions.h>
 #include <wtf/RefCountedLeakCounter.h>
 #include <wtf/Threading.h>
@@ -421,7 +420,6 @@
 
 CallArguments::CallArguments(BytecodeGenerator& generator, ArgumentsNode* argumentsNode, unsigned additionalArguments)
     : m_argumentsNode(argumentsNode)
-    , m_padding(0)
 {
     if (generator.shouldEmitProfileHooks())
         m_profileHookRegister = generator.newTemporary();
@@ -437,13 +435,15 @@
         m_argv[i] = generator.newTemporary();
         ASSERT(static_cast<size_t>(i) == m_argv.size() - 1 || m_argv[i]->index() == m_argv[i + 1]->index() - 1);
     }
-    
-    while (stackOffset() % stackAlignmentRegisters()) {
-        m_argv.insert(0, generator.newTemporary());
-        m_padding++;
-    }
 }
 
+inline void CallArguments::newArgument(BytecodeGenerator& generator)
+{
+    RefPtr<RegisterID> tmp = generator.newTemporary();
+    ASSERT(m_argv.isEmpty() || tmp->index() == m_argv.last()->index() + 1); // Calling convention assumes that all arguments are contiguous.
+    m_argv.append(tmp.release());
+}
+
 // ------------------------------ EvalFunctionCallNode ----------------------------------
 
 RegisterID* EvalFunctionCallNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to