Title: [179912] trunk/Source/_javascript_Core
Revision
179912
Author
fpi...@apple.com
Date
2015-02-10 18:41:20 -0800 (Tue, 10 Feb 2015)

Log Message

Split FTL::JSCall into the part that knows about call inline caching and the part that interacts with LLVM patchpoints
https://bugs.webkit.org/show_bug.cgi?id=141455

Reviewed by Mark Lam.
        
The newly introduced FTL::JSCallBase can be used to build other things, like the FTL portion
of https://bugs.webkit.org/show_bug.cgi?id=141332.

* CMakeLists.txt:
* _javascript_Core.vcxproj/_javascript_Core.vcxproj:
* _javascript_Core.xcodeproj/project.pbxproj:
* bytecode/CallLinkInfo.h:
(JSC::CallLinkInfo::specializationKindFor):
(JSC::CallLinkInfo::specializationKind):
* ftl/FTLJSCall.cpp:
(JSC::FTL::JSCall::JSCall):
(JSC::FTL::JSCall::emit): Deleted.
(JSC::FTL::JSCall::link): Deleted.
* ftl/FTLJSCall.h:
* ftl/FTLJSCallBase.cpp: Added.
(JSC::FTL::JSCallBase::JSCallBase):
(JSC::FTL::JSCallBase::emit):
(JSC::FTL::JSCallBase::link):
* ftl/FTLJSCallBase.h: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/_javascript_Core/CMakeLists.txt (179911 => 179912)


--- trunk/Source/_javascript_Core/CMakeLists.txt	2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/_javascript_Core/CMakeLists.txt	2015-02-11 02:41:20 UTC (rev 179912)
@@ -843,6 +843,7 @@
         ftl/FTLJITCode.cpp
         ftl/FTLJITFinalizer.cpp
         ftl/FTLJSCall.cpp
+        ftl/FTLJSCallBase.cpp
         ftl/FTLLink.cpp
         ftl/FTLLocation.cpp
         ftl/FTLLowerDFGToLLVM.cpp

Modified: trunk/Source/_javascript_Core/ChangeLog (179911 => 179912)


--- trunk/Source/_javascript_Core/ChangeLog	2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/_javascript_Core/ChangeLog	2015-02-11 02:41:20 UTC (rev 179912)
@@ -1,5 +1,32 @@
 2015-02-10  Filip Pizlo  <fpi...@apple.com>
 
+        Split FTL::JSCall into the part that knows about call inline caching and the part that interacts with LLVM patchpoints
+        https://bugs.webkit.org/show_bug.cgi?id=141455
+
+        Reviewed by Mark Lam.
+        
+        The newly introduced FTL::JSCallBase can be used to build other things, like the FTL portion
+        of https://bugs.webkit.org/show_bug.cgi?id=141332.
+
+        * CMakeLists.txt:
+        * _javascript_Core.vcxproj/_javascript_Core.vcxproj:
+        * _javascript_Core.xcodeproj/project.pbxproj:
+        * bytecode/CallLinkInfo.h:
+        (JSC::CallLinkInfo::specializationKindFor):
+        (JSC::CallLinkInfo::specializationKind):
+        * ftl/FTLJSCall.cpp:
+        (JSC::FTL::JSCall::JSCall):
+        (JSC::FTL::JSCall::emit): Deleted.
+        (JSC::FTL::JSCall::link): Deleted.
+        * ftl/FTLJSCall.h:
+        * ftl/FTLJSCallBase.cpp: Added.
+        (JSC::FTL::JSCallBase::JSCallBase):
+        (JSC::FTL::JSCallBase::emit):
+        (JSC::FTL::JSCallBase::link):
+        * ftl/FTLJSCallBase.h: Added.
+
+2015-02-10  Filip Pizlo  <fpi...@apple.com>
+
         Unreviewed, fix build.
 
         * jit/CCallHelpers.h:

Modified: trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj (179911 => 179912)


--- trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj	2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj	2015-02-11 02:41:20 UTC (rev 179912)
@@ -510,6 +510,7 @@
     <ClCompile Include="..\ftl\FTLJITCode.cpp" />
     <ClCompile Include="..\ftl\FTLJITFinalizer.cpp" />
     <ClCompile Include="..\ftl\FTLJSCall.cpp" />
+    <ClCompile Include="..\ftl\FTLJSCallBase.cpp" />
     <ClCompile Include="..\ftl\FTLLink.cpp" />
     <ClCompile Include="..\ftl\FTLLocation.cpp" />
     <ClCompile Include="..\ftl\FTLLowerDFGToLLVM.cpp" />
@@ -1191,6 +1192,7 @@
     <ClInclude Include="..\ftl\FTLJITCode.h" />
     <ClInclude Include="..\ftl\FTLJITFinalizer.h" />
     <ClInclude Include="..\ftl\FTLJSCall.h" />
+    <ClInclude Include="..\ftl\FTLJSCallBase.h" />
     <ClInclude Include="..\ftl\FTLLink.h" />
     <ClInclude Include="..\ftl\FTLLocation.h" />
     <ClInclude Include="..\ftl\FTLLowerDFGToLLVM.h" />

Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (179911 => 179912)


--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2015-02-11 02:41:20 UTC (rev 179912)
@@ -562,6 +562,8 @@
 		0FCEFADC18064A1400472CE4 /* config_llvm.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFADB18064A1400472CE4 /* config_llvm.h */; };
 		0FCEFADF180738C000472CE4 /* FTLLocation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFADD180738C000472CE4 /* FTLLocation.cpp */; };
 		0FCEFAE0180738C000472CE4 /* FTLLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFADE180738C000472CE4 /* FTLLocation.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		0FD1202F1A8AED12000F5280 /* FTLJSCallBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FD1202D1A8AED12000F5280 /* FTLJSCallBase.cpp */; };
+		0FD120301A8AED12000F5280 /* FTLJSCallBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD1202E1A8AED12000F5280 /* FTLJSCallBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		0FD2C92416D01EE900C7803F /* StructureInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD2C92316D01EE900C7803F /* StructureInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		0FD3C82614115D4000FD81CB /* DFGDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FD3C82014115CF800FD81CB /* DFGDriver.cpp */; };
 		0FD3C82814115D4F00FD81CB /* DFGDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD3C82214115D0E00FD81CB /* DFGDriver.h */; };
@@ -2243,6 +2245,8 @@
 		0FCEFADB18064A1400472CE4 /* config_llvm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config_llvm.h; sourceTree = "<group>"; };
 		0FCEFADD180738C000472CE4 /* FTLLocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FTLLocation.cpp; path = ftl/FTLLocation.cpp; sourceTree = "<group>"; };
 		0FCEFADE180738C000472CE4 /* FTLLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLLocation.h; path = ftl/FTLLocation.h; sourceTree = "<group>"; };
+		0FD1202D1A8AED12000F5280 /* FTLJSCallBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FTLJSCallBase.cpp; path = ftl/FTLJSCallBase.cpp; sourceTree = "<group>"; };
+		0FD1202E1A8AED12000F5280 /* FTLJSCallBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLJSCallBase.h; path = ftl/FTLJSCallBase.h; sourceTree = "<group>"; };
 		0FD2C92316D01EE900C7803F /* StructureInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StructureInlines.h; sourceTree = "<group>"; };
 		0FD3C82014115CF800FD81CB /* DFGDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGDriver.cpp; path = dfg/DFGDriver.cpp; sourceTree = "<group>"; };
 		0FD3C82214115D0E00FD81CB /* DFGDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGDriver.h; path = dfg/DFGDriver.h; sourceTree = "<group>"; };
@@ -3600,6 +3604,8 @@
 				A78A977E179738D5009DF744 /* FTLJITFinalizer.h */,
 				0F6B1CB3185FC9E900845D97 /* FTLJSCall.cpp */,
 				0F6B1CB4185FC9E900845D97 /* FTLJSCall.h */,
+				0FD1202D1A8AED12000F5280 /* FTLJSCallBase.cpp */,
+				0FD1202E1A8AED12000F5280 /* FTLJSCallBase.h */,
 				0F8F2B93172E049E007DBDA5 /* FTLLink.cpp */,
 				0F8F2B94172E049E007DBDA5 /* FTLLink.h */,
 				0FCEFADD180738C000472CE4 /* FTLLocation.cpp */,
@@ -6129,6 +6135,7 @@
 				147B84630E6DE6B1004775A4 /* PutPropertySlot.h in Headers */,
 				2AAD964A18569417001F93BE /* RecursiveAllocationScope.h in Headers */,
 				0FF60AC216740F8300029779 /* ReduceWhitespace.h in Headers */,
+				0FD120301A8AED12000F5280 /* FTLJSCallBase.h in Headers */,
 				0FA7A8EC18B413C80052371D /* Reg.h in Headers */,
 				BC18C45A0E16F5CD00B34460 /* RegExp.h in Headers */,
 				A1712B3F11C7B228007A5315 /* RegExpCache.h in Headers */,
@@ -7257,6 +7264,7 @@
 				A54CF2F9184EAEDA00237F19 /* ScriptObject.cpp in Sources */,
 				A54CF2F5184EAB2400237F19 /* ScriptValue.cpp in Sources */,
 				A7299DA517D12858005F5FF9 /* SetConstructor.cpp in Sources */,
+				0FD1202F1A8AED12000F5280 /* FTLJSCallBase.cpp in Sources */,
 				A790DD6B182F499700588807 /* SetIteratorConstructor.cpp in Sources */,
 				A790DD6D182F499700588807 /* SetIteratorPrototype.cpp in Sources */,
 				A7299DA117D12848005F5FF9 /* SetPrototype.cpp in Sources */,

Modified: trunk/Source/_javascript_Core/bytecode/CallLinkInfo.h (179911 => 179912)


--- trunk/Source/_javascript_Core/bytecode/CallLinkInfo.h	2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/_javascript_Core/bytecode/CallLinkInfo.h	2015-02-11 02:41:20 UTC (rev 179912)
@@ -55,7 +55,7 @@
         ASSERT(opcodeID == op_call_varargs);
         return CallVarargs;
     }
-        
+    
     CallLinkInfo()
         : isFTL(false)
         , hasSeenShouldRepatch(false)
@@ -71,10 +71,14 @@
             remove();
     }
     
-    CodeSpecializationKind specializationKind() const
+    static CodeSpecializationKind specializationKindFor(CallType callType)
     {
         return specializationFromIsConstruct(callType == Construct || callType == ConstructVarargs);
     }
+    CodeSpecializationKind specializationKind() const
+    {
+        return specializationKindFor(static_cast<CallType>(callType));
+    }
 
     CodeLocationNearCall callReturnLocation;
     CodeLocationDataLabelPtr hotPathBegin;

Modified: trunk/Source/_javascript_Core/ftl/FTLJSCall.cpp (179911 => 179912)


