Title: [164074] trunk/Source/_javascript_Core
- Revision
- 164074
- Author
- [email protected]
- Date
- 2014-02-13 16:22:45 -0800 (Thu, 13 Feb 2014)
Log Message
Added GetMyArgumentsLength to FTL
https://bugs.webkit.org/show_bug.cgi?id=128758
Patch by Matthew Mirman <[email protected]> on 2014-02-13
Reviewed by Filip Pizlo.
* ftl/FTLCapabilities.cpp:
(JSC::FTL::canCompile):
* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::LowerDFGToLLVM::compileNode):
(JSC::FTL::LowerDFGToLLVM::compileGetMyArgumentsLength):
* tests/stress/ftl-getmyargumentslength.js: Added.
(foo):
Modified Paths
Added Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (164073 => 164074)
--- trunk/Source/_javascript_Core/ChangeLog 2014-02-14 00:22:36 UTC (rev 164073)
+++ trunk/Source/_javascript_Core/ChangeLog 2014-02-14 00:22:45 UTC (rev 164074)
@@ -1,3 +1,18 @@
+2014-02-13 Matthew Mirman <[email protected]>
+
+ Added GetMyArgumentsLength to FTL
+ https://bugs.webkit.org/show_bug.cgi?id=128758
+
+ Reviewed by Filip Pizlo.
+
+ * ftl/FTLCapabilities.cpp:
+ (JSC::FTL::canCompile):
+ * ftl/FTLLowerDFGToLLVM.cpp:
+ (JSC::FTL::LowerDFGToLLVM::compileNode):
+ (JSC::FTL::LowerDFGToLLVM::compileGetMyArgumentsLength):
+ * tests/stress/ftl-getmyargumentslength.js: Added.
+ (foo):
+
2014-02-13 Filip Pizlo <[email protected]>
Unreviewed, roll out http://trac.webkit.org/changeset/164066.
Modified: trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp (164073 => 164074)
--- trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp 2014-02-14 00:22:36 UTC (rev 164073)
+++ trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp 2014-02-14 00:22:45 UTC (rev 164074)
@@ -45,6 +45,7 @@
switch (node->op()) {
case JSConstant:
case WeakJSConstant:
+ case GetMyArgumentsLength:
case GetLocal:
case SetLocal:
case MovHint:
Modified: trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp (164073 => 164074)
--- trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp 2014-02-14 00:22:36 UTC (rev 164073)
+++ trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp 2014-02-14 00:22:45 UTC (rev 164074)
@@ -296,6 +296,9 @@
case MovHint:
compileMovHint();
break;
+ case GetMyArgumentsLength:
+ compileGetMyArgumentsLength();
+ break;
case ZombieHint:
compileZombieHint();
break;
@@ -1798,6 +1801,12 @@
setInt32(m_out.castToInt32(m_out.phi(m_out.intPtr, simpleOut, wastefulOut)));
}
+ void compileGetMyArgumentsLength()
+ {
+ TypedPointer reg = addressFor(m_node->codeOrigin.stackOffset() + JSStack::ArgumentCount);
+ setInt32(m_out.add(m_out.load32NonNegative(reg), m_out.constInt32(-1)));
+ }
+
void compileGetArrayLength()
{
switch (m_node->arrayMode().type()) {
Added: trunk/Source/_javascript_Core/tests/stress/ftl-getmyargumentslength.js (0 => 164074)
--- trunk/Source/_javascript_Core/tests/stress/ftl-getmyargumentslength.js (rev 0)
+++ trunk/Source/_javascript_Core/tests/stress/ftl-getmyargumentslength.js 2014-02-14 00:22:45 UTC (rev 164074)
@@ -0,0 +1,11 @@
+function foo(){
+ return arguments.length;
+}
+
+noInline(foo);
+
+for (var i = 0; i < 100000; ++i) {
+ var r = foo(11, 12, 13, 18, 19, 20);
+ if (r != 6) throw "Error: "+r;
+}
+
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes