<!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>[165167] trunk</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/165167">165167</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2014-03-05 19:43:37 -0800 (Wed, 05 Mar 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Unreviewed, rolling out <a href="http://trac.webkit.org/projects/webkit/changeset/165141">r165141</a>, <a href="http://trac.webkit.org/projects/webkit/changeset/165157">r165157</a>, and <a href="http://trac.webkit.org/projects/webkit/changeset/165158">r165158</a>.
http://trac.webkit.org/changeset/165141
http://trac.webkit.org/changeset/165157
http://trac.webkit.org/changeset/165158
https://bugs.webkit.org/show_bug.cgi?id=129772

&quot;broke ftl&quot; (Requested by olliej_ on #webkit).

Source/JavaScriptCore:

* JavaScriptCore.xcodeproj/project.pbxproj:
* bytecode/PolymorphicPutByIdList.cpp:
(JSC::PutByIdAccess::visitWeak):
(JSC::PolymorphicPutByIdList::PolymorphicPutByIdList):
(JSC::PolymorphicPutByIdList::from):
* bytecode/PolymorphicPutByIdList.h:
(JSC::PutByIdAccess::transition):
(JSC::PutByIdAccess::replace):
(JSC::PutByIdAccess::oldStructure):
(JSC::PutByIdAccess::chain):
(JSC::PutByIdAccess::stubRoutine):
* bytecode/PutByIdStatus.cpp:
(JSC::PutByIdStatus::computeForStubInfo):
(JSC::PutByIdStatus::computeFor):
(JSC::PutByIdStatus::dump):
* bytecode/PutByIdStatus.h:
(JSC::PutByIdStatus::PutByIdStatus):
(JSC::PutByIdStatus::takesSlowPath):
* bytecode/StructureStubInfo.h:
* dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter&lt;AbstractStateType&gt;::executeEffects):
* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::emitPutById):
(JSC::DFG::ByteCodeParser::handlePutById):
* dfg/DFGClobberize.h:
(JSC::DFG::clobberize):
* dfg/DFGCommon.h:
* dfg/DFGConstantFoldingPhase.cpp:
(JSC::DFG::ConstantFoldingPhase::foldConstants):
* dfg/DFGFixupPhase.cpp:
(JSC::DFG::FixupPhase::fixupNode):
* dfg/DFGNode.h:
(JSC::DFG::Node::hasIdentifier):
* dfg/DFGNodeType.h:
* dfg/DFGPredictionPropagationPhase.cpp:
(JSC::DFG::PredictionPropagationPhase::propagate):
* dfg/DFGSafeToExecute.h:
(JSC::DFG::safeToExecute):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileIn):
* dfg/DFGSpeculativeJIT.h:
* dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::cachedGetById):
(JSC::DFG::SpeculativeJIT::cachedPutById):
(JSC::DFG::SpeculativeJIT::compile):
* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::cachedGetById):
(JSC::DFG::SpeculativeJIT::cachedPutById):
(JSC::DFG::SpeculativeJIT::compile):
* ftl/FTLCompile.cpp:
(JSC::FTL::fixFunctionBasedOnStackMaps):
* jit/CCallHelpers.h:
(JSC::CCallHelpers::setupArgumentsWithExecState):
* jit/JITInlineCacheGenerator.cpp:
(JSC::JITByIdGenerator::JITByIdGenerator):
(JSC::JITPutByIdGenerator::JITPutByIdGenerator):
* jit/JITInlineCacheGenerator.h:
(JSC::JITGetByIdGenerator::JITGetByIdGenerator):
* jit/JITOperations.cpp:
* jit/JITOperations.h:
* jit/JITPropertyAccess.cpp:
(JSC::JIT::emit_op_get_by_id):
(JSC::JIT::emit_op_put_by_id):
* jit/JITPropertyAccess32_64.cpp:
(JSC::JIT::emit_op_get_by_id):
(JSC::JIT::emit_op_put_by_id):
* jit/Repatch.cpp:
(JSC::tryCacheGetByID):
(JSC::tryBuildGetByIDList):
(JSC::tryCachePutByID):
(JSC::tryBuildPutByIdList):
* jit/SpillRegistersMode.h: Removed.
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::LLINT_SLOW_PATH_DECL):
* runtime/Lookup.h:
(JSC::putEntry):
* runtime/PutPropertySlot.h:
(JSC::PutPropertySlot::isCacheable):
(JSC::PutPropertySlot::cachedOffset):

Source/WebCore:

* ForwardingHeaders/jit/SpillRegistersMode.h: Removed.

LayoutTests:

