Title: [164166] trunk/Source/_javascript_Core
- Revision
- 164166
- Author
- [email protected]
- Date
- 2014-02-15 00:34:07 -0800 (Sat, 15 Feb 2014)
Log Message
Added GetMyArgumentByVal to FTL
https://bugs.webkit.org/show_bug.cgi?id=128850
Patch by Matthew Mirman <[email protected]> on 2014-02-15
Reviewed by Filip Pizlo.
* ftl/FTLCapabilities.cpp:
(JSC::FTL::canCompile):
* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::LowerDFGToLLVM::compileNode):
(JSC::FTL::LowerDFGToLLVM::compileGetMyArgumentByVal):
* tests/stress/ftl-getbyval-arguments.js: Added.
(foo):
Modified Paths
Added Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (164165 => 164166)
--- trunk/Source/_javascript_Core/ChangeLog 2014-02-15 08:33:43 UTC (rev 164165)
+++ trunk/Source/_javascript_Core/ChangeLog 2014-02-15 08:34:07 UTC (rev 164166)
@@ -1,3 +1,18 @@
+2014-02-15 Matthew Mirman <[email protected]>
+
+ Added GetMyArgumentByVal to FTL
+ https://bugs.webkit.org/show_bug.cgi?id=128850
+
+ Reviewed by Filip Pizlo.
+
+ * ftl/FTLCapabilities.cpp:
+ (JSC::FTL::canCompile):
+ * ftl/FTLLowerDFGToLLVM.cpp:
+ (JSC::FTL::LowerDFGToLLVM::compileNode):
+ (JSC::FTL::LowerDFGToLLVM::compileGetMyArgumentByVal):
+ * tests/stress/ftl-getbyval-arguments.js: Added.
+ (foo):
+
2014-02-15 [email protected] <[email protected]>
[Win] LLINT is not working.
Modified: trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp (164165 => 164166)
--- trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp 2014-02-15 08:33:43 UTC (rev 164165)
+++ trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp 2014-02-15 08:34:07 UTC (rev 164166)
@@ -46,6 +46,7 @@
case JSConstant:
case WeakJSConstant:
case GetMyArgumentsLength:
+ case GetMyArgumentByVal:
case GetLocal:
case SetLocal:
case MovHint:
Modified: trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp (164165 => 164166)
--- trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp 2014-02-15 08:33:43 UTC (rev 164165)
+++ trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp 2014-02-15 08:34:07 UTC (rev 164166)
@@ -299,6 +299,9 @@
case GetMyArgumentsLength:
compileGetMyArgumentsLength();
break;
+ case GetMyArgumentByVal:
+ compileGetMyArgumentByVal();
+ break;
case ZombieHint:
compileZombieHint();
break;
@@ -2030,7 +2033,28 @@
return;
} }
}
-
+
+ void compileGetMyArgumentByVal()
+ {
+ LValue property = lowInt32(m_node->child1());
+ TypedPointer argsPtr = addressFor(m_node->origin.semantic.stackOffset());
+ LValue args = argsPtr.value();
+ LValue propPtr = m_out.signExt(property, m_out.intPtr);
+
+ speculate(Uncountable, noValue(), 0,
+ m_out.aboveOrEqual(propPtr,
+ addressFor(m_node->origin.semantic.stackOffset() + JSStack::ArgumentCount).value()));
+
+ speculate(Uncountable, noValue(), 0,
+ m_out.notNull(
+ addressFor(m_node->origin.semantic.stackOffset()).value())); // Where is SlowArgumentData?
+
+ setJSValue(m_out.load64(m_out.baseIndex(
+ argsPtr.heap(),
+ args, propPtr, ScaleEight,
+ JSStack::ThisArgument * sizeof(Register) + sizeof(Register))));
+ }
+
void compilePutByVal()
{
Edge child1 = m_graph.varArgChild(m_node, 0);
Added: trunk/Source/_javascript_Core/tests/stress/ftl-getbyval-arguments.js (0 => 164166)
--- trunk/Source/_javascript_Core/tests/stress/ftl-getbyval-arguments.js (rev 0)
+++ trunk/Source/_javascript_Core/tests/stress/ftl-getbyval-arguments.js 2014-02-15 08:34:07 UTC (rev 164166)
@@ -0,0 +1,12 @@
+function foo(a){
+ return arguments[1];
+}
+noInline(foo);
+
+var r = 0;
+for (var i = 0; i < 100000; ++i) {
+ var r = foo(52, 42);
+}
+
+if (r != 42) throw "Error: "+r;
+
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes