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