* js/regress/assign-custom-setter-expected.txt: Removed.
* js/regress/assign-custom-setter-polymorphic-expected.txt: Removed.
* js/regress/assign-custom-setter-polymorphic.html: Removed.
* js/regress/assign-custom-setter.html: Removed.
* js/regress/script-tests/assign-custom-setter-polymorphic.js: Removed.
* js/regress/script-tests/assign-custom-setter.js: Removed.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodePolymorphicPutByIdListcpp">trunk/Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodePolymorphicPutByIdListh">trunk/Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodePutByIdStatuscpp">trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodePutByIdStatush">trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeStructureStubInfoh">trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh">trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp">trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGClobberizeh">trunk/Source/JavaScriptCore/dfg/DFGClobberize.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGCommonh">trunk/Source/JavaScriptCore/dfg/DFGCommon.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGConstantFoldingPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGFixupPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGNodeh">trunk/Source/JavaScriptCore/dfg/DFGNode.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGNodeTypeh">trunk/Source/JavaScriptCore/dfg/DFGNodeType.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGPredictionPropagationPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSafeToExecuteh">trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJITh">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJIT64cpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLCompilecpp">trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitCCallHelpersh">trunk/Source/JavaScriptCore/jit/CCallHelpers.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITInlineCacheGeneratorcpp">trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITInlineCacheGeneratorh">trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOperationscpp">trunk/Source/JavaScriptCore/jit/JITOperations.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOperationsh">trunk/Source/JavaScriptCore/jit/JITOperations.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITPropertyAccesscpp">trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITPropertyAccess32_64cpp">trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitRepatchcpp">trunk/Source/JavaScriptCore/jit/Repatch.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntSlowPathscpp">trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeLookuph">trunk/Source/JavaScriptCore/runtime/Lookup.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimePutPropertySloth">trunk/Source/JavaScriptCore/runtime/PutPropertySlot.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsjsregressassigncustomsetterexpectedtxt">trunk/LayoutTests/js/regress/assign-custom-setter-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressassigncustomsetterpolymorphicexpectedtxt">trunk/LayoutTests/js/regress/assign-custom-setter-polymorphic-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsregressassigncustomsetterpolymorphichtml">trunk/LayoutTests/js/regress/assign-custom-setter-polymorphic.html</a></li>
<li><a href="#trunkLayoutTestsjsregressassigncustomsetterhtml">trunk/LayoutTests/js/regress/assign-custom-setter.html</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsassigncustomsetterpolymorphicjs">trunk/LayoutTests/js/regress/script-tests/assign-custom-setter-polymorphic.js</a></li>
<li><a href="#trunkLayoutTestsjsregressscripttestsassigncustomsetterjs">trunk/LayoutTests/js/regress/script-tests/assign-custom-setter.js</a></li>
<li><a href="#trunkSourceJavaScriptCorejitSpillRegistersModeh">trunk/Source/JavaScriptCore/jit/SpillRegistersMode.h</a></li>
<li><a href="#trunkSourceWebCoreForwardingHeadersjitSpillRegistersModeh">trunk/Source/WebCore/ForwardingHeaders/jit/SpillRegistersMode.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/LayoutTests/ChangeLog        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2014-03-05  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r165141, r165157, and r165158.
+        http://trac.webkit.org/changeset/165141
+        http://trac.webkit.org/changeset/165157
+        http://trac.webkit.org/changeset/165158
+        https://bugs.webkit.org/show_bug.cgi?id=129772
+
+        &quot;broke ftl&quot; (Requested by olliej_ on #webkit).
+
+        * js/regress/assign-custom-setter-expected.txt: Removed.
+        * js/regress/assign-custom-setter-polymorphic-expected.txt: Removed.
+        * js/regress/assign-custom-setter-polymorphic.html: Removed.
+        * js/regress/assign-custom-setter.html: Removed.
+        * js/regress/script-tests/assign-custom-setter-polymorphic.js: Removed.
+        * js/regress/script-tests/assign-custom-setter.js: Removed.
+
</ins><span class="cx"> 2014-03-05  Mark Lam  &lt;mark.lam@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         llint_slow_path_check_has_instance() should not adjust PC before accessing operands.
</span></span></pre></div>
<a id="trunkLayoutTestsjsregressassigncustomsetterexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/regress/assign-custom-setter-expected.txt (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/assign-custom-setter-expected.txt        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/LayoutTests/js/regress/assign-custom-setter-expected.txt        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1,10 +0,0 @@
</span><del>-JSRegress/assign-custom-setter
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-PASS no exception thrown
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestsjsregressassigncustomsetterpolymorphicexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/regress/assign-custom-setter-polymorphic-expected.txt (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/assign-custom-setter-polymorphic-expected.txt        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/LayoutTests/js/regress/assign-custom-setter-polymorphic-expected.txt        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1,10 +0,0 @@
</span><del>-JSRegress/assign-custom-setter-polymorphic
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-PASS no exception thrown
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestsjsregressassigncustomsetterpolymorphichtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/regress/assign-custom-setter-polymorphic.html (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/assign-custom-setter-polymorphic.html        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/LayoutTests/js/regress/assign-custom-setter-polymorphic.html        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1,12 +0,0 @@
</span><del>-&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
-&lt;html&gt;
-&lt;head&gt;
-&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-&lt;/head&gt;
-&lt;body&gt;
-&lt;script src=&quot;resources/regress-pre.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;script-tests/assign-custom-setter-polymorphic.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;resources/regress-post.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-&lt;/body&gt;
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestsjsregressassigncustomsetterhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/regress/assign-custom-setter.html (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/assign-custom-setter.html        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/LayoutTests/js/regress/assign-custom-setter.html        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1,12 +0,0 @@
</span><del>-&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
-&lt;html&gt;
-&lt;head&gt;
-&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-&lt;/head&gt;
-&lt;body&gt;
-&lt;script src=&quot;resources/regress-pre.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;script-tests/assign-custom-setter.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;resources/regress-post.js&quot;&gt;&lt;/script&gt;
-&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-&lt;/body&gt;
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsassigncustomsetterpolymorphicjs"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/regress/script-tests/assign-custom-setter-polymorphic.js (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/assign-custom-setter-polymorphic.js        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/LayoutTests/js/regress/script-tests/assign-custom-setter-polymorphic.js        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1,26 +0,0 @@
</span><del>-
-o = RegExp;
-j = 0;
-l = 2;
-z = 0;
-function test(o, z) {
-    var k = arguments[(((j &lt;&lt; 1 | l) &gt;&gt; 1) ^ 1) &amp; (z *= 1)];
-    k.input = 0;
-    for (var i = 0; i &lt; 25000; i++) {
-        k.input = &quot;foo&quot;;
-    }
-
-    return k.input;
-}
-var result = test({__proto__: {bar:&quot;wibble&quot;, input:&quot;foo&quot;}});
-var result = test({input:&quot;foo&quot;});
-var result = test(o)
-for (var k = 0; k &lt; 6; k++) {
-    var start = new Date;
-    var newResult = test(o)
-    var end = new Date;
-    if (newResult != result)
-        throw &quot;Failed at &quot; + k + &quot;with &quot; + newResult + &quot; vs. &quot; + result
-    result = newResult;
-    o = {__proto__ : o }
-}
</del></span></pre></div>
<a id="trunkLayoutTestsjsregressscripttestsassigncustomsetterjs"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/js/regress/script-tests/assign-custom-setter.js (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/regress/script-tests/assign-custom-setter.js        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/LayoutTests/js/regress/script-tests/assign-custom-setter.js        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1,24 +0,0 @@
</span><del>-// RegExp.input is a handy setter
-
-var o = RegExp;
-function test(o) {
-    var k = 0;
-    o.input = &quot;bar&quot;;
-    for (var i = 0; i &lt; 30000; i++)
-        o.input = &quot;foo&quot;;
-
-    return o.input;
-}
-
-var result = test(o);
-
-for (var k = 0; k &lt; 9; k++) {
-    var start = new Date;
-    var newResult = test(o)
-    var end = new Date;
-    if (newResult != result)
-        throw &quot;Failed at &quot; + k + &quot;with &quot; +newResult + &quot; vs. &quot; + result
-    result = newResult; 
-    o = {__proto__ : o }
-}
-
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1,3 +1,93 @@
</span><ins>+2014-03-05  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r165141, r165157, and r165158.
+        http://trac.webkit.org/changeset/165141
+        http://trac.webkit.org/changeset/165157
+        http://trac.webkit.org/changeset/165158
+        https://bugs.webkit.org/show_bug.cgi?id=129772
+
+        &quot;broke ftl&quot; (Requested by olliej_ on #webkit).
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * bytecode/PolymorphicPutByIdList.cpp:
+        (JSC::PutByIdAccess::visitWeak):
+        (JSC::PolymorphicPutByIdList::PolymorphicPutByIdList):
+        (JSC::PolymorphicPutByIdList::from):
+        * bytecode/PolymorphicPutByIdList.h:
+        (JSC::PutByIdAccess::transition):
+        (JSC::PutByIdAccess::replace):
+        (JSC::PutByIdAccess::oldStructure):
+        (JSC::PutByIdAccess::chain):
+        (JSC::PutByIdAccess::stubRoutine):
+        * bytecode/PutByIdStatus.cpp:
+        (JSC::PutByIdStatus::computeForStubInfo):
+        (JSC::PutByIdStatus::computeFor):
+        (JSC::PutByIdStatus::dump):
+        * bytecode/PutByIdStatus.h:
+        (JSC::PutByIdStatus::PutByIdStatus):
+        (JSC::PutByIdStatus::takesSlowPath):
+        * bytecode/StructureStubInfo.h:
+        * dfg/DFGAbstractInterpreterInlines.h:
+        (JSC::DFG::AbstractInterpreter&lt;AbstractStateType&gt;::executeEffects):
+        * dfg/DFGByteCodeParser.cpp:
+        (JSC::DFG::ByteCodeParser::emitPutById):
+        (JSC::DFG::ByteCodeParser::handlePutById):
+        * dfg/DFGClobberize.h:
+        (JSC::DFG::clobberize):
+        * dfg/DFGCommon.h:
+        * dfg/DFGConstantFoldingPhase.cpp:
+        (JSC::DFG::ConstantFoldingPhase::foldConstants):
+        * dfg/DFGFixupPhase.cpp:
+        (JSC::DFG::FixupPhase::fixupNode):
+        * dfg/DFGNode.h:
+        (JSC::DFG::Node::hasIdentifier):
+        * dfg/DFGNodeType.h:
+        * dfg/DFGPredictionPropagationPhase.cpp:
+        (JSC::DFG::PredictionPropagationPhase::propagate):
+        * dfg/DFGSafeToExecute.h:
+        (JSC::DFG::safeToExecute):
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::compileIn):
+        * dfg/DFGSpeculativeJIT.h:
+        * dfg/DFGSpeculativeJIT32_64.cpp:
+        (JSC::DFG::SpeculativeJIT::cachedGetById):
+        (JSC::DFG::SpeculativeJIT::cachedPutById):
+        (JSC::DFG::SpeculativeJIT::compile):
+        * dfg/DFGSpeculativeJIT64.cpp:
+        (JSC::DFG::SpeculativeJIT::cachedGetById):
+        (JSC::DFG::SpeculativeJIT::cachedPutById):
+        (JSC::DFG::SpeculativeJIT::compile):
+        * ftl/FTLCompile.cpp:
+        (JSC::FTL::fixFunctionBasedOnStackMaps):
+        * jit/CCallHelpers.h:
+        (JSC::CCallHelpers::setupArgumentsWithExecState):
+        * jit/JITInlineCacheGenerator.cpp:
+        (JSC::JITByIdGenerator::JITByIdGenerator):
+        (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
+        * jit/JITInlineCacheGenerator.h:
+        (JSC::JITGetByIdGenerator::JITGetByIdGenerator):
+        * jit/JITOperations.cpp:
+        * jit/JITOperations.h:
+        * jit/JITPropertyAccess.cpp:
+        (JSC::JIT::emit_op_get_by_id):
+        (JSC::JIT::emit_op_put_by_id):
+        * jit/JITPropertyAccess32_64.cpp:
+        (JSC::JIT::emit_op_get_by_id):
+        (JSC::JIT::emit_op_put_by_id):
+        * jit/Repatch.cpp:
+        (JSC::tryCacheGetByID):
+        (JSC::tryBuildGetByIDList):
+        (JSC::tryCachePutByID):
+        (JSC::tryBuildPutByIdList):
+        * jit/SpillRegistersMode.h: Removed.
+        * llint/LLIntSlowPaths.cpp:
+        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+        * runtime/Lookup.h:
+        (JSC::putEntry):
+        * runtime/PutPropertySlot.h:
+        (JSC::PutPropertySlot::isCacheable):
+        (JSC::PutPropertySlot::cachedOffset):
+
</ins><span class="cx"> 2014-03-05  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: Prevent possible deadlock in view indication
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1162,7 +1162,6 @@
</span><span class="cx">                 A784A26411D16622005776AC /* SyntaxChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A7EE7711B98B8D0065A14F /* SyntaxChecker.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 A78507D617CBC6FD0011F6E7 /* MapData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A78507D417CBC6FD0011F6E7 /* MapData.cpp */; };
</span><span class="cx">                 A78507D717CBC6FD0011F6E7 /* MapData.h in Headers */ = {isa = PBXBuildFile; fileRef = A78507D517CBC6FD0011F6E7 /* MapData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                A785F6BC18C553FE00F10626 /* SpillRegistersMode.h in Headers */ = {isa = PBXBuildFile; fileRef = A7FF647A18C52E8500B55307 /* SpillRegistersMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><span class="cx">                 A78853F917972629001440E4 /* IntendedStructureChain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A78853F717972629001440E4 /* IntendedStructureChain.cpp */; };
</span><span class="cx">                 A78853FA17972629001440E4 /* IntendedStructureChain.h in Headers */ = {isa = PBXBuildFile; fileRef = A78853F817972629001440E4 /* IntendedStructureChain.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 A78A9774179738B8009DF744 /* DFGFailedFinalizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A78A976C179738B8009DF744 /* DFGFailedFinalizer.cpp */; };
</span><span class="lines">@@ -2802,7 +2801,6 @@
</span><span class="cx">                 A7FB604B103F5EAB0017A286 /* PropertyDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PropertyDescriptor.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A7FB60A3103F7DC20017A286 /* PropertyDescriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PropertyDescriptor.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A7FCC26C17A0B6AA00786D1A /* FTLSwitchCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLSwitchCase.h; path = ftl/FTLSwitchCase.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                A7FF647A18C52E8500B55307 /* SpillRegistersMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SpillRegistersMode.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 A8A4748D151A8306004123FF /* libWTF.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libWTF.a; sourceTree = BUILT_PRODUCTS_DIR; };
</span><span class="cx">                 A8E894310CD0602400367179 /* JSCallbackObjectFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCallbackObjectFunctions.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A8E894330CD0603F00367179 /* JSGlobalObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGlobalObject.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -3471,7 +3469,6 @@
</span><span class="cx">                                 A7386552118697B400540279 /* ThunkGenerators.cpp */,
</span><span class="cx">                                 A7386553118697B400540279 /* ThunkGenerators.h */,
</span><span class="cx">                                 65987F2F16828A7E003C2F8D /* UnusedPointer.h */,
</span><del>-                                A7FF647A18C52E8500B55307 /* SpillRegistersMode.h */,
</del><span class="cx">                         );
</span><span class="cx">                         path = jit;
</span><span class="cx">                         sourceTree = &quot;&lt;group&gt;&quot;;
</span><span class="lines">@@ -5526,7 +5523,6 @@
</span><span class="cx">                                 86158AB3155C8B4000B45C9C /* PropertyName.h in Headers */,
</span><span class="cx">                                 BC18C4540E16F5CD00B34460 /* PropertyNameArray.h in Headers */,
</span><span class="cx">                                 0FF7168C15A3B235008F5DAA /* PropertyOffset.h in Headers */,
</span><del>-                                A785F6BC18C553FE00F10626 /* SpillRegistersMode.h in Headers */,
</del><span class="cx">                                 BC18C4550E16F5CD00B34460 /* PropertySlot.h in Headers */,
</span><span class="cx">                                 0FB7F39C15ED8E4600F167B2 /* PropertyStorage.h in Headers */,
</span><span class="cx">                                 BC18C4560E16F5CD00B34460 /* Protect.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodePolymorphicPutByIdListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -77,12 +77,6 @@
</span><span class="cx">         if (!Heap::isMarked(m_chain.get()))
</span><span class="cx">             return false;
</span><span class="cx">         break;
</span><del>-    case CustomSetter:
-        if (!Heap::isMarked(m_oldStructure.get()))
-            return false;
-        if (m_chain &amp;&amp; !Heap::isMarked(m_chain.get()))
-            return false;
-        break;
</del><span class="cx">     default:
</span><span class="cx">         RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx">         return false;
</span><span class="lines">@@ -94,8 +88,7 @@
</span><span class="cx">     PutKind putKind, StructureStubInfo&amp; stubInfo)
</span><span class="cx">     : m_kind(putKind)
</span><span class="cx"> {
</span><del>-    if (stubInfo.accessType != access_unset)
-        m_list.append(PutByIdAccess::fromStructureStubInfo(stubInfo));
</del><ins>+    m_list.append(PutByIdAccess::fromStructureStubInfo(stubInfo));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> PolymorphicPutByIdList* PolymorphicPutByIdList::from(
</span><span class="lines">@@ -105,9 +98,8 @@
</span><span class="cx">         return stubInfo.u.putByIdList.list;
</span><span class="cx">     
</span><span class="cx">     ASSERT(stubInfo.accessType == access_put_by_id_replace
</span><del>-        || stubInfo.accessType == access_put_by_id_transition_normal
-        || stubInfo.accessType == access_put_by_id_transition_direct
-        || stubInfo.accessType == access_unset);
</del><ins>+           || stubInfo.accessType == access_put_by_id_transition_normal
+           || stubInfo.accessType == access_put_by_id_transition_direct);
</ins><span class="cx">     
</span><span class="cx">     PolymorphicPutByIdList* result =
</span><span class="cx">         new PolymorphicPutByIdList(putKind, stubInfo);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodePolymorphicPutByIdListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -32,7 +32,6 @@
</span><span class="cx"> #include &quot;MacroAssembler.h&quot;
</span><span class="cx"> #include &quot;Opcode.h&quot;
</span><span class="cx"> #include &quot;PutKind.h&quot;
</span><del>-#include &quot;PutPropertySlot.h&quot;
</del><span class="cx"> #include &quot;Structure.h&quot;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -46,8 +45,7 @@
</span><span class="cx">     enum AccessType {
</span><span class="cx">         Invalid,
</span><span class="cx">         Transition,
</span><del>-        Replace,
-        CustomSetter
</del><ins>+        Replace
</ins><span class="cx">     };
</span><span class="cx">     
</span><span class="cx">     PutByIdAccess()
</span><span class="lines">@@ -68,11 +66,10 @@
</span><span class="cx">         result.m_oldStructure.set(vm, owner, oldStructure);
</span><span class="cx">         result.m_newStructure.set(vm, owner, newStructure);
</span><span class="cx">         result.m_chain.set(vm, owner, chain);
</span><del>-        result.m_customSetter = 0;
</del><span class="cx">         result.m_stubRoutine = stubRoutine;
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><del>-
</del><ins>+    
</ins><span class="cx">     static PutByIdAccess replace(
</span><span class="cx">         VM&amp; vm,
</span><span class="cx">         JSCell* owner,
</span><span class="lines">@@ -82,29 +79,9 @@
</span><span class="cx">         PutByIdAccess result;
</span><span class="cx">         result.m_type = Replace;
</span><span class="cx">         result.m_oldStructure.set(vm, owner, structure);
</span><del>-        result.m_customSetter = 0;
</del><span class="cx">         result.m_stubRoutine = stubRoutine;
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><del>-
-
-    static PutByIdAccess customSetter(
-        VM&amp; vm,
-        JSCell* owner,
-        Structure* structure,
-        StructureChain* chain,
-        PutPropertySlot::PutValueFunc customSetter,
-        PassRefPtr&lt;JITStubRoutine&gt; stubRoutine)
-    {
-        PutByIdAccess result;
-        result.m_oldStructure.set(vm, owner, structure);
-        result.m_type = CustomSetter;
-        if (chain)
-            result.m_chain.set(vm, owner, chain);
-        result.m_customSetter = customSetter;
-        result.m_stubRoutine = stubRoutine;
-        return result;
-    }
</del><span class="cx">     
</span><span class="cx">     static PutByIdAccess fromStructureStubInfo(StructureStubInfo&amp;);
</span><span class="cx">     
</span><span class="lines">@@ -115,13 +92,12 @@
</span><span class="cx">     
</span><span class="cx">     bool isTransition() const { return m_type == Transition; }
</span><span class="cx">     bool isReplace() const { return m_type == Replace; }
</span><del>-    bool isCustom() const { return m_type == CustomSetter; }
</del><span class="cx">     
</span><span class="cx">     Structure* oldStructure() const
</span><span class="cx">     {
</span><span class="cx">         // Using this instead of isSet() to make this assertion robust against the possibility
</span><span class="cx">         // of additional access types being added.
</span><del>-        ASSERT(isTransition() || isReplace() || isCustom());
</del><ins>+        ASSERT(isTransition() || isReplace());
</ins><span class="cx">         
</span><span class="cx">         return m_oldStructure.get();
</span><span class="cx">     }
</span><span class="lines">@@ -140,18 +116,16 @@
</span><span class="cx">     
</span><span class="cx">     StructureChain* chain() const
</span><span class="cx">     {
</span><del>-        ASSERT(isTransition() || isCustom());
</del><ins>+        ASSERT(isTransition());
</ins><span class="cx">         return m_chain.get();
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     JITStubRoutine* stubRoutine() const
</span><span class="cx">     {
</span><del>-        ASSERT(isTransition() || isReplace() || isCustom());
</del><ins>+        ASSERT(isTransition() || isReplace());
</ins><span class="cx">         return m_stubRoutine.get();
</span><span class="cx">     }
</span><del>-
-    PutPropertySlot::PutValueFunc customSetter() const { ASSERT(isCustom()); return m_customSetter; }
-
</del><ins>+    
</ins><span class="cx">     bool visitWeak() const;
</span><span class="cx">     
</span><span class="cx"> private:
</span><span class="lines">@@ -161,7 +135,6 @@
</span><span class="cx">     WriteBarrier&lt;Structure&gt; m_oldStructure;
</span><span class="cx">     WriteBarrier&lt;Structure&gt; m_newStructure;
</span><span class="cx">     WriteBarrier&lt;StructureChain&gt; m_chain;
</span><del>-    PutPropertySlot::PutValueFunc m_customSetter;
</del><span class="cx">     RefPtr&lt;JITStubRoutine&gt; m_stubRoutine;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodePutByIdStatuscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -205,8 +205,6 @@
</span><span class="cx">                     return PutByIdStatus(TakesSlowPath);
</span><span class="cx">                 break;
</span><span class="cx">             }
</span><del>-            case PutByIdAccess::CustomSetter:
-                return PutByIdStatus(MakesCalls);
</del><span class="cx"> 
</span><span class="cx">             default:
</span><span class="cx">                 return PutByIdStatus(TakesSlowPath);
</span><span class="lines">@@ -267,9 +265,6 @@
</span><span class="cx">     JSCell* specificValue;
</span><span class="cx">     PropertyOffset offset = structure-&gt;getConcurrently(vm, uid, attributes, specificValue);
</span><span class="cx">     if (isValidOffset(offset)) {
</span><del>-        if (attributes &amp; CustomAccessor)
-            return PutByIdStatus(MakesCalls);
-
</del><span class="cx">         if (attributes &amp; (Accessor | ReadOnly))
</span><span class="cx">             return PutByIdStatus(TakesSlowPath);
</span><span class="cx">         if (specificValue) {
</span><span class="lines">@@ -347,9 +342,6 @@
</span><span class="cx">     case TakesSlowPath:
</span><span class="cx">         out.print(&quot;(TakesSlowPath)&quot;);
</span><span class="cx">         return;
</span><del>-    case MakesCalls:
-        out.print(&quot;(MakesCalls)&quot;);
-        return;
</del><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     RELEASE_ASSERT_NOT_REACHED();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodePutByIdStatush"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -47,9 +47,7 @@
</span><span class="cx">         // It's cached as a simple store of some kind.
</span><span class="cx">         Simple,
</span><span class="cx">         // It's known to often take slow path.
</span><del>-        TakesSlowPath,
-        // It's known to take paths that make calls.
-        MakesCalls
</del><ins>+        TakesSlowPath
</ins><span class="cx">     };
</span><span class="cx">     
</span><span class="cx">     PutByIdStatus()
</span><span class="lines">@@ -60,7 +58,7 @@
</span><span class="cx">     explicit PutByIdStatus(State state)
</span><span class="cx">         : m_state(state)
</span><span class="cx">     {
</span><del>-        ASSERT(m_state == NoInformation || m_state == TakesSlowPath || m_state == MakesCalls);
</del><ins>+        ASSERT(m_state == NoInformation || m_state == TakesSlowPath);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     PutByIdStatus(const PutByIdVariant&amp; variant)
</span><span class="lines">@@ -79,8 +77,7 @@
</span><span class="cx">     bool isSet() const { return m_state != NoInformation; }
</span><span class="cx">     bool operator!() const { return m_state == NoInformation; }
</span><span class="cx">     bool isSimple() const { return m_state == Simple; }
</span><del>-    bool takesSlowPath() const { return m_state == TakesSlowPath || m_state == MakesCalls; }
-    bool makesCalls() const { return m_state == MakesCalls; }
</del><ins>+    bool takesSlowPath() const { return m_state == TakesSlowPath; }
</ins><span class="cx">     
</span><span class="cx">     size_t numVariants() const { return m_variants.size(); }
</span><span class="cx">     const Vector&lt;PutByIdVariant, 1&gt;&amp; variants() const { return m_variants; }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeStructureStubInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -33,7 +33,6 @@
</span><span class="cx"> #include &quot;Opcode.h&quot;
</span><span class="cx"> #include &quot;PolymorphicAccessStructureList.h&quot;
</span><span class="cx"> #include &quot;RegisterSet.h&quot;
</span><del>-#include &quot;SpillRegistersMode.h&quot;
</del><span class="cx"> #include &quot;Structure.h&quot;
</span><span class="cx"> #include &quot;StructureStubClearingWatchpoint.h&quot;
</span><span class="cx"> #include &lt;wtf/OwnPtr.h&gt;
</span><span class="lines">@@ -194,7 +193,7 @@
</span><span class="cx">     CodeOrigin codeOrigin;
</span><span class="cx"> 
</span><span class="cx">     struct {
</span><del>-        SpillRegistersMode spillMode : 8;
</del><ins>+        int8_t registersFlushed;
</ins><span class="cx">         int8_t baseGPR;
</span><span class="cx"> #if USE(JSVALUE32_64)
</span><span class="cx">         int8_t valueTagGPR;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1737,7 +1737,6 @@
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="cx">     case PutById:
</span><del>-    case PutByIdFlush:
</del><span class="cx">     case PutByIdDirect:
</span><span class="cx">         node-&gt;setCanExit(true);
</span><span class="cx">         if (Structure* structure = forNode(node-&gt;child1()).bestProvenStructure()) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -180,7 +180,7 @@
</span><span class="cx">         int destinationOperand, SpeculatedType, Node* base, unsigned identifierNumber,
</span><span class="cx">         const GetByIdStatus&amp;);
</span><span class="cx">     void emitPutById(
</span><del>-        Node* base, unsigned identifierNumber, Node* value,  const PutByIdStatus&amp;, bool isDirect);
</del><ins>+        Node* base, unsigned identifierNumber, Node* value, bool isDirect);
</ins><span class="cx">     void handlePutById(
</span><span class="cx">         Node* base, unsigned identifierNumber, Node* value, const PutByIdStatus&amp;,
</span><span class="cx">         bool isDirect);
</span><span class="lines">@@ -1943,12 +1943,12 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ByteCodeParser::emitPutById(
</span><del>-    Node* base, unsigned identifierNumber, Node* value, const PutByIdStatus&amp; putByIdStatus, bool isDirect)
</del><ins>+    Node* base, unsigned identifierNumber, Node* value, bool isDirect)
</ins><span class="cx"> {
</span><span class="cx">     if (isDirect)
</span><span class="cx">         addToGraph(PutByIdDirect, OpInfo(identifierNumber), base, value);
</span><span class="cx">     else
</span><del>-        addToGraph(putByIdStatus.makesCalls() ? PutByIdFlush : PutById, OpInfo(identifierNumber), base, value);
</del><ins>+        addToGraph(PutById, OpInfo(identifierNumber), base, value);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ByteCodeParser::handlePutById(
</span><span class="lines">@@ -1958,13 +1958,13 @@
</span><span class="cx">     if (!putByIdStatus.isSimple()) {
</span><span class="cx">         if (!putByIdStatus.isSet())
</span><span class="cx">             addToGraph(ForceOSRExit);
</span><del>-        emitPutById(base, identifierNumber, value, putByIdStatus, isDirect);
</del><ins>+        emitPutById(base, identifierNumber, value, isDirect);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     if (putByIdStatus.numVariants() &gt; 1) {
</span><span class="cx">         if (!isFTL(m_graph.m_plan.mode)) {
</span><del>-            emitPutById(base, identifierNumber, value, putByIdStatus, isDirect);
</del><ins>+            emitPutById(base, identifierNumber, value, isDirect);
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="lines">@@ -2001,13 +2001,9 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    if (variant.kind() != PutByIdVariant::Transition) {
-        emitPutById(base, identifierNumber, value, putByIdStatus, isDirect);
-        return;
-    }
-
</del><ins>+    ASSERT(variant.kind() == PutByIdVariant::Transition);
</ins><span class="cx">     if (variant.structureChain() &amp;&amp; !variant.structureChain()-&gt;isStillValid()) {
</span><del>-        emitPutById(base, identifierNumber, value, putByIdStatus, isDirect);
</del><ins>+        emitPutById(base, identifierNumber, value, isDirect);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGClobberizeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGClobberize.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGClobberize.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGClobberize.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -196,7 +196,6 @@
</span><span class="cx">     case GetById:
</span><span class="cx">     case GetByIdFlush:
</span><span class="cx">     case PutById:
</span><del>-    case PutByIdFlush:
</del><span class="cx">     case PutByIdDirect:
</span><span class="cx">     case ArrayPush:
</span><span class="cx">     case ArrayPop:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGCommonh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGCommon.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGCommon.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGCommon.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -96,6 +96,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+enum SpillRegistersMode { NeedToSpill, DontSpill };
+
</ins><span class="cx"> enum NoResultTag { NoResult };
</span><span class="cx"> 
</span><span class="cx"> enum OptimizationFixpointState { BeforeFixpoint, FixpointNotConverged, FixpointConverged };
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGConstantFoldingPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -224,7 +224,6 @@
</span><span class="cx">             }
</span><span class="cx">                 
</span><span class="cx">             case PutById:
</span><del>-            case PutByIdFlush:
</del><span class="cx">             case PutByIdDirect: {
</span><span class="cx">                 NodeOrigin origin = node-&gt;origin;
</span><span class="cx">                 Edge childEdge = node-&gt;child1();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGFixupPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -851,7 +851,6 @@
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="cx">         case PutById:
</span><del>-        case PutByIdFlush:
</del><span class="cx">         case PutByIdDirect: {
</span><span class="cx">             fixEdge&lt;CellUse&gt;(node-&gt;child1());
</span><span class="cx">             insertStoreBarrier(m_indexInBlock, node-&gt;child1(), node-&gt;child2());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGNode.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGNode.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGNode.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -654,7 +654,6 @@
</span><span class="cx">         case GetById:
</span><span class="cx">         case GetByIdFlush:
</span><span class="cx">         case PutById:
</span><del>-        case PutByIdFlush:
</del><span class="cx">         case PutByIdDirect:
</span><span class="cx">             return true;
</span><span class="cx">         default:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGNodeTypeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGNodeType.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGNodeType.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGNodeType.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -146,7 +146,6 @@
</span><span class="cx">     macro(GetById, NodeResultJS | NodeMustGenerate | NodeClobbersWorld) \
</span><span class="cx">     macro(GetByIdFlush, NodeResultJS | NodeMustGenerate | NodeClobbersWorld) \
</span><span class="cx">     macro(PutById, NodeMustGenerate | NodeClobbersWorld) \
</span><del>-    macro(PutByIdFlush, NodeMustGenerate | NodeMustGenerate | NodeClobbersWorld) \
</del><span class="cx">     macro(PutByIdDirect, NodeMustGenerate | NodeClobbersWorld) \
</span><span class="cx">     macro(CheckStructure, NodeMustGenerate) \
</span><span class="cx">     macro(CheckExecutable, NodeMustGenerate) \
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGPredictionPropagationPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -550,7 +550,6 @@
</span><span class="cx">         case Return:
</span><span class="cx">         case Throw:
</span><span class="cx">         case PutById:
</span><del>-        case PutByIdFlush:
</del><span class="cx">         case PutByIdDirect:
</span><span class="cx">         case PutByOffset:
</span><span class="cx">         case MultiPutByOffset:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSafeToExecuteh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -155,7 +155,6 @@
</span><span class="cx">     case GetById:
</span><span class="cx">     case GetByIdFlush:
</span><span class="cx">     case PutById:
</span><del>-    case PutByIdFlush:
</del><span class="cx">     case PutByIdDirect:
</span><span class="cx">     case CheckStructure:
</span><span class="cx">     case CheckExecutable:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -880,7 +880,7 @@
</span><span class="cx">             stubInfo-&gt;patch.baseGPR = static_cast&lt;int8_t&gt;(baseGPR);
</span><span class="cx">             stubInfo-&gt;patch.valueGPR = static_cast&lt;int8_t&gt;(resultGPR);
</span><span class="cx">             stubInfo-&gt;patch.usedRegisters = usedRegisters();
</span><del>-            stubInfo-&gt;patch.spillMode = NeedToSpill;
</del><ins>+            stubInfo-&gt;patch.registersFlushed = false;
</ins><span class="cx">             
</span><span class="cx">             m_jit.addIn(InRecord(jump, done, slowPath.get(), stubInfo));
</span><span class="cx">             addSlowPathGenerator(slowPath.release());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -717,10 +717,10 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(JSVALUE64)
</span><span class="cx">     void cachedGetById(CodeOrigin, GPRReg baseGPR, GPRReg resultGPR, unsigned identifierNumber, JITCompiler::Jump slowPathTarget = JITCompiler::Jump(), SpillRegistersMode = NeedToSpill);
</span><del>-    void cachedPutById(CodeOrigin, GPRReg base, GPRReg value, GPRReg scratchGPR, unsigned identifierNumber, PutKind, JITCompiler::Jump slowPathTarget = JITCompiler::Jump(), SpillRegistersMode = NeedToSpill);
</del><ins>+    void cachedPutById(CodeOrigin, GPRReg base, GPRReg value, GPRReg scratchGPR, unsigned identifierNumber, PutKind, JITCompiler::Jump slowPathTarget = JITCompiler::Jump());
</ins><span class="cx"> #elif USE(JSVALUE32_64)
</span><span class="cx">     void cachedGetById(CodeOrigin, GPRReg baseTagGPROrNone, GPRReg basePayloadGPR, GPRReg resultTagGPR, GPRReg resultPayloadGPR, unsigned identifierNumber, JITCompiler::Jump slowPathTarget = JITCompiler::Jump(), SpillRegistersMode = NeedToSpill);
</span><del>-    void cachedPutById(CodeOrigin, GPRReg basePayloadGPR, GPRReg valueTagGPR, GPRReg valuePayloadGPR, GPRReg scratchGPR, unsigned identifierNumber, PutKind, JITCompiler::Jump slowPathTarget = JITCompiler::Jump(), SpillRegistersMode = NeedToSpill);
</del><ins>+    void cachedPutById(CodeOrigin, GPRReg basePayloadGPR, GPRReg valueTagGPR, GPRReg valuePayloadGPR, GPRReg scratchGPR, unsigned identifierNumber, PutKind, JITCompiler::Jump slowPathTarget = JITCompiler::Jump());
</ins><span class="cx"> #endif
</span><span class="cx">     
</span><span class="cx">     void compileIn(Node*);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -174,7 +174,7 @@
</span><span class="cx">     JITGetByIdGenerator gen(
</span><span class="cx">         m_jit.codeBlock(), codeOrigin, usedRegisters(),
</span><span class="cx">         JSValueRegs(baseTagGPROrNone, basePayloadGPR),
</span><del>-        JSValueRegs(resultTagGPR, resultPayloadGPR), spillMode);
</del><ins>+        JSValueRegs(resultTagGPR, resultPayloadGPR), spillMode != NeedToSpill);
</ins><span class="cx">     
</span><span class="cx">     gen.generateFastPath(m_jit);
</span><span class="cx">     
</span><span class="lines">@@ -201,12 +201,12 @@
</span><span class="cx">     addSlowPathGenerator(slowPath.release());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SpeculativeJIT::cachedPutById(CodeOrigin codeOrigin, GPRReg basePayloadGPR, GPRReg valueTagGPR, GPRReg valuePayloadGPR, GPRReg scratchGPR, unsigned identifierNumber, PutKind putKind, JITCompiler::Jump slowPathTarget, SpillRegistersMode spillMode)
</del><ins>+void SpeculativeJIT::cachedPutById(CodeOrigin codeOrigin, GPRReg basePayloadGPR, GPRReg valueTagGPR, GPRReg valuePayloadGPR, GPRReg scratchGPR, unsigned identifierNumber, PutKind putKind, JITCompiler::Jump slowPathTarget)
</ins><span class="cx"> {
</span><span class="cx">     JITPutByIdGenerator gen(
</span><span class="cx">         m_jit.codeBlock(), codeOrigin, usedRegisters(),
</span><span class="cx">         JSValueRegs::payloadOnly(basePayloadGPR), JSValueRegs(valueTagGPR, valuePayloadGPR),
</span><del>-        scratchGPR, spillMode, m_jit.ecmaModeFor(codeOrigin), putKind);
</del><ins>+        scratchGPR, false, m_jit.ecmaModeFor(codeOrigin), putKind);
</ins><span class="cx">     
</span><span class="cx">     gen.generateFastPath(m_jit);
</span><span class="cx">     
</span><span class="lines">@@ -3918,23 +3918,6 @@
</span><span class="cx">         noResult(node);
</span><span class="cx">         break;
</span><span class="cx">     }
</span><del>-
-    case PutByIdFlush: {
-        SpeculateCellOperand base(this, node-&gt;child1());
-        JSValueOperand value(this, node-&gt;child2());
-        GPRTemporary scratch(this);
-
-        GPRReg baseGPR = base.gpr();
-        GPRReg valueTagGPR = value.tagGPR();
-        GPRReg valuePayloadGPR = value.payloadGPR();
-        GPRReg scratchGPR = scratch.gpr();
-        flushRegisters();
-
-        cachedPutById(node-&gt;origin.semantic, baseGPR, valueTagGPR, valuePayloadGPR, scratchGPR, node-&gt;identifierNumber(), NotDirect, MacroAssembler::Jump(), DontSpill);
-
-        noResult(node);
-        break;
-    }
</del><span class="cx">         
</span><span class="cx">     case PutById: {
</span><span class="cx">         SpeculateCellOperand base(this, node-&gt;child1());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -37,7 +37,6 @@
</span><span class="cx"> #include &quot;Debugger.h&quot;
</span><span class="cx"> #include &quot;JSCInlines.h&quot;
</span><span class="cx"> #include &quot;ObjectPrototype.h&quot;
</span><del>-#include &quot;SpillRegistersMode.h&quot;
</del><span class="cx"> 
</span><span class="cx"> namespace JSC { namespace DFG {
</span><span class="cx"> 
</span><span class="lines">@@ -192,7 +191,7 @@
</span><span class="cx"> {
</span><span class="cx">     JITGetByIdGenerator gen(
</span><span class="cx">         m_jit.codeBlock(), codeOrigin, usedRegisters(), JSValueRegs(baseGPR),
</span><del>-        JSValueRegs(resultGPR), spillMode);
</del><ins>+        JSValueRegs(resultGPR), spillMode != NeedToSpill);
</ins><span class="cx">     gen.generateFastPath(m_jit);
</span><span class="cx">     
</span><span class="cx">     JITCompiler::JumpList slowCases;
</span><span class="lines">@@ -208,12 +207,11 @@
</span><span class="cx">     addSlowPathGenerator(slowPath.release());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SpeculativeJIT::cachedPutById(CodeOrigin codeOrigin, GPRReg baseGPR, GPRReg valueGPR, GPRReg scratchGPR, unsigned identifierNumber, PutKind putKind, JITCompiler::Jump slowPathTarget, SpillRegistersMode spillMode)
</del><ins>+void SpeculativeJIT::cachedPutById(CodeOrigin codeOrigin, GPRReg baseGPR, GPRReg valueGPR, GPRReg scratchGPR, unsigned identifierNumber, PutKind putKind, JITCompiler::Jump slowPathTarget)
</ins><span class="cx"> {
</span><span class="cx">     JITPutByIdGenerator gen(
</span><span class="cx">         m_jit.codeBlock(), codeOrigin, usedRegisters(), JSValueRegs(baseGPR),
</span><del>-        JSValueRegs(valueGPR), scratchGPR, spillMode, m_jit.ecmaModeFor(codeOrigin), putKind);
-
</del><ins>+        JSValueRegs(valueGPR), scratchGPR, false, m_jit.ecmaModeFor(codeOrigin), putKind);
</ins><span class="cx">     gen.generateFastPath(m_jit);
</span><span class="cx">     
</span><span class="cx">     JITCompiler::JumpList slowCases;
</span><span class="lines">@@ -4250,22 +4248,6 @@
</span><span class="cx">         noResult(node);
</span><span class="cx">         break;
</span><span class="cx">     }
</span><del>-
-    case PutByIdFlush: {
-        SpeculateCellOperand base(this, node-&gt;child1());
-        JSValueOperand value(this, node-&gt;child2());
-        GPRTemporary scratch(this);
-
-        GPRReg baseGPR = base.gpr();
-        GPRReg valueGPR = value.gpr();
-        GPRReg scratchGPR = scratch.gpr();
-        flushRegisters();
-
-        cachedPutById(node-&gt;origin.semantic, baseGPR, valueGPR, scratchGPR, node-&gt;identifierNumber(), NotDirect, MacroAssembler::Jump(), DontSpill);
-
-        noResult(node);
-        break;
-    }
</del><span class="cx">         
</span><span class="cx">     case PutById: {
</span><span class="cx">         SpeculateCellOperand base(this, node-&gt;child1());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLCompilecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -308,7 +308,7 @@
</span><span class="cx">                 
</span><span class="cx">                 JITGetByIdGenerator gen(
</span><span class="cx">                     codeBlock, getById.codeOrigin(), usedRegisters, JSValueRegs(base),
</span><del>-                    JSValueRegs(result), NeedToSpill);
</del><ins>+                    JSValueRegs(result), false);
</ins><span class="cx">                 
</span><span class="cx">                 MacroAssembler::Label begin = slowPathJIT.label();
</span><span class="cx">                 
</span><span class="lines">@@ -346,7 +346,7 @@
</span><span class="cx">                 
</span><span class="cx">                 JITPutByIdGenerator gen(
</span><span class="cx">                     codeBlock, putById.codeOrigin(), usedRegisters, JSValueRegs(base),
</span><del>-                    JSValueRegs(value), GPRInfo::patchpointScratchRegister, NeedToSpill,
</del><ins>+                    JSValueRegs(value), GPRInfo::patchpointScratchRegister, false,
</ins><span class="cx">                     putById.ecmaMode(), putById.putKind());
</span><span class="cx">                 
</span><span class="cx">                 MacroAssembler::Label begin = slowPathJIT.label();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitCCallHelpersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/CCallHelpers.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/CCallHelpers.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/jit/CCallHelpers.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -372,17 +372,6 @@
</span><span class="cx">         addCallArgument(arg3);
</span><span class="cx">         addCallArgument(arg4);
</span><span class="cx">     }
</span><del>-    
-    ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImmPtr arg1, GPRReg arg2, TrustedImm32 arg3, GPRReg arg4, GPRReg arg5)
-    {
-        resetCallArguments();
-        addCallArgument(GPRInfo::callFrameRegister);
-        addCallArgument(arg1);
-        addCallArgument(arg2);
-        addCallArgument(arg3);
-        addCallArgument(arg4);
-        addCallArgument(arg5);
-    }
</del><span class="cx"> 
</span><span class="cx">     ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, TrustedImmPtr arg2, TrustedImm32 arg3, GPRReg arg4, GPRReg arg5)
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITInlineCacheGeneratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -49,12 +49,12 @@
</span><span class="cx"> 
</span><span class="cx"> JITByIdGenerator::JITByIdGenerator(
</span><span class="cx">     CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet&amp; usedRegisters,
</span><del>-    JSValueRegs base, JSValueRegs value, SpillRegistersMode spillMode)
</del><ins>+    JSValueRegs base, JSValueRegs value, bool registersFlushed)
</ins><span class="cx">     : JITInlineCacheGenerator(codeBlock, codeOrigin)
</span><span class="cx">     , m_base(base)
</span><span class="cx">     , m_value(value)
</span><span class="cx"> {
</span><del>-    m_stubInfo-&gt;patch.spillMode = spillMode;
</del><ins>+    m_stubInfo-&gt;patch.registersFlushed = registersFlushed;
</ins><span class="cx">     m_stubInfo-&gt;patch.usedRegisters = usedRegisters;
</span><span class="cx">     
</span><span class="cx">     // This is a convenience - in cases where the only registers you're using are base/value,
</span><span class="lines">@@ -129,9 +129,9 @@
</span><span class="cx"> 
</span><span class="cx"> JITPutByIdGenerator::JITPutByIdGenerator(
</span><span class="cx">     CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet&amp; usedRegisters,
</span><del>-    JSValueRegs base, JSValueRegs value, GPRReg scratch, SpillRegistersMode spillMode,
</del><ins>+    JSValueRegs base, JSValueRegs value, GPRReg scratch, bool registersFlushed,
</ins><span class="cx">     ECMAMode ecmaMode, PutKind putKind)
</span><del>-    : JITByIdGenerator(codeBlock, codeOrigin, usedRegisters, base, value, spillMode)
</del><ins>+    : JITByIdGenerator(codeBlock, codeOrigin, usedRegisters, base, value, registersFlushed)
</ins><span class="cx">     , m_scratch(scratch)
</span><span class="cx">     , m_ecmaMode(ecmaMode)
</span><span class="cx">     , m_putKind(putKind)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITInlineCacheGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx"> 
</span><span class="cx">     JITByIdGenerator(
</span><span class="cx">         CodeBlock*, CodeOrigin, const RegisterSet&amp;, JSValueRegs base, JSValueRegs value,
</span><del>-        SpillRegistersMode spillMode);
</del><ins>+        bool registersFlushed);
</ins><span class="cx">     
</span><span class="cx"> public:
</span><span class="cx">     void reportSlowPathCall(MacroAssembler::Label slowPathBegin, MacroAssembler::Call call)
</span><span class="lines">@@ -95,9 +95,9 @@
</span><span class="cx">     JITGetByIdGenerator() { }
</span><span class="cx"> 
</span><span class="cx">     JITGetByIdGenerator(
</span><del>-    CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet&amp; usedRegisters,
-    JSValueRegs base, JSValueRegs value, SpillRegistersMode spillMode)
-    : JITByIdGenerator(codeBlock, codeOrigin, usedRegisters, base, value, spillMode)
</del><ins>+        CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet&amp; usedRegisters,
+        JSValueRegs base, JSValueRegs value, bool registersFlushed)
+        : JITByIdGenerator(codeBlock, codeOrigin, usedRegisters, base, value, registersFlushed)
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -110,7 +110,7 @@
</span><span class="cx"> 
</span><span class="cx">     JITPutByIdGenerator(
</span><span class="cx">         CodeBlock*, CodeOrigin, const RegisterSet&amp; usedRegisters, JSValueRegs base,
</span><del>-        JSValueRegs, GPRReg scratch, SpillRegistersMode spillMode, ECMAMode, PutKind);
</del><ins>+        JSValueRegs value, GPRReg scratch, bool registersFlushed, ECMAMode, PutKind);
</ins><span class="cx">     
</span><span class="cx">     void generateFastPath(MacroAssembler&amp;);
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1730,7 +1730,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Covers implicit globals. Since they don't exist until they first execute, we didn't know how to cache them at compile time.
</span><span class="cx">     if (modeAndType.type() == GlobalProperty || modeAndType.type() == GlobalPropertyWithVarInjectionChecks) {
</span><del>-        if (slot.isCacheablePut() &amp;&amp; slot.base() == scope &amp;&amp; scope-&gt;structure()-&gt;propertyAccessesAreCacheable()) {
</del><ins>+        if (slot.isCacheable() &amp;&amp; slot.base() == scope &amp;&amp; scope-&gt;structure()-&gt;propertyAccessesAreCacheable()) {
</ins><span class="cx">             ConcurrentJITLocker locker(codeBlock-&gt;m_lock);
</span><span class="cx">             pc[5].u.structure.set(exec-&gt;vm(), codeBlock-&gt;ownerExecutable(), scope-&gt;structure());
</span><span class="cx">             pc[6].u.operand = slot.cachedOffset();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -35,11 +35,9 @@
</span><span class="cx"> #include &quot;JSCJSValue.h&quot;
</span><span class="cx"> #include &quot;MacroAssembler.h&quot;
</span><span class="cx"> #include &quot;PutKind.h&quot;
</span><del>-#include &quot;SpillRegistersMode.h&quot;
</del><span class="cx"> #include &quot;StructureStubInfo.h&quot;
</span><span class="cx"> #include &quot;VariableWatchpointSet.h&quot;
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><span class="cx"> class ArrayAllocationProfile;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITPropertyAccesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -521,7 +521,7 @@
</span><span class="cx"> 
</span><span class="cx">     JITGetByIdGenerator gen(
</span><span class="cx">         m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</span><del>-        JSValueRegs(regT0), JSValueRegs(regT0), DontSpill);
</del><ins>+        JSValueRegs(regT0), JSValueRegs(regT0), true);
</ins><span class="cx">     gen.generateFastPath(*this);
</span><span class="cx">     addSlowCase(gen.slowPathJump());
</span><span class="cx">     m_getByIds.append(gen);
</span><span class="lines">@@ -567,7 +567,7 @@
</span><span class="cx"> 
</span><span class="cx">     JITPutByIdGenerator gen(
</span><span class="cx">         m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</span><del>-        JSValueRegs(regT0), JSValueRegs(regT1), regT2, DontSpill, m_codeBlock-&gt;ecmaMode(),
</del><ins>+        JSValueRegs(regT0), JSValueRegs(regT1), regT2, true, m_codeBlock-&gt;ecmaMode(),
</ins><span class="cx">         direct ? Direct : NotDirect);
</span><span class="cx">     
</span><span class="cx">     gen.generateFastPath(*this);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITPropertyAccess32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -478,7 +478,7 @@
</span><span class="cx"> 
</span><span class="cx">     JITGetByIdGenerator gen(
</span><span class="cx">         m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</span><del>-        JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), DontSpill);
</del><ins>+        JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), true);
</ins><span class="cx">     gen.generateFastPath(*this);
</span><span class="cx">     addSlowCase(gen.slowPathJump());
</span><span class="cx">     m_getByIds.append(gen);
</span><span class="lines">@@ -527,7 +527,7 @@
</span><span class="cx">     JITPutByIdGenerator gen(
</span><span class="cx">         m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</span><span class="cx">         JSValueRegs::payloadOnly(regT0), JSValueRegs(regT3, regT2),
</span><del>-        regT1, DontSpill, m_codeBlock-&gt;ecmaMode(), direct ? Direct : NotDirect);
</del><ins>+        regT1, true, m_codeBlock-&gt;ecmaMode(), direct ? Direct : NotDirect);
</ins><span class="cx">     
</span><span class="cx">     gen.generateFastPath(*this);
</span><span class="cx">     addSlowCase(gen.slowPathJump());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitRepatchcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/Repatch.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/Repatch.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/jit/Repatch.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -449,7 +449,7 @@
</span><span class="cx">     if (structure-&gt;isDictionary())
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    if (stubInfo.patch.spillMode == NeedToSpill) {
</del><ins>+    if (!stubInfo.patch.registersFlushed) {
</ins><span class="cx">         // We cannot do as much inline caching if the registers were not flushed prior to this GetById. In particular,
</span><span class="cx">         // non-Value cached properties require planting calls, which requires registers to have been flushed. Thus,
</span><span class="cx">         // if registers were not flushed, don't do non-Value caching.
</span><span class="lines">@@ -551,7 +551,7 @@
</span><span class="cx">     Structure* structure = baseCell-&gt;structure();
</span><span class="cx">     
</span><span class="cx">     if (slot.slotBase() == baseValue) {
</span><del>-        if (stubInfo.patch.spillMode == NeedToSpill) {
</del><ins>+        if (!stubInfo.patch.registersFlushed) {
</ins><span class="cx">             // We cannot do as much inline caching if the registers were not flushed prior to this GetById. In particular,
</span><span class="cx">             // non-Value cached properties require planting calls, which requires registers to have been flushed. Thus,
</span><span class="cx">             // if registers were not flushed, don't do non-Value caching.
</span><span class="lines">@@ -702,7 +702,7 @@
</span><span class="cx">         || baseValue.asCell()-&gt;structure()-&gt;isDictionary())
</span><span class="cx">         return false;
</span><span class="cx">     
</span><del>-    if (stubInfo.patch.spillMode == NeedToSpill) {
</del><ins>+    if (!stubInfo.patch.registersFlushed) {
</ins><span class="cx">         // We cannot do as much inline caching if the registers were not flushed prior to this GetById. In particular,
</span><span class="cx">         // non-Value cached properties require planting calls, which requires registers to have been flushed. Thus,
</span><span class="cx">         // if registers were not flushed, don't do non-Value caching.
</span><span class="lines">@@ -1129,71 +1129,6 @@
</span><span class="cx">             structure);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static void emitCustomSetterStub(ExecState* exec, const PutPropertySlot&amp; slot,
-    StructureStubInfo&amp; stubInfo, Structure* structure, StructureChain* prototypeChain,
-    CodeLocationLabel failureLabel, RefPtr&lt;JITStubRoutine&gt;&amp; stubRoutine)
-{
-    VM* vm = &amp;exec-&gt;vm();
-    ASSERT(stubInfo.patch.spillMode == DontSpill);
-    GPRReg baseGPR = static_cast&lt;GPRReg&gt;(stubInfo.patch.baseGPR);
-#if USE(JSVALUE32_64)
-    GPRReg valueTagGPR = static_cast&lt;GPRReg&gt;(stubInfo.patch.valueTagGPR);
-#endif
-    GPRReg valueGPR = static_cast&lt;GPRReg&gt;(stubInfo.patch.valueGPR);
-    TempRegisterSet tempRegisters(stubInfo.patch.usedRegisters);
-
-    CCallHelpers stubJit(vm);
-    GPRReg scratchGPR = tempRegisters.getFreeGPR();
-    RELEASE_ASSERT(scratchGPR != InvalidGPRReg);
-    RELEASE_ASSERT(scratchGPR != baseGPR);
-    RELEASE_ASSERT(scratchGPR != valueGPR);
-    MacroAssembler::JumpList failureCases;
-    failureCases.append(branchStructure(stubJit,
-        MacroAssembler::NotEqual,
-        MacroAssembler::Address(baseGPR, JSCell::structureIDOffset()),
-        structure));
-    
-    if (prototypeChain) {
-        for (WriteBarrier&lt;Structure&gt;* it = prototypeChain-&gt;head(); *it; ++it)
-            addStructureTransitionCheck((*it)-&gt;storedPrototype(), exec-&gt;codeBlock(), stubInfo, stubJit, failureCases, scratchGPR);
-    }
-
-    // typedef void (*PutValueFunc)(ExecState*, JSObject* base, EncodedJSValue thisObject, EncodedJSValue value);
-#if USE(JSVALUE64)
-    stubJit.setupArgumentsWithExecState(MacroAssembler::TrustedImmPtr(slot.base()), baseGPR, valueGPR);
-#else
-    stubJit.setupArgumentsWithExecState(MacroAssembler::TrustedImmPtr(slot.base()), baseGPR, MacroAssembler::TrustedImm32(JSValue::CellTag), valueGPR, valueTagGPR);
-#endif
-
-    // Need to make sure that whenever this call is made in the future, we remember the
-    // place that we made it from. It just so happens to be the place that we are at
-    // right now!
-    stubJit.store32(MacroAssembler::TrustedImm32(exec-&gt;locationAsRawBits()),
-        CCallHelpers::tagFor(static_cast&lt;VirtualRegister&gt;(JSStack::ArgumentCount)));
-    stubJit.storePtr(GPRInfo::callFrameRegister, &amp;vm-&gt;topCallFrame);
-
-    MacroAssembler::Call setterCall = stubJit.call();
-    
-    MacroAssembler::Jump success = stubJit.emitExceptionCheck(CCallHelpers::InvertedExceptionCheck);
-
-    stubJit.setupArguments(CCallHelpers::TrustedImmPtr(vm), GPRInfo::callFrameRegister);
-
-    MacroAssembler::Call handlerCall = stubJit.call();
-
-    stubJit.jumpToExceptionHandler();
-    LinkBuffer patchBuffer(*vm, &amp;stubJit, exec-&gt;codeBlock());
-
-    patchBuffer.link(success, stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToDone));
-    patchBuffer.link(failureCases, failureLabel);
-    patchBuffer.link(setterCall, FunctionPtr(slot.customSetter()));
-    patchBuffer.link(handlerCall, lookupExceptionHandler);
-
-    stubRoutine = createJITStubRoutine(
-        FINALIZE_CODE_FOR(exec-&gt;codeBlock(), patchBuffer, (&quot;PutById custom setter stub for %s, return point %p&quot;,
-        toCString(*exec-&gt;codeBlock()).data(), stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToDone).executableAddress())), *vm, exec-&gt;codeBlock()-&gt;ownerExecutable(), structure);
-}
-
-
</del><span class="cx"> static bool tryCachePutByID(ExecState* exec, JSValue baseValue, const Identifier&amp; ident, const PutPropertySlot&amp; slot, StructureStubInfo&amp; stubInfo, PutKind putKind)
</span><span class="cx"> {
</span><span class="cx">     CodeBlock* codeBlock = exec-&gt;codeBlock();
</span><span class="lines">@@ -1205,13 +1140,13 @@
</span><span class="cx">     Structure* structure = baseCell-&gt;structure();
</span><span class="cx">     Structure* oldStructure = structure-&gt;previousID();
</span><span class="cx">     
</span><del>-    if (!slot.isCacheablePut() &amp;&amp; !slot.isCacheableCustomProperty())
</del><ins>+    if (!slot.isCacheable())
</ins><span class="cx">         return false;
</span><span class="cx">     if (!structure-&gt;propertyAccessesAreCacheable())
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     // Optimize self access.
</span><del>-    if (slot.base() == baseValue &amp;&amp; slot.isCacheablePut()) {
</del><ins>+    if (slot.base() == baseValue) {
</ins><span class="cx">         if (slot.type() == PutPropertySlot::NewProperty) {
</span><span class="cx">             if (structure-&gt;isDictionary())
</span><span class="cx">                 return false;
</span><span class="lines">@@ -1258,34 +1193,7 @@
</span><span class="cx">         stubInfo.initPutByIdReplace(*vm, codeBlock-&gt;ownerExecutable(), structure);
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><del>-    if (slot.isCacheableCustomProperty() &amp;&amp; stubInfo.patch.spillMode == DontSpill) {
-        RefPtr&lt;JITStubRoutine&gt; stubRoutine;
</del><span class="cx"> 
</span><del>-        StructureChain* prototypeChain = 0;
-        if (baseValue != slot.base()) {
-            PropertyOffset offsetIgnored;
-            if (normalizePrototypeChainForChainAccess(exec, baseCell, slot.base(), ident, offsetIgnored) == InvalidPrototypeChain)
-                return false;
-
-            prototypeChain = structure-&gt;prototypeChain(exec);
-        }
-        PolymorphicPutByIdList* list;
-        list = PolymorphicPutByIdList::from(putKind, stubInfo);
-
-        emitCustomSetterStub(exec, slot, stubInfo,
-            structure, prototypeChain,
-            stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToSlowCase),
-            stubRoutine);
-
-        list-&gt;addAccess(PutByIdAccess::customSetter(*vm, codeBlock-&gt;ownerExecutable(), structure, prototypeChain, slot.customSetter(), stubRoutine));
-
-        RepatchBuffer repatchBuffer(codeBlock);
-        repatchBuffer.relink(stubInfo.callReturnLocation.jumpAtOffset(stubInfo.patch.deltaCallToJump), CodeLocationLabel(stubRoutine-&gt;code().code()));
-        repatchCall(repatchBuffer, stubInfo.callReturnLocation, appropriateListBuildingPutByIdFunction(slot, putKind));
-        RELEASE_ASSERT(!list-&gt;isFull());
-        return true;
-    }
-
</del><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1309,15 +1217,13 @@
</span><span class="cx">     Structure* structure = baseCell-&gt;structure();
</span><span class="cx">     Structure* oldStructure = structure-&gt;previousID();
</span><span class="cx">     
</span><del>-    
-    if (!slot.isCacheablePut() &amp;&amp; !slot.isCacheableCustomProperty())
</del><ins>+    if (!slot.isCacheable())
</ins><span class="cx">         return false;
</span><del>-
</del><span class="cx">     if (!structure-&gt;propertyAccessesAreCacheable())
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     // Optimize self access.
</span><del>-    if (slot.base() == baseValue &amp;&amp; slot.isCacheablePut()) {
</del><ins>+    if (slot.base() == baseValue) {
</ins><span class="cx">         PolymorphicPutByIdList* list;
</span><span class="cx">         RefPtr&lt;JITStubRoutine&gt; stubRoutine;
</span><span class="cx">         
</span><span class="lines">@@ -1379,33 +1285,6 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (slot.isCacheableCustomProperty() &amp;&amp; stubInfo.patch.spillMode == DontSpill) {
-        RefPtr&lt;JITStubRoutine&gt; stubRoutine;
-        StructureChain* prototypeChain = 0;
-        if (baseValue != slot.base()) {
-            PropertyOffset offsetIgnored;
-            if (normalizePrototypeChainForChainAccess(exec, baseCell, slot.base(), propertyName, offsetIgnored) == InvalidPrototypeChain)
-                return false;
-
-            prototypeChain = structure-&gt;prototypeChain(exec);
-        }
-        PolymorphicPutByIdList* list;
-        list = PolymorphicPutByIdList::from(putKind, stubInfo);
-
-        emitCustomSetterStub(exec, slot, stubInfo,
-            structure, prototypeChain,
-            CodeLocationLabel(list-&gt;currentSlowPathTarget()),
-            stubRoutine);
-
-        list-&gt;addAccess(PutByIdAccess::customSetter(*vm, codeBlock-&gt;ownerExecutable(), structure, prototypeChain, slot.customSetter(), stubRoutine));
-
-        RepatchBuffer repatchBuffer(codeBlock);
-        repatchBuffer.relink(stubInfo.callReturnLocation.jumpAtOffset(stubInfo.patch.deltaCallToJump), CodeLocationLabel(stubRoutine-&gt;code().code()));
-        if (list-&gt;isFull())
-            repatchCall(repatchBuffer, stubInfo.callReturnLocation, appropriateGenericPutByIdFunction(slot, putKind));
-
-        return true;
-    }
</del><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitSpillRegistersModeh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/jit/SpillRegistersMode.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/SpillRegistersMode.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/jit/SpillRegistersMode.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1,35 +0,0 @@
</span><del>-/*
- * Copyright (C) 2014 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 SpillRegistersMode_h
-#define SpillRegistersMode_h
-
-namespace JSC {
-
-enum SpillRegistersMode { NeedToSpill, DontSpill };
-
-}
-
-#endif
</del></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -636,7 +636,7 @@
</span><span class="cx">     
</span><span class="cx">     if (!LLINT_ALWAYS_ACCESS_SLOW
</span><span class="cx">         &amp;&amp; baseValue.isCell()
</span><del>-        &amp;&amp; slot.isCacheablePut()) {
</del><ins>+        &amp;&amp; slot.isCacheable()) {
</ins><span class="cx">         
</span><span class="cx">         JSCell* baseCell = baseValue.asCell();
</span><span class="cx">         Structure* structure = baseCell-&gt;structure();
</span><span class="lines">@@ -1418,7 +1418,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Covers implicit globals. Since they don't exist until they first execute, we didn't know how to cache them at compile time.
</span><span class="cx">     if (modeAndType.type() == GlobalProperty || modeAndType.type() == GlobalPropertyWithVarInjectionChecks) {
</span><del>-        if (slot.isCacheablePut() &amp;&amp; slot.base() == scope &amp;&amp; scope-&gt;structure()-&gt;propertyAccessesAreCacheable()) {
</del><ins>+        if (slot.isCacheable() &amp;&amp; slot.base() == scope &amp;&amp; scope-&gt;structure()-&gt;propertyAccessesAreCacheable()) {
</ins><span class="cx">             ConcurrentJITLocker locker(codeBlock-&gt;m_lock);
</span><span class="cx">             pc[5].u.structure.set(exec-&gt;vm(), codeBlock-&gt;ownerExecutable(), scope-&gt;structure());
</span><span class="cx">             pc[6].u.operand = slot.cachedOffset();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeLookuph"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Lookup.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Lookup.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/runtime/Lookup.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -306,7 +306,7 @@
</span><span class="cx">                 thisObject-&gt;putDirect(exec-&gt;vm(), propertyName, value);
</span><span class="cx">         } else if (!(entry-&gt;attributes() &amp; ReadOnly)) {
</span><span class="cx">             entry-&gt;propertyPutter()(exec, base, JSValue::encode(slot.thisValue()), JSValue::encode(value));
</span><del>-            slot.setCacheableCustomProperty(base, entry-&gt;propertyPutter());
</del><ins>+            slot.setCustomProperty(base, entry-&gt;propertyPutter());
</ins><span class="cx">         } else if (slot.isStrictMode())
</span><span class="cx">             throwTypeError(exec, StrictModeReadonlyPropertyWriteError);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimePutPropertySloth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/PutPropertySlot.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/PutPropertySlot.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/JavaScriptCore/runtime/PutPropertySlot.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -38,7 +38,7 @@
</span><span class="cx">     
</span><span class="cx">     class PutPropertySlot {
</span><span class="cx">     public:
</span><del>-        enum Type { Uncachable, ExistingProperty, NewProperty, CustomProperty, CacheableCustomProperty };
</del><ins>+        enum Type { Uncachable, ExistingProperty, NewProperty, CustomProperty };
</ins><span class="cx">         enum Context { UnknownContext, PutById, PutByIdEval };
</span><span class="cx">         typedef void (*PutValueFunc)(ExecState*, JSObject* base, EncodedJSValue thisObject, EncodedJSValue value);
</span><span class="cx"> 
</span><span class="lines">@@ -72,15 +72,7 @@
</span><span class="cx">             m_base = base;
</span><span class="cx">             m_putFunction = function;
</span><span class="cx">         }
</span><del>-
-        void setCacheableCustomProperty(JSObject* base, PutValueFunc function)
-        {
-            m_type = CacheableCustomProperty;
-            m_base = base;
-            m_putFunction = function;
-        }
-        PutValueFunc customSetter() const { return m_putFunction; }
-
</del><ins>+        
</ins><span class="cx">         Context context() const { return static_cast&lt;Context&gt;(m_context); }
</span><span class="cx"> 
</span><span class="cx">         Type type() const { return m_type; }
</span><span class="lines">@@ -88,12 +80,10 @@
</span><span class="cx">         JSValue thisValue() const { return m_thisValue; }
</span><span class="cx"> 
</span><span class="cx">         bool isStrictMode() const { return m_isStrictMode; }
</span><del>-        bool isCacheablePut() const { return m_type == NewProperty || m_type == ExistingProperty; }
-        bool isCacheableCustomProperty() const { return m_type == CacheableCustomProperty; }
-
</del><ins>+        bool isCacheable() const { return m_type != Uncachable &amp;&amp; m_type != CustomProperty; }
</ins><span class="cx">         PropertyOffset cachedOffset() const
</span><span class="cx">         {
</span><del>-            ASSERT(isCacheablePut());
</del><ins>+            ASSERT(isCacheable());
</ins><span class="cx">             return m_offset;
</span><span class="cx">         }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/WebCore/ChangeLog        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2014-03-05  Commit Queue  &lt;commit-queue@webkit.org&gt;
+
+        Unreviewed, rolling out r165141, r165157, and r165158.
+        http://trac.webkit.org/changeset/165141
+        http://trac.webkit.org/changeset/165157
+        http://trac.webkit.org/changeset/165158
+        https://bugs.webkit.org/show_bug.cgi?id=129772
+
+        &quot;broke ftl&quot; (Requested by olliej_ on #webkit).
+
+        * ForwardingHeaders/jit/SpillRegistersMode.h: Removed.
+
</ins><span class="cx"> 2014-03-05  Martin Robinson  &lt;mrobinson@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK][CMake] The GObject DOM bindings should always be built
</span></span></pre></div>
<a id="trunkSourceWebCoreForwardingHeadersjitSpillRegistersModeh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/ForwardingHeaders/jit/SpillRegistersMode.h (165166 => 165167)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ForwardingHeaders/jit/SpillRegistersMode.h        2014-03-06 03:34:17 UTC (rev 165166)
+++ trunk/Source/WebCore/ForwardingHeaders/jit/SpillRegistersMode.h        2014-03-06 03:43:37 UTC (rev 165167)
</span><span class="lines">@@ -1,4 +0,0 @@
</span><del>-#ifndef WebCore_FWD_JITCode_h
-#define WebCore_FWD_JITCode_h
-#include &lt;JavaScriptCore/SpillRegistersMode.h&gt;
-#endif
</del></span></pre>
</div>
</div>

</body>
</html>