<!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 <fpizlo@apple.com>
</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 <fpizlo@apple.com>
+
</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"> <ClCompile Include="..\ftl\FTLJITCode.cpp" />
</span><span class="cx"> <ClCompile Include="..\ftl\FTLJITFinalizer.cpp" />
</span><span class="cx"> <ClCompile Include="..\ftl\FTLJSCall.cpp" />
</span><ins>+ <ClCompile Include="..\ftl\FTLJSCallBase.cpp" />
</ins><span class="cx"> <ClCompile Include="..\ftl\FTLLink.cpp" />
</span><span class="cx"> <ClCompile Include="..\ftl\FTLLocation.cpp" />
</span><span class="cx"> <ClCompile Include="..\ftl\FTLLowerDFGToLLVM.cpp" />
</span><span class="lines">@@ -1191,6 +1192,7 @@
</span><span class="cx"> <ClInclude Include="..\ftl\FTLJITCode.h" />
</span><span class="cx"> <ClInclude Include="..\ftl\FTLJITFinalizer.h" />
</span><span class="cx"> <ClInclude Include="..\ftl\FTLJSCall.h" />
</span><ins>+ <ClInclude Include="..\ftl\FTLJSCallBase.h" />
</ins><span class="cx"> <ClInclude Include="..\ftl\FTLLink.h" />
</span><span class="cx"> <ClInclude Include="..\ftl\FTLLocation.h" />
</span><span class="cx"> <ClInclude Include="..\ftl\FTLLowerDFGToLLVM.h" />
</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 = "<group>"; };
</span><span class="cx">                 0FCEFADD180738C000472CE4 /* FTLLocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FTLLocation.cpp; path = ftl/FTLLocation.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 0FCEFADE180738C000472CE4 /* FTLLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLLocation.h; path = ftl/FTLLocation.h; sourceTree = "<group>"; };
</span><ins>+                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>"; };
</ins><span class="cx">                 0FD2C92316D01EE900C7803F /* StructureInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StructureInlines.h; sourceTree = "<group>"; };
</span><span class="cx">                 0FD3C82014115CF800FD81CB /* DFGDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGDriver.cpp; path = dfg/DFGDriver.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 0FD3C82214115D0E00FD81CB /* DFGDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGDriver.h; path = dfg/DFGDriver.h; sourceTree = "<group>"; };
</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<CallType>(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->op() == Construct ? CallLinkInfo::Construct : CallLinkInfo::Call,
+ node->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& 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;
-}
-
</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 "CCallHelpers.h"
-#include "CallLinkInfo.h"
-#include "CodeOrigin.h"
</del><ins>+#include "FTLJSCallBase.h"
</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&);
- void link(VM&, LinkBuffer&);
-
</del><span class="cx"> unsigned stackmapID() const { return m_stackmapID; }
</span><span class="cx">
</span><span class="cx"> bool operator<(const JSCall& 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 "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)
+
</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 "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
+
</ins></span></pre>
</div>
</div>
</body>
</html>