Title: [155278] trunk/Source/_javascript_Core
Revision
155278
Author
[email protected]
Date
2013-09-07 20:24:13 -0700 (Sat, 07 Sep 2013)

Log Message

FTL should support basic closure operations
https://bugs.webkit.org/show_bug.cgi?id=120987

Reviewed by Oliver Hunt.

* ftl/FTLAbstractHeapRepository.cpp:
* ftl/FTLAbstractHeapRepository.h:
* ftl/FTLCapabilities.cpp:
(JSC::FTL::canCompile):
* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::LowerDFGToLLVM::compileNode):
(JSC::FTL::LowerDFGToLLVM::compileGetMyScope):
(JSC::FTL::LowerDFGToLLVM::compileSkipScope):
(JSC::FTL::LowerDFGToLLVM::compileGetClosureRegisters):
(JSC::FTL::LowerDFGToLLVM::compileGetClosureVar):
(JSC::FTL::LowerDFGToLLVM::compilePutClosureVar):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (155277 => 155278)


--- trunk/Source/_javascript_Core/ChangeLog	2013-09-08 03:17:30 UTC (rev 155277)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-09-08 03:24:13 UTC (rev 155278)
@@ -1,5 +1,24 @@
 2013-09-07  Filip Pizlo  <[email protected]>
 
+        FTL should support basic closure operations
+        https://bugs.webkit.org/show_bug.cgi?id=120987
+
+        Reviewed by Oliver Hunt.
+
+        * ftl/FTLAbstractHeapRepository.cpp:
+        * ftl/FTLAbstractHeapRepository.h:
+        * ftl/FTLCapabilities.cpp:
+        (JSC::FTL::canCompile):
+        * ftl/FTLLowerDFGToLLVM.cpp:
+        (JSC::FTL::LowerDFGToLLVM::compileNode):
+        (JSC::FTL::LowerDFGToLLVM::compileGetMyScope):
+        (JSC::FTL::LowerDFGToLLVM::compileSkipScope):
+        (JSC::FTL::LowerDFGToLLVM::compileGetClosureRegisters):
+        (JSC::FTL::LowerDFGToLLVM::compileGetClosureVar):
+        (JSC::FTL::LowerDFGToLLVM::compilePutClosureVar):
+
+2013-09-07  Filip Pizlo  <[email protected]>
+
         Only run FTL tests if we have the FTL
         https://bugs.webkit.org/show_bug.cgi?id=120974
 

Modified: trunk/Source/_javascript_Core/ftl/FTLAbstractHeapRepository.cpp (155277 => 155278)


--- trunk/Source/_javascript_Core/ftl/FTLAbstractHeapRepository.cpp	2013-09-08 03:17:30 UTC (rev 155277)
+++ trunk/Source/_javascript_Core/ftl/FTLAbstractHeapRepository.cpp	2013-09-08 03:24:13 UTC (rev 155278)
@@ -28,6 +28,8 @@
 
 #if ENABLE(FTL_JIT)
 
+#include "JSScope.h"
+#include "JSVariableObject.h"
 #include "Operations.h"
 
 namespace JSC { namespace FTL {

Modified: trunk/Source/_javascript_Core/ftl/FTLAbstractHeapRepository.h (155277 => 155278)


--- trunk/Source/_javascript_Core/ftl/FTLAbstractHeapRepository.h	2013-09-08 03:17:30 UTC (rev 155277)
+++ trunk/Source/_javascript_Core/ftl/FTLAbstractHeapRepository.h	2013-09-08 03:24:13 UTC (rev 155278)
@@ -46,8 +46,10 @@
     macro(JSArrayBufferView_vector, JSArrayBufferView::offsetOfVector()) \
     macro(JSCell_structure, JSCell::structureOffset()) \
     macro(JSObject_butterfly, JSObject::butterflyOffset()) \
+    macro(JSScope_next, JSScope::offsetOfNext()) \
     macro(JSString_length, JSString::offsetOfLength()) \
     macro(JSString_value, JSString::offsetOfValue()) \
+    macro(JSVariableObject_registers, JSVariableObject::offsetOfRegisters()) \
     macro(StringImpl_data, StringImpl::dataOffset()) \
     macro(StringImpl_hashAndFlags, StringImpl::flagsOffset()) \
     macro(Structure_classInfo, Structure::classInfoOffset()) \

Modified: trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp (155277 => 155278)


--- trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp	2013-09-08 03:17:30 UTC (rev 155277)
+++ trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp	2013-09-08 03:24:13 UTC (rev 155278)
@@ -89,6 +89,11 @@
     case Call:
     case Construct:
     case GlobalVarWatchpoint:
+    case GetMyScope:
+    case SkipScope:
+    case GetClosureRegisters:
+    case GetClosureVar:
+    case PutClosureVar:
         // These are OK.
         break;
     case GetIndexedPropertyStorage:

Modified: trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp (155277 => 155278)


--- trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp	2013-09-08 03:17:30 UTC (rev 155277)
+++ trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp	2013-09-08 03:24:13 UTC (rev 155278)
@@ -372,6 +372,21 @@
         case GlobalVarWatchpoint:
             compileGlobalVarWatchpoint();
             break;
+        case GetMyScope:
+            compileGetMyScope();
+            break;
+        case SkipScope:
+            compileSkipScope();
+            break;
+        case GetClosureRegisters:
+            compileGetClosureRegisters();
+            break;
+        case GetClosureVar:
+            compileGetClosureVar();
+            break;
+        case PutClosureVar:
+            compilePutClosureVar();
+            break;
         case CompareEq:
             compileCompareEq();
             break;
@@ -1519,6 +1534,36 @@
         // https://bugs.webkit.org/show_bug.cgi?id=113647
     }
     
+    void compileGetMyScope()
+    {
+        setJSValue(m_out.loadPtr(addressFor(
+            m_node->codeOrigin.stackOffset() + JSStack::ScopeChain)));
+    }
+    
+    void compileSkipScope()
+    {
+        setJSValue(m_out.loadPtr(lowCell(m_node->child1()), m_heaps.JSScope_next));
+    }
+    
+    void compileGetClosureRegisters()
+    {
+        setStorage(m_out.loadPtr(
+            lowCell(m_node->child1()), m_heaps.JSVariableObject_registers));
+    }
+    
+    void compileGetClosureVar()
+    {
+        setJSValue(m_out.load64(
+            addressFor(lowStorage(m_node->child1()), m_node->varNumber())));
+    }
+    
+    void compilePutClosureVar()
+    {
+        m_out.store64(
+            lowJSValue(m_node->child3()),
+            addressFor(lowStorage(m_node->child2()), m_node->varNumber()));
+    }
+    
     void compileCompareEq()
     {
         if (m_node->isBinaryUseKind(Int32Use)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to