--- trunk/Source/_javascript_Core/ftl/FTLJSCall.cpp	2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/_javascript_Core/ftl/FTLJSCall.cpp	2015-02-11 02:41:20 UTC (rev 179912)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -33,59 +33,23 @@
 
 namespace JSC { namespace FTL {
 
+using namespace DFG;
+
 JSCall::JSCall()
     : m_stackmapID(UINT_MAX)
-    , m_node(nullptr)
-    , m_callLinkInfo(nullptr)
     , m_instructionOffset(UINT_MAX)
 {
 }
 
-JSCall::JSCall(unsigned stackmapID, DFG::Node* node)
-    : m_stackmapID(stackmapID)
-    , m_node(node)
-    , m_callLinkInfo(nullptr)
+JSCall::JSCall(unsigned stackmapID, Node* node)
+    : JSCallBase(
+        node->op() == Construct ? CallLinkInfo::Construct : CallLinkInfo::Call,
+        node->origin.semantic)
+    , m_stackmapID(stackmapID)
     , m_instructionOffset(0)
 {
 }
 
-void JSCall::emit(CCallHelpers& jit)
-{
-    m_callLinkInfo = jit.codeBlock()->addCallLinkInfo();
-    
-    CCallHelpers::Jump slowPath = jit.branchPtrWithPatch(
-        CCallHelpers::NotEqual, GPRInfo::regT0, m_targetToCheck,
-        CCallHelpers::TrustedImmPtr(0));
-    
-    m_fastCall = jit.nearCall();
-    CCallHelpers::Jump done = jit.jump();
-    
-    slowPath.link(&jit);
-    
-    jit.move(CCallHelpers::TrustedImmPtr(m_callLinkInfo), GPRInfo::regT2);
-    m_slowCall = jit.nearCall();
-    
-    done.link(&jit);
-}
-
-void JSCall::link(VM& vm, LinkBuffer& linkBuffer)
-{
-    ThunkGenerator generator = linkThunkGeneratorFor(
-        m_node->op() == DFG::Construct ? CodeForConstruct : CodeForCall,
-        MustPreserveRegisters);
-    
-    linkBuffer.link(
-        m_slowCall, FunctionPtr(vm.getCTIStub(generator).code().executableAddress()));
-    
-    m_callLinkInfo->isFTL = true;
-    m_callLinkInfo->callType = m_node->op() == DFG::Construct ? CallLinkInfo::Construct : CallLinkInfo::Call;
-    m_callLinkInfo->codeOrigin = m_node->origin.semantic;
-    m_callLinkInfo->callReturnLocation = linkBuffer.locationOfNearCall(m_slowCall);
-    m_callLinkInfo->hotPathBegin = linkBuffer.locationOf(m_targetToCheck);
-    m_callLinkInfo->hotPathOther = linkBuffer.locationOfNearCall(m_fastCall);
-    m_callLinkInfo->calleeGPR = GPRInfo::regT0;
-}
-
 } } // namespace JSC::FTL
 
 #endif // ENABLE(FTL_JIT)

Modified: trunk/Source/_javascript_Core/ftl/FTLJSCall.h (179911 => 179912)


--- trunk/Source/_javascript_Core/ftl/FTLJSCall.h	2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/_javascript_Core/ftl/FTLJSCall.h	2015-02-11 02:41:20 UTC (rev 179912)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -28,28 +28,21 @@
 
 #if ENABLE(FTL_JIT)
 
-#include "CCallHelpers.h"
-#include "CallLinkInfo.h"
-#include "CodeOrigin.h"
+#include "FTLJSCallBase.h"
 
 namespace JSC {
 
-class LinkBuffer;
-
 namespace DFG {
 struct Node;
 }
 
 namespace FTL {
 
-class JSCall {
+class JSCall : public JSCallBase {
 public:
     JSCall();
     JSCall(unsigned stackmapID, DFG::Node*);
     
-    void emit(CCallHelpers&);
-    void link(VM&, LinkBuffer&);
-    
     unsigned stackmapID() const { return m_stackmapID; }
     
     bool operator<(const JSCall& other) const
@@ -59,11 +52,6 @@
     
 private:
     unsigned m_stackmapID;
-    DFG::Node* m_node;
-    CCallHelpers::DataLabelPtr m_targetToCheck;
-    CCallHelpers::Call m_fastCall;
-    CCallHelpers::Call m_slowCall;
-    CallLinkInfo* m_callLinkInfo;
 
 public:
     uint32_t m_instructionOffset;

Added: trunk/Source/_javascript_Core/ftl/FTLJSCallBase.cpp (0 => 179912)


--- trunk/Source/_javascript_Core/ftl/FTLJSCallBase.cpp	                        (rev 0)
+++ trunk/Source/_javascript_Core/ftl/FTLJSCallBase.cpp	2015-02-11 02:41:20 UTC (rev 179912)
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include "config.h"
+#include "FTLJSCallBase.h"
+
+#if ENABLE(FTL_JIT)
+
+#include "DFGNode.h"
+#include "LinkBuffer.h"
+
+namespace JSC { namespace FTL {
+
+JSCallBase::JSCallBase()
+    : m_type(CallLinkInfo::None)
+    , m_callLinkInfo(nullptr)
+{
+}
+
+JSCallBase::JSCallBase(CallLinkInfo::CallType type, CodeOrigin origin)
+    : m_type(type)
+    , m_origin(origin)
+    , m_callLinkInfo(nullptr)
+{
+}
+
+void JSCallBase::emit(CCallHelpers& jit)
+{
+    m_callLinkInfo = jit.codeBlock()->addCallLinkInfo();
+    
+    CCallHelpers::Jump slowPath = jit.branchPtrWithPatch(
+        CCallHelpers::NotEqual, GPRInfo::regT0, m_targetToCheck,
+        CCallHelpers::TrustedImmPtr(0));
+    
+    m_fastCall = jit.nearCall();
+    CCallHelpers::Jump done = jit.jump();
+    
+    slowPath.link(&jit);
+    
+    jit.move(CCallHelpers::TrustedImmPtr(m_callLinkInfo), GPRInfo::regT2);
+    m_slowCall = jit.nearCall();
+    
+    done.link(&jit);
+}
+
+void JSCallBase::link(VM& vm, LinkBuffer& linkBuffer)
+{
+    ThunkGenerator generator = linkThunkGeneratorFor(
+        CallLinkInfo::specializationKindFor(m_type), MustPreserveRegisters);
+    
+    linkBuffer.link(
+        m_slowCall, FunctionPtr(vm.getCTIStub(generator).code().executableAddress()));
+    
+    m_callLinkInfo->isFTL = true;
+    m_callLinkInfo->callType = m_type;
+    m_callLinkInfo->codeOrigin = m_origin;
+    m_callLinkInfo->callReturnLocation = linkBuffer.locationOfNearCall(m_slowCall);
+    m_callLinkInfo->hotPathBegin = linkBuffer.locationOf(m_targetToCheck);
+    m_callLinkInfo->hotPathOther = linkBuffer.locationOfNearCall(m_fastCall);
+    m_callLinkInfo->calleeGPR = GPRInfo::regT0;
+}
+
+} } // namespace JSC::FTL
+
+#endif // ENABLE(FTL_JIT)
+

Added: trunk/Source/_javascript_Core/ftl/FTLJSCallBase.h (0 => 179912)


--- trunk/Source/_javascript_Core/ftl/FTLJSCallBase.h	                        (rev 0)
+++ trunk/Source/_javascript_Core/ftl/FTLJSCallBase.h	2015-02-11 02:41:20 UTC (rev 179912)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef FTLJSCallBase_h
+#define FTLJSCallBase_h
+
+#if ENABLE(FTL_JIT)
+
+#include "CCallHelpers.h"
+#include "CallLinkInfo.h"
+#include "CodeOrigin.h"
+
+namespace JSC {
+
+class LinkBuffer;
+
+namespace FTL {
+
+class JSCallBase {
+public:
+    JSCallBase();
+    JSCallBase(CallLinkInfo::CallType, CodeOrigin);
+    
+    void emit(CCallHelpers&);
+    void link(VM&, LinkBuffer&);
+    
+private:
+    CallLinkInfo::CallType m_type;
+    CodeOrigin m_origin;
+    CCallHelpers::DataLabelPtr m_targetToCheck;
+    CCallHelpers::Call m_fastCall;
+    CCallHelpers::Call m_slowCall;
+    CallLinkInfo* m_callLinkInfo;
+};
+
+} } // namespace JSC::FTL
+
+#endif // ENABLE(FTL_JIT)
+
+#endif // FTLJSCallBase_h
+
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to