<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[179912] trunk/Source/JavaScriptCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/179912">179912</a></dd>
<dt>Author</dt> <dd>fpizlo@apple.com</dd>
<dt>Date</dt> <dd>2015-02-10 18:41:20 -0800 (Tue, 10 Feb 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>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:
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
* JavaScriptCore.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.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreCMakeListstxt">trunk/Source/JavaScriptCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj">trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCallLinkInfoh">trunk/Source/JavaScriptCore/bytecode/CallLinkInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLJSCallcpp">trunk/Source/JavaScriptCore/ftl/FTLJSCall.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLJSCallh">trunk/Source/JavaScriptCore/ftl/FTLJSCall.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreftlFTLJSCallBasecpp">trunk/Source/JavaScriptCore/ftl/FTLJSCallBase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLJSCallBaseh">trunk/Source/JavaScriptCore/ftl/FTLJSCallBase.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/CMakeLists.txt (179911 => 179912)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/CMakeLists.txt        2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/JavaScriptCore/CMakeLists.txt        2015-02-11 02:41:20 UTC (rev 179912)
</span><span class="lines">@@ -843,6 +843,7 @@
</span><span class="cx">         ftl/FTLJITCode.cpp
</span><span class="cx">         ftl/FTLJITFinalizer.cpp
</span><span class="cx">         ftl/FTLJSCall.cpp
</span><ins>+        ftl/FTLJSCallBase.cpp
</ins><span class="cx">         ftl/FTLLink.cpp
</span><span class="cx">         ftl/FTLLocation.cpp
</span><span class="cx">         ftl/FTLLowerDFGToLLVM.cpp
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (179911 => 179912)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-02-11 02:41:20 UTC (rev 179912)
</span><span class="lines">@@ -1,5 +1,32 @@
</span><span class="cx"> 2015-02-10  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        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:
+        * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+        * JavaScriptCore.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  &lt;fpizlo@apple.com&gt;
+
</ins><span class="cx">         Unreviewed, fix build.
</span><span class="cx"> 
</span><span class="cx">         * jit/CCallHelpers.h:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj (179911 => 179912)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2015-02-11 02:41:20 UTC (rev 179912)
</span><span class="lines">@@ -510,6 +510,7 @@
</span><span class="cx">     &lt;ClCompile Include=&quot;..\ftl\FTLJITCode.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\ftl\FTLJITFinalizer.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\ftl\FTLJSCall.cpp&quot; /&gt;
</span><ins>+    &lt;ClCompile Include=&quot;..\ftl\FTLJSCallBase.cpp&quot; /&gt;
</ins><span class="cx">     &lt;ClCompile Include=&quot;..\ftl\FTLLink.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\ftl\FTLLocation.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\ftl\FTLLowerDFGToLLVM.cpp&quot; /&gt;
</span><span class="lines">@@ -1191,6 +1192,7 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\ftl\FTLJITCode.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\ftl\FTLJITFinalizer.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\ftl\FTLJSCall.h&quot; /&gt;
</span><ins>+    &lt;ClInclude Include=&quot;..\ftl\FTLJSCallBase.h&quot; /&gt;
</ins><span class="cx">     &lt;ClInclude Include=&quot;..\ftl\FTLLink.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\ftl\FTLLocation.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\ftl\FTLLowerDFGToLLVM.h&quot; /&gt;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (179911 => 179912)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2015-02-11 02:41:20 UTC (rev 179912)
</span><span class="lines">@@ -562,6 +562,8 @@
</span><span class="cx">                 0FCEFADC18064A1400472CE4 /* config_llvm.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFADB18064A1400472CE4 /* config_llvm.h */; };
</span><span class="cx">                 0FCEFADF180738C000472CE4 /* FTLLocation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFADD180738C000472CE4 /* FTLLocation.cpp */; };
</span><span class="cx">                 0FCEFAE0180738C000472CE4 /* FTLLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFADE180738C000472CE4 /* FTLLocation.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                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, ); }; };
</ins><span class="cx">                 0FD2C92416D01EE900C7803F /* StructureInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD2C92316D01EE900C7803F /* StructureInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 0FD3C82614115D4000FD81CB /* DFGDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FD3C82014115CF800FD81CB /* DFGDriver.cpp */; };
</span><span class="cx">                 0FD3C82814115D4F00FD81CB /* DFGDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD3C82214115D0E00FD81CB /* DFGDriver.h */; };
</span><span class="lines">@@ -2243,6 +2245,8 @@
</span><span class="cx">                 0FCEFADB18064A1400472CE4 /* config_llvm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config_llvm.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FCEFADD180738C000472CE4 /* FTLLocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FTLLocation.cpp; path = ftl/FTLLocation.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FCEFADE180738C000472CE4 /* FTLLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLLocation.h; path = ftl/FTLLocation.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                0FD1202D1A8AED12000F5280 /* FTLJSCallBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FTLJSCallBase.cpp; path = ftl/FTLJSCallBase.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                0FD1202E1A8AED12000F5280 /* FTLJSCallBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLJSCallBase.h; path = ftl/FTLJSCallBase.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 0FD2C92316D01EE900C7803F /* StructureInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StructureInlines.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FD3C82014115CF800FD81CB /* DFGDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGDriver.cpp; path = dfg/DFGDriver.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FD3C82214115D0E00FD81CB /* DFGDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGDriver.h; path = dfg/DFGDriver.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -3600,6 +3604,8 @@
</span><span class="cx">                                 A78A977E179738D5009DF744 /* FTLJITFinalizer.h */,
</span><span class="cx">                                 0F6B1CB3185FC9E900845D97 /* FTLJSCall.cpp */,
</span><span class="cx">                                 0F6B1CB4185FC9E900845D97 /* FTLJSCall.h */,
</span><ins>+                                0FD1202D1A8AED12000F5280 /* FTLJSCallBase.cpp */,
+                                0FD1202E1A8AED12000F5280 /* FTLJSCallBase.h */,
</ins><span class="cx">                                 0F8F2B93172E049E007DBDA5 /* FTLLink.cpp */,
</span><span class="cx">                                 0F8F2B94172E049E007DBDA5 /* FTLLink.h */,
</span><span class="cx">                                 0FCEFADD180738C000472CE4 /* FTLLocation.cpp */,
</span><span class="lines">@@ -6129,6 +6135,7 @@
</span><span class="cx">                                 147B84630E6DE6B1004775A4 /* PutPropertySlot.h in Headers */,
</span><span class="cx">                                 2AAD964A18569417001F93BE /* RecursiveAllocationScope.h in Headers */,
</span><span class="cx">                                 0FF60AC216740F8300029779 /* ReduceWhitespace.h in Headers */,
</span><ins>+                                0FD120301A8AED12000F5280 /* FTLJSCallBase.h in Headers */,
</ins><span class="cx">                                 0FA7A8EC18B413C80052371D /* Reg.h in Headers */,
</span><span class="cx">                                 BC18C45A0E16F5CD00B34460 /* RegExp.h in Headers */,
</span><span class="cx">                                 A1712B3F11C7B228007A5315 /* RegExpCache.h in Headers */,
</span><span class="lines">@@ -7257,6 +7264,7 @@
</span><span class="cx">                                 A54CF2F9184EAEDA00237F19 /* ScriptObject.cpp in Sources */,
</span><span class="cx">                                 A54CF2F5184EAB2400237F19 /* ScriptValue.cpp in Sources */,
</span><span class="cx">                                 A7299DA517D12858005F5FF9 /* SetConstructor.cpp in Sources */,
</span><ins>+                                0FD1202F1A8AED12000F5280 /* FTLJSCallBase.cpp in Sources */,
</ins><span class="cx">                                 A790DD6B182F499700588807 /* SetIteratorConstructor.cpp in Sources */,
</span><span class="cx">                                 A790DD6D182F499700588807 /* SetIteratorPrototype.cpp in Sources */,
</span><span class="cx">                                 A7299DA117D12848005F5FF9 /* SetPrototype.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCallLinkInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CallLinkInfo.h (179911 => 179912)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CallLinkInfo.h        2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/JavaScriptCore/bytecode/CallLinkInfo.h        2015-02-11 02:41:20 UTC (rev 179912)
</span><span class="lines">@@ -55,7 +55,7 @@
</span><span class="cx">         ASSERT(opcodeID == op_call_varargs);
</span><span class="cx">         return CallVarargs;
</span><span class="cx">     }
</span><del>-        
</del><ins>+    
</ins><span class="cx">     CallLinkInfo()
</span><span class="cx">         : isFTL(false)
</span><span class="cx">         , hasSeenShouldRepatch(false)
</span><span class="lines">@@ -71,10 +71,14 @@
</span><span class="cx">             remove();
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    CodeSpecializationKind specializationKind() const
</del><ins>+    static CodeSpecializationKind specializationKindFor(CallType callType)
</ins><span class="cx">     {
</span><span class="cx">         return specializationFromIsConstruct(callType == Construct || callType == ConstructVarargs);
</span><span class="cx">     }
</span><ins>+    CodeSpecializationKind specializationKind() const
+    {
+        return specializationKindFor(static_cast&lt;CallType&gt;(callType));
+    }
</ins><span class="cx"> 
</span><span class="cx">     CodeLocationNearCall callReturnLocation;
</span><span class="cx">     CodeLocationDataLabelPtr hotPathBegin;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLJSCallcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLJSCall.cpp (179911 => 179912)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLJSCall.cpp        2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/JavaScriptCore/ftl/FTLJSCall.cpp        2015-02-11 02:41:20 UTC (rev 179912)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -33,59 +33,23 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC { namespace FTL {
</span><span class="cx"> 
</span><ins>+using namespace DFG;
+
</ins><span class="cx"> JSCall::JSCall()
</span><span class="cx">     : m_stackmapID(UINT_MAX)
</span><del>-    , m_node(nullptr)
-    , m_callLinkInfo(nullptr)
</del><span class="cx">     , m_instructionOffset(UINT_MAX)
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSCall::JSCall(unsigned stackmapID, DFG::Node* node)
-    : m_stackmapID(stackmapID)
-    , m_node(node)
-    , m_callLinkInfo(nullptr)
</del><ins>+JSCall::JSCall(unsigned stackmapID, Node* node)
+    : JSCallBase(
+        node-&gt;op() == Construct ? CallLinkInfo::Construct : CallLinkInfo::Call,
+        node-&gt;origin.semantic)
+    , m_stackmapID(stackmapID)
</ins><span class="cx">     , m_instructionOffset(0)
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void JSCall::emit(CCallHelpers&amp; jit)
-{
-    m_callLinkInfo = jit.codeBlock()-&gt;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(&amp;jit);
-    
-    jit.move(CCallHelpers::TrustedImmPtr(m_callLinkInfo), GPRInfo::regT2);
-    m_slowCall = jit.nearCall();
-    
-    done.link(&amp;jit);
-}
-
-void JSCall::link(VM&amp; vm, LinkBuffer&amp; linkBuffer)
-{
-    ThunkGenerator generator = linkThunkGeneratorFor(
-        m_node-&gt;op() == DFG::Construct ? CodeForConstruct : CodeForCall,
-        MustPreserveRegisters);
-    
-    linkBuffer.link(
-        m_slowCall, FunctionPtr(vm.getCTIStub(generator).code().executableAddress()));
-    
-    m_callLinkInfo-&gt;isFTL = true;
-    m_callLinkInfo-&gt;callType = m_node-&gt;op() == DFG::Construct ? CallLinkInfo::Construct : CallLinkInfo::Call;
-    m_callLinkInfo-&gt;codeOrigin = m_node-&gt;origin.semantic;
-    m_callLinkInfo-&gt;callReturnLocation = linkBuffer.locationOfNearCall(m_slowCall);
-    m_callLinkInfo-&gt;hotPathBegin = linkBuffer.locationOf(m_targetToCheck);
-    m_callLinkInfo-&gt;hotPathOther = linkBuffer.locationOfNearCall(m_fastCall);
-    m_callLinkInfo-&gt;calleeGPR = GPRInfo::regT0;
-}
-
</del><span class="cx"> } } // namespace JSC::FTL
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(FTL_JIT)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLJSCallh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLJSCall.h (179911 => 179912)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLJSCall.h        2015-02-11 02:39:31 UTC (rev 179911)
+++ trunk/Source/JavaScriptCore/ftl/FTLJSCall.h        2015-02-11 02:41:20 UTC (rev 179912)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -28,28 +28,21 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(FTL_JIT)
</span><span class="cx"> 
</span><del>-#include &quot;CCallHelpers.h&quot;
-#include &quot;CallLinkInfo.h&quot;
-#include &quot;CodeOrigin.h&quot;
</del><ins>+#include &quot;FTLJSCallBase.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-class LinkBuffer;
-
</del><span class="cx"> namespace DFG {
</span><span class="cx"> struct Node;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> namespace FTL {
</span><span class="cx"> 
</span><del>-class JSCall {
</del><ins>+class JSCall : public JSCallBase {
</ins><span class="cx"> public:
</span><span class="cx">     JSCall();
</span><span class="cx">     JSCall(unsigned stackmapID, DFG::Node*);
</span><span class="cx">     
</span><del>-    void emit(CCallHelpers&amp;);
-    void link(VM&amp;, LinkBuffer&amp;);
-    
</del><span class="cx">     unsigned stackmapID() const { return m_stackmapID; }
</span><span class="cx">     
</span><span class="cx">     bool operator&lt;(const JSCall&amp; other) const
</span><span class="lines">@@ -59,11 +52,6 @@
</span><span class="cx">     
</span><span class="cx"> private:
</span><span class="cx">     unsigned m_stackmapID;
</span><del>-    DFG::Node* m_node;
-    CCallHelpers::DataLabelPtr m_targetToCheck;
-    CCallHelpers::Call m_fastCall;
-    CCallHelpers::Call m_slowCall;
-    CallLinkInfo* m_callLinkInfo;
</del><span class="cx"> 
</span><span class="cx"> public:
</span><span class="cx">     uint32_t m_instructionOffset;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLJSCallBasecpp"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/ftl/FTLJSCallBase.cpp (0 => 179912)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLJSCallBase.cpp                                (rev 0)
+++ trunk/Source/JavaScriptCore/ftl/FTLJSCallBase.cpp        2015-02-11 02:41:20 UTC (rev 179912)
</span><span class="lines">@@ -0,0 +1,88 @@
</span><ins>+/*
+ * 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 &quot;config.h&quot;
+#include &quot;FTLJSCallBase.h&quot;
+
+#if ENABLE(FTL_JIT)
+
+#include &quot;DFGNode.h&quot;
+#include &quot;LinkBuffer.h&quot;
+
+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&amp; jit)
+{
+    m_callLinkInfo = jit.codeBlock()-&gt;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(&amp;jit);
+    
+    jit.move(CCallHelpers::TrustedImmPtr(m_callLinkInfo), GPRInfo::regT2);
+    m_slowCall = jit.nearCall();
+    
+    done.link(&amp;jit);
+}
+
+void JSCallBase::link(VM&amp; vm, LinkBuffer&amp; linkBuffer)
+{
+    ThunkGenerator generator = linkThunkGeneratorFor(
+        CallLinkInfo::specializationKindFor(m_type), MustPreserveRegisters);
+    
+    linkBuffer.link(
+        m_slowCall, FunctionPtr(vm.getCTIStub(generator).code().executableAddress()));
+    
+    m_callLinkInfo-&gt;isFTL = true;
+    m_callLinkInfo-&gt;callType = m_type;
+    m_callLinkInfo-&gt;codeOrigin = m_origin;
+    m_callLinkInfo-&gt;callReturnLocation = linkBuffer.locationOfNearCall(m_slowCall);
+    m_callLinkInfo-&gt;hotPathBegin = linkBuffer.locationOf(m_targetToCheck);
+    m_callLinkInfo-&gt;hotPathOther = linkBuffer.locationOfNearCall(m_fastCall);
+    m_callLinkInfo-&gt;calleeGPR = GPRInfo::regT0;
+}
+
+} } // namespace JSC::FTL
+
+#endif // ENABLE(FTL_JIT)
+
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLJSCallBaseh"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/ftl/FTLJSCallBase.h (0 => 179912)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLJSCallBase.h                                (rev 0)
+++ trunk/Source/JavaScriptCore/ftl/FTLJSCallBase.h        2015-02-11 02:41:20 UTC (rev 179912)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+/*
+ * 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 &quot;CCallHelpers.h&quot;
+#include &quot;CallLinkInfo.h&quot;
+#include &quot;CodeOrigin.h&quot;
+
+namespace JSC {
+
+class LinkBuffer;
+
+namespace FTL {
+
+class JSCallBase {
+public:
+    JSCallBase();
+    JSCallBase(CallLinkInfo::CallType, CodeOrigin);
+    
+    void emit(CCallHelpers&amp;);
+    void link(VM&amp;, LinkBuffer&amp;);
+    
+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
+
</ins></span></pre>
</div>
</div>

</body>
</html>