<!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>[189061] branches/jsc-tailcall/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/189061">189061</a></dd>
<dt>Author</dt> <dd>basile_clement@apple.com</dd>
<dt>Date</dt> <dd>2015-08-27 15:31:04 -0700 (Thu, 27 Aug 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Unreviewed, revert <a href="http://trac.webkit.org/projects/webkit/changeset/189049">r189049</a> which should never have been committed.

* JavaScriptCore.xcodeproj/project.pbxproj:
* bytecode/ValueRecovery.h:
(JSC::ValueRecovery::inGPR): Deleted.
* dfg/DFGNode.h:
(JSC::DFG::Node::targetBytecodeOffsetDuringParsing): Deleted.
(JSC::DFG::Node::targetBlock): Deleted.
(JSC::DFG::Node::branchData): Deleted.
* dfg/DFGTierUpCheckInjectionPhase.cpp:
(JSC::DFG::TierUpCheckInjectionPhase::run):
* ftl/FTLCapabilities.cpp:
(JSC::FTL::canCompile):
* ftl/FTLCompile.cpp:
(JSC::FTL::mmAllocateDataSection): Deleted.
* ftl/FTLJSCall.cpp:
(JSC::FTL::JSCall::JSCall):
* ftl/FTLJSCallBase.cpp:
(JSC::FTL::JSCallBase::link):
(JSC::FTL::JSCallBase::emit): Deleted.
* ftl/FTLJSCallBase.h:
* ftl/FTLJSCallVarargs.cpp:
(JSC::FTL::JSCallVarargs::JSCallVarargs): Deleted.
(JSC::FTL::JSCallVarargs::emit): Deleted.
* ftl/FTLJSTailCall.cpp: Removed.
* ftl/FTLJSTailCall.h: Removed.
* ftl/FTLLocation.h:
(JSC::FTL::Location::operator!):
(JSC::FTL::Location::isHashTableDeletedValue): Deleted.
* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::DFG::LowerDFGToLLVM::callPreflight):
(JSC::FTL::DFG::LowerDFGToLLVM::compileNode): Deleted.
(JSC::FTL::DFG::LowerDFGToLLVM::compileCallOrConstructVarargs): Deleted.
(JSC::FTL::DFG::LowerDFGToLLVM::compileLoadVarargs): Deleted.
(JSC::FTL::DFG::LowerDFGToLLVM::appendOSRExit): Deleted.
(JSC::FTL::DFG::LowerDFGToLLVM::setStrictInt52): Deleted.
(JSC::FTL::DFG::LowerDFGToLLVM::setInt52): Deleted.
(JSC::FTL::DFG::LowerDFGToLLVM::setJSValue): Deleted.
(JSC::FTL::DFG::LowerDFGToLLVM::setBoolean): Deleted.
(JSC::FTL::DFG::LowerDFGToLLVM::setStorage): Deleted.
(JSC::FTL::DFG::LowerDFGToLLVM::setDouble): Deleted.
(JSC::FTL::DFG::LowerDFGToLLVM::setInt32): Deleted.
* ftl/FTLState.h:
* jit/CallFrameShuffler.cpp:
(JSC::CallFrameShuffler::spill):
(JSC::CallFrameShuffler::emitDeltaCheck): Deleted.
(JSC::CallFrameShuffler::prepareForSlowPath): Deleted.
(JSC::CallFrameShuffler::prepareForTailCall): Deleted.
* jit/CallFrameShuffler.h:
(JSC::CallFrameShuffler::addNew):
(JSC::CallFrameShuffler::snapshot): Deleted.
(JSC::CallFrameShuffler::assumeCalleeIsCell): Deleted.
(JSC::CallFrameShuffler::newAsOld): Deleted.
(JSC::CallFrameShuffler::ensureRegister): Deleted.
(JSC::CallFrameShuffler::addressForOld): Deleted.
(JSC::CallFrameShuffler::isDangerNew): Deleted.
(JSC::CallFrameShuffler::updateDangerFrontier): Deleted.
* jit/CallFrameShuffler64.cpp:
(JSC::CallFrameShuffler::emitDisplace):
* jit/Reg.h:
(JSC::Reg::Reg): Deleted.
(JSC::Reg::isFPR): Deleted.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreChangeLog">branches/jsc-tailcall/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">branches/jsc-tailcall/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCorebytecodeValueRecoveryh">branches/jsc-tailcall/Source/JavaScriptCore/bytecode/ValueRecovery.h</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoredfgDFGNodeh">branches/jsc-tailcall/Source/JavaScriptCore/dfg/DFGNode.h</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoredfgDFGTierUpCheckInjectionPhasecpp">branches/jsc-tailcall/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreftlFTLCapabilitiescpp">branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLCapabilities.cpp</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreftlFTLCompilecpp">branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLCompile.cpp</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreftlFTLJSCallcpp">branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCall.cpp</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreftlFTLJSCallBasecpp">branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallBase.cpp</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreftlFTLJSCallBaseh">branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallBase.h</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreftlFTLJSCallVarargscpp">branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreftlFTLLocationh">branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLLocation.h</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp">branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreftlFTLStateh">branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLState.h</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCorejitCallFrameShufflercpp">branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler.cpp</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCorejitCallFrameShufflerh">branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler.h</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCorejitCallFrameShuffler64cpp">branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler64.cpp</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCorejitRegh">branches/jsc-tailcall/Source/JavaScriptCore/jit/Reg.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreftlFTLJSTailCallcpp">branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSTailCall.cpp</a></li>
<li><a href="#branchesjsctailcallSourceJavaScriptCoreftlFTLJSTailCallh">branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSTailCall.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchesjsctailcallSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/ChangeLog (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ChangeLog        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ChangeLog        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -1,5 +1,70 @@
</span><span class="cx"> 2015-08-27  Basile Clement  &lt;basile_clement@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Unreviewed, revert r189049 which should never have been committed.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * bytecode/ValueRecovery.h:
+        (JSC::ValueRecovery::inGPR): Deleted.
+        * dfg/DFGNode.h:
+        (JSC::DFG::Node::targetBytecodeOffsetDuringParsing): Deleted.
+        (JSC::DFG::Node::targetBlock): Deleted.
+        (JSC::DFG::Node::branchData): Deleted.
+        * dfg/DFGTierUpCheckInjectionPhase.cpp:
+        (JSC::DFG::TierUpCheckInjectionPhase::run):
+        * ftl/FTLCapabilities.cpp:
+        (JSC::FTL::canCompile):
+        * ftl/FTLCompile.cpp:
+        (JSC::FTL::mmAllocateDataSection): Deleted.
+        * ftl/FTLJSCall.cpp:
+        (JSC::FTL::JSCall::JSCall):
+        * ftl/FTLJSCallBase.cpp:
+        (JSC::FTL::JSCallBase::link):
+        (JSC::FTL::JSCallBase::emit): Deleted.
+        * ftl/FTLJSCallBase.h:
+        * ftl/FTLJSCallVarargs.cpp:
+        (JSC::FTL::JSCallVarargs::JSCallVarargs): Deleted.
+        (JSC::FTL::JSCallVarargs::emit): Deleted.
+        * ftl/FTLJSTailCall.cpp: Removed.
+        * ftl/FTLJSTailCall.h: Removed.
+        * ftl/FTLLocation.h:
+        (JSC::FTL::Location::operator!):
+        (JSC::FTL::Location::isHashTableDeletedValue): Deleted.
+        * ftl/FTLLowerDFGToLLVM.cpp:
+        (JSC::FTL::DFG::LowerDFGToLLVM::callPreflight):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileNode): Deleted.
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileCallOrConstructVarargs): Deleted.
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileLoadVarargs): Deleted.
+        (JSC::FTL::DFG::LowerDFGToLLVM::appendOSRExit): Deleted.
+        (JSC::FTL::DFG::LowerDFGToLLVM::setStrictInt52): Deleted.
+        (JSC::FTL::DFG::LowerDFGToLLVM::setInt52): Deleted.
+        (JSC::FTL::DFG::LowerDFGToLLVM::setJSValue): Deleted.
+        (JSC::FTL::DFG::LowerDFGToLLVM::setBoolean): Deleted.
+        (JSC::FTL::DFG::LowerDFGToLLVM::setStorage): Deleted.
+        (JSC::FTL::DFG::LowerDFGToLLVM::setDouble): Deleted.
+        (JSC::FTL::DFG::LowerDFGToLLVM::setInt32): Deleted.
+        * ftl/FTLState.h:
+        * jit/CallFrameShuffler.cpp:
+        (JSC::CallFrameShuffler::spill):
+        (JSC::CallFrameShuffler::emitDeltaCheck): Deleted.
+        (JSC::CallFrameShuffler::prepareForSlowPath): Deleted.
+        (JSC::CallFrameShuffler::prepareForTailCall): Deleted.
+        * jit/CallFrameShuffler.h:
+        (JSC::CallFrameShuffler::addNew):
+        (JSC::CallFrameShuffler::snapshot): Deleted.
+        (JSC::CallFrameShuffler::assumeCalleeIsCell): Deleted.
+        (JSC::CallFrameShuffler::newAsOld): Deleted.
+        (JSC::CallFrameShuffler::ensureRegister): Deleted.
+        (JSC::CallFrameShuffler::addressForOld): Deleted.
+        (JSC::CallFrameShuffler::isDangerNew): Deleted.
+        (JSC::CallFrameShuffler::updateDangerFrontier): Deleted.
+        * jit/CallFrameShuffler64.cpp:
+        (JSC::CallFrameShuffler::emitDisplace):
+        * jit/Reg.h:
+        (JSC::Reg::Reg): Deleted.
+        (JSC::Reg::isFPR): Deleted.
+
+2015-08-27  Basile Clement  &lt;basile_clement@apple.com&gt;
+
</ins><span class="cx">         Unreviewed, re-enable the FTL
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=146942
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -961,8 +961,6 @@
</span><span class="cx">                 623A37EC1B87A7C000754209 /* RegisterMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 623A37EB1B87A7BD00754209 /* RegisterMap.h */; };
</span><span class="cx">                 627673231B680C1E00FD9F2E /* CallMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 627673211B680C1E00FD9F2E /* CallMode.cpp */; };
</span><span class="cx">                 627673241B680C1E00FD9F2E /* CallMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 627673221B680C1E00FD9F2E /* CallMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                62774DAA1B8D4B190006F05A /* FTLJSTailCall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62774DA81B8D4B190006F05A /* FTLJSTailCall.cpp */; };
-                62774DAB1B8D4B190006F05A /* FTLJSTailCall.h in Headers */ = {isa = PBXBuildFile; fileRef = 62774DA91B8D4B190006F05A /* FTLJSTailCall.h */; };
</del><span class="cx">                 62D2D38F1ADF103F000206C1 /* FunctionRareData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62D2D38D1ADF103F000206C1 /* FunctionRareData.cpp */; };
</span><span class="cx">                 62D2D3901ADF103F000206C1 /* FunctionRareData.h in Headers */ = {isa = PBXBuildFile; fileRef = 62D2D38E1ADF103F000206C1 /* FunctionRareData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 62D755D41B84FB3D001801FA /* CallFrameShuffler64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62D755D31B84FB39001801FA /* CallFrameShuffler64.cpp */; };
</span><span class="lines">@@ -2685,8 +2683,6 @@
</span><span class="cx">                 623A37EB1B87A7BD00754209 /* RegisterMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterMap.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 627673211B680C1E00FD9F2E /* CallMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CallMode.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 627673221B680C1E00FD9F2E /* CallMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallMode.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                62774DA81B8D4B190006F05A /* FTLJSTailCall.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FTLJSTailCall.cpp; path = ftl/FTLJSTailCall.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
-                62774DA91B8D4B190006F05A /* FTLJSTailCall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLJSTailCall.h; path = ftl/FTLJSTailCall.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 62A9A29E1B0BED4800BD54CA /* DFGLazyNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGLazyNode.cpp; path = dfg/DFGLazyNode.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 62A9A29F1B0BED4800BD54CA /* DFGLazyNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGLazyNode.h; path = dfg/DFGLazyNode.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 62D2D38D1ADF103F000206C1 /* FunctionRareData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FunctionRareData.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -3771,8 +3767,6 @@
</span><span class="cx">                                 0FD1202E1A8AED12000F5280 /* FTLJSCallBase.h */,
</span><span class="cx">                                 0FD120311A8C85BD000F5280 /* FTLJSCallVarargs.cpp */,
</span><span class="cx">                                 0FD120321A8C85BD000F5280 /* FTLJSCallVarargs.h */,
</span><del>-                                62774DA81B8D4B190006F05A /* FTLJSTailCall.cpp */,
-                                62774DA91B8D4B190006F05A /* FTLJSTailCall.h */,
</del><span class="cx">                                 0F8F2B93172E049E007DBDA5 /* FTLLink.cpp */,
</span><span class="cx">                                 0F8F2B94172E049E007DBDA5 /* FTLLink.h */,
</span><span class="cx">                                 0FCEFADD180738C000472CE4 /* FTLLocation.cpp */,
</span><span class="lines">@@ -6193,7 +6187,6 @@
</span><span class="cx">                                 0F2B66F317B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructorInlines.h in Headers */,
</span><span class="cx">                                 0F2B66F417B6B5AB00A7AE3F /* JSGenericTypedArrayViewInlines.h in Headers */,
</span><span class="cx">                                 0F5A1274192D9FDF008764A3 /* DFGDoesGC.h in Headers */,
</span><del>-                                62774DAB1B8D4B190006F05A /* FTLJSTailCall.h in Headers */,
</del><span class="cx">                                 0F2B66F517B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototype.h in Headers */,
</span><span class="cx">                                 0F2B66F617B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototypeInlines.h in Headers */,
</span><span class="cx">                                 BC18C4210E16F5CD00B34460 /* JSGlobalObject.h in Headers */,
</span><span class="lines">@@ -7503,7 +7496,6 @@
</span><span class="cx">                                 142D6F0813539A2800B02E86 /* MarkedBlock.cpp in Sources */,
</span><span class="cx">                                 14D2F3DA139F4BE200491031 /* MarkedSpace.cpp in Sources */,
</span><span class="cx">                                 142D6F1113539A4100B02E86 /* MarkStack.cpp in Sources */,
</span><del>-                                62774DAA1B8D4B190006F05A /* FTLJSTailCall.cpp in Sources */,
</del><span class="cx">                                 14469DDF107EC7E700650446 /* MathObject.cpp in Sources */,
</span><span class="cx">                                 90213E3D123A40C200D422F3 /* MemoryStatistics.cpp in Sources */,
</span><span class="cx">                                 0FB5467D14F5CFD6002C2989 /* MethodOfGettingAValueProfile.cpp in Sources */,
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCorebytecodeValueRecoveryh"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/bytecode/ValueRecovery.h (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/bytecode/ValueRecovery.h        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/bytecode/ValueRecovery.h        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -31,7 +31,6 @@
</span><span class="cx"> #if ENABLE(JIT)
</span><span class="cx"> #include &quot;GPRInfo.h&quot;
</span><span class="cx"> #include &quot;FPRInfo.h&quot;
</span><del>-#include &quot;Reg.h&quot;
</del><span class="cx"> #endif
</span><span class="cx"> #include &quot;JSCJSValue.h&quot;
</span><span class="cx"> #include &quot;MacroAssembler.h&quot;
</span><span class="lines">@@ -85,17 +84,6 @@
</span><span class="cx">     bool isSet() const { return m_technique != DontKnow; }
</span><span class="cx">     bool operator!() const { return !isSet(); }
</span><span class="cx">     explicit operator bool() const { return isSet(); }
</span><del>-
-#if ENABLE(JIT)
-    static ValueRecovery inRegister(Reg reg, DataFormat dataFormat)
-    {
-        if (reg.isGPR())
-            return inGPR(reg.gpr(), dataFormat);
-
-        ASSERT(reg.isFPR());
-        return inFPR(reg.fpr(), dataFormat);
-    }
-#endif
</del><span class="cx">     
</span><span class="cx">     static ValueRecovery inGPR(MacroAssembler::RegisterID gpr, DataFormat dataFormat)
</span><span class="cx">     {
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoredfgDFGNodeh"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/dfg/DFGNode.h (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/dfg/DFGNode.h        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/dfg/DFGNode.h        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -1106,19 +1106,6 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    bool isFunctionTerminal()
-    {
-        switch (op()) {
-        case Return:
-        case TailCall:
-        case TailCallVarargs:
-        case TailCallForwardVarargs:
-            return true;
-        default:
-            return false;
-        }
-    }
-
</del><span class="cx">     unsigned targetBytecodeOffsetDuringParsing()
</span><span class="cx">     {
</span><span class="cx">         ASSERT(isJump());
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoredfgDFGTierUpCheckInjectionPhasecpp"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx">             }
</span><span class="cx">             
</span><span class="cx">             NodeAndIndex terminal = block-&gt;findTerminal();
</span><del>-            if (terminal.node-&gt;isFunctionTerminal()) {
</del><ins>+            if (terminal.node-&gt;op() == Return) {
</ins><span class="cx">                 insertionSet.insertNode(
</span><span class="cx">                     terminal.index, SpecNone, CheckTierUpAtReturn, terminal.node-&gt;origin);
</span><span class="cx">             }
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreftlFTLCapabilitiescpp"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLCapabilities.cpp (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLCapabilities.cpp        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLCapabilities.cpp        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -125,16 +125,10 @@
</span><span class="cx">     case NotifyWrite:
</span><span class="cx">     case StoreBarrier:
</span><span class="cx">     case Call:
</span><del>-    case TailCall:
-    case TailCallInlinedCaller:
</del><span class="cx">     case Construct:
</span><span class="cx">     case CallVarargs:
</span><del>-    case TailCallVarargs:
-    case TailCallVarargsInlinedCaller:
-    case ConstructVarargs:
</del><span class="cx">     case CallForwardVarargs:
</span><del>-    case TailCallForwardVarargs:
-    case TailCallForwardVarargsInlinedCaller:
</del><ins>+    case ConstructVarargs:
</ins><span class="cx">     case ConstructForwardVarargs:
</span><span class="cx">     case LoadVarargs:
</span><span class="cx">     case NativeCall:
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreftlFTLCompilecpp"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLCompile.cpp (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLCompile.cpp        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLCompile.cpp        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -615,22 +615,6 @@
</span><span class="cx">             call.link(vm, linkBuffer, state.finalizer-&gt;handleExceptionsLinkBuffer-&gt;entrypoint());
</span><span class="cx">         });
</span><span class="cx">     }
</span><del>-
-    adjustCallICsForStackmaps(state.jsTailCalls, recordMap);
-
-    for (unsigned i = state.jsTailCalls.size(); i--;) {
-        JSTailCall&amp; call = state.jsTailCalls[i];
-
-        CCallHelpers fastPathJIT(&amp;vm, codeBlock);
-        call.emit(*state.jitCode.get(), fastPathJIT);
-
-        char* startOfIC = bitwise_cast&lt;char*&gt;(generatedFunction) + call.m_instructionOffset;
-        size_t sizeOfIC = call.estimatedSize();
-
-        generateInlineIfPossibleOutOfLineIfNot(state, vm, codeBlock, fastPathJIT, startOfIC, sizeOfIC, &quot;tail call inline cache&quot;, [&amp;] (LinkBuffer&amp; linkBuffer, CCallHelpers&amp;, bool) {
-            call.link(vm, linkBuffer);
-        });
-    }
</del><span class="cx">     
</span><span class="cx">     RepatchBuffer repatchBuffer(codeBlock);
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreftlFTLJSCallcpp"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCall.cpp (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCall.cpp        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCall.cpp        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx">     , m_stackmapID(stackmapID)
</span><span class="cx">     , m_instructionOffset(0)
</span><span class="cx"> {
</span><del>-    ASSERT(node-&gt;op() == Call || node-&gt;op() == Construct || node-&gt;op() == TailCallInlinedCaller);
</del><ins>+    ASSERT(node-&gt;op() == Call || node-&gt;op() == Construct);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSCall::emit(CCallHelpers&amp; jit, unsigned stackSize)
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreftlFTLJSCallBasecpp"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallBase.cpp (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallBase.cpp        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallBase.cpp        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -65,8 +65,6 @@
</span><span class="cx">     m_slowCall = jit.nearCall();
</span><span class="cx">     
</span><span class="cx">     done.link(&amp;jit);
</span><del>-
-    m_callLinkInfo-&gt;setUpCall(m_type, m_origin, GPRInfo::regT0);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSCallBase::link(VM&amp; vm, LinkBuffer&amp; linkBuffer)
</span><span class="lines">@@ -74,8 +72,9 @@
</span><span class="cx">     linkBuffer.link(
</span><span class="cx">         m_slowCall, FunctionPtr(vm.getCTIStub(linkCallThunkGenerator).code().executableAddress()));
</span><span class="cx"> 
</span><del>-    m_callLinkInfo-&gt;setCallLocations(linkBuffer.locationOfNearCall(m_slowCall),
-        linkBuffer.locationOf(m_targetToCheck), linkBuffer.locationOfNearCall(m_fastCall));
</del><ins>+    m_callLinkInfo-&gt;setUpCallFromFTL(m_type, m_origin, linkBuffer.locationOfNearCall(m_slowCall),
+        linkBuffer.locationOf(m_targetToCheck), linkBuffer.locationOfNearCall(m_fastCall),
+        GPRInfo::regT0);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::FTL
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreftlFTLJSCallBaseh"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallBase.h (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallBase.h        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallBase.h        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">     void emit(CCallHelpers&amp;);
</span><span class="cx">     void link(VM&amp;, LinkBuffer&amp;);
</span><span class="cx">     
</span><del>-protected:
</del><ins>+private:
</ins><span class="cx">     CallLinkInfo::CallType m_type;
</span><span class="cx">     CodeOrigin m_origin;
</span><span class="cx">     CCallHelpers::DataLabelPtr m_targetToCheck;
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreftlFTLJSCallVarargscpp"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSCallVarargs.cpp        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -57,7 +57,6 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(
</span><span class="cx">         node-&gt;op() == CallVarargs || node-&gt;op() == CallForwardVarargs
</span><del>-        || node-&gt;op() == TailCallVarargsInlinedCaller || node-&gt;op() == TailCallForwardVarargsInlinedCaller
</del><span class="cx">         || node-&gt;op() == ConstructVarargs || node-&gt;op() == ConstructForwardVarargs);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -84,13 +83,11 @@
</span><span class="cx">     
</span><span class="cx">     switch (m_node-&gt;op()) {
</span><span class="cx">     case CallVarargs:
</span><del>-    case TailCallVarargsInlinedCaller:
</del><span class="cx">     case ConstructVarargs:
</span><span class="cx">         argumentsGPR = GPRInfo::argumentGPR1;
</span><span class="cx">         thisGPR = GPRInfo::argumentGPR2;
</span><span class="cx">         break;
</span><span class="cx">     case CallForwardVarargs:
</span><del>-    case TailCallForwardVarargsInlinedCaller:
</del><span class="cx">     case ConstructForwardVarargs:
</span><span class="cx">         thisGPR = GPRInfo::argumentGPR1;
</span><span class="cx">         forwarding = true;
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreftlFTLJSTailCallcpp"></a>
<div class="delfile"><h4>Deleted: branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSTailCall.cpp (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSTailCall.cpp        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSTailCall.cpp        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -1,319 +0,0 @@
</span><del>-/*
- * 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
- * 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;FTLJSTailCall.h&quot;
-
-#if ENABLE(FTL_JIT)
-
-#include &quot;CallFrameShuffler.h&quot;
-#include &quot;DFGNode.h&quot;
-#include &quot;LinkBuffer.h&quot;
-#include &quot;FTLJITCode.h&quot;
-#include &quot;FTLLocation.h&quot;
-#include &quot;FTLStackMaps.h&quot;
-
-namespace JSC { namespace FTL {
-
-using namespace DFG;
-
-static FTL::Location getRegisterWithAddend(const ExitValue&amp; value, StackMaps::Record&amp; record, StackMaps&amp; stackmaps)
-{
-    if (value.kind() != ExitValueArgument)
-        return { };
-
-    auto location =
-        FTL::Location::forStackmaps(&amp;stackmaps, record.locations[value.exitArgument().argument()]);
-
-    if (location.kind() != Location::Register || !location.addend())
-        return { };
-
-    RELEASE_ASSERT(location.isGPR());
-    return location;
-}
-
-static ValueRecovery recoveryFor(const ExitValue&amp; value, StackMaps::Record&amp; record, StackMaps&amp; stackmaps)
-{
-    switch (value.kind()) {
-    case ExitValueConstant:
-        return ValueRecovery::constant(value.constant());
-
-    case ExitValueArgument: {
-        auto location =
-            FTL::Location::forStackmaps(&amp;stackmaps, record.locations[value.exitArgument().argument()]);
-        auto format = value.exitArgument().format();
-
-        switch (location.kind()) {
-        case Location::Register:
-            // We handle the addend outside
-            return ValueRecovery::inRegister(location.dwarfReg().reg(), format);
-
-        case Location::Indirect:
-            // Oh LLVM, you crazy...
-            RELEASE_ASSERT(location.dwarfReg().reg() == Reg(MacroAssembler::framePointerRegister));
-            RELEASE_ASSERT(!(location.offset() % sizeof(void*)));
-            return ValueRecovery::displacedInJSStack(VirtualRegister { static_cast&lt;int&gt;(location.offset() / sizeof(void*)) }, format);
-
-        case Location::Constant:
-            return ValueRecovery::constant(JSValue::decode(location.constant()));
-
-        default:
-            RELEASE_ASSERT_NOT_REACHED();
-        }
-    }
-
-    case ExitValueInJSStack:
-        return ValueRecovery::displacedInJSStack(value.virtualRegister(), DataFormatJS);
-
-    case ExitValueInJSStackAsInt32:
-        return ValueRecovery::displacedInJSStack(value.virtualRegister(), DataFormatInt32);
-
-    case ExitValueInJSStackAsInt52:
-        return ValueRecovery::displacedInJSStack(value.virtualRegister(), DataFormatInt52);
-
-    case ExitValueInJSStackAsDouble:
-        return ValueRecovery::displacedInJSStack(value.virtualRegister(), DataFormatDouble);
-
-    default:
-        RELEASE_ASSERT_NOT_REACHED();
-    }
-}
-
-// This computes an estimated size (in bits) for the sequence of
-// instructions required to load, box, and store a value of a given
-// type, assuming no spilling is required.
-static uint32_t sizeFor(DataFormat format)
-{
-    switch (format) {
-    case DataFormatInt32:
-        // Boxing is zero-extending and tagging
-#if CPU(X86_64)
-        return 48 + sizeFor(DataFormatJS);
-#else
-        return sizeOfZeroExtend32 + sizeOfOrImm64 + sizeFor(DataFormatJS);
-#endif
-
-    case DataFormatInt52:
-        // Boxing is first a conversion to StrictInt52, then
-        // StrictInt52 boxing
-#if CPU(X86_64)
-        return 16 + sizeFor(DataFormatStrictInt52);
-#else
-        return sizeOfShiftImm32 + sizeFor(DataFormatStrictInt52);
-#endif
-
-    case DataFormatStrictInt52:
-        // Boxing is first a conversion to double, then double boxing
-#if CPU(X86_64)
-        return 16 + sizeFor(DataFormatDouble);
-#else
-        return sizeOfConvertInt64ToDouble + sizeFor(DataFormatDouble);
-#endif
-
-    case DataFormatDouble:
-        // Boxing is purifying, moving to a GPR, and tagging
-#if CPU(X86_64)
-        return 96 + sizeFor(DataFormatJS);
-#else
-        return sizeOfPurifyNaN + sizeOfSubImm64 + sizeOfMoveDoubleTo64 + sizeFor(DataFormatJS);
-#endif
-
-    case DataFormatBoolean:
-        // Boxing is adding ValueFalse
-#if CPU(X86_64)
-        return 16 + sizeFor(DataFormatJS);
-#else
-        return sizeOfAddImm32 + sizeFor(DataFormatJS);
-#endif
-
-    case DataFormatJS:
-        // We will load (in a GPR or FPR) then store the value
-#if CPU(X86_64)
-        return 32;
-#else
-        return sizeOfLoad + sizeOfStore;
-#endif
-
-    default:
-        RELEASE_ASSERT_NOT_REACHED();
-    }
-}
-
-JSTailCall::JSTailCall(unsigned stackmapID, Node* node, ExitArgumentList exitArguments,
-    ExitValue callee, Vector&lt;ExitValue&gt; arguments)
-    : JSCallBase(CallLinkInfo::TailCall, node-&gt;origin.semantic)
-    , m_stackmapID(stackmapID)
-    , m_callee { WTF::move(callee) }
-    , m_arguments { WTF::move(arguments) }
-    , m_instructionOffset(0)
-    , m_exitArguments { WTF::move(exitArguments) }
-{
-    ASSERT(node-&gt;op() == TailCall);
-    ASSERT(numArguments() == node-&gt;numChildren() - 1);
-
-    // Estimate the size of the inline cache, assuming that every
-    // value goes from the stack to the stack (in practice, this will
-    // seldom be true, giving us some amount of leeway) and that no
-    // spilling will occur (in practice, this will almost always be
-    // true).
-
-    // We first compute the new frame base and load the fp/lr
-    // registers final values. On debug builds, we also need to
-    // account for the fp-sp delta check (twice: fast and slow path).
-#if CPU(X86_64)
-    m_estimatedSize = 224;
-#if !ASSERT_DISABLED
-    m_estimatedSize += 192;
-#  endif
-#elif CPU(ARM64)
-    m_estimatedSize = 100;
-#if !ASSERT_DISABLED
-    m_estimatedSize += 50;
-#  endif
-#else
-    UNREACHABLE_FOR_PLATFORM();
-#endif
-
-    // The callee will probably be loaded only once since we need it
-    // for the slow path check, but it'll be stored twice. Arguments
-    // will probably be loaded &amp; stored twice (fast &amp; slow)
-    m_estimatedSize += 2 * sizeFor(m_callee.dataFormat());
-    for (ExitValue&amp; arg : m_arguments)
-        m_estimatedSize += 2 * sizeFor(arg.dataFormat());
-
-    // We also have the slow path check, the two calls, and the
-    // CallLinkInfo load for the slow path
-#if CPU(X86_64)
-    m_estimatedSize += 80;
-#else
-    m_estimatedSize += sizeOfCall + sizeOfJump + sizeOfLoad + sizeOfSlowPathCheck;
-#endif
-}
-
-void JSTailCall::emit(JITCode&amp; jitCode, CCallHelpers&amp; jit)
-{
-    StackMaps::Record* record { nullptr };
-    
-    for (unsigned i = jitCode.stackmaps.records.size(); i--;) {
-        record = &amp;jitCode.stackmaps.records[i];
-        if (record-&gt;patchpointID == m_stackmapID)
-            break;
-    }
-
-    RELEASE_ASSERT(record-&gt;patchpointID == m_stackmapID);
-
-    m_callLinkInfo = jit.codeBlock()-&gt;addCallLinkInfo();
-
-    CallFrameShuffleData shuffleData;
-
-    // LLVM has this awful thing that 
-
-    HashMap&lt;Reg, Vector&lt;std::pair&lt;ValueRecovery*, int32_t&gt;&gt;&gt; withAddend;
-    size_t numAddends { 0 };
-    shuffleData.callee = recoveryFor(m_callee, *record, jitCode.stackmaps);
-    if (FTL::Location addend = getRegisterWithAddend(m_callee, *record, jitCode.stackmaps)) {
-        withAddend.add(
-            addend.dwarfReg().reg(),
-            Vector&lt;std::pair&lt;ValueRecovery*, int32_t&gt;&gt;()).iterator-&gt;value.append(
-                std::make_pair(&amp;shuffleData.callee, addend.addend()));
-        numAddends++;
-    }
-
-    for (size_t i = 0; i &lt; numArguments(); ++i) {
-        shuffleData.args[i] = recoveryFor(m_arguments[i], *record, jitCode.stackmaps);
-        if (FTL::Location addend = getRegisterWithAddend(m_arguments[i], *record, jitCode.stackmaps)) {
-            withAddend.add(
-                addend.dwarfReg().reg(),
-                Vector&lt;std::pair&lt;ValueRecovery*, int32_t&gt;&gt;()).iterator-&gt;value.append(
-                    std::make_pair(&amp;shuffleData.args[i], addend.addend()));
-            numAddends++;
-        }
-    }
-
-    numAddends = WTF::roundUpToMultipleOf(stackAlignmentRegisters(), numAddends);
-
-    shuffleData.numLocals = static_cast&lt;int64_t&gt;(jitCode.stackmaps.stackSize()) / sizeof(void*) - 1 + numAddends;
-
-    ASSERT(!numAddends == withAddend.isEmpty());
-
-    if (!withAddend.isEmpty()) {
-        jit.subPtr(MacroAssembler::TrustedImm32(numAddends * sizeof(void*)), MacroAssembler::stackPointerRegister);
-        VirtualRegister spillBase { 1 - static_cast&lt;int&gt;(shuffleData.numLocals) };
-        for (auto entry : withAddend) {
-            for (auto pair : entry.value) {
-                ASSERT(numAddends &gt; 0);
-                VirtualRegister spillSlot { spillBase + --numAddends };
-                ASSERT(entry.key.isGPR());
-                jit.addPtr(MacroAssembler::TrustedImm32(pair.second), entry.key.gpr());
-                jit.storePtr(entry.key.gpr(), CCallHelpers::addressFor(spillSlot));
-                jit.subPtr(MacroAssembler::TrustedImm32(pair.second), entry.key.gpr());
-                *pair.first = ValueRecovery::displacedInJSStack(spillSlot, pair.first-&gt;dataFormat());
-            }
-        }
-        ASSERT(numAddends &lt; stackAlignmentRegisters());
-    }
-
-    shuffleData.args.resize(numArguments());
-    for (size_t i = 0; i &lt; numArguments(); ++i)
-        shuffleData.args[i] = recoveryFor(m_arguments[i], *record, jitCode.stackmaps);
-
-    shuffleData.setupCalleeSaveRegisters(jit.codeBlock());
-
-    CallFrameShuffler fastPathShuffler(jit, shuffleData);
-
-    fastPathShuffler.pickCalleeJSValueRegs();
-    GPRReg calleeGPR { fastPathShuffler.calleeJSValueRegs().gpr() };
-    fastPathShuffler.restoreGPR(calleeGPR);
-
-    CCallHelpers::Jump slowPath = jit.branchPtrWithPatch(
-        CCallHelpers::NotEqual, calleeGPR, m_targetToCheck,
-        CCallHelpers::TrustedImmPtr(0));
-
-    fastPathShuffler.clearCalleeJSValueRegs();
-    shuffleData = fastPathShuffler.snapshot();
-    m_callLinkInfo-&gt;setFrameShuffleData(shuffleData);
-    fastPathShuffler.prepareForTailCall();
-
-    m_fastCall = jit.nearTailCall();
-
-    slowPath.link(&amp;jit);
-
-    CallFrameShuffler slowPathShuffler(jit, shuffleData);
-    slowPathShuffler.setCalleeJSValueRegs(JSValueRegs { GPRInfo::regT0 });
-    slowPathShuffler.prepareForSlowPath();
-
-    jit.move(CCallHelpers::TrustedImmPtr(m_callLinkInfo), GPRInfo::regT2);
-
-    m_slowCall = jit.nearCall();
-
-    jit.abortWithReason(JITDidReturnFromTailCall);
-
-    m_callLinkInfo-&gt;setUpCall(m_type, m_origin, calleeGPR);
-}
-
-} } // namespace JSC::FTL
-
-#endif // ENABLE(FTL_JIT)
-
</del></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreftlFTLJSTailCallh"></a>
<div class="delfile"><h4>Deleted: branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSTailCall.h (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSTailCall.h        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLJSTailCall.h        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -1,76 +0,0 @@
</span><del>-/*
- * 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
- * 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 FTLJSTailCall_h
-#define FTLJSTailCall_h
-
-#if ENABLE(FTL_JIT)
-
-#include &quot;FTLExitArgumentList.h&quot;
-#include &quot;FTLExitValue.h&quot;
-#include &quot;FTLJSCallBase.h&quot;
-
-namespace JSC {
-
-namespace DFG {
-struct Node;
-}
-
-namespace FTL {
-
-class JSTailCall : public JSCallBase {
-public:
-    JSTailCall(unsigned stackmapID, DFG::Node*, ExitArgumentList, ExitValue callee, Vector&lt;ExitValue&gt; arguments);
-
-    void emit(JITCode&amp; jitCode, CCallHelpers&amp;);
-    
-    unsigned stackmapID() const { return m_stackmapID; }
-
-    unsigned estimatedSize() const { return m_estimatedSize; }
-
-    unsigned numArguments() const { return m_arguments.size(); }
-
-    bool operator&lt;(const JSTailCall&amp; other) const
-    {
-        return m_instructionOffset &lt; other.m_instructionOffset;
-    }
-    
-private:
-    unsigned m_stackmapID;
-    ExitValue m_callee;
-    Vector&lt;ExitValue&gt; m_arguments;
-    unsigned m_estimatedSize;
-
-public:
-    uint32_t m_instructionOffset;
-    ExitArgumentList m_exitArguments;
-};
-
-} } // namespace JSC::FTL
-
-#endif // ENABLE(FTL_JIT)
-
-#endif // FTLJSTailCall_h
-
</del></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreftlFTLLocationh"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLLocation.h (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLLocation.h        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLLocation.h        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -120,9 +120,7 @@
</span><span class="cx">         return u.constant;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    explicit operator bool() const { return kind() != Unprocessed || u.variable.offset; }
-
-    bool operator!() const { return !static_cast&lt;bool&gt;(*this); }
</del><ins>+    bool operator!() const { return kind() == Unprocessed &amp;&amp; !u.variable.offset; }
</ins><span class="cx">     
</span><span class="cx">     bool isHashTableDeletedValue() const { return kind() == Unprocessed &amp;&amp; u.variable.offset; }
</span><span class="cx">     
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -742,17 +742,11 @@
</span><span class="cx">             compileLogicalNot();
</span><span class="cx">             break;
</span><span class="cx">         case Call:
</span><del>-        case TailCallInlinedCaller:
</del><span class="cx">         case Construct:
</span><span class="cx">             compileCallOrConstruct();
</span><span class="cx">             break;
</span><del>-        case TailCall:
-            compileTailCall();
-            break;
</del><span class="cx">         case CallVarargs:
</span><span class="cx">         case CallForwardVarargs:
</span><del>-        case TailCallVarargsInlinedCaller:
-        case TailCallForwardVarargsInlinedCaller:
</del><span class="cx">         case ConstructVarargs:
</span><span class="cx">         case ConstructForwardVarargs:
</span><span class="cx">             compileCallOrConstructVarargs();
</span><span class="lines">@@ -4359,31 +4353,6 @@
</span><span class="cx">         
</span><span class="cx">         setJSValue(call);
</span><span class="cx">     }
</span><del>-
-    void compileTailCall()
-    {
-        int numArgs = m_node-&gt;numChildren() - 1;
-        ExitArgumentList exitArguments;
-        ExitValue callee =
-            exitValueForTailCall(exitArguments, m_graph.varArgChild(m_node, 0).node());
-        Vector&lt;ExitValue&gt; callArguments(numArgs);
-        
-        for (int i = 0; i &lt; numArgs; ++i) {
-            callArguments[i] =
-                exitValueForTailCall(exitArguments, m_graph.varArgChild(m_node, 1 + i).node());
-        }
-
-        JSTailCall tailCall(m_stackmapIDs++, m_node,
-            WTF::move(exitArguments), WTF::move(callee), WTF::move(callArguments));
-
-        tailCall.m_exitArguments.insert(0, m_out.constInt32(tailCall.estimatedSize()));
-        tailCall.m_exitArguments.insert(0, m_out.constInt64(tailCall.stackmapID()));
-
-        m_out.call(m_out.stackmapIntrinsic(), tailCall.m_exitArguments);
-        m_out.unreachable();
-
-        m_ftlState.jsTailCalls.append(tailCall);
-    }
</del><span class="cx">     
</span><span class="cx">     void compileCallOrConstructVarargs()
</span><span class="cx">     {
</span><span class="lines">@@ -4394,12 +4363,10 @@
</span><span class="cx">         
</span><span class="cx">         switch (m_node-&gt;op()) {
</span><span class="cx">         case CallVarargs:
</span><del>-        case TailCallVarargsInlinedCaller:
</del><span class="cx">         case ConstructVarargs:
</span><span class="cx">             jsArguments = lowJSValue(m_node-&gt;child2());
</span><span class="cx">             break;
</span><span class="cx">         case CallForwardVarargs:
</span><del>-        case TailCallForwardVarargsInlinedCaller:
</del><span class="cx">         case ConstructForwardVarargs:
</span><span class="cx">             break;
</span><span class="cx">         default:
</span><span class="lines">@@ -8173,14 +8140,7 @@
</span><span class="cx">     }
</span><span class="cx">     void callPreflight()
</span><span class="cx">     {
</span><del>-        CodeOrigin codeOrigin = m_node-&gt;origin.semantic;
-
-        if (m_node-&gt;op() == TailCallInlinedCaller
-            || m_node-&gt;op() == TailCallVarargsInlinedCaller
-            || m_node-&gt;op() == TailCallForwardVarargsInlinedCaller)
-            codeOrigin =*codeOrigin.inlineCallFrame-&gt;getCallerSkippingDeadFrames();
-
-        callPreflight(codeOrigin);
</del><ins>+        callPreflight(m_node-&gt;origin.semantic);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     void callCheck()
</span><span class="lines">@@ -8441,46 +8401,13 @@
</span><span class="cx">         DFG_CRASH(m_graph, m_node, toCString(&quot;Cannot find value for node: &quot;, node).data());
</span><span class="cx">         return ExitValue::dead();
</span><span class="cx">     }
</span><del>-
</del><ins>+    
</ins><span class="cx">     ExitValue exitArgument(ExitArgumentList&amp; arguments, DataFormat format, LValue value)
</span><span class="cx">     {
</span><span class="cx">         ExitValue result = ExitValue::exitArgument(ExitArgument(format, arguments.size()));
</span><span class="cx">         arguments.append(value);
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><del>-
-    ExitValue exitValueForTailCall(ExitArgumentList&amp; arguments, Node* node)
-    {
-        ASSERT(node-&gt;shouldGenerate());
-        ASSERT(node-&gt;hasResult());
-
-        switch (node-&gt;op()) {
-        case JSConstant:
-        case Int52Constant:
-        case DoubleConstant:
-                return ExitValue::constant(node-&gt;asJSValue());
-
-        default:
-                break;
-        }
-
-        LoweredNodeValue value = m_jsValueValues.get(node);
-        if (isValid(value))
-            return exitArgument(arguments, DataFormatJS, value.value());
-
-        value = m_int32Values.get(node);
-        if (isValid(value))
-            return exitArgument(arguments, DataFormatInt32, value.value());
-
-        value = m_booleanValues.get(node);
-        if (isValid(value)) {
-            LValue valueToPass = m_out.zeroExt(value.value(), m_out.int32);
-            return exitArgument(arguments, DataFormatBoolean, valueToPass);
-        }
-
-        // Doubles and Int52 have been converted by ValueRep()
-        DFG_CRASH(m_graph, m_node, toCString(&quot;Cannot find value for node: &quot;, node).data());
-    }
</del><span class="cx">     
</span><span class="cx">     bool doesKill(Edge edge)
</span><span class="cx">     {
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCoreftlFTLStateh"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLState.h (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLState.h        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/ftl/FTLState.h        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -37,7 +37,6 @@
</span><span class="cx"> #include &quot;FTLJITFinalizer.h&quot;
</span><span class="cx"> #include &quot;FTLJSCall.h&quot;
</span><span class="cx"> #include &quot;FTLJSCallVarargs.h&quot;
</span><del>-#include &quot;FTLJSTailCall.h&quot;
</del><span class="cx"> #include &quot;FTLStackMaps.h&quot;
</span><span class="cx"> #include &quot;FTLState.h&quot;
</span><span class="cx"> #include &lt;wtf/Noncopyable.h&gt;
</span><span class="lines">@@ -80,7 +79,6 @@
</span><span class="cx">     SegmentedVector&lt;CheckInDescriptor&gt; checkIns;
</span><span class="cx">     Vector&lt;JSCall&gt; jsCalls;
</span><span class="cx">     Vector&lt;JSCallVarargs&gt; jsCallVarargses;
</span><del>-    Vector&lt;JSTailCall&gt; jsTailCalls;
</del><span class="cx">     Vector&lt;CString&gt; codeSectionNames;
</span><span class="cx">     Vector&lt;CString&gt; dataSectionNames;
</span><span class="cx">     void* unwindDataSection;
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCorejitCallFrameShufflercpp"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler.cpp (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler.cpp        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler.cpp        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -248,26 +248,17 @@
</span><span class="cx">     ASSERT(cachedRecovery.recovery().isInRegisters());
</span><span class="cx"> 
</span><span class="cx">     VirtualRegister spillSlot { 0 };
</span><del>-    for (VirtualRegister slot = firstOld(); slot &gt;= lastOld(); slot += 1) {
-        if (slot &gt;= newAsOld(firstNew()))
-            break;
-
</del><ins>+    for (VirtualRegister slot = firstOld(); slot &lt;= lastOld(); slot -= 1) {
+        ASSERT(slot &lt; newAsOld(firstNew()));
</ins><span class="cx">         if (getOld(slot))
</span><span class="cx">             continue;
</span><span class="cx"> 
</span><span class="cx">         spillSlot = slot;
</span><span class="cx">         break;
</span><span class="cx">     }
</span><del>-    // We must have enough slots to be able to fit the whole callee's
-    // frame for the slow path - unless we are in the FTL. In that
-    // case, we are allowed to extend the frame *once*, since we are
-    // guaranteed to have enough available space for that.
-    if (spillSlot &gt;= newAsOld(firstNew()) || !spillSlot.isLocal()) {
-        RELEASE_ASSERT(!m_didExtendFrame);
-        extendFrameIfNeeded();
-        spill(cachedRecovery);
-        return;
-    }
</del><ins>+    // We must have enough slots to be able to fit the whole
+    // callee's frame for the slow path.
+    RELEASE_ASSERT(spillSlot.isLocal());
</ins><span class="cx"> 
</span><span class="cx">     if (verbose)
</span><span class="cx">         dataLog(&quot;   * Spilling &quot;, cachedRecovery.recovery(), &quot; into &quot;, spillSlot, &quot;\n&quot;);
</span><span class="lines">@@ -297,40 +288,11 @@
</span><span class="cx">         dataLog(&quot;  Skipping the fp-sp delta check since there is too much pressure&quot;);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CallFrameShuffler::extendFrameIfNeeded()
-{
-    ASSERT(!m_didExtendFrame);
-    ASSERT(!isSlowPath());
-
-    VirtualRegister lastRead { lastOld() };
-    for (; lastRead &gt;= firstOld(); lastRead -= 1) {
-        if (getOld(lastRead))
-            break;
-    }
-    size_t availableSize = static_cast&lt;size_t&gt;(lastOld().offset() - lastRead.offset());
-
-    if (availableSize &lt; m_newFrame.size()) {
-        size_t delta = m_newFrame.size() - availableSize;
-        m_oldFrame.grow(m_oldFrame.size() + delta);
-        m_jit.subPtr(MacroAssembler::TrustedImm32(delta), MacroAssembler::stackPointerRegister);
-
-        if (!isUndecided())
-            m_oldFrameOffset = numLocals();
-    }
-
-    m_didExtendFrame = true;
-}
-
</del><span class="cx"> void CallFrameShuffler::prepareForSlowPath()
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isUndecided());
</span><span class="cx">     emitDeltaCheck();
</span><span class="cx"> 
</span><del>-    // When coming from the FTL, we need to extend the frame. In other
-    // cases, we may end up extending the frame if we previously
-    // spilled things (e.g. in polymorphic cache).
-    extendFrameIfNeeded();
-
</del><span class="cx">     m_frameDelta = numLocals() + JSStack::CallerFrameAndPCSize;
</span><span class="cx">     m_newFrameBase = MacroAssembler::stackPointerRegister;
</span><span class="cx">     m_newFrameOffset = -JSStack::CallerFrameAndPCSize;
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCorejitCallFrameShufflerh"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler.h (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler.h        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler.h        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -160,21 +160,6 @@
</span><span class="cx">         m_lockedRegisters.clear(gpr);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void restoreGPR(GPRReg gpr)
-    {
-        if (!m_newRegisters[gpr])
-            return;
-
-        ensureGPR();
-#if USE(JSVALUE32_64)
-        GPRReg tempGPR { getFreeGPR() };
-        lockGPR(tempGPR);
-        ensureGPR();
-        releaseGPR(tempGPR);
-#endif
-        emitDisplace(*m_newRegisters[gpr]);
-    }
-
</del><span class="cx">     // You can only take a snapshot if the recovery has not started
</span><span class="cx">     // yet. The only operations that are valid before taking a
</span><span class="cx">     // snapshot are lockGPR(), acquireGPR() and releaseGPR().
</span><span class="lines">@@ -207,48 +192,6 @@
</span><span class="cx">         return WTF::move(data);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-#if ENABLE(FTL_JIT)
-    void pickCalleeJSValueRegs()
-    {
-        ASSERT(isUndecided());
-        CachedRecovery* cachedRecovery { getNew(VirtualRegister(JSStack::Callee)) };
-        ASSERT(cachedRecovery);
-        if (cachedRecovery-&gt;wantedJSValueRegs())
-            return;
-
-        if (cachedRecovery-&gt;recovery().isInGPR()) {
-            GPRReg current { cachedRecovery-&gt;recovery().gpr() };
-            if (!m_newRegisters[current]) {
-                m_newRegisters[current] = cachedRecovery;
-                cachedRecovery-&gt;setWantedJSValueRegs(JSValueRegs { current });
-                return;
-            }
-        }
-
-        ensureTempGPR();
-        GPRReg gpr { getFreeTempGPR() };
-        m_newRegisters[gpr] = cachedRecovery;
-        cachedRecovery-&gt;setWantedJSValueRegs(JSValueRegs { gpr });
-    }
-
-    void clearCalleeJSValueRegs()
-    {
-        ASSERT(isUndecided());
-        CachedRecovery* cachedRecovery { getNew(VirtualRegister(JSStack::Callee)) };
-        ASSERT(cachedRecovery);
-        if (!cachedRecovery-&gt;wantedJSValueRegs())
-            return;
-
-        m_newRegisters[cachedRecovery-&gt;wantedJSValueRegs().gpr()] = nullptr;
-        cachedRecovery-&gt;setWantedJSValueRegs(JSValueRegs());
-    }
-
-    JSValueRegs calleeJSValueRegs() const
-    {
-        return getNew(VirtualRegister(JSStack::Callee))-&gt;wantedJSValueRegs();
-    }
-#endif
-
</del><span class="cx">     // Ask the shuffler to put the callee into some registers once the
</span><span class="cx">     // shuffling is done. You should call this before any of the
</span><span class="cx">     // prepare() methods, and must not take a snapshot afterwards, as
</span><span class="lines">@@ -453,10 +396,6 @@
</span><span class="cx">         return reg &gt;= firstOld() &amp;&amp; reg &lt;= lastOld();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    bool m_didExtendFrame { false };
-
-    void extendFrameIfNeeded();
-
</del><span class="cx">     // This stores, for each slot in the new frame, information about
</span><span class="cx">     // the recovery for the value that should eventually go into that
</span><span class="cx">     // slot.
</span><span class="lines">@@ -575,14 +514,6 @@
</span><span class="cx">         return nonTemp;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    GPRReg getFreeTempGPR() const
-    {
-        Reg freeTempGPR { getFreeRegister([this] (Reg reg) { return reg.isGPR() &amp;&amp; !m_newRegisters[reg]; }) };
-        if (!freeTempGPR)
-            return InvalidGPRReg;
-        return freeTempGPR.gpr();
-    }
-
</del><span class="cx">     GPRReg getFreeGPR() const
</span><span class="cx">     {
</span><span class="cx">         Reg freeGPR { getFreeRegister([] (Reg reg) { return reg.isGPR(); }) };
</span><span class="lines">@@ -678,31 +609,6 @@
</span><span class="cx">             });
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void ensureTempGPR()
-    {
-        if (getFreeTempGPR() != InvalidGPRReg)
-            return;
-
-        if (verbose)
-            dataLog(&quot;  Finding a temp GPR to spill\n&quot;);
-        ensureRegister(
-            [this] (const CachedRecovery&amp; cachedRecovery) {
-                if (cachedRecovery.recovery().isInGPR()) {
-                    return !m_lockedRegisters.get(cachedRecovery.recovery().gpr()) 
-                        &amp;&amp; !m_newRegisters[cachedRecovery.recovery().gpr()];
-                }
-#if USE(JSVALUE32_64)
-                if (cachedRecovery.recovery().technique() == InPair) {
-                    return !m_lockedRegisters.get(cachedRecovery.recovery().tagGPR())
-                        &amp;&amp; !m_lockedRegisters.get(cachedRecovery.recovery().payloadGPR())
-                        &amp;&amp; !m_newRegisters[cachedRecovery.recovery().tagGPR()]
-                        &amp;&amp; !m_newRegisters[cachedRecovery.recovery().payloadGPR()];
-                }
-#endif
-                return false;
-            });
-    }
-
</del><span class="cx">     void ensureGPR()
</span><span class="cx">     {
</span><span class="cx">         if (getFreeGPR() != InvalidGPRReg)
</span><span class="lines">@@ -757,24 +663,16 @@
</span><span class="cx">     {
</span><span class="cx">         ASSERT(jsValueRegs &amp;&amp; !getNew(jsValueRegs));
</span><span class="cx">         CachedRecovery* cachedRecovery = addCachedRecovery(recovery);
</span><ins>+        ASSERT(!cachedRecovery-&gt;wantedJSValueRegs());
+        cachedRecovery-&gt;setWantedJSValueRegs(jsValueRegs);
</ins><span class="cx"> #if USE(JSVALUE64)
</span><del>-        if (cachedRecovery-&gt;wantedJSValueRegs())
-            m_newRegisters[cachedRecovery-&gt;wantedJSValueRegs().gpr()] = nullptr;
</del><span class="cx">         m_newRegisters[jsValueRegs.gpr()] = cachedRecovery;
</span><span class="cx"> #else
</span><del>-        if (JSValueRegs oldRegs { cachedRecovery-&gt;wantedJSValueRegs() }) {
-            if (oldRegs.payloadGPR())
-                m_newRegisters[oldRegs.payloadGPR()] = nullptr;
-            if (oldRegs.tagGPR())
-                m_newRegisters[oldRegs.tagGPR()] = nullptr;
-        }
</del><span class="cx">         if (jsValueRegs.payloadGPR() != InvalidGPRReg)
</span><span class="cx">             m_newRegisters[jsValueRegs.payloadGPR()] = cachedRecovery;
</span><span class="cx">         if (jsValueRegs.tagGPR() != InvalidGPRReg)
</span><span class="cx">             m_newRegisters[jsValueRegs.tagGPR()] = cachedRecovery;
</span><span class="cx"> #endif
</span><del>-        ASSERT(!cachedRecovery-&gt;wantedJSValueRegs());
-        cachedRecovery-&gt;setWantedJSValueRegs(jsValueRegs);
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // m_oldFrameBase is the register relative to which we access
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCorejitCallFrameShuffler64cpp"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler64.cpp (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler64.cpp        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/jit/CallFrameShuffler64.cpp        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -253,6 +253,7 @@
</span><span class="cx"> 
</span><span class="cx"> void CallFrameShuffler::emitDisplace(CachedRecovery&amp; cachedRecovery)
</span><span class="cx"> {
</span><ins>+    ASSERT(cachedRecovery.recovery().isInRegisters());
</ins><span class="cx">     GPRReg wantedGPR { cachedRecovery.wantedJSValueRegs().gpr() };
</span><span class="cx">     ASSERT(wantedGPR != InvalidGPRReg);
</span><span class="cx">     ASSERT(!m_lockedRegisters.get(wantedGPR));
</span><span class="lines">@@ -312,15 +313,8 @@
</span><span class="cx">     }
</span><span class="cx">     ASSERT(!m_registers[wantedGPR]);
</span><span class="cx"> 
</span><del>-    if (cachedRecovery.recovery().isConstant()) {
</del><ins>+    if (cachedRecovery.recovery().isInGPR()) {
</ins><span class="cx">         if (verbose)
</span><del>-            dataLog(&quot;   * Loading &quot;, cachedRecovery.recovery().constant(), &quot; into &quot;, wantedGPR, &quot;\n&quot;);
-        m_jit.moveTrustedValue(cachedRecovery.recovery().constant(), JSValueRegs { wantedGPR });
-        updateRecovery(
-            cachedRecovery,
-            ValueRecovery::inGPR(wantedGPR, DataFormatJS));
-    } else if (cachedRecovery.recovery().isInGPR()) {
-        if (verbose)
</del><span class="cx">             dataLog(&quot;   * Moving &quot;, cachedRecovery.recovery().gpr(), &quot; into &quot;, wantedGPR, &quot;\n&quot;);
</span><span class="cx">         m_jit.move(cachedRecovery.recovery().gpr(), wantedGPR);
</span><span class="cx">         updateRecovery(cachedRecovery,
</span></span></pre></div>
<a id="branchesjsctailcallSourceJavaScriptCorejitRegh"></a>
<div class="modfile"><h4>Modified: branches/jsc-tailcall/Source/JavaScriptCore/jit/Reg.h (189060 => 189061)</h4>
<pre class="diff"><span>
<span class="info">--- branches/jsc-tailcall/Source/JavaScriptCore/jit/Reg.h        2015-08-27 22:12:12 UTC (rev 189060)
+++ branches/jsc-tailcall/Source/JavaScriptCore/jit/Reg.h        2015-08-27 22:31:04 UTC (rev 189061)
</span><span class="lines">@@ -55,11 +55,6 @@
</span><span class="cx">         : m_index(invalid())
</span><span class="cx">     {
</span><span class="cx">     }
</span><del>-
-    Reg(WTF::HashTableDeletedValueType)
-        : m_index(deleted())
-    {
-    }
</del><span class="cx">     
</span><span class="cx">     Reg(MacroAssembler::RegisterID reg)
</span><span class="cx">         : m_index(MacroAssembler::registerIndex(reg))
</span><span class="lines">@@ -107,8 +102,6 @@
</span><span class="cx">     bool isSet() const { return m_index != invalid(); }
</span><span class="cx">     bool operator!() const { return !isSet(); }
</span><span class="cx">     explicit operator bool() const { return isSet(); }
</span><del>-
-    bool isHashTableDeletedValue() const { return m_index == deleted(); }
</del><span class="cx">     
</span><span class="cx">     bool isGPR() const
</span><span class="cx">     {
</span><span class="lines">@@ -172,32 +165,12 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     static uint8_t invalid() { return 0xff; }
</span><del>-
-    static uint8_t deleted() { return 0xfe; }
</del><span class="cx">     
</span><span class="cx">     uint8_t m_index;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-struct RegHash {
-    static unsigned hash(const Reg&amp; key) { return key.hash(); }
-    static bool equal(const Reg&amp; a, const Reg&amp; b) { return a == b; }
-    static const bool safeToCompareToEmptyOrDeleted = true;
-};
-
</del><span class="cx"> } // namespace JSC
</span><span class="cx"> 
</span><del>-namespace WTF {
-
-template&lt;typename T&gt; struct DefaultHash;
-template&lt;&gt; struct DefaultHash&lt;JSC::Reg&gt; {
-    typedef JSC::RegHash Hash;
-};
-
-template&lt;typename T&gt; struct HashTraits;
-template&lt;&gt; struct HashTraits&lt;JSC::Reg&gt; : SimpleClassHashTraits&lt;JSC::Reg&gt; { };
-
-} // namespace WTF
-
</del><span class="cx"> #endif // ENABLE(JIT)
</span><span class="cx"> 
</span><span class="cx"> #endif // Reg_h
</span></span></pre>
</div>
</div>

</body>
</html>