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

Reply via email to