<!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>[189848] trunk/Source/JavaScriptCore</title>
</head>
<body>

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

<h3>Log Message</h3>
<pre>Rollout <a href="http://trac.webkit.org/projects/webkit/changeset/189774">r189774</a> and 189818.

Broke Speedometer/Full.html

Not reviewed.

* CMakeLists.txt:
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
* JavaScriptCore.xcodeproj/project.pbxproj:
* assembler/AbortReason.h:
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::Call::Call):
(JSC::AbstractMacroAssembler::repatchNearCall):
(JSC::AbstractMacroAssembler::repatchCompact):
* assembler/CodeLocation.h:
(JSC::CodeLocationNearCall::CodeLocationNearCall):
(JSC::CodeLocationCommon::callAtOffset):
(JSC::CodeLocationCommon::nearCallAtOffset):
(JSC::CodeLocationCommon::dataLabelPtrAtOffset):
(JSC::CodeLocationNearCall::callMode): Deleted.
* assembler/LinkBuffer.h:
(JSC::LinkBuffer::locationOfNearCall):
(JSC::LinkBuffer::locationOf):
* assembler/MacroAssemblerARM.h:
(JSC::MacroAssemblerARM::nearCall):
(JSC::MacroAssemblerARM::call):
(JSC::MacroAssemblerARM::linkCall):
(JSC::MacroAssemblerARM::nearTailCall): Deleted.
* assembler/MacroAssemblerARM64.h:
(JSC::MacroAssemblerARM64::nearCall):
(JSC::MacroAssemblerARM64::ret):
(JSC::MacroAssemblerARM64::linkCall):
(JSC::MacroAssemblerARM64::nearTailCall): Deleted.
* assembler/MacroAssemblerARMv7.h:
(JSC::MacroAssemblerARMv7::nearCall):
(JSC::MacroAssemblerARMv7::call):
(JSC::MacroAssemblerARMv7::linkCall):
(JSC::MacroAssemblerARMv7::nearTailCall): Deleted.
* assembler/MacroAssemblerMIPS.h:
(JSC::MacroAssemblerMIPS::nearCall):
(JSC::MacroAssemblerMIPS::call):
(JSC::MacroAssemblerMIPS::linkCall):
(JSC::MacroAssemblerMIPS::repatchCall):
(JSC::MacroAssemblerMIPS::nearTailCall): Deleted.
* assembler/MacroAssemblerSH4.h:
(JSC::MacroAssemblerSH4::call):
(JSC::MacroAssemblerSH4::nearCall):
(JSC::MacroAssemblerSH4::linkCall):
(JSC::MacroAssemblerSH4::repatchCall):
(JSC::MacroAssemblerSH4::nearTailCall): Deleted.
* assembler/MacroAssemblerX86.h:
(JSC::MacroAssemblerX86::linkCall):
* assembler/MacroAssemblerX86Common.h:
(JSC::MacroAssemblerX86Common::breakpoint):
(JSC::MacroAssemblerX86Common::nearCall):
(JSC::MacroAssemblerX86Common::nearTailCall): Deleted.
* assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::linkCall):
* bytecode/BytecodeList.json:
* bytecode/BytecodeUseDef.h:
(JSC::computeUsesForBytecodeOffset):
(JSC::computeDefsForBytecodeOffset):
* bytecode/CallLinkInfo.h:
(JSC::CallLinkInfo::callTypeFor):
(JSC::CallLinkInfo::CallLinkInfo):
(JSC::CallLinkInfo::specializationKind):
(JSC::CallLinkInfo::registerPreservationMode):
(JSC::CallLinkInfo::isVarargsCallType): Deleted.
(JSC::CallLinkInfo::callModeFor): Deleted.
(JSC::CallLinkInfo::callMode): Deleted.
(JSC::CallLinkInfo::isTailCall): Deleted.
(JSC::CallLinkInfo::isVarargs): Deleted.
* bytecode/CallLinkStatus.cpp:
(JSC::CallLinkStatus::computeFromLLInt):
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::dumpBytecode):
(JSC::CodeBlock::CodeBlock):
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::BytecodeGenerator):
(JSC::BytecodeGenerator::emitCallInTailPosition):
(JSC::BytecodeGenerator::emitCallEval):
(JSC::BytecodeGenerator::emitCall):
(JSC::BytecodeGenerator::emitCallVarargsInTailPosition):
(JSC::BytecodeGenerator::emitConstructVarargs):
* bytecompiler/NodesCodegen.cpp:
(JSC::CallArguments::CallArguments):
(JSC::LabelNode::emitBytecode):
* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::addCallWithoutSettingResult):
* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::DFG::LowerDFGToLLVM::compileCallOrConstruct):
* interpreter/Interpreter.h:
(JSC::Interpreter::isCallBytecode):
* jit/CCallHelpers.h:
(JSC::CCallHelpers::jumpToExceptionHandler):
(JSC::CCallHelpers::prepareForTailCallSlow): Deleted.
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
(JSC::JIT::privateCompileSlowCases):
* jit/JIT.h:
* jit/JITCall.cpp:
(JSC::JIT::compileOpCall):
(JSC::JIT::compileOpCallSlowCase):
(JSC::JIT::emit_op_call):
(JSC::JIT::emit_op_call_eval):
(JSC::JIT::emit_op_call_varargs):
(JSC::JIT::emit_op_construct_varargs):
(JSC::JIT::emitSlow_op_call):
(JSC::JIT::emitSlow_op_call_eval):
(JSC::JIT::emitSlow_op_call_varargs):
(JSC::JIT::emitSlow_op_construct_varargs):
(JSC::JIT::emit_op_tail_call): Deleted.
(JSC::JIT::emit_op_tail_call_varargs): Deleted.
(JSC::JIT::emitSlow_op_tail_call): Deleted.
(JSC::JIT::emitSlow_op_tail_call_varargs): Deleted.
* jit/JITCall32_64.cpp:
(JSC::JIT::emitSlow_op_call):
(JSC::JIT::emitSlow_op_call_eval):
(JSC::JIT::emitSlow_op_call_varargs):
(JSC::JIT::emitSlow_op_construct_varargs):
(JSC::JIT::emit_op_call):
(JSC::JIT::emit_op_call_eval):
(JSC::JIT::emit_op_call_varargs):
(JSC::JIT::emit_op_construct_varargs):
(JSC::JIT::compileOpCall):
(JSC::JIT::compileOpCallSlowCase):
(JSC::JIT::emitSlow_op_tail_call): Deleted.
(JSC::JIT::emitSlow_op_tail_call_varargs): Deleted.
(JSC::JIT::emit_op_tail_call): Deleted.
(JSC::JIT::emit_op_tail_call_varargs): Deleted.
* jit/JITInlines.h:
(JSC::JIT::emitNakedCall):
(JSC::JIT::updateTopCallFrame):
(JSC::JIT::emitNakedTailCall): Deleted.
* jit/JITOperations.cpp:
* jit/JITOperations.h:
* jit/Repatch.cpp:
(JSC::linkVirtualFor):
(JSC::linkPolymorphicCall):
* jit/ThunkGenerators.cpp:
(JSC::throwExceptionFromCallSlowPathGenerator):
(JSC::slowPathFor):
(JSC::linkCallThunkGenerator):
(JSC::virtualThunkFor):
(JSC::arityFixupGenerator):
(JSC::baselineGetterReturnThunkGenerator):
(JSC::unreachableGenerator): Deleted.
* jit/ThunkGenerators.h:
* llint/LowLevelInterpreter.asm:
* llint/LowLevelInterpreter32_64.asm:
* llint/LowLevelInterpreter64.asm:
* runtime/CommonSlowPaths.h:
(JSC::CommonSlowPaths::arityCheckFor):
(JSC::CommonSlowPaths::opIn):
* tests/stress/mutual-tail-call-no-stack-overflow.js: Removed.
* tests/stress/tail-call-no-stack-overflow.js: Removed.
* tests/stress/tail-call-recognize.js: Removed.
* tests/stress/tail-call-varargs-no-stack-overflow.js: Removed.
* tests/stress/tail-calls-dont-overwrite-live-stack.js: Removed.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreCMakeListstxt">trunk/Source/JavaScriptCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj">trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxprojfilters">trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerAbortReasonh">trunk/Source/JavaScriptCore/assembler/AbortReason.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerAbstractMacroAssemblerh">trunk/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerCodeLocationh">trunk/Source/JavaScriptCore/assembler/CodeLocation.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerLinkBufferh">trunk/Source/JavaScriptCore/assembler/LinkBuffer.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerMacroAssemblerARMh">trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerMacroAssemblerARM64h">trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerMacroAssemblerARMv7h">trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerMacroAssemblerMIPSh">trunk/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerMacroAssemblerSH4h">trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerMacroAssemblerX86h">trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerMacroAssemblerX86Commonh">trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerMacroAssemblerX86_64h">trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeBytecodeListjson">trunk/Source/JavaScriptCore/bytecode/BytecodeList.json</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeBytecodeUseDefh">trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCallLinkInfoh">trunk/Source/JavaScriptCore/bytecode/CallLinkInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCallLinkStatuscpp">trunk/Source/JavaScriptCore/bytecode/CallLinkStatus.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp">trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerNodesCodegencpp">trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp">trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp">trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterInterpreterh">trunk/Source/JavaScriptCore/interpreter/Interpreter.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitCCallHelpersh">trunk/Source/JavaScriptCore/jit/CCallHelpers.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITcpp">trunk/Source/JavaScriptCore/jit/JIT.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITh">trunk/Source/JavaScriptCore/jit/JIT.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITCallcpp">trunk/Source/JavaScriptCore/jit/JITCall.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITCall32_64cpp">trunk/Source/JavaScriptCore/jit/JITCall32_64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITInlinesh">trunk/Source/JavaScriptCore/jit/JITInlines.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="#trunkSourceJavaScriptCorejitRepatchcpp">trunk/Source/JavaScriptCore/jit/Repatch.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitThunkGeneratorscpp">trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitThunkGeneratorsh">trunk/Source/JavaScriptCore/jit/ThunkGenerators.h</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreterasm">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreter32_64asm">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreter64asm">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCommonSlowPathsh">trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoretestsstressmutualtailcallnostackoverflowjs">trunk/Source/JavaScriptCore/tests/stress/mutual-tail-call-no-stack-overflow.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstresstailcallnostackoverflowjs">trunk/Source/JavaScriptCore/tests/stress/tail-call-no-stack-overflow.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstresstailcallrecognizejs">trunk/Source/JavaScriptCore/tests/stress/tail-call-recognize.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstresstailcallvarargsnostackoverflowjs">trunk/Source/JavaScriptCore/tests/stress/tail-call-varargs-no-stack-overflow.js</a></li>
<li><a href="#trunkSourceJavaScriptCoretestsstresstailcallsdontoverwritelivestackjs">trunk/Source/JavaScriptCore/tests/stress/tail-calls-dont-overwrite-live-stack.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/CMakeLists.txt (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/CMakeLists.txt        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/CMakeLists.txt        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -80,7 +80,6 @@
</span><span class="cx">     bytecode/CallEdge.cpp
</span><span class="cx">     bytecode/CallLinkInfo.cpp
</span><span class="cx">     bytecode/CallLinkStatus.cpp
</span><del>-    bytecode/CallMode.cpp
</del><span class="cx">     bytecode/CallVariant.cpp
</span><span class="cx">     bytecode/CodeBlock.cpp
</span><span class="cx">     bytecode/CodeBlockHash.cpp
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -1,3 +1,166 @@
</span><ins>+2015-09-15  Michael Saboff  &lt;msaboff@apple.com&gt;
+
+        Rollout r189774 and 189818.
+
+        Broke Speedometer/Full.html
+
+        Not reviewed.
+
+        * CMakeLists.txt:
+        * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+        * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * assembler/AbortReason.h:
+        * assembler/AbstractMacroAssembler.h:
+        (JSC::AbstractMacroAssembler::Call::Call):
+        (JSC::AbstractMacroAssembler::repatchNearCall):
+        (JSC::AbstractMacroAssembler::repatchCompact):
+        * assembler/CodeLocation.h:
+        (JSC::CodeLocationNearCall::CodeLocationNearCall):
+        (JSC::CodeLocationCommon::callAtOffset):
+        (JSC::CodeLocationCommon::nearCallAtOffset):
+        (JSC::CodeLocationCommon::dataLabelPtrAtOffset):
+        (JSC::CodeLocationNearCall::callMode): Deleted.
+        * assembler/LinkBuffer.h:
+        (JSC::LinkBuffer::locationOfNearCall):
+        (JSC::LinkBuffer::locationOf):
+        * assembler/MacroAssemblerARM.h:
+        (JSC::MacroAssemblerARM::nearCall):
+        (JSC::MacroAssemblerARM::call):
+        (JSC::MacroAssemblerARM::linkCall):
+        (JSC::MacroAssemblerARM::nearTailCall): Deleted.
+        * assembler/MacroAssemblerARM64.h:
+        (JSC::MacroAssemblerARM64::nearCall):
+        (JSC::MacroAssemblerARM64::ret):
+        (JSC::MacroAssemblerARM64::linkCall):
+        (JSC::MacroAssemblerARM64::nearTailCall): Deleted.
+        * assembler/MacroAssemblerARMv7.h:
+        (JSC::MacroAssemblerARMv7::nearCall):
+        (JSC::MacroAssemblerARMv7::call):
+        (JSC::MacroAssemblerARMv7::linkCall):
+        (JSC::MacroAssemblerARMv7::nearTailCall): Deleted.
+        * assembler/MacroAssemblerMIPS.h:
+        (JSC::MacroAssemblerMIPS::nearCall):
+        (JSC::MacroAssemblerMIPS::call):
+        (JSC::MacroAssemblerMIPS::linkCall):
+        (JSC::MacroAssemblerMIPS::repatchCall):
+        (JSC::MacroAssemblerMIPS::nearTailCall): Deleted.
+        * assembler/MacroAssemblerSH4.h:
+        (JSC::MacroAssemblerSH4::call):
+        (JSC::MacroAssemblerSH4::nearCall):
+        (JSC::MacroAssemblerSH4::linkCall):
+        (JSC::MacroAssemblerSH4::repatchCall):
+        (JSC::MacroAssemblerSH4::nearTailCall): Deleted.
+        * assembler/MacroAssemblerX86.h:
+        (JSC::MacroAssemblerX86::linkCall):
+        * assembler/MacroAssemblerX86Common.h:
+        (JSC::MacroAssemblerX86Common::breakpoint):
+        (JSC::MacroAssemblerX86Common::nearCall):
+        (JSC::MacroAssemblerX86Common::nearTailCall): Deleted.
+        * assembler/MacroAssemblerX86_64.h:
+        (JSC::MacroAssemblerX86_64::linkCall):
+        * bytecode/BytecodeList.json:
+        * bytecode/BytecodeUseDef.h:
+        (JSC::computeUsesForBytecodeOffset):
+        (JSC::computeDefsForBytecodeOffset):
+        * bytecode/CallLinkInfo.h:
+        (JSC::CallLinkInfo::callTypeFor):
+        (JSC::CallLinkInfo::CallLinkInfo):
+        (JSC::CallLinkInfo::specializationKind):
+        (JSC::CallLinkInfo::registerPreservationMode):
+        (JSC::CallLinkInfo::isVarargsCallType): Deleted.
+        (JSC::CallLinkInfo::callModeFor): Deleted.
+        (JSC::CallLinkInfo::callMode): Deleted.
+        (JSC::CallLinkInfo::isTailCall): Deleted.
+        (JSC::CallLinkInfo::isVarargs): Deleted.
+        * bytecode/CallLinkStatus.cpp:
+        (JSC::CallLinkStatus::computeFromLLInt):
+        * bytecode/CodeBlock.cpp:
+        (JSC::CodeBlock::dumpBytecode):
+        (JSC::CodeBlock::CodeBlock):
+        * bytecompiler/BytecodeGenerator.cpp:
+        (JSC::BytecodeGenerator::BytecodeGenerator):
+        (JSC::BytecodeGenerator::emitCallInTailPosition):
+        (JSC::BytecodeGenerator::emitCallEval):
+        (JSC::BytecodeGenerator::emitCall):
+        (JSC::BytecodeGenerator::emitCallVarargsInTailPosition):
+        (JSC::BytecodeGenerator::emitConstructVarargs):
+        * bytecompiler/NodesCodegen.cpp:
+        (JSC::CallArguments::CallArguments):
+        (JSC::LabelNode::emitBytecode):
+        * dfg/DFGByteCodeParser.cpp:
+        (JSC::DFG::ByteCodeParser::addCallWithoutSettingResult):
+        * ftl/FTLLowerDFGToLLVM.cpp:
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileCallOrConstruct):
+        * interpreter/Interpreter.h:
+        (JSC::Interpreter::isCallBytecode):
+        * jit/CCallHelpers.h:
+        (JSC::CCallHelpers::jumpToExceptionHandler):
+        (JSC::CCallHelpers::prepareForTailCallSlow): Deleted.
+        * jit/JIT.cpp:
+        (JSC::JIT::privateCompileMainPass):
+        (JSC::JIT::privateCompileSlowCases):
+        * jit/JIT.h:
+        * jit/JITCall.cpp:
+        (JSC::JIT::compileOpCall):
+        (JSC::JIT::compileOpCallSlowCase):
+        (JSC::JIT::emit_op_call):
+        (JSC::JIT::emit_op_call_eval):
+        (JSC::JIT::emit_op_call_varargs):
+        (JSC::JIT::emit_op_construct_varargs):
+        (JSC::JIT::emitSlow_op_call):
+        (JSC::JIT::emitSlow_op_call_eval):
+        (JSC::JIT::emitSlow_op_call_varargs):
+        (JSC::JIT::emitSlow_op_construct_varargs):
+        (JSC::JIT::emit_op_tail_call): Deleted.
+        (JSC::JIT::emit_op_tail_call_varargs): Deleted.
+        (JSC::JIT::emitSlow_op_tail_call): Deleted.
+        (JSC::JIT::emitSlow_op_tail_call_varargs): Deleted.
+        * jit/JITCall32_64.cpp:
+        (JSC::JIT::emitSlow_op_call):
+        (JSC::JIT::emitSlow_op_call_eval):
+        (JSC::JIT::emitSlow_op_call_varargs):
+        (JSC::JIT::emitSlow_op_construct_varargs):
+        (JSC::JIT::emit_op_call):
+        (JSC::JIT::emit_op_call_eval):
+        (JSC::JIT::emit_op_call_varargs):
+        (JSC::JIT::emit_op_construct_varargs):
+        (JSC::JIT::compileOpCall):
+        (JSC::JIT::compileOpCallSlowCase):
+        (JSC::JIT::emitSlow_op_tail_call): Deleted.
+        (JSC::JIT::emitSlow_op_tail_call_varargs): Deleted.
+        (JSC::JIT::emit_op_tail_call): Deleted.
+        (JSC::JIT::emit_op_tail_call_varargs): Deleted.
+        * jit/JITInlines.h:
+        (JSC::JIT::emitNakedCall):
+        (JSC::JIT::updateTopCallFrame):
+        (JSC::JIT::emitNakedTailCall): Deleted.
+        * jit/JITOperations.cpp:
+        * jit/JITOperations.h:
+        * jit/Repatch.cpp:
+        (JSC::linkVirtualFor):
+        (JSC::linkPolymorphicCall):
+        * jit/ThunkGenerators.cpp:
+        (JSC::throwExceptionFromCallSlowPathGenerator):
+        (JSC::slowPathFor):
+        (JSC::linkCallThunkGenerator):
+        (JSC::virtualThunkFor):
+        (JSC::arityFixupGenerator):
+        (JSC::baselineGetterReturnThunkGenerator):
+        (JSC::unreachableGenerator): Deleted.
+        * jit/ThunkGenerators.h:
+        * llint/LowLevelInterpreter.asm:
+        * llint/LowLevelInterpreter32_64.asm:
+        * llint/LowLevelInterpreter64.asm:
+        * runtime/CommonSlowPaths.h:
+        (JSC::CommonSlowPaths::arityCheckFor):
+        (JSC::CommonSlowPaths::opIn):
+        * tests/stress/mutual-tail-call-no-stack-overflow.js: Removed.
+        * tests/stress/tail-call-no-stack-overflow.js: Removed.
+        * tests/stress/tail-call-recognize.js: Removed.
+        * tests/stress/tail-call-varargs-no-stack-overflow.js: Removed.
+        * tests/stress/tail-calls-dont-overwrite-live-stack.js: Removed.
+
</ins><span class="cx"> 2015-09-15  Sukolsak Sakshuwong  &lt;sukolsak@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Implement imported global variables in WebAssembly
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -319,7 +319,6 @@
</span><span class="cx">     &lt;ClCompile Include=&quot;..\bytecode\CallEdge.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\bytecode\CallLinkInfo.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\bytecode\CallLinkStatus.cpp&quot; /&gt;
</span><del>-    &lt;ClCompile Include=&quot;..\bytecode\CallMode.cpp&quot; /&gt;
</del><span class="cx">     &lt;ClCompile Include=&quot;..\bytecode\CallVariant.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\bytecode\CodeBlock.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\bytecode\CodeBlockHash.cpp&quot; /&gt;
</span><span class="lines">@@ -1013,7 +1012,6 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\bytecode\CallEdge.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\bytecode\CallLinkInfo.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\bytecode\CallLinkStatus.h&quot; /&gt;
</span><del>-    &lt;ClInclude Include=&quot;..\bytecode\CallMode.h&quot; /&gt;
</del><span class="cx">     &lt;ClInclude Include=&quot;..\bytecode\CallReturnOffsetToBytecodeOffset.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\bytecode\CallVariant.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\bytecode\CodeBlock.h&quot; /&gt;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxprojfilters"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -162,9 +162,6 @@
</span><span class="cx">     &lt;ClCompile Include=&quot;..\bytecode\CallLinkStatus.cpp&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;bytecode&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClCompile&gt;
</span><del>-    &lt;ClCompile Include=&quot;..\bytecode\CallMode.cpp&quot;&gt;
-      &lt;Filter&gt;bytecode&lt;/Filter&gt;
-    &lt;/ClCompile&gt;
</del><span class="cx">     &lt;ClCompile Include=&quot;..\bytecode\CodeBlock.cpp&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;bytecode&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClCompile&gt;
</span><span class="lines">@@ -2037,9 +2034,6 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\bytecode\CallLinkStatus.h&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;bytecode&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClInclude&gt;
</span><del>-    &lt;ClInclude Include=&quot;..\bytecode\CallMode.h&quot;&gt;
-      &lt;Filter&gt;bytecode&lt;/Filter&gt;
-    &lt;/ClInclude&gt;
</del><span class="cx">     &lt;ClInclude Include=&quot;..\bytecode\CallReturnOffsetToBytecodeOffset.h&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;bytecode&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClInclude&gt;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -969,8 +969,6 @@
</span><span class="cx">                 5DBB1525131D0BD70056AD36 /* minidom.js in Copy Support Script */ = {isa = PBXBuildFile; fileRef = 1412110D0A48788700480255 /* minidom.js */; };
</span><span class="cx">                 5DE6E5B30E1728EC00180407 /* create_hash_table in Headers */ = {isa = PBXBuildFile; fileRef = F692A8540255597D01FF60F7 /* create_hash_table */; settings = {ATTRIBUTES = (); }; };
</span><span class="cx">                 623A37EC1B87A7C000754209 /* RegisterMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 623A37EB1B87A7BD00754209 /* RegisterMap.h */; };
</span><del>-                627673231B680C1E00FD9F2E /* CallMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 627673211B680C1E00FD9F2E /* CallMode.cpp */; };
-                627673241B680C1E00FD9F2E /* CallMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 627673221B680C1E00FD9F2E /* CallMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><span class="cx">                 62D2D38F1ADF103F000206C1 /* FunctionRareData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62D2D38D1ADF103F000206C1 /* FunctionRareData.cpp */; };
</span><span class="cx">                 62D2D3901ADF103F000206C1 /* FunctionRareData.h in Headers */ = {isa = PBXBuildFile; fileRef = 62D2D38E1ADF103F000206C1 /* FunctionRareData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 62E3D5F01B8D0B7300B868BB /* DataFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62E3D5EF1B8D0B7300B868BB /* DataFormat.cpp */; };
</span><span class="lines">@@ -2774,8 +2772,6 @@
</span><span class="cx">                 5DDDF44614FEE72200B4FB4D /* LLIntDesiredOffsets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LLIntDesiredOffsets.h; path = LLIntOffsets/LLIntDesiredOffsets.h; sourceTree = BUILT_PRODUCTS_DIR; };
</span><span class="cx">                 5DE3D0F40DD8DDFB00468714 /* WebKitAvailability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitAvailability.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 623A37EB1B87A7BD00754209 /* RegisterMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterMap.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                627673211B680C1E00FD9F2E /* CallMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CallMode.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
-                627673221B680C1E00FD9F2E /* CallMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallMode.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 62A9A29E1B0BED4800BD54CA /* DFGLazyNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGLazyNode.cpp; path = dfg/DFGLazyNode.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 62A9A29F1B0BED4800BD54CA /* DFGLazyNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGLazyNode.h; path = dfg/DFGLazyNode.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 62D2D38D1ADF103F000206C1 /* FunctionRareData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FunctionRareData.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -5542,8 +5538,6 @@
</span><span class="cx">                                 0F0B83AF14BCF71400885B4F /* CallLinkInfo.h */,
</span><span class="cx">                                 0F93329314CA7DC10085F3C6 /* CallLinkStatus.cpp */,
</span><span class="cx">                                 0F93329414CA7DC10085F3C6 /* CallLinkStatus.h */,
</span><del>-                                627673211B680C1E00FD9F2E /* CallMode.cpp */,
-                                627673221B680C1E00FD9F2E /* CallMode.h */,
</del><span class="cx">                                 0F0B83B814BCF95B00885B4F /* CallReturnOffsetToBytecodeOffset.h */,
</span><span class="cx">                                 0F3B7E2419A11B8000D9BC56 /* CallVariant.cpp */,
</span><span class="cx">                                 0F3B7E2519A11B8000D9BC56 /* CallVariant.h */,
</span><span class="lines">@@ -6196,7 +6190,6 @@
</span><span class="cx">                                 E33B3E261B7ABD750048DB2E /* InspectorInstrumentationObject.lut.h in Headers */,
</span><span class="cx">                                 A7D89CFE17A0B8CC00773AD8 /* DFGOSRAvailabilityAnalysisPhase.h in Headers */,
</span><span class="cx">                                 0FD82E57141DAF1000179C94 /* DFGOSREntry.h in Headers */,
</span><del>-                                627673241B680C1E00FD9F2E /* CallMode.h in Headers */,
</del><span class="cx">                                 0FD8A32617D51F5700CA2C40 /* DFGOSREntrypointCreationPhase.h in Headers */,
</span><span class="cx">                                 62F2AA381B0BEDE300610C7A /* DFGLazyNode.h in Headers */,
</span><span class="cx">                                 0FC0976A1468A6F700CF2442 /* DFGOSRExit.h in Headers */,
</span><span class="lines">@@ -7978,7 +7971,6 @@
</span><span class="cx">                                 0F2D4DEF19832DD3007D4B19 /* TypeSet.cpp in Sources */,
</span><span class="cx">                                 9335F24D12E6765B002B5553 /* StringRecursionChecker.cpp in Sources */,
</span><span class="cx">                                 BCDE3B430E6C832D001453A7 /* Structure.cpp in Sources */,
</span><del>-                                627673231B680C1E00FD9F2E /* CallMode.cpp in Sources */,
</del><span class="cx">                                 7E4EE70F0EBB7A5B005934AA /* StructureChain.cpp in Sources */,
</span><span class="cx">                                 C2F0F2D116BAEEE900187C19 /* StructureRareData.cpp in Sources */,
</span><span class="cx">                                 0FD3E40B1B618B6600C80E1E /* ObjectPropertyConditionSet.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerAbortReasonh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/AbortReason.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/AbortReason.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/AbortReason.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -58,7 +58,6 @@
</span><span class="cx">     DFGUnreachableBasicBlock                          = 220,
</span><span class="cx">     DFGUnreasonableOSREntryJumpDestination            = 230,
</span><span class="cx">     DFGVarargsThrowingPathDidNotThrow                 = 235,
</span><del>-    JITDidReturnFromTailCall                          = 237,
</del><span class="cx">     JITDivOperandsAreNotNumbers                       = 240,
</span><span class="cx">     JITGetByValResultIsNotEmpty                       = 250,
</span><span class="cx">     JITNotSupported                                   = 260,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerAbstractMacroAssemblerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -507,9 +507,7 @@
</span><span class="cx">             None = 0x0,
</span><span class="cx">             Linkable = 0x1,
</span><span class="cx">             Near = 0x2,
</span><del>-            Tail = 0x4,
</del><span class="cx">             LinkableNear = 0x3,
</span><del>-            LinkableNearTail = 0x7,
</del><span class="cx">         };
</span><span class="cx"> 
</span><span class="cx">         Call()
</span><span class="lines">@@ -964,15 +962,7 @@
</span><span class="cx"> 
</span><span class="cx">     static void repatchNearCall(CodeLocationNearCall nearCall, CodeLocationLabel destination)
</span><span class="cx">     {
</span><del>-        switch (nearCall.callMode()) {
-        case NearCallMode::Tail:
-            AssemblerType::relinkJump(nearCall.dataLocation(), destination.executableAddress());
-            return;
-        case NearCallMode::Regular:
-            AssemblerType::relinkCall(nearCall.dataLocation(), destination.executableAddress());
-            return;
-        }
-        RELEASE_ASSERT_NOT_REACHED();
</del><ins>+        AssemblerType::relinkCall(nearCall.dataLocation(), destination.executableAddress());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static void repatchCompact(CodeLocationDataLabelCompact dataLabelCompact, int32_t value)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerCodeLocationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/CodeLocation.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/CodeLocation.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/CodeLocation.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -32,8 +32,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-enum NearCallMode { Regular, Tail };
-
</del><span class="cx"> class CodeLocationInstruction;
</span><span class="cx"> class CodeLocationLabel;
</span><span class="cx"> class CodeLocationJump;
</span><span class="lines">@@ -61,7 +59,7 @@
</span><span class="cx">     CodeLocationLabel labelAtOffset(int offset);
</span><span class="cx">     CodeLocationJump jumpAtOffset(int offset);
</span><span class="cx">     CodeLocationCall callAtOffset(int offset);
</span><del>-    CodeLocationNearCall nearCallAtOffset(int offset, NearCallMode);
</del><ins>+    CodeLocationNearCall nearCallAtOffset(int offset);
</ins><span class="cx">     CodeLocationDataLabelPtr dataLabelPtrAtOffset(int offset);
</span><span class="cx">     CodeLocationDataLabel32 dataLabel32AtOffset(int offset);
</span><span class="cx">     CodeLocationDataLabelCompact dataLabelCompactAtOffset(int offset);
</span><span class="lines">@@ -117,13 +115,10 @@
</span><span class="cx"> class CodeLocationNearCall : public CodeLocationCommon {
</span><span class="cx"> public:
</span><span class="cx">     CodeLocationNearCall() {}
</span><del>-    explicit CodeLocationNearCall(MacroAssemblerCodePtr location, NearCallMode callMode)
-        : CodeLocationCommon(location), m_callMode(callMode) { }
-    explicit CodeLocationNearCall(void* location, NearCallMode callMode)
-        : CodeLocationCommon(MacroAssemblerCodePtr(location)), m_callMode(callMode) { }
-    NearCallMode callMode() { return m_callMode; }
-private:
-    NearCallMode m_callMode = NearCallMode::Regular;
</del><ins>+    explicit CodeLocationNearCall(MacroAssemblerCodePtr location)
+        : CodeLocationCommon(location) {}
+    explicit CodeLocationNearCall(void* location)
+        : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> class CodeLocationDataLabel32 : public CodeLocationCommon {
</span><span class="lines">@@ -186,10 +181,10 @@
</span><span class="cx">     return CodeLocationCall(reinterpret_cast&lt;char*&gt;(dataLocation()) + offset);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline CodeLocationNearCall CodeLocationCommon::nearCallAtOffset(int offset, NearCallMode callMode)
</del><ins>+inline CodeLocationNearCall CodeLocationCommon::nearCallAtOffset(int offset)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT_VALID_CODE_OFFSET(offset);
</span><del>-    return CodeLocationNearCall(reinterpret_cast&lt;char*&gt;(dataLocation()) + offset, callMode);
</del><ins>+    return CodeLocationNearCall(reinterpret_cast&lt;char*&gt;(dataLocation()) + offset);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline CodeLocationDataLabelPtr CodeLocationCommon::dataLabelPtrAtOffset(int offset)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerLinkBufferh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/LinkBuffer.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/LinkBuffer.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/LinkBuffer.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -180,8 +180,7 @@
</span><span class="cx">     {
</span><span class="cx">         ASSERT(call.isFlagSet(Call::Linkable));
</span><span class="cx">         ASSERT(call.isFlagSet(Call::Near));
</span><del>-        return CodeLocationNearCall(MacroAssembler::getLinkerAddress(code(), applyOffset(call.m_label)),
-            call.isFlagSet(Call::Tail) ? NearCallMode::Tail : NearCallMode::Regular);
</del><ins>+        return CodeLocationNearCall(MacroAssembler::getLinkerAddress(code(), applyOffset(call.m_label)));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     CodeLocationLabel locationOf(PatchableJump jump)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerMacroAssemblerARMh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -904,11 +904,6 @@
</span><span class="cx">         return Call(m_assembler.blx(ARMRegisters::S1), Call::LinkableNear);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    Call nearTailCall()
-    {
-        return Call(m_assembler.jmp(), Call::LinkableNearTail);
-    }
-
</del><span class="cx">     Call call(RegisterID target)
</span><span class="cx">     {
</span><span class="cx">         return Call(m_assembler.blx(target), Call::None);
</span><span class="lines">@@ -1493,10 +1488,7 @@
</span><span class="cx"> 
</span><span class="cx">     static void linkCall(void* code, Call call, FunctionPtr function)
</span><span class="cx">     {
</span><del>-        if (call.isFlagSet(Call::Tail))
-            ARMAssembler::linkJump(code, call.m_label, function.value());
-        else
-            ARMAssembler::linkCall(code, call.m_label, function.value());
</del><ins>+        ARMAssembler::linkCall(code, call.m_label, function.value());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerMacroAssemblerARM64h"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -2204,13 +2204,6 @@
</span><span class="cx">         return Call(m_assembler.label(), Call::LinkableNear);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ALWAYS_INLINE Call nearTailCall()
-    {
-        AssemblerLabel label = m_assembler.label();
-        m_assembler.b();
-        return Call(label, Call::LinkableNearTail);
-    }
-
</del><span class="cx">     ALWAYS_INLINE void ret()
</span><span class="cx">     {
</span><span class="cx">         m_assembler.ret();
</span><span class="lines">@@ -2889,12 +2882,10 @@
</span><span class="cx"> 
</span><span class="cx">     static void linkCall(void* code, Call call, FunctionPtr function)
</span><span class="cx">     {
</span><del>-        if (!call.isFlagSet(Call::Near))
-            ARM64Assembler::linkPointer(code, call.m_label.labelAtOffset(REPATCH_OFFSET_CALL_TO_POINTER), function.value());
-        else if (call.isFlagSet(Call::Tail))
-            ARM64Assembler::linkJump(code, call.m_label, function.value());
-        else
</del><ins>+        if (call.isFlagSet(Call::Near))
</ins><span class="cx">             ARM64Assembler::linkCall(code, call.m_label, function.value());
</span><ins>+        else
+            ARM64Assembler::linkPointer(code, call.m_label.labelAtOffset(REPATCH_OFFSET_CALL_TO_POINTER), function.value());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     CachedTempRegister m_dataMemoryTempRegister;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerMacroAssemblerARMv7h"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -1677,12 +1677,6 @@
</span><span class="cx">         return Call(m_assembler.blx(dataTempRegister), Call::LinkableNear);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ALWAYS_INLINE Call nearTailCall()
-    {
-        moveFixedWidthEncoding(TrustedImm32(0), dataTempRegister);
-        return Call(m_assembler.bx(dataTempRegister), Call::LinkableNearTail);
-    }
-
</del><span class="cx">     ALWAYS_INLINE Call call()
</span><span class="cx">     {
</span><span class="cx">         moveFixedWidthEncoding(TrustedImm32(0), dataTempRegister);
</span><span class="lines">@@ -2018,10 +2012,7 @@
</span><span class="cx"> 
</span><span class="cx">     static void linkCall(void* code, Call call, FunctionPtr function)
</span><span class="cx">     {
</span><del>-        if (call.isFlagSet(Call::Tail))
-            ARMv7Assembler::linkJump(code, call.m_label, function.value());
-        else
-            ARMv7Assembler::linkCall(code, call.m_label, function.value());
</del><ins>+        ARMv7Assembler::linkCall(code, call.m_label, function.value());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(MASM_PROBE)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerMacroAssemblerMIPSh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -1975,16 +1975,6 @@
</span><span class="cx">         return Call(m_assembler.label(), Call::LinkableNear);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    Call nearTailCall()
-    {
-        m_assembler.nop();
-        m_assembler.nop();
-        m_assembler.beq(MIPSRegisters::zero, MIPSRegisters::zero, 0);
-        m_assembler.nop();
-        insertRelaxationWords();
-        return Call(m_assembler.label(), Call::LinkableNearTail);
-    }
-
</del><span class="cx">     Call call()
</span><span class="cx">     {
</span><span class="cx">         m_assembler.lui(MIPSRegisters::t9, 0);
</span><span class="lines">@@ -2810,10 +2800,7 @@
</span><span class="cx"> 
</span><span class="cx">     static void linkCall(void* code, Call call, FunctionPtr function)
</span><span class="cx">     {
</span><del>-        if (call.isFlagSet(Call::Tail))
-            MIPSAssembler::linkJump(code, call.m_label, function.value());
-        else
-            MIPSAssembler::linkCall(code, call.m_label, function.value());
</del><ins>+        MIPSAssembler::linkCall(code, call.m_label, function.value());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static void repatchCall(CodeLocationCall call, CodeLocationLabel destination)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerMacroAssemblerSH4h"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -2403,11 +2403,6 @@
</span><span class="cx">         return Call(m_assembler.call(), Call::Linkable);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    Call nearTailCall()
-    {
-        return Call(m_assembler.jump(), Call::LinkableNearTail);
-    }
-
</del><span class="cx">     Call nearCall()
</span><span class="cx">     {
</span><span class="cx">         return Call(m_assembler.call(), Call::LinkableNear);
</span><span class="lines">@@ -2613,10 +2608,7 @@
</span><span class="cx"> 
</span><span class="cx">     static void linkCall(void* code, Call call, FunctionPtr function)
</span><span class="cx">     {
</span><del>-        if (call.isFlagSet(Call::Tail))
-            SH4Assembler::linkJump(code, call.m_label, function.value());
-        else
-            SH4Assembler::linkCall(code, call.m_label, function.value());
</del><ins>+        SH4Assembler::linkCall(code, call.m_label, function.value());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static void repatchCall(CodeLocationCall call, CodeLocationLabel destination)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerMacroAssemblerX86h"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -361,10 +361,7 @@
</span><span class="cx"> 
</span><span class="cx">     static void linkCall(void* code, Call call, FunctionPtr function)
</span><span class="cx">     {
</span><del>-        if (call.isFlagSet(Call::Tail))
-            X86Assembler::linkJump(code, call.m_label, function.value());
-        else
-            X86Assembler::linkCall(code, call.m_label, function.value());
</del><ins>+        X86Assembler::linkCall(code, call.m_label, function.value());
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerMacroAssemblerX86Commonh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -1403,11 +1403,6 @@
</span><span class="cx">         m_assembler.int3();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    Call nearTailCall()
-    {
-        return Call(m_assembler.jmp(), Call::LinkableNearTail);
-    }
-
</del><span class="cx">     Call nearCall()
</span><span class="cx">     {
</span><span class="cx">         return Call(m_assembler.call(), Call::LinkableNear);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerMacroAssemblerX86_64h"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -872,8 +872,6 @@
</span><span class="cx">     {
</span><span class="cx">         if (!call.isFlagSet(Call::Near))
</span><span class="cx">             X86Assembler::linkPointer(code, call.m_label.labelAtOffset(-REPATCH_OFFSET_CALL_R11), function.value());
</span><del>-        else if (call.isFlagSet(Call::Tail))
-            X86Assembler::linkJump(code, call.m_label, function.value());
</del><span class="cx">         else
</span><span class="cx">             X86Assembler::linkCall(code, call.m_label, function.value());
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeBytecodeListjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/BytecodeList.json (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/BytecodeList.json        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/bytecode/BytecodeList.json        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -92,10 +92,8 @@
</span><span class="cx">             { &quot;name&quot; : &quot;op_new_func_exp&quot;, &quot;length&quot; : 4 },
</span><span class="cx">             { &quot;name&quot; : &quot;op_new_arrow_func_exp&quot;, &quot;length&quot; : 5 },
</span><span class="cx">             { &quot;name&quot; : &quot;op_call&quot;, &quot;length&quot; : 9 },
</span><del>-            { &quot;name&quot; : &quot;op_tail_call&quot;, &quot;length&quot; : 9 },
</del><span class="cx">             { &quot;name&quot; : &quot;op_call_eval&quot;, &quot;length&quot; : 9 },
</span><span class="cx">             { &quot;name&quot; : &quot;op_call_varargs&quot;, &quot;length&quot; : 9 },
</span><del>-            { &quot;name&quot; : &quot;op_tail_call_varargs&quot;, &quot;length&quot; : 9 },
</del><span class="cx">             { &quot;name&quot; : &quot;op_ret&quot;, &quot;length&quot; : 2 },
</span><span class="cx">             { &quot;name&quot; : &quot;op_construct&quot;, &quot;length&quot; : 9 },
</span><span class="cx">             { &quot;name&quot; : &quot;op_construct_varargs&quot;, &quot;length&quot; : 9 },
</span><span class="lines">@@ -146,10 +144,7 @@
</span><span class="cx">             { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_5&quot; },
</span><span class="cx">             { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_6&quot; },
</span><span class="cx">             { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_7&quot; },
</span><del>-            { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_8&quot; },
-            { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_9&quot; },
-            { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_10&quot; },
-            { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_11&quot; }
</del><ins>+            { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_8&quot; }
</ins><span class="cx">         ]
</span><span class="cx">     },
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeBytecodeUseDefh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -191,8 +191,7 @@
</span><span class="cx">     }
</span><span class="cx">     case op_has_structure_property:
</span><span class="cx">     case op_construct_varargs:
</span><del>-    case op_call_varargs:
-    case op_tail_call_varargs: {
</del><ins>+    case op_call_varargs: {
</ins><span class="cx">         functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
</span><span class="cx">         functor(codeBlock, instruction, opcodeID, instruction[3].u.operand);
</span><span class="cx">         functor(codeBlock, instruction, opcodeID, instruction[4].u.operand);
</span><span class="lines">@@ -221,8 +220,7 @@
</span><span class="cx">     }
</span><span class="cx">     case op_construct:
</span><span class="cx">     case op_call_eval:
</span><del>-    case op_call:
-    case op_tail_call: {
</del><ins>+    case op_call: {
</ins><span class="cx">         functor(codeBlock, instruction, opcodeID, instruction[2].u.operand);
</span><span class="cx">         int argCount = instruction[3].u.operand;
</span><span class="cx">         int registerOffset = -instruction[4].u.operand;
</span><span class="lines">@@ -313,11 +311,9 @@
</span><span class="cx">     case op_new_func_exp:
</span><span class="cx">     case op_new_arrow_func_exp:
</span><span class="cx">     case op_call_varargs:
</span><del>-    case op_tail_call_varargs:
</del><span class="cx">     case op_construct_varargs:
</span><span class="cx">     case op_get_from_scope:
</span><span class="cx">     case op_call:
</span><del>-    case op_tail_call:
</del><span class="cx">     case op_call_eval:
</span><span class="cx">     case op_construct:
</span><span class="cx">     case op_get_by_id:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCallLinkInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CallLinkInfo.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CallLinkInfo.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/bytecode/CallLinkInfo.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -26,7 +26,6 @@
</span><span class="cx"> #ifndef CallLinkInfo_h
</span><span class="cx"> #define CallLinkInfo_h
</span><span class="cx"> 
</span><del>-#include &quot;CallMode.h&quot;
</del><span class="cx"> #include &quot;CodeLocation.h&quot;
</span><span class="cx"> #include &quot;CodeSpecializationKind.h&quot;
</span><span class="cx"> #include &quot;JITWriteBarrier.h&quot;
</span><span class="lines">@@ -42,36 +41,19 @@
</span><span class="cx"> 
</span><span class="cx"> class CallLinkInfo : public BasicRawSentinelNode&lt;CallLinkInfo&gt; {
</span><span class="cx"> public:
</span><del>-    enum CallType { None, Call, CallVarargs, Construct, ConstructVarargs, TailCall, TailCallVarargs };
</del><ins>+    enum CallType { None, Call, CallVarargs, Construct, ConstructVarargs };
</ins><span class="cx">     static CallType callTypeFor(OpcodeID opcodeID)
</span><span class="cx">     {
</span><span class="cx">         if (opcodeID == op_call || opcodeID == op_call_eval)
</span><span class="cx">             return Call;
</span><del>-        if (opcodeID == op_call_varargs)
-            return CallVarargs;
</del><span class="cx">         if (opcodeID == op_construct)
</span><span class="cx">             return Construct;
</span><span class="cx">         if (opcodeID == op_construct_varargs)
</span><span class="cx">             return ConstructVarargs;
</span><del>-        if (opcodeID == op_tail_call)
-            return TailCall;
-        ASSERT(opcodeID == op_tail_call_varargs);
-        return TailCallVarargs;
</del><ins>+        ASSERT(opcodeID == op_call_varargs);
+        return CallVarargs;
</ins><span class="cx">     }
</span><del>-
-    static bool isVarargsCallType(CallType callType)
-    {
-        switch (callType) {
-        case CallVarargs:
-        case ConstructVarargs:
-        case TailCallVarargs:
-            return true;
-
-        default:
-            return false;
-        }
-    }
-
</del><ins>+    
</ins><span class="cx">     CallLinkInfo()
</span><span class="cx">         : m_registerPreservationMode(static_cast&lt;unsigned&gt;(RegisterPreservationNotRequired))
</span><span class="cx">         , m_hasSeenShouldRepatch(false)
</span><span class="lines">@@ -101,40 +83,6 @@
</span><span class="cx">         return specializationKindFor(static_cast&lt;CallType&gt;(m_callType));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static CallMode callModeFor(CallType callType)
-    {
-        switch (callType) {
-        case Call:
-        case CallVarargs:
-            return CallMode::Regular;
-        case TailCall:
-        case TailCallVarargs:
-            return CallMode::Tail;
-        case Construct:
-        case ConstructVarargs:
-            return CallMode::Construct;
-        case None:
-            RELEASE_ASSERT_NOT_REACHED();
-        }
-
-        RELEASE_ASSERT_NOT_REACHED();
-    }
-
-    CallMode callMode() const
-    {
-        return callModeFor(static_cast&lt;CallType&gt;(m_callType));
-    }
-
-    bool isTailCall() const
-    {
-        return callMode() == CallMode::Tail;
-    }
-
-    bool isVarargs() const
-    {
-        return isVarargsCallType(static_cast&lt;CallType&gt;(m_callType));
-    }
-
</del><span class="cx">     RegisterPreservationMode registerPreservationMode() const
</span><span class="cx">     {
</span><span class="cx">         return static_cast&lt;RegisterPreservationMode&gt;(m_registerPreservationMode);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCallLinkStatuscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CallLinkStatus.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CallLinkStatus.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/bytecode/CallLinkStatus.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">     
</span><span class="cx">     Instruction* instruction = profiledBlock-&gt;instructions().begin() + bytecodeIndex;
</span><span class="cx">     OpcodeID op = vm.interpreter-&gt;getOpcodeID(instruction[0].u.opcode);
</span><del>-    if (op != op_call &amp;&amp; op != op_construct &amp;&amp; op != op_tail_call)
</del><ins>+    if (op != op_call &amp;&amp; op != op_construct)
</ins><span class="cx">         return CallLinkStatus();
</span><span class="cx">     
</span><span class="cx">     LLIntCallLinkInfo* callLinkInfo = instruction[5].u.callLinkInfo;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -1248,18 +1248,13 @@
</span><span class="cx">             printCallOp(out, exec, location, it, &quot;call&quot;, DumpCaches, hasPrintedProfiling, callLinkInfos);
</span><span class="cx">             break;
</span><span class="cx">         }
</span><del>-        case op_tail_call: {
-            printCallOp(out, exec, location, it, &quot;tail_call&quot;, DumpCaches, hasPrintedProfiling, callLinkInfos);
-            break;
-        }
</del><span class="cx">         case op_call_eval: {
</span><span class="cx">             printCallOp(out, exec, location, it, &quot;call_eval&quot;, DontDumpCaches, hasPrintedProfiling, callLinkInfos);
</span><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="cx">         case op_construct_varargs:
</span><del>-        case op_call_varargs:
-        case op_tail_call_varargs: {
</del><ins>+        case op_call_varargs: {
</ins><span class="cx">             int result = (++it)-&gt;u.operand;
</span><span class="cx">             int callee = (++it)-&gt;u.operand;
</span><span class="cx">             int thisValue = (++it)-&gt;u.operand;
</span><span class="lines">@@ -1267,7 +1262,7 @@
</span><span class="cx">             int firstFreeRegister = (++it)-&gt;u.operand;
</span><span class="cx">             int varArgOffset = (++it)-&gt;u.operand;
</span><span class="cx">             ++it;
</span><del>-            printLocationAndOp(out, exec, location, it, opcode == op_call_varargs ? &quot;call_varargs&quot; : opcode == op_construct_varargs ? &quot;construct_varargs&quot; : &quot;tail_call_varargs&quot;);
</del><ins>+            printLocationAndOp(out, exec, location, it, opcode == op_call_varargs ? &quot;call_varargs&quot; : &quot;construct_varargs&quot;);
</ins><span class="cx">             out.printf(&quot;%s, %s, %s, %s, %d, %d&quot;, registerName(result).data(), registerName(callee).data(), registerName(thisValue).data(), registerName(arguments).data(), firstFreeRegister, varArgOffset);
</span><span class="cx">             dumpValueProfiling(out, it, hasPrintedProfiling);
</span><span class="cx">             break;
</span><span class="lines">@@ -1834,7 +1829,6 @@
</span><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">         case op_call_varargs:
</span><del>-        case op_tail_call_varargs:
</del><span class="cx">         case op_construct_varargs:
</span><span class="cx">         case op_get_by_val: {
</span><span class="cx">             int arrayProfileIndex = pc[opLength - 2].u.operand;
</span><span class="lines">@@ -1884,7 +1878,6 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         case op_call:
</span><del>-        case op_tail_call:
</del><span class="cx">         case op_call_eval: {
</span><span class="cx">             ValueProfile* profile = &amp;m_valueProfiles[pc[opLength - 1].u.operand];
</span><span class="cx">             ASSERT(profile-&gt;m_bytecodeOffset == -1);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -193,12 +193,7 @@
</span><span class="cx">     , m_vm(&amp;vm)
</span><span class="cx">     , m_isBuiltinFunction(codeBlock-&gt;isBuiltinFunction())
</span><span class="cx">     , m_usesNonStrictEval(codeBlock-&gt;usesEval() &amp;&amp; !codeBlock-&gt;isStrictMode())
</span><del>-    // FIXME: We should be able to have tail call elimination with the profiler
-    // enabled. This is currently not possible because the profiler expects
-    // op_will_call / op_did_call pairs before and after a call, which are not
-    // compatible with tail calls (we have no way of emitting op_did_call).
-    // https://bugs.webkit.org/show_bug.cgi?id=148819
-    , m_inTailPosition(Options::enableTailCalls() &amp;&amp; constructorKind() == ConstructorKind::None &amp;&amp; isStrictMode() &amp;&amp; !m_shouldEmitProfileHooks)
</del><ins>+    , m_inTailPosition(Options::enableTailCalls() &amp;&amp; constructorKind() == ConstructorKind::None &amp;&amp; isStrictMode())
</ins><span class="cx"> {
</span><span class="cx">     for (auto&amp; constantRegister : m_linkTimeConstantRegisters)
</span><span class="cx">         constantRegister = nullptr;
</span><span class="lines">@@ -2518,7 +2513,10 @@
</span><span class="cx"> 
</span><span class="cx"> RegisterID* BytecodeGenerator::emitCallInTailPosition(RegisterID* dst, RegisterID* func, ExpectedFunction expectedFunction, CallArguments&amp; callArguments, const JSTextPosition&amp; divot, const JSTextPosition&amp; divotStart, const JSTextPosition&amp; divotEnd)
</span><span class="cx"> {
</span><del>-    return emitCall(m_inTailPosition ? op_tail_call : op_call, dst, func, expectedFunction, callArguments, divot, divotStart, divotEnd);
</del><ins>+    // FIXME: We should be emitting a new op_tail_call here when
+    // m_inTailPosition is false
+    // https://bugs.webkit.org/show_bug.cgi?id=148661
+    return emitCall(op_call, dst, func, expectedFunction, callArguments, divot, divotStart, divotEnd);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RegisterID* BytecodeGenerator::emitCallEval(RegisterID* dst, RegisterID* func, CallArguments&amp; callArguments, const JSTextPosition&amp; divot, const JSTextPosition&amp; divotStart, const JSTextPosition&amp; divotEnd)
</span><span class="lines">@@ -2603,7 +2601,7 @@
</span><span class="cx"> 
</span><span class="cx"> RegisterID* BytecodeGenerator::emitCall(OpcodeID opcodeID, RegisterID* dst, RegisterID* func, ExpectedFunction expectedFunction, CallArguments&amp; callArguments, const JSTextPosition&amp; divot, const JSTextPosition&amp; divotStart, const JSTextPosition&amp; divotEnd)
</span><span class="cx"> {
</span><del>-    ASSERT(opcodeID == op_call || opcodeID == op_call_eval || opcodeID == op_tail_call);
</del><ins>+    ASSERT(opcodeID == op_call || opcodeID == op_call_eval);
</ins><span class="cx">     ASSERT(func-&gt;refCount());
</span><span class="cx"> 
</span><span class="cx">     if (m_shouldEmitProfileHooks)
</span><span class="lines">@@ -2619,7 +2617,7 @@
</span><span class="cx">             RefPtr&lt;RegisterID&gt; argumentRegister;
</span><span class="cx">             argumentRegister = expression-&gt;emitBytecode(*this, callArguments.argumentRegister(0));
</span><span class="cx">             RefPtr&lt;RegisterID&gt; thisRegister = emitMove(newTemporary(), callArguments.thisRegister());
</span><del>-            return emitCallVarargs(opcodeID == op_tail_call ? op_tail_call_varargs : op_call_varargs, dst, func, callArguments.thisRegister(), argumentRegister.get(), newTemporary(), 0, callArguments.profileHookRegister(), divot, divotStart, divotEnd);
</del><ins>+            return emitCallVarargs(dst, func, callArguments.thisRegister(), argumentRegister.get(), newTemporary(), 0, callArguments.profileHookRegister(), divot, divotStart, divotEnd);
</ins><span class="cx">         }
</span><span class="cx">         for (; n; n = n-&gt;m_next)
</span><span class="cx">             emitNode(callArguments.argumentRegister(argument++), n);
</span><span class="lines">@@ -2672,7 +2670,10 @@
</span><span class="cx"> 
</span><span class="cx"> RegisterID* BytecodeGenerator::emitCallVarargsInTailPosition(RegisterID* dst, RegisterID* func, RegisterID* thisRegister, RegisterID* arguments, RegisterID* firstFreeRegister, int32_t firstVarArgOffset, RegisterID* profileHookRegister, const JSTextPosition&amp; divot, const JSTextPosition&amp; divotStart, const JSTextPosition&amp; divotEnd)
</span><span class="cx"> {
</span><del>-    return emitCallVarargs(m_inTailPosition ? op_tail_call_varargs : op_call_varargs, dst, func, thisRegister, arguments, firstFreeRegister, firstVarArgOffset, profileHookRegister, divot, divotStart, divotEnd);
</del><ins>+    // FIXME: We should be emitting a new op_tail_call here when
+    // m_inTailPosition is false
+    // https://bugs.webkit.org/show_bug.cgi?id=148661
+    return emitCallVarargs(op_call_varargs, dst, func, thisRegister, arguments, firstFreeRegister, firstVarArgOffset, profileHookRegister, divot, divotStart, divotEnd);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RegisterID* BytecodeGenerator::emitConstructVarargs(RegisterID* dst, RegisterID* func, RegisterID* thisRegister, RegisterID* arguments, RegisterID* firstFreeRegister, int32_t firstVarArgOffset, RegisterID* profileHookRegister, const JSTextPosition&amp; divot, const JSTextPosition&amp; divotStart, const JSTextPosition&amp; divotEnd)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerNodesCodegencpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -678,12 +678,6 @@
</span><span class="cx">         m_argv[i] = generator.newTemporary();
</span><span class="cx">         ASSERT(static_cast&lt;size_t&gt;(i) == m_argv.size() - 1 || m_argv[i]-&gt;index() == m_argv[i + 1]-&gt;index() - 1);
</span><span class="cx">     }
</span><del>-
-    // We need to ensure that the frame size is stack-aligned
-    while ((JSStack::CallFrameHeaderSize + m_argv.size()) % stackAlignmentRegisters()) {
-        m_argv.insert(0, generator.newTemporary());
-        m_padding++;
-    }
</del><span class="cx">     
</span><span class="cx">     while (stackOffset() % stackAlignmentRegisters()) {
</span><span class="cx">         m_argv.insert(0, generator.newTemporary());
</span><span class="lines">@@ -2792,7 +2786,7 @@
</span><span class="cx">     ASSERT(!generator.breakTarget(m_name));
</span><span class="cx"> 
</span><span class="cx">     LabelScopePtr scope = generator.newLabelScope(LabelScope::NamedLabel, &amp;m_name);
</span><del>-    generator.emitNodeInTailPosition(dst, m_statement);
</del><ins>+    generator.emitNode(dst, m_statement);
</ins><span class="cx"> 
</span><span class="cx">     generator.emitLabel(scope-&gt;breakTarget());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -741,10 +741,7 @@
</span><span class="cx">         SpeculatedType prediction)
</span><span class="cx">     {
</span><span class="cx">         addVarArgChild(callee);
</span><del>-        size_t frameSize = JSStack::CallFrameHeaderSize + argCount;
-        size_t alignedFrameSize = WTF::roundUpToMultipleOf(stackAlignmentRegisters(), frameSize);
-        size_t parameterSlots = alignedFrameSize - JSStack::CallerFrameAndPCSize;
-
</del><ins>+        size_t parameterSlots = JSStack::CallFrameHeaderSize - JSStack::CallerFrameAndPCSize + argCount;
</ins><span class="cx">         if (parameterSlots &gt; m_parameterSlots)
</span><span class="cx">             m_parameterSlots = parameterSlots;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -4329,29 +4329,24 @@
</span><span class="cx"> 
</span><span class="cx">     void compileCallOrConstruct()
</span><span class="cx">     {
</span><del>-        int numArgs = m_node-&gt;numChildren() - 1;
</del><ins>+        int numPassedArgs = m_node-&gt;numChildren() - 1;
+        int numArgs = numPassedArgs;
</ins><span class="cx"> 
</span><span class="cx">         LValue jsCallee = lowJSValue(m_graph.varArgChild(m_node, 0));
</span><span class="cx"> 
</span><span class="cx">         unsigned stackmapID = m_stackmapIDs++;
</span><del>-
-        unsigned frameSize = JSStack::CallFrameHeaderSize + numArgs;
-        unsigned alignedFrameSize = WTF::roundUpToMultipleOf(stackAlignmentRegisters(), frameSize);
-        unsigned padding = alignedFrameSize - frameSize;
-
</del><ins>+        
</ins><span class="cx">         Vector&lt;LValue&gt; arguments;
</span><span class="cx">         arguments.append(m_out.constInt64(stackmapID));
</span><span class="cx">         arguments.append(m_out.constInt32(sizeOfCall()));
</span><span class="cx">         arguments.append(constNull(m_out.ref8));
</span><del>-        arguments.append(m_out.constInt32(1 + alignedFrameSize - JSStack::CallerFrameAndPCSize));
</del><ins>+        arguments.append(m_out.constInt32(1 + JSStack::CallFrameHeaderSize - JSStack::CallerFrameAndPCSize + numArgs));
</ins><span class="cx">         arguments.append(jsCallee); // callee -&gt; %rax
</span><span class="cx">         arguments.append(getUndef(m_out.int64)); // code block
</span><span class="cx">         arguments.append(jsCallee); // callee -&gt; stack
</span><span class="cx">         arguments.append(m_out.constInt64(numArgs)); // argument count and zeros for the tag
</span><del>-        for (int i = 0; i &lt; numArgs; ++i)
</del><ins>+        for (int i = 0; i &lt; numPassedArgs; ++i)
</ins><span class="cx">             arguments.append(lowJSValue(m_graph.varArgChild(m_node, 1 + i)));
</span><del>-        for (unsigned i = 0; i &lt; padding; ++i)
-            arguments.append(getUndef(m_out.int64));
</del><span class="cx">         
</span><span class="cx">         callPreflight();
</span><span class="cx">         
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterInterpreterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/Interpreter.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/Interpreter.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/interpreter/Interpreter.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -253,7 +253,7 @@
</span><span class="cx"> 
</span><span class="cx">         void dumpRegisters(CallFrame*);
</span><span class="cx">         
</span><del>-        bool isCallBytecode(Opcode opcode) { return opcode == getOpcode(op_call) || opcode == getOpcode(op_construct) || opcode == getOpcode(op_call_eval) || opcode == getOpcode(op_tail_call); }
</del><ins>+        bool isCallBytecode(Opcode opcode) { return opcode == getOpcode(op_call) || opcode == getOpcode(op_construct) || opcode == getOpcode(op_call_eval); }
</ins><span class="cx"> 
</span><span class="cx">         void enableSampler();
</span><span class="cx">         int m_sampleEntryDepth;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitCCallHelpersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/CCallHelpers.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/CCallHelpers.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/jit/CCallHelpers.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -30,7 +30,6 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;AssemblyHelpers.h&quot;
</span><span class="cx"> #include &quot;GPRInfo.h&quot;
</span><del>-#include &quot;StackAlignment.h&quot;
</del><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><span class="lines">@@ -2083,95 +2082,6 @@
</span><span class="cx">         loadPtr(&amp;vm()-&gt;targetMachinePCForThrow, GPRInfo::regT1);
</span><span class="cx">         jump(GPRInfo::regT1);
</span><span class="cx">     }
</span><del>-
-    void prepareForTailCallSlow(GPRReg calleeGPR = InvalidGPRReg)
-    {
-        GPRReg temp1 = calleeGPR == GPRInfo::regT0 ? GPRInfo::regT3 : GPRInfo::regT0;
-        GPRReg temp2 = calleeGPR == GPRInfo::regT1 ? GPRInfo::regT3 : GPRInfo::regT1;
-        GPRReg temp3 = calleeGPR == GPRInfo::regT2 ? GPRInfo::regT3 : GPRInfo::regT2;
-
-        GPRReg newFramePointer = temp1;
-        GPRReg newFrameSizeGPR = temp2;
-        {
-            // The old frame size is its number of arguments (or number of
-            // parameters in case of arity fixup), plus the frame header size,
-            // aligned
-            GPRReg oldFrameSizeGPR = temp2;
-            {
-                GPRReg argCountGPR = oldFrameSizeGPR;
-                load32(Address(framePointerRegister, JSStack::ArgumentCount * static_cast&lt;int&gt;(sizeof(Register)) + PayloadOffset), argCountGPR);
-
-                {
-                    GPRReg numParametersGPR = temp1;
-                    {
-                        GPRReg codeBlockGPR = numParametersGPR;
-                        loadPtr(Address(framePointerRegister, JSStack::CodeBlock * static_cast&lt;int&gt;(sizeof(Register))), codeBlockGPR);
-                        load32(Address(codeBlockGPR, CodeBlock::offsetOfNumParameters()), numParametersGPR);
-                    }
-
-                    ASSERT(numParametersGPR != argCountGPR);
-                    Jump argumentCountWasNotFixedUp = branch32(BelowOrEqual, numParametersGPR, argCountGPR);
-                    move(numParametersGPR, argCountGPR);
-                    argumentCountWasNotFixedUp.link(this);
-                }
-
-                add32(TrustedImm32(stackAlignmentRegisters() + JSStack::CallFrameHeaderSize - 1), argCountGPR, oldFrameSizeGPR);
-                and32(TrustedImm32(-stackAlignmentRegisters()), oldFrameSizeGPR);
-                // We assume &lt; 2^28 arguments
-                mul32(TrustedImm32(sizeof(Register)), oldFrameSizeGPR, oldFrameSizeGPR);
-            }
-
-            // The new frame pointer is at framePointer + oldFrameSize - newFrameSize
-            ASSERT(newFramePointer != oldFrameSizeGPR);
-            move(framePointerRegister, newFramePointer);
-            addPtr(oldFrameSizeGPR, newFramePointer);
-
-            // The new frame size is just the number of arguments plus the
-            // frame header size, aligned
-            ASSERT(newFrameSizeGPR != newFramePointer);
-            load32(Address(stackPointerRegister, JSStack::ArgumentCount * static_cast&lt;int&gt;(sizeof(Register)) + PayloadOffset - sizeof(CallerFrameAndPC)),
-                newFrameSizeGPR);
-            add32(TrustedImm32(stackAlignmentRegisters() + JSStack::CallFrameHeaderSize - 1), newFrameSizeGPR);
-            and32(TrustedImm32(-stackAlignmentRegisters()), newFrameSizeGPR);
-            // We assume &lt; 2^28 arguments
-            mul32(TrustedImm32(sizeof(Register)), newFrameSizeGPR, newFrameSizeGPR);
-        }
-
-        GPRReg tempGPR = temp3;
-        ASSERT(tempGPR != newFramePointer &amp;&amp; tempGPR != newFrameSizeGPR);
-
-        // We don't need the current frame beyond this point. Masquerade as our
-        // caller.
-#if CPU(ARM) || CPU(SH4) || CPU(ARM64)
-        loadPtr(Address(framePointerRegister, sizeof(void*)), linkRegister);
-        subPtr(TrustedImm32(2 * sizeof(void*)), newFrameSizeGPR);
-#elif CPU(MIPS)
-        loadPtr(Address(framePointerRegister, sizeof(void*)), returnAddressRegister);
-        subPtr(TrustedImm32(2 * sizeof(void*)), newFrameSizeGPR);
-#elif CPU(X86) || CPU(X86_64)
-        loadPtr(Address(framePointerRegister, sizeof(void*)), tempGPR);
-        push(tempGPR);
-        subPtr(TrustedImm32(sizeof(void*)), newFrameSizeGPR);
-#else
-        UNREACHABLE_FOR_PLATFORM();
-#endif
-        subPtr(newFrameSizeGPR, newFramePointer);
-        loadPtr(Address(framePointerRegister), framePointerRegister);
-
-
-        // We need to move the newFrameSizeGPR slots above the stack pointer by
-        // newFramePointer registers. We use pointer-sized chunks.
-        MacroAssembler::Label copyLoop(label());
-
-        subPtr(TrustedImm32(sizeof(void*)), newFrameSizeGPR);
-        loadPtr(BaseIndex(stackPointerRegister, newFrameSizeGPR, TimesOne), tempGPR);
-        storePtr(tempGPR, BaseIndex(newFramePointer, newFrameSizeGPR, TimesOne));
-
-        branchTest32(MacroAssembler::NonZero, newFrameSizeGPR).linkTo(copyLoop, this);
-
-        // Ready for a jump!
-        move(newFramePointer, stackPointerRegister);
-    }
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JIT.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JIT.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/jit/JIT.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -197,10 +197,8 @@
</span><span class="cx">         DEFINE_OP(op_bitor)
</span><span class="cx">         DEFINE_OP(op_bitxor)
</span><span class="cx">         DEFINE_OP(op_call)
</span><del>-        DEFINE_OP(op_tail_call)
</del><span class="cx">         DEFINE_OP(op_call_eval)
</span><span class="cx">         DEFINE_OP(op_call_varargs)
</span><del>-        DEFINE_OP(op_tail_call_varargs)
</del><span class="cx">         DEFINE_OP(op_construct_varargs)
</span><span class="cx">         DEFINE_OP(op_catch)
</span><span class="cx">         DEFINE_OP(op_construct)
</span><span class="lines">@@ -373,10 +371,8 @@
</span><span class="cx">         DEFINE_SLOWCASE_OP(op_bitor)
</span><span class="cx">         DEFINE_SLOWCASE_OP(op_bitxor)
</span><span class="cx">         DEFINE_SLOWCASE_OP(op_call)
</span><del>-        DEFINE_SLOWCASE_OP(op_tail_call)
</del><span class="cx">         DEFINE_SLOWCASE_OP(op_call_eval)
</span><span class="cx">         DEFINE_SLOWCASE_OP(op_call_varargs)
</span><del>-        DEFINE_SLOWCASE_OP(op_tail_call_varargs)
</del><span class="cx">         DEFINE_SLOWCASE_OP(op_construct_varargs)
</span><span class="cx">         DEFINE_SLOWCASE_OP(op_construct)
</span><span class="cx">         DEFINE_SLOWCASE_OP(op_to_this)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JIT.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JIT.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/jit/JIT.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -487,10 +487,8 @@
</span><span class="cx">         void emit_op_bitor(Instruction*);
</span><span class="cx">         void emit_op_bitxor(Instruction*);
</span><span class="cx">         void emit_op_call(Instruction*);
</span><del>-        void emit_op_tail_call(Instruction*);
</del><span class="cx">         void emit_op_call_eval(Instruction*);
</span><span class="cx">         void emit_op_call_varargs(Instruction*);
</span><del>-        void emit_op_tail_call_varargs(Instruction*);
</del><span class="cx">         void emit_op_construct_varargs(Instruction*);
</span><span class="cx">         void emit_op_catch(Instruction*);
</span><span class="cx">         void emit_op_construct(Instruction*);
</span><span class="lines">@@ -602,10 +600,8 @@
</span><span class="cx">         void emitSlow_op_bitor(Instruction*, Vector&lt;SlowCaseEntry&gt;::iterator&amp;);
</span><span class="cx">         void emitSlow_op_bitxor(Instruction*, Vector&lt;SlowCaseEntry&gt;::iterator&amp;);
</span><span class="cx">         void emitSlow_op_call(Instruction*, Vector&lt;SlowCaseEntry&gt;::iterator&amp;);
</span><del>-        void emitSlow_op_tail_call(Instruction*, Vector&lt;SlowCaseEntry&gt;::iterator&amp;);
</del><span class="cx">         void emitSlow_op_call_eval(Instruction*, Vector&lt;SlowCaseEntry&gt;::iterator&amp;);
</span><span class="cx">         void emitSlow_op_call_varargs(Instruction*, Vector&lt;SlowCaseEntry&gt;::iterator&amp;);
</span><del>-        void emitSlow_op_tail_call_varargs(Instruction*, Vector&lt;SlowCaseEntry&gt;::iterator&amp;);
</del><span class="cx">         void emitSlow_op_construct_varargs(Instruction*, Vector&lt;SlowCaseEntry&gt;::iterator&amp;);
</span><span class="cx">         void emitSlow_op_construct(Instruction*, Vector&lt;SlowCaseEntry&gt;::iterator&amp;);
</span><span class="cx">         void emitSlow_op_to_this(Instruction*, Vector&lt;SlowCaseEntry&gt;::iterator&amp;);
</span><span class="lines">@@ -828,7 +824,6 @@
</span><span class="cx">         void updateTopCallFrame();
</span><span class="cx"> 
</span><span class="cx">         Call emitNakedCall(CodePtr function = CodePtr());
</span><del>-        Call emitNakedTailCall(CodePtr function = CodePtr());
</del><span class="cx"> 
</span><span class="cx">         // Loads the character value of a single character string into dst.
</span><span class="cx">         void emitLoadCharacterString(RegisterID src, RegisterID dst, JumpList&amp; failures);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITCallcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITCall.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITCall.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/jit/JITCall.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -145,12 +145,10 @@
</span><span class="cx">     COMPILE_ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_construct), call_and_construct_opcodes_must_be_same_length);
</span><span class="cx">     COMPILE_ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_call_varargs), call_and_call_varargs_opcodes_must_be_same_length);
</span><span class="cx">     COMPILE_ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_construct_varargs), call_and_construct_varargs_opcodes_must_be_same_length);
</span><del>-    COMPILE_ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_tail_call), call_and_tail_call_opcodes_must_be_same_length);
-    COMPILE_ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_tail_call_varargs), call_and_tail_call_varargs_opcodes_must_be_same_length);
</del><span class="cx">     CallLinkInfo* info;
</span><span class="cx">     if (opcodeID != op_call_eval)
</span><span class="cx">         info = m_codeBlock-&gt;addCallLinkInfo();
</span><del>-    if (opcodeID == op_call_varargs || opcodeID == op_construct_varargs || opcodeID == op_tail_call_varargs)
</del><ins>+    if (opcodeID == op_call_varargs || opcodeID == op_construct_varargs)
</ins><span class="cx">         compileSetupVarargsFrame(instruction, info);
</span><span class="cx">     else {
</span><span class="cx">         int argCount = instruction[3].u.operand;
</span><span class="lines">@@ -174,15 +172,12 @@
</span><span class="cx">     emitGetVirtualRegister(callee, regT0); // regT0 holds callee.
</span><span class="cx"> 
</span><span class="cx">     store64(regT0, Address(stackPointerRegister, JSStack::Callee * static_cast&lt;int&gt;(sizeof(Register)) - sizeof(CallerFrameAndPC)));
</span><del>-
</del><ins>+    
</ins><span class="cx">     if (opcodeID == op_call_eval) {
</span><span class="cx">         compileCallEval(instruction);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (opcodeID == op_tail_call || opcodeID == op_tail_call_varargs)
-        emitRestoreCalleeSaves();
-
</del><span class="cx">     DataLabelPtr addressOfLinkedFunctionCheck;
</span><span class="cx">     Jump slowCase = branchPtrWithPatch(NotEqual, regT0, addressOfLinkedFunctionCheck, TrustedImmPtr(0));
</span><span class="cx">     addSlowCase(slowCase);
</span><span class="lines">@@ -193,12 +188,6 @@
</span><span class="cx">     m_callCompilationInfo[callLinkInfoIndex].hotPathBegin = addressOfLinkedFunctionCheck;
</span><span class="cx">     m_callCompilationInfo[callLinkInfoIndex].callLinkInfo = info;
</span><span class="cx"> 
</span><del>-    if (opcodeID == op_tail_call || opcodeID == op_tail_call_varargs) {
-        prepareForTailCallSlow();
-        m_callCompilationInfo[callLinkInfoIndex].hotPathOther = emitNakedTailCall();
-        return;
-    }
-
</del><span class="cx">     m_callCompilationInfo[callLinkInfoIndex].hotPathOther = emitNakedCall();
</span><span class="cx"> 
</span><span class="cx">     addPtr(TrustedImm32(stackPointerOffsetFor(m_codeBlock) * sizeof(Register)), callFrameRegister, stackPointerRegister);
</span><span class="lines">@@ -219,14 +208,8 @@
</span><span class="cx">     linkSlowCase(iter);
</span><span class="cx"> 
</span><span class="cx">     move(TrustedImmPtr(m_callCompilationInfo[callLinkInfoIndex].callLinkInfo), regT2);
</span><del>-
</del><span class="cx">     m_callCompilationInfo[callLinkInfoIndex].callReturnLocation = emitNakedCall(m_vm-&gt;getCTIStub(linkCallThunkGenerator).code());
</span><span class="cx"> 
</span><del>-    if (opcodeID == op_tail_call || opcodeID == op_tail_call_varargs) {
-        abortWithReason(JITDidReturnFromTailCall);
-        return;
-    }
-
</del><span class="cx">     addPtr(TrustedImm32(stackPointerOffsetFor(m_codeBlock) * sizeof(Register)), callFrameRegister, stackPointerRegister);
</span><span class="cx">     checkStackPointerAlignment();
</span><span class="cx"> 
</span><span class="lines">@@ -240,11 +223,6 @@
</span><span class="cx">     compileOpCall(op_call, currentInstruction, m_callLinkInfoIndex++);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void JIT::emit_op_tail_call(Instruction* currentInstruction)
-{
-    compileOpCall(op_tail_call, currentInstruction, m_callLinkInfoIndex++);
-}
-
</del><span class="cx"> void JIT::emit_op_call_eval(Instruction* currentInstruction)
</span><span class="cx"> {
</span><span class="cx">     compileOpCall(op_call_eval, currentInstruction, m_callLinkInfoIndex);
</span><span class="lines">@@ -254,12 +232,7 @@
</span><span class="cx"> {
</span><span class="cx">     compileOpCall(op_call_varargs, currentInstruction, m_callLinkInfoIndex++);
</span><span class="cx"> }
</span><del>-
-void JIT::emit_op_tail_call_varargs(Instruction* currentInstruction)
-{
-    compileOpCall(op_tail_call_varargs, currentInstruction, m_callLinkInfoIndex++);
-}
-
</del><ins>+    
</ins><span class="cx"> void JIT::emit_op_construct_varargs(Instruction* currentInstruction)
</span><span class="cx"> {
</span><span class="cx">     compileOpCall(op_construct_varargs, currentInstruction, m_callLinkInfoIndex++);
</span><span class="lines">@@ -275,11 +248,6 @@
</span><span class="cx">     compileOpCallSlowCase(op_call, currentInstruction, iter, m_callLinkInfoIndex++);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void JIT::emitSlow_op_tail_call(Instruction* currentInstruction, Vector&lt;SlowCaseEntry&gt;::iterator&amp; iter)
-{
-    compileOpCallSlowCase(op_tail_call, currentInstruction, iter, m_callLinkInfoIndex++);
-}
-
</del><span class="cx"> void JIT::emitSlow_op_call_eval(Instruction* currentInstruction, Vector&lt;SlowCaseEntry&gt;::iterator&amp; iter)
</span><span class="cx"> {
</span><span class="cx">     compileOpCallSlowCase(op_call_eval, currentInstruction, iter, m_callLinkInfoIndex);
</span><span class="lines">@@ -289,11 +257,6 @@
</span><span class="cx"> {
</span><span class="cx">     compileOpCallSlowCase(op_call_varargs, currentInstruction, iter, m_callLinkInfoIndex++);
</span><span class="cx"> }
</span><del>-
-void JIT::emitSlow_op_tail_call_varargs(Instruction* currentInstruction, Vector&lt;SlowCaseEntry&gt;::iterator&amp; iter)
-{
-    compileOpCallSlowCase(op_tail_call_varargs, currentInstruction, iter, m_callLinkInfoIndex++);
-}
</del><span class="cx">     
</span><span class="cx"> void JIT::emitSlow_op_construct_varargs(Instruction* currentInstruction, Vector&lt;SlowCaseEntry&gt;::iterator&amp; iter)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITCall32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITCall32_64.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITCall32_64.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/jit/JITCall32_64.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -69,11 +69,6 @@
</span><span class="cx">     compileOpCallSlowCase(op_call, currentInstruction, iter, m_callLinkInfoIndex++);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void JIT::emitSlow_op_tail_call(Instruction* currentInstruction, Vector&lt;SlowCaseEntry&gt;::iterator&amp; iter)
-{
-    compileOpCallSlowCase(op_tail_call, currentInstruction, iter, m_callLinkInfoIndex++);
-}
-
</del><span class="cx"> void JIT::emitSlow_op_call_eval(Instruction* currentInstruction, Vector&lt;SlowCaseEntry&gt;::iterator&amp; iter)
</span><span class="cx"> {
</span><span class="cx">     compileOpCallSlowCase(op_call_eval, currentInstruction, iter, m_callLinkInfoIndex);
</span><span class="lines">@@ -83,11 +78,6 @@
</span><span class="cx"> {
</span><span class="cx">     compileOpCallSlowCase(op_call_varargs, currentInstruction, iter, m_callLinkInfoIndex++);
</span><span class="cx"> }
</span><del>-
-void JIT::emitSlow_op_tail_call_varargs(Instruction* currentInstruction, Vector&lt;SlowCaseEntry&gt;::iterator&amp; iter)
-{
-    compileOpCallSlowCase(op_tail_call_varargs, currentInstruction, iter, m_callLinkInfoIndex++);
-}
</del><span class="cx">     
</span><span class="cx"> void JIT::emitSlow_op_construct_varargs(Instruction* currentInstruction, Vector&lt;SlowCaseEntry&gt;::iterator&amp; iter)
</span><span class="cx"> {
</span><span class="lines">@@ -104,11 +94,6 @@
</span><span class="cx">     compileOpCall(op_call, currentInstruction, m_callLinkInfoIndex++);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void JIT::emit_op_tail_call(Instruction* currentInstruction)
-{
-    compileOpCall(op_tail_call, currentInstruction, m_callLinkInfoIndex++);
-}
-
</del><span class="cx"> void JIT::emit_op_call_eval(Instruction* currentInstruction)
</span><span class="cx"> {
</span><span class="cx">     compileOpCall(op_call_eval, currentInstruction, m_callLinkInfoIndex);
</span><span class="lines">@@ -118,11 +103,6 @@
</span><span class="cx"> {
</span><span class="cx">     compileOpCall(op_call_varargs, currentInstruction, m_callLinkInfoIndex++);
</span><span class="cx"> }
</span><del>-
-void JIT::emit_op_tail_call_varargs(Instruction* currentInstruction)
-{
-    compileOpCall(op_tail_call_varargs, currentInstruction, m_callLinkInfoIndex++);
-}
</del><span class="cx">     
</span><span class="cx"> void JIT::emit_op_construct_varargs(Instruction* currentInstruction)
</span><span class="cx"> {
</span><span class="lines">@@ -230,7 +210,7 @@
</span><span class="cx">     CallLinkInfo* info;
</span><span class="cx">     if (opcodeID != op_call_eval)
</span><span class="cx">         info = m_codeBlock-&gt;addCallLinkInfo();
</span><del>-    if (opcodeID == op_call_varargs || opcodeID == op_construct_varargs || opcodeID == op_tail_call_varargs)
</del><ins>+    if (opcodeID == op_call_varargs || opcodeID == op_construct_varargs)
</ins><span class="cx">         compileSetupVarargsFrame(instruction, info);
</span><span class="cx">     else {
</span><span class="cx">         int argCount = instruction[3].u.operand;
</span><span class="lines">@@ -261,9 +241,6 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (opcodeID == op_tail_call || opcodeID == op_tail_call_varargs)
-        emitRestoreCalleeSaves();
-
</del><span class="cx">     addSlowCase(branch32(NotEqual, regT1, TrustedImm32(JSValue::CellTag)));
</span><span class="cx"> 
</span><span class="cx">     DataLabelPtr addressOfLinkedFunctionCheck;
</span><span class="lines">@@ -278,12 +255,6 @@
</span><span class="cx">     m_callCompilationInfo[callLinkInfoIndex].callLinkInfo = info;
</span><span class="cx"> 
</span><span class="cx">     checkStackPointerAlignment();
</span><del>-    if (opcodeID == op_tail_call || opcodeID == op_tail_call_varargs) {
-        prepareForTailCallSlow();
-        m_callCompilationInfo[callLinkInfoIndex].hotPathOther = emitNakedTailCall();
-        return;
-    }
-
</del><span class="cx">     m_callCompilationInfo[callLinkInfoIndex].hotPathOther = emitNakedCall();
</span><span class="cx"> 
</span><span class="cx">     addPtr(TrustedImm32(stackPointerOffsetFor(m_codeBlock) * sizeof(Register)), callFrameRegister, stackPointerRegister);
</span><span class="lines">@@ -304,17 +275,8 @@
</span><span class="cx">     linkSlowCase(iter);
</span><span class="cx"> 
</span><span class="cx">     move(TrustedImmPtr(m_callCompilationInfo[callLinkInfoIndex].callLinkInfo), regT2);
</span><del>-
-    if (opcodeID == op_tail_call || opcodeID == op_tail_call_varargs)
-        emitRestoreCalleeSaves();
-
</del><span class="cx">     m_callCompilationInfo[callLinkInfoIndex].callReturnLocation = emitNakedCall(m_vm-&gt;getCTIStub(linkCallThunkGenerator).code());
</span><span class="cx"> 
</span><del>-    if (opcodeID == op_tail_call || opcodeID == op_tail_call_varargs) {
-        abortWithReason(JITDidReturnFromTailCall);
-        return;
-    }
-
</del><span class="cx">     addPtr(TrustedImm32(stackPointerOffsetFor(m_codeBlock) * sizeof(Register)), callFrameRegister, stackPointerRegister);
</span><span class="cx">     checkStackPointerAlignment();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITInlines.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITInlines.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/jit/JITInlines.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -125,14 +125,6 @@
</span><span class="cx">     return nakedCall;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE JIT::Call JIT::emitNakedTailCall(CodePtr function)
-{
-    ASSERT(m_bytecodeOffset != std::numeric_limits&lt;unsigned&gt;::max()); // This method should only be called during hot/cold path generation, so that m_bytecodeOffset is set.
-    Call nakedCall = nearTailCall();
-    m_calls.append(CallRecord(nakedCall, m_bytecodeOffset, function.executableAddress()));
-    return nakedCall;
-}
-
</del><span class="cx"> ALWAYS_INLINE void JIT::updateTopCallFrame()
</span><span class="cx"> {
</span><span class="cx">     ASSERT(static_cast&lt;int&gt;(m_bytecodeOffset) &gt;= 0);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -682,14 +682,14 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static SlowPathReturnType handleHostCall(ExecState* execCallee, JSValue callee, CallLinkInfo* callLinkInfo)
</del><ins>+static void* handleHostCall(ExecState* execCallee, JSValue callee, CodeSpecializationKind kind)
</ins><span class="cx"> {
</span><span class="cx">     ExecState* exec = execCallee-&gt;callerFrame();
</span><span class="cx">     VM* vm = &amp;exec-&gt;vm();
</span><span class="cx"> 
</span><span class="cx">     execCallee-&gt;setCodeBlock(0);
</span><span class="cx"> 
</span><del>-    if (callLinkInfo-&gt;specializationKind() == CodeForCall) {
</del><ins>+    if (kind == CodeForCall) {
</ins><span class="cx">         CallData callData;
</span><span class="cx">         CallType callType = getCallData(callee, callData);
</span><span class="cx">     
</span><span class="lines">@@ -699,25 +699,18 @@
</span><span class="cx">             NativeCallFrameTracer tracer(vm, execCallee);
</span><span class="cx">             execCallee-&gt;setCallee(asObject(callee));
</span><span class="cx">             vm-&gt;hostCallReturnValue = JSValue::decode(callData.native.function(execCallee));
</span><del>-            if (vm-&gt;exception()) {
-                return encodeResult(
-                    vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress(),
-                    reinterpret_cast&lt;void*&gt;(KeepTheFrame));
-            }
</del><ins>+            if (vm-&gt;exception())
+                return vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress();
</ins><span class="cx"> 
</span><del>-            return encodeResult(
-                bitwise_cast&lt;void*&gt;(getHostCallReturnValue),
-                reinterpret_cast&lt;void*&gt;(callLinkInfo-&gt;callMode() == CallMode::Tail ? ReuseTheFrame : KeepTheFrame));
</del><ins>+            return reinterpret_cast&lt;void*&gt;(getHostCallReturnValue);
</ins><span class="cx">         }
</span><span class="cx">     
</span><span class="cx">         ASSERT(callType == CallTypeNone);
</span><span class="cx">         exec-&gt;vm().throwException(exec, createNotAFunctionError(exec, callee));
</span><del>-        return encodeResult(
-            vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress(),
-            reinterpret_cast&lt;void*&gt;(KeepTheFrame));
</del><ins>+        return vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ASSERT(callLinkInfo-&gt;specializationKind() == CodeForConstruct);
</del><ins>+    ASSERT(kind == CodeForConstruct);
</ins><span class="cx">     
</span><span class="cx">     ConstructData constructData;
</span><span class="cx">     ConstructType constructType = getConstructData(callee, constructData);
</span><span class="lines">@@ -728,23 +721,18 @@
</span><span class="cx">         NativeCallFrameTracer tracer(vm, execCallee);
</span><span class="cx">         execCallee-&gt;setCallee(asObject(callee));
</span><span class="cx">         vm-&gt;hostCallReturnValue = JSValue::decode(constructData.native.function(execCallee));
</span><del>-        if (vm-&gt;exception()) {
-            return encodeResult(
-                vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress(),
-                reinterpret_cast&lt;void*&gt;(KeepTheFrame));
-        }
</del><ins>+        if (vm-&gt;exception())
+            return vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress();
</ins><span class="cx"> 
</span><del>-        return encodeResult(bitwise_cast&lt;void*&gt;(getHostCallReturnValue), reinterpret_cast&lt;void*&gt;(KeepTheFrame));
</del><ins>+        return reinterpret_cast&lt;void*&gt;(getHostCallReturnValue);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     ASSERT(constructType == ConstructTypeNone);
</span><span class="cx">     exec-&gt;vm().throwException(exec, createNotAConstructorError(exec, callee));
</span><del>-    return encodeResult(
-        vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress(),
-        reinterpret_cast&lt;void*&gt;(KeepTheFrame));
</del><ins>+    return vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-SlowPathReturnType JIT_OPERATION operationLinkCall(ExecState* execCallee, CallLinkInfo* callLinkInfo)
</del><ins>+char* JIT_OPERATION operationLinkCall(ExecState* execCallee, CallLinkInfo* callLinkInfo)
</ins><span class="cx"> {
</span><span class="cx">     ExecState* exec = execCallee-&gt;callerFrame();
</span><span class="cx">     VM* vm = &amp;exec-&gt;vm();
</span><span class="lines">@@ -757,7 +745,7 @@
</span><span class="cx">         // FIXME: We should cache these kinds of calls. They can be common and currently they are
</span><span class="cx">         // expensive.
</span><span class="cx">         // https://bugs.webkit.org/show_bug.cgi?id=144458
</span><del>-        return handleHostCall(execCallee, calleeAsValue, callLinkInfo);
</del><ins>+        return reinterpret_cast&lt;char*&gt;(handleHostCall(execCallee, calleeAsValue, kind));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     JSFunction* callee = jsCast&lt;JSFunction*&gt;(calleeAsFunctionCell);
</span><span class="lines">@@ -786,21 +774,17 @@
</span><span class="cx"> 
</span><span class="cx">         if (!isCall(kind) &amp;&amp; functionExecutable-&gt;constructAbility() == ConstructAbility::CannotConstruct) {
</span><span class="cx">             exec-&gt;vm().throwException(exec, createNotAConstructorError(exec, callee));
</span><del>-            return encodeResult(
-                vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress(),
-                reinterpret_cast&lt;void*&gt;(KeepTheFrame));
</del><ins>+            return reinterpret_cast&lt;char*&gt;(vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress());
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         JSObject* error = functionExecutable-&gt;prepareForExecution(execCallee, callee, scope, kind);
</span><span class="cx">         if (error) {
</span><span class="cx">             exec-&gt;vm().throwException(exec, error);
</span><del>-            return encodeResult(
-                vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress(),
-                reinterpret_cast&lt;void*&gt;(KeepTheFrame));
</del><ins>+            return reinterpret_cast&lt;char*&gt;(vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress());
</ins><span class="cx">         }
</span><span class="cx">         codeBlock = functionExecutable-&gt;codeBlockFor(kind);
</span><span class="cx">         ArityCheckMode arity;
</span><del>-        if (execCallee-&gt;argumentCountIncludingThis() &lt; static_cast&lt;size_t&gt;(codeBlock-&gt;numParameters()) || callLinkInfo-&gt;isVarargs())
</del><ins>+        if (execCallee-&gt;argumentCountIncludingThis() &lt; static_cast&lt;size_t&gt;(codeBlock-&gt;numParameters()) || callLinkInfo-&gt;callType() == CallLinkInfo::CallVarargs || callLinkInfo-&gt;callType() == CallLinkInfo::ConstructVarargs)
</ins><span class="cx">             arity = MustCheckArity;
</span><span class="cx">         else
</span><span class="cx">             arity = ArityCheckNotRequired;
</span><span class="lines">@@ -811,10 +795,10 @@
</span><span class="cx">     else
</span><span class="cx">         linkFor(execCallee, *callLinkInfo, codeBlock, callee, codePtr);
</span><span class="cx">     
</span><del>-    return encodeResult(codePtr.executableAddress(), reinterpret_cast&lt;void*&gt;(callLinkInfo-&gt;callMode() == CallMode::Tail ? ReuseTheFrame : KeepTheFrame));
</del><ins>+    return reinterpret_cast&lt;char*&gt;(codePtr.executableAddress());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline SlowPathReturnType virtualForWithFunction(
</del><ins>+inline char* virtualForWithFunction(
</ins><span class="cx">     ExecState* execCallee, CallLinkInfo* callLinkInfo, JSCell*&amp; calleeAsFunctionCell)
</span><span class="cx"> {
</span><span class="cx">     ExecState* exec = execCallee-&gt;callerFrame();
</span><span class="lines">@@ -825,7 +809,7 @@
</span><span class="cx">     JSValue calleeAsValue = execCallee-&gt;calleeAsValue();
</span><span class="cx">     calleeAsFunctionCell = getJSFunction(calleeAsValue);
</span><span class="cx">     if (UNLIKELY(!calleeAsFunctionCell))
</span><del>-        return handleHostCall(execCallee, calleeAsValue, callLinkInfo);
</del><ins>+        return reinterpret_cast&lt;char*&gt;(handleHostCall(execCallee, calleeAsValue, kind));
</ins><span class="cx">     
</span><span class="cx">     JSFunction* function = jsCast&lt;JSFunction*&gt;(calleeAsFunctionCell);
</span><span class="cx">     JSScope* scope = function-&gt;scopeUnchecked();
</span><span class="lines">@@ -840,17 +824,13 @@
</span><span class="cx"> 
</span><span class="cx">             if (!isCall(kind) &amp;&amp; functionExecutable-&gt;constructAbility() == ConstructAbility::CannotConstruct) {
</span><span class="cx">                 exec-&gt;vm().throwException(exec, createNotAConstructorError(exec, function));
</span><del>-                return encodeResult(
-                    vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress(),
-                    reinterpret_cast&lt;void*&gt;(KeepTheFrame));
</del><ins>+                return reinterpret_cast&lt;char*&gt;(vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress());
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             JSObject* error = functionExecutable-&gt;prepareForExecution(execCallee, function, scope, kind);
</span><span class="cx">             if (error) {
</span><span class="cx">                 exec-&gt;vm().throwException(exec, error);
</span><del>-                return encodeResult(
-                    vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress(),
-                    reinterpret_cast&lt;void*&gt;(KeepTheFrame));
</del><ins>+                return reinterpret_cast&lt;char*&gt;(vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress());
</ins><span class="cx">             }
</span><span class="cx">         } else {
</span><span class="cx"> #if ENABLE(WEBASSEMBLY)
</span><span class="lines">@@ -866,23 +846,22 @@
</span><span class="cx"> #endif
</span><span class="cx">         }
</span><span class="cx">     }
</span><del>-    return encodeResult(executable-&gt;entrypointFor(
-        *vm, kind, MustCheckArity, callLinkInfo-&gt;registerPreservationMode()).executableAddress(),
-        reinterpret_cast&lt;void*&gt;(callLinkInfo-&gt;callMode() == CallMode::Tail ? ReuseTheFrame : KeepTheFrame));
</del><ins>+    return reinterpret_cast&lt;char*&gt;(executable-&gt;entrypointFor(
+        *vm, kind, MustCheckArity, callLinkInfo-&gt;registerPreservationMode()).executableAddress());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-SlowPathReturnType JIT_OPERATION operationLinkPolymorphicCall(ExecState* execCallee, CallLinkInfo* callLinkInfo)
</del><ins>+char* JIT_OPERATION operationLinkPolymorphicCall(ExecState* execCallee, CallLinkInfo* callLinkInfo)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(callLinkInfo-&gt;specializationKind() == CodeForCall);
</span><span class="cx">     JSCell* calleeAsFunctionCell;
</span><del>-    SlowPathReturnType result = virtualForWithFunction(execCallee, callLinkInfo, calleeAsFunctionCell);
</del><ins>+    char* result = virtualForWithFunction(execCallee, callLinkInfo, calleeAsFunctionCell);
</ins><span class="cx"> 
</span><span class="cx">     linkPolymorphicCall(execCallee, *callLinkInfo, CallVariant(calleeAsFunctionCell));
</span><span class="cx">     
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SlowPathReturnType JIT_OPERATION operationVirtualCall(ExecState* execCallee, CallLinkInfo* callLinkInfo)
</del><ins>+char* JIT_OPERATION operationVirtualCall(ExecState* execCallee, CallLinkInfo* callLinkInfo)
</ins><span class="cx"> {
</span><span class="cx">     JSCell* calleeAsFunctionCellIgnored;
</span><span class="cx">     return virtualForWithFunction(execCallee, callLinkInfo, calleeAsFunctionCellIgnored);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -237,7 +237,6 @@
</span><span class="cx"> typedef char* JIT_OPERATION (*P_JITOperation_EStSS)(ExecState*, Structure*, size_t, size_t);
</span><span class="cx"> typedef char* JIT_OPERATION (*P_JITOperation_EStZ)(ExecState*, Structure*, int32_t);
</span><span class="cx"> typedef char* JIT_OPERATION (*P_JITOperation_EZZ)(ExecState*, int32_t, int32_t);
</span><del>-typedef SlowPathReturnType JIT_OPERATION (*Sprt_JITOperation_ECli)(ExecState*, CallLinkInfo*);
</del><span class="cx"> typedef StringImpl* JIT_OPERATION (*T_JITOperation_EJss)(ExecState*, JSString*);
</span><span class="cx"> typedef JSString* JIT_OPERATION (*Jss_JITOperation_EZ)(ExecState*, int32_t);
</span><span class="cx"> 
</span><span class="lines">@@ -279,9 +278,9 @@
</span><span class="cx"> void JIT_OPERATION operationPutByValGeneric(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue, ByValInfo*) WTF_INTERNAL;
</span><span class="cx"> void JIT_OPERATION operationDirectPutByValGeneric(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue, ByValInfo*) WTF_INTERNAL;
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationCallEval(ExecState*, ExecState*) WTF_INTERNAL;
</span><del>-SlowPathReturnType JIT_OPERATION operationLinkCall(ExecState*, CallLinkInfo*) WTF_INTERNAL;
-SlowPathReturnType JIT_OPERATION operationLinkPolymorphicCall(ExecState*, CallLinkInfo*) WTF_INTERNAL;
-SlowPathReturnType JIT_OPERATION operationVirtualCall(ExecState*, CallLinkInfo*) WTF_INTERNAL;
</del><ins>+char* JIT_OPERATION operationLinkCall(ExecState*, CallLinkInfo*) WTF_INTERNAL;
+char* JIT_OPERATION operationLinkPolymorphicCall(ExecState*, CallLinkInfo*) WTF_INTERNAL;
+char* JIT_OPERATION operationVirtualCall(ExecState*, CallLinkInfo*) WTF_INTERNAL;
</ins><span class="cx"> 
</span><span class="cx"> size_t JIT_OPERATION operationCompareLess(ExecState*, EncodedJSValue, EncodedJSValue) WTF_INTERNAL;
</span><span class="cx"> size_t JIT_OPERATION operationCompareLessEq(ExecState*, EncodedJSValue, EncodedJSValue) WTF_INTERNAL;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitRepatchcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/Repatch.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/Repatch.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/jit/Repatch.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -609,7 +609,7 @@
</span><span class="cx"> {
</span><span class="cx">     CodeBlock* callerCodeBlock = exec-&gt;callerFrame()-&gt;codeBlock();
</span><span class="cx">     VM* vm = callerCodeBlock-&gt;vm();
</span><del>-
</del><ins>+    
</ins><span class="cx">     if (shouldShowDisassemblyFor(callerCodeBlock))
</span><span class="cx">         dataLog(&quot;Linking virtual call at &quot;, *callerCodeBlock, &quot; &quot;, exec-&gt;callerFrame()-&gt;codeOrigin(), &quot;\n&quot;);
</span><span class="cx">     
</span><span class="lines">@@ -680,7 +680,7 @@
</span><span class="cx">                 codeBlock = jsCast&lt;FunctionExecutable*&gt;(executable)-&gt;codeBlockForCall();
</span><span class="cx">             // If we cannot handle a callee, assume that it's better for this whole thing to be a
</span><span class="cx">             // virtual call.
</span><del>-            if (exec-&gt;argumentCountIncludingThis() &lt; static_cast&lt;size_t&gt;(codeBlock-&gt;numParameters()) || callLinkInfo.isVarargs()) {
</del><ins>+            if (exec-&gt;argumentCountIncludingThis() &lt; static_cast&lt;size_t&gt;(codeBlock-&gt;numParameters()) || callLinkInfo.callType() == CallLinkInfo::CallVarargs || callLinkInfo.callType() == CallLinkInfo::ConstructVarargs) {
</ins><span class="cx">                 linkVirtualFor(exec, callLinkInfo);
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="lines">@@ -803,11 +803,7 @@
</span><span class="cx">                 CCallHelpers::TrustedImm32(1),
</span><span class="cx">                 CCallHelpers::Address(fastCountsBaseGPR, caseIndex * sizeof(uint32_t)));
</span><span class="cx">         }
</span><del>-        if (callLinkInfo.isTailCall()) {
-            stubJit.prepareForTailCallSlow();
-            calls[caseIndex].call = stubJit.nearTailCall();
-        } else
-            calls[caseIndex].call = stubJit.nearCall();
</del><ins>+        calls[caseIndex].call = stubJit.nearCall();
</ins><span class="cx">         calls[caseIndex].codePtr = codePtr;
</span><span class="cx">         done.append(stubJit.jump());
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitThunkGeneratorscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -79,26 +79,10 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void slowPathFor(
</span><del>-    CCallHelpers&amp; jit, VM* vm, Sprt_JITOperation_ECli slowPathFunction)
</del><ins>+    CCallHelpers&amp; jit, VM* vm, P_JITOperation_ECli slowPathFunction)
</ins><span class="cx"> {
</span><span class="cx">     jit.emitFunctionPrologue();
</span><span class="cx">     jit.storePtr(GPRInfo::callFrameRegister, &amp;vm-&gt;topCallFrame);
</span><del>-#if OS(WINDOWS) &amp;&amp; CPU(X86_64)
-    // Windows X86_64 needs some space pointed to by arg0 for return types larger than 64 bits.
-    // Other argument values are shift by 1. Use space on the stack for our two return values.
-    // Moving the stack down maxFrameExtentForSlowPathCall bytes gives us room for our 3 arguments
-    // and space for the 16 byte return area.
-    jit.addPtr(CCallHelpers::TrustedImm32(-maxFrameExtentForSlowPathCall), CCallHelpers::stackPointerRegister);
-    jit.move(GPRInfo::regT2, GPRInfo::argumentGPR2);
-    jit.addPtr(CCallHelpers::TrustedImm32(32), CCallHelpers::stackPointerRegister, GPRInfo::argumentGPR0);
-    jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR1);
-    jit.move(CCallHelpers::TrustedImmPtr(bitwise_cast&lt;void*&gt;(slowPathFunction)), GPRInfo::nonArgGPR0);
-    emitPointerValidation(jit, GPRInfo::nonArgGPR0);
-    jit.call(GPRInfo::nonArgGPR0);
-    jit.loadPtr(CCallHelpers::Address(GPRInfo::returnValueGPR, 8), GPRInfo::returnValueGPR2);
-    jit.loadPtr(CCallHelpers::Address(GPRInfo::returnValueGPR), GPRInfo::returnValueGPR);
-    jit.addPtr(CCallHelpers::TrustedImm32(maxFrameExtentForSlowPathCall), CCallHelpers::stackPointerRegister);
-#else
</del><span class="cx">     if (maxFrameExtentForSlowPathCall)
</span><span class="cx">         jit.addPtr(CCallHelpers::TrustedImm32(-maxFrameExtentForSlowPathCall), CCallHelpers::stackPointerRegister);
</span><span class="cx">     jit.setupArgumentsWithExecState(GPRInfo::regT2);
</span><span class="lines">@@ -107,24 +91,13 @@
</span><span class="cx">     jit.call(GPRInfo::nonArgGPR0);
</span><span class="cx">     if (maxFrameExtentForSlowPathCall)
</span><span class="cx">         jit.addPtr(CCallHelpers::TrustedImm32(maxFrameExtentForSlowPathCall), CCallHelpers::stackPointerRegister);
</span><del>-#endif
-
</del><ins>+    
</ins><span class="cx">     // This slow call will return the address of one of the following:
</span><span class="cx">     // 1) Exception throwing thunk.
</span><span class="cx">     // 2) Host call return value returner thingy.
</span><span class="cx">     // 3) The function to call.
</span><del>-    // The second return value GPR will hold a non-zero value for tail calls.
-
</del><span class="cx">     emitPointerValidation(jit, GPRInfo::returnValueGPR);
</span><span class="cx">     jit.emitFunctionEpilogue();
</span><del>-
-    RELEASE_ASSERT(reinterpret_cast&lt;void*&gt;(KeepTheFrame) == reinterpret_cast&lt;void*&gt;(0));
-    CCallHelpers::Jump doNotTrash = jit.branchTestPtr(CCallHelpers::Zero, GPRInfo::returnValueGPR2);
-
-    jit.preserveReturnAddressAfterCall(GPRInfo::nonPreservedNonReturnGPR);
-    jit.prepareForTailCallSlow(GPRInfo::returnValueGPR);
-
-    doNotTrash.link(&amp;jit);
</del><span class="cx">     jit.jump(GPRInfo::returnValueGPR);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -135,6 +108,7 @@
</span><span class="cx">     // to perform linking and lazy compilation if necessary. We expect the callee
</span><span class="cx">     // to be in regT0/regT1 (payload/tag), the CallFrame to have already
</span><span class="cx">     // been adjusted, and all other registers to be available for use.
</span><ins>+    
</ins><span class="cx">     CCallHelpers jit(vm);
</span><span class="cx">     
</span><span class="cx">     slowPathFor(jit, vm, operationLinkCall);
</span><span class="lines">@@ -211,10 +185,6 @@
</span><span class="cx">     
</span><span class="cx">     // Make a tail call. This will return back to JIT code.
</span><span class="cx">     emitPointerValidation(jit, GPRInfo::regT4);
</span><del>-    if (callLinkInfo.isTailCall()) {
-        jit.preserveReturnAddressAfterCall(GPRInfo::regT0);
-        jit.prepareForTailCallSlow(GPRInfo::regT4);
-    }
</del><span class="cx">     jit.jump(GPRInfo::regT4);
</span><span class="cx"> 
</span><span class="cx">     slowCase.link(&amp;jit);
</span><span class="lines">@@ -226,8 +196,9 @@
</span><span class="cx">     LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</span><span class="cx">     return FINALIZE_CODE(
</span><span class="cx">         patchBuffer,
</span><del>-        (&quot;Virtual %s slow path thunk&quot;,
-        callLinkInfo.callMode() == CallMode::Regular ? &quot;call&quot; : callLinkInfo.callMode() == CallMode::Tail ? &quot;tail call&quot; : &quot;construct&quot;));
</del><ins>+        (&quot;Virtual %s%s slow path thunk&quot;,
+        callLinkInfo.specializationKind() == CodeForCall ? &quot;call&quot; : &quot;construct&quot;,
+        callLinkInfo.registerPreservationMode() == MustPreserveRegisters ? &quot; that preserves registers&quot; : &quot;&quot;));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> enum ThunkEntryType { EnterViaCall, EnterViaJump };
</span><span class="lines">@@ -396,7 +367,7 @@
</span><span class="cx"> {
</span><span class="cx">     JSInterfaceJIT jit(vm);
</span><span class="cx"> 
</span><del>-    // We enter with fixup count in argumentGPR0
</del><ins>+    // We enter with fixup count, in aligned stack units, in argumentGPR0 and the return thunk in argumentGPR1
</ins><span class="cx">     // We have the guarantee that a0, a1, a2, t3, t4 and t5 (or t0 for Windows) are all distinct :-)
</span><span class="cx"> #if USE(JSVALUE64)
</span><span class="cx"> #if OS(WINDOWS)
</span><span class="lines">@@ -407,25 +378,12 @@
</span><span class="cx"> #  if CPU(X86_64)
</span><span class="cx">     jit.pop(JSInterfaceJIT::regT4);
</span><span class="cx"> #  endif
</span><ins>+    jit.lshift32(JSInterfaceJIT::TrustedImm32(logStackAlignmentRegisters()), JSInterfaceJIT::argumentGPR0);
+    jit.neg64(JSInterfaceJIT::argumentGPR0);
</ins><span class="cx">     jit.move(JSInterfaceJIT::callFrameRegister, JSInterfaceJIT::regT3);
</span><span class="cx">     jit.load32(JSInterfaceJIT::Address(JSInterfaceJIT::callFrameRegister, JSStack::ArgumentCount * sizeof(Register)), JSInterfaceJIT::argumentGPR2);
</span><span class="cx">     jit.add32(JSInterfaceJIT::TrustedImm32(JSStack::CallFrameHeaderSize), JSInterfaceJIT::argumentGPR2);
</span><span class="cx"> 
</span><del>-    // Check to see if we have extra slots we can use
-    jit.move(JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::argumentGPR1);
-    jit.and32(JSInterfaceJIT::TrustedImm32(stackAlignmentRegisters() - 1), JSInterfaceJIT::argumentGPR1);
-    JSInterfaceJIT::Jump noExtraSlot = jit.branchTest32(MacroAssembler::Zero, JSInterfaceJIT::argumentGPR1);
-    jit.move(JSInterfaceJIT::TrustedImm64(ValueUndefined), extraTemp);
-    JSInterfaceJIT::Label fillExtraSlots(jit.label());
-    jit.store64(extraTemp, MacroAssembler::BaseIndex(JSInterfaceJIT::callFrameRegister, JSInterfaceJIT::argumentGPR2, JSInterfaceJIT::TimesEight));
-    jit.add32(JSInterfaceJIT::TrustedImm32(1), JSInterfaceJIT::argumentGPR2);
-    jit.branchSub32(JSInterfaceJIT::NonZero, JSInterfaceJIT::TrustedImm32(1), JSInterfaceJIT::argumentGPR1).linkTo(fillExtraSlots, &amp;jit);
-    jit.and32(JSInterfaceJIT::TrustedImm32(-stackAlignmentRegisters()), JSInterfaceJIT::argumentGPR0);
-    JSInterfaceJIT::Jump done = jit.branchTest32(MacroAssembler::Zero, JSInterfaceJIT::argumentGPR0);
-    noExtraSlot.link(&amp;jit);
-
-    jit.neg64(JSInterfaceJIT::argumentGPR0);
-
</del><span class="cx">     // Move current frame down argumentGPR0 number of slots
</span><span class="cx">     JSInterfaceJIT::Label copyLoop(jit.label());
</span><span class="cx">     jit.load64(JSInterfaceJIT::regT3, extraTemp);
</span><span class="lines">@@ -433,9 +391,10 @@
</span><span class="cx">     jit.addPtr(JSInterfaceJIT::TrustedImm32(8), JSInterfaceJIT::regT3);
</span><span class="cx">     jit.branchSub32(MacroAssembler::NonZero, JSInterfaceJIT::TrustedImm32(1), JSInterfaceJIT::argumentGPR2).linkTo(copyLoop, &amp;jit);
</span><span class="cx"> 
</span><del>-    // Fill in argumentGPR0 missing arg slots with undefined
</del><ins>+    // Fill in argumentGPR0 - 1 missing arg slots with undefined
</ins><span class="cx">     jit.move(JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::argumentGPR2);
</span><span class="cx">     jit.move(JSInterfaceJIT::TrustedImm64(ValueUndefined), extraTemp);
</span><ins>+    jit.add32(JSInterfaceJIT::TrustedImm32(1), JSInterfaceJIT::argumentGPR2);
</ins><span class="cx">     JSInterfaceJIT::Label fillUndefinedLoop(jit.label());
</span><span class="cx">     jit.store64(extraTemp, MacroAssembler::BaseIndex(JSInterfaceJIT::regT3, JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::TimesEight));
</span><span class="cx">     jit.addPtr(JSInterfaceJIT::TrustedImm32(8), JSInterfaceJIT::regT3);
</span><span class="lines">@@ -447,8 +406,6 @@
</span><span class="cx">     jit.addPtr(extraTemp, JSInterfaceJIT::callFrameRegister);
</span><span class="cx">     jit.addPtr(extraTemp, JSInterfaceJIT::stackPointerRegister);
</span><span class="cx"> 
</span><del>-    done.link(&amp;jit);
-
</del><span class="cx"> #  if CPU(X86_64)
</span><span class="cx">     jit.push(JSInterfaceJIT::regT4);
</span><span class="cx"> #  endif
</span><span class="lines">@@ -457,43 +414,29 @@
</span><span class="cx"> #  if CPU(X86)
</span><span class="cx">     jit.pop(JSInterfaceJIT::regT4);
</span><span class="cx"> #  endif
</span><ins>+    jit.lshift32(JSInterfaceJIT::TrustedImm32(logStackAlignmentRegisters()), JSInterfaceJIT::argumentGPR0);
+    jit.neg32(JSInterfaceJIT::argumentGPR0);
</ins><span class="cx">     jit.move(JSInterfaceJIT::callFrameRegister, JSInterfaceJIT::regT3);
</span><span class="cx">     jit.load32(JSInterfaceJIT::Address(JSInterfaceJIT::callFrameRegister, JSStack::ArgumentCount * sizeof(Register)), JSInterfaceJIT::argumentGPR2);
</span><span class="cx">     jit.add32(JSInterfaceJIT::TrustedImm32(JSStack::CallFrameHeaderSize), JSInterfaceJIT::argumentGPR2);
</span><span class="cx"> 
</span><del>-    // Check to see if we have extra slots we can use
-    jit.move(JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::argumentGPR1);
-    jit.and32(JSInterfaceJIT::TrustedImm32(stackAlignmentRegisters() - 1), JSInterfaceJIT::argumentGPR1);
-    JSInterfaceJIT::Jump noExtraSlot = jit.branchTest32(MacroAssembler::Zero, JSInterfaceJIT::argumentGPR1);
-    JSInterfaceJIT::Label fillExtraSlots(jit.label());
-    jit.move(JSInterfaceJIT::TrustedImm32(0), JSInterfaceJIT::regT5);
-    jit.store32(JSInterfaceJIT::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::callFrameRegister, JSInterfaceJIT::argumentGPR2, JSInterfaceJIT::TimesEight, PayloadOffset));
-    jit.move(JSInterfaceJIT::TrustedImm32(JSValue::UndefinedTag), JSInterfaceJIT::regT5);
-    jit.store32(JSInterfaceJIT::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::callFrameRegister, JSInterfaceJIT::argumentGPR2, JSInterfaceJIT::TimesEight, TagOffset));
-    jit.add32(JSInterfaceJIT::TrustedImm32(1), JSInterfaceJIT::argumentGPR2);
-    jit.branchSub32(JSInterfaceJIT::NonZero, JSInterfaceJIT::TrustedImm32(1), JSInterfaceJIT::argumentGPR1).linkTo(fillExtraSlots, &amp;jit);
-    jit.and32(JSInterfaceJIT::TrustedImm32(-stackAlignmentRegisters()), JSInterfaceJIT::argumentGPR0);
-    JSInterfaceJIT::Jump done = jit.branchTest32(MacroAssembler::Zero, JSInterfaceJIT::argumentGPR0);
-    noExtraSlot.link(&amp;jit);
-
-    jit.neg32(JSInterfaceJIT::argumentGPR0);
-
</del><span class="cx">     // Move current frame down argumentGPR0 number of slots
</span><span class="cx">     JSInterfaceJIT::Label copyLoop(jit.label());
</span><del>-    jit.load32(MacroAssembler::Address(JSInterfaceJIT::regT3, PayloadOffset), JSInterfaceJIT::regT5);
-    jit.store32(JSInterfaceJIT::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::regT3, JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::TimesEight, PayloadOffset));
-    jit.load32(MacroAssembler::Address(JSInterfaceJIT::regT3, TagOffset), JSInterfaceJIT::regT5);
-    jit.store32(JSInterfaceJIT::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::regT3, JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::TimesEight, TagOffset));
</del><ins>+    jit.load32(JSInterfaceJIT::regT3, JSInterfaceJIT::regT5);
+    jit.store32(JSInterfaceJIT::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::regT3, JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::TimesEight));
+    jit.load32(MacroAssembler::Address(JSInterfaceJIT::regT3, 4), JSInterfaceJIT::regT5);
+    jit.store32(JSInterfaceJIT::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::regT3, JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::TimesEight, 4));
</ins><span class="cx">     jit.addPtr(JSInterfaceJIT::TrustedImm32(8), JSInterfaceJIT::regT3);
</span><span class="cx">     jit.branchSub32(MacroAssembler::NonZero, JSInterfaceJIT::TrustedImm32(1), JSInterfaceJIT::argumentGPR2).linkTo(copyLoop, &amp;jit);
</span><span class="cx"> 
</span><del>-    // Fill in argumentGPR0 missing arg slots with undefined
</del><ins>+    // Fill in argumentGPR0 - 1 missing arg slots with undefined
</ins><span class="cx">     jit.move(JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::argumentGPR2);
</span><ins>+    jit.add32(JSInterfaceJIT::TrustedImm32(1), JSInterfaceJIT::argumentGPR2);
</ins><span class="cx">     JSInterfaceJIT::Label fillUndefinedLoop(jit.label());
</span><span class="cx">     jit.move(JSInterfaceJIT::TrustedImm32(0), JSInterfaceJIT::regT5);
</span><del>-    jit.store32(JSInterfaceJIT::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::regT3, JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::TimesEight, PayloadOffset));
</del><ins>+    jit.store32(JSInterfaceJIT::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::regT3, JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::TimesEight));
</ins><span class="cx">     jit.move(JSInterfaceJIT::TrustedImm32(JSValue::UndefinedTag), JSInterfaceJIT::regT5);
</span><del>-    jit.store32(JSInterfaceJIT::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::regT3, JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::TimesEight, TagOffset));
</del><ins>+    jit.store32(JSInterfaceJIT::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::regT3, JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::TimesEight, 4));
</ins><span class="cx"> 
</span><span class="cx">     jit.addPtr(JSInterfaceJIT::TrustedImm32(8), JSInterfaceJIT::regT3);
</span><span class="cx">     jit.branchAdd32(MacroAssembler::NonZero, JSInterfaceJIT::TrustedImm32(1), JSInterfaceJIT::argumentGPR2).linkTo(fillUndefinedLoop, &amp;jit);
</span><span class="lines">@@ -504,8 +447,6 @@
</span><span class="cx">     jit.addPtr(JSInterfaceJIT::regT5, JSInterfaceJIT::callFrameRegister);
</span><span class="cx">     jit.addPtr(JSInterfaceJIT::regT5, JSInterfaceJIT::stackPointerRegister);
</span><span class="cx"> 
</span><del>-    done.link(&amp;jit);
-
</del><span class="cx"> #  if CPU(X86)
</span><span class="cx">     jit.push(JSInterfaceJIT::regT4);
</span><span class="cx"> #  endif
</span><span class="lines">@@ -516,16 +457,6 @@
</span><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;fixup arity&quot;));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-MacroAssemblerCodeRef unreachableGenerator(VM* vm)
-{
-    JSInterfaceJIT jit(vm);
-
-    jit.breakpoint();
-
-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
-    return FINALIZE_CODE(patchBuffer, (&quot;unreachable thunk&quot;));
-}
-
</del><span class="cx"> MacroAssemblerCodeRef baselineGetterReturnThunkGenerator(VM* vm)
</span><span class="cx"> {
</span><span class="cx">     JSInterfaceJIT jit(vm);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitThunkGeneratorsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/ThunkGenerators.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/ThunkGenerators.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/jit/ThunkGenerators.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -34,11 +34,9 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><span class="cx"> class CallLinkInfo;
</span><del>-class CCallHelpers;
</del><span class="cx"> 
</span><span class="cx"> MacroAssemblerCodeRef throwExceptionFromCallSlowPathGenerator(VM*);
</span><span class="cx"> 
</span><del>-MacroAssemblerCodeRef linkCallThunk(VM*, CallLinkInfo&amp;, CodeSpecializationKind, RegisterPreservationMode);
</del><span class="cx"> MacroAssemblerCodeRef linkCallThunkGenerator(VM*);
</span><span class="cx"> MacroAssemblerCodeRef linkPolymorphicCallThunkGenerator(VM*);
</span><span class="cx"> 
</span><span class="lines">@@ -48,7 +46,6 @@
</span><span class="cx"> MacroAssemblerCodeRef nativeConstructGenerator(VM*);
</span><span class="cx"> MacroAssemblerCodeRef nativeTailCallGenerator(VM*);
</span><span class="cx"> MacroAssemblerCodeRef arityFixupGenerator(VM*);
</span><del>-MacroAssemblerCodeRef unreachableGenerator(VM*);
</del><span class="cx"> 
</span><span class="cx"> MacroAssemblerCodeRef baselineGetterReturnThunkGenerator(VM* vm);
</span><span class="cx"> MacroAssemblerCodeRef baselineSetterReturnThunkGenerator(VM* vm);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreterasm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -167,7 +167,6 @@
</span><span class="cx"> const DirectArguments_storage = (sizeof DirectArguments + SlotSize - 1) &amp; ~(SlotSize - 1)
</span><span class="cx"> 
</span><span class="cx"> const StackAlignment = 16
</span><del>-const StackAlignmentSlots = 2
</del><span class="cx"> const StackAlignmentMask = StackAlignment - 1
</span><span class="cx"> 
</span><span class="cx"> const CallerFrameAndPCSize = 2 * PtrSize
</span><span class="lines">@@ -698,79 +697,36 @@
</span><span class="cx">     end
</span><span class="cx"> end
</span><span class="cx"> 
</span><del>-macro callTargetFunction(callee)
</del><ins>+macro callTargetFunction(callLinkInfo, calleeFramePtr)
+    move calleeFramePtr, sp
</ins><span class="cx">     if C_LOOP
</span><del>-        cloopCallJSFunction callee
</del><ins>+        cloopCallJSFunction LLIntCallLinkInfo::machineCodeTarget[callLinkInfo]
</ins><span class="cx">     else
</span><del>-        call callee
</del><ins>+        call LLIntCallLinkInfo::machineCodeTarget[callLinkInfo]
</ins><span class="cx">     end
</span><span class="cx">     restoreStackPointerAfterCall()
</span><span class="cx">     dispatchAfterCall()
</span><span class="cx"> end
</span><span class="cx"> 
</span><del>-macro prepareForRegularCall(callee, temp1, temp2, temp3)
-    addp CallerFrameAndPCSize, sp
-end
-
-# sp points to the new frame
-macro prepareForTailCall(callee, temp1, temp2, temp3)
-    restoreCalleeSavesUsedByLLInt()
-
-    loadi PayloadOffset + ArgumentCount[cfr], temp2
-    loadp CodeBlock[cfr], temp1
-    loadp CodeBlock::m_numParameters[temp1], temp1
-    bilteq temp1, temp2, .noArityFixup
-    move temp1, temp2
-
-.noArityFixup:
-    # We assume &lt; 2^28 arguments
-    muli SlotSize, temp2
-    addi StackAlignment - 1 + CallFrameHeaderSize, temp2
-    andi ~StackAlignmentMask, temp2
-
-    move cfr, temp1
-    addp temp2, temp1
-
-    loadi PayloadOffset + ArgumentCount[sp], temp2
-    # We assume &lt; 2^28 arguments
-    muli SlotSize, temp2
-    addi StackAlignment - 1 + CallFrameHeaderSize, temp2
-    andi ~StackAlignmentMask, temp2
-
-    if ARM or SH4 or ARM64 or C_LOOP or MIPS
-        addp 2 * PtrSize, sp
-        subi 2 * PtrSize, temp2
-        loadp PtrSize[cfr], lr
-    else
-        addp PtrSize, sp
-        subi PtrSize, temp2
-        loadp PtrSize[cfr], temp3
-        storep temp3, [sp]
-    end
-
-    subp temp2, temp1
-    loadp [cfr], cfr
-
-.copyLoop:
-    subi PtrSize, temp2
-    loadp [sp, temp2, 1], temp3
-    storep temp3, [temp1, temp2, 1]
-    btinz temp2, .copyLoop
-
-    move temp1, sp
-    jmp callee
-end
-
-macro slowPathForCall(slowPath, prepareCall)
</del><ins>+macro slowPathForCall(slowPath)
</ins><span class="cx">     callCallSlowPath(
</span><span class="cx">         slowPath,
</span><del>-        # Those are r0 and r1
-        macro (callee, calleeFramePtr)
-            btpz calleeFramePtr, .dontUpdateSP
-            move calleeFramePtr, sp
-            prepareCall(callee, t2, t3, t4)
</del><ins>+        macro (callee, calleeFrame)
+            btpz calleeFrame, .dontUpdateSP
+            if ARMv7
+                addp CallerFrameAndPCSize, calleeFrame, calleeFrame
+                move calleeFrame, sp
+            else
+                addp CallerFrameAndPCSize, calleeFrame, sp
+            end
</ins><span class="cx">         .dontUpdateSP:
</span><del>-            callTargetFunction(callee)
</del><ins>+            if C_LOOP
+                cloopCallJSFunction callee
+            else
+                call callee
+            end
+            restoreStackPointerAfterCall()
+            dispatchAfterCall()
</ins><span class="cx">         end)
</span><span class="cx"> end
</span><span class="cx"> 
</span><span class="lines">@@ -1459,19 +1415,16 @@
</span><span class="cx"> _llint_op_call:
</span><span class="cx">     traceExecution()
</span><span class="cx">     arrayProfileForCall()
</span><del>-    doCall(_llint_slow_path_call, prepareForRegularCall)
</del><ins>+    doCall(_llint_slow_path_call)
</ins><span class="cx"> 
</span><del>-_llint_op_tail_call:
-    traceExecution()
-    arrayProfileForCall()
-    checkSwitchToJITForEpilogue()
-    doCall(_llint_slow_path_call, prepareForTailCall)
</del><span class="cx"> 
</span><span class="cx"> _llint_op_construct:
</span><span class="cx">     traceExecution()
</span><del>-    doCall(_llint_slow_path_construct, prepareForRegularCall)
</del><ins>+    doCall(_llint_slow_path_construct)
</ins><span class="cx"> 
</span><del>-macro doCallVarargs(slowPath, prepareCall)
</del><ins>+
+_llint_op_call_varargs:
+    traceExecution()
</ins><span class="cx">     callSlowPath(_llint_slow_path_size_frame_for_varargs)
</span><span class="cx">     branchIfException(_llint_throw_from_slow_path_trampoline)
</span><span class="cx">     # calleeFrame in r1
</span><span class="lines">@@ -1486,23 +1439,25 @@
</span><span class="cx">             subp r1, CallerFrameAndPCSize, sp
</span><span class="cx">         end
</span><span class="cx">     end
</span><del>-    slowPathForCall(slowPath, prepareCall)
-end
</del><ins>+    slowPathForCall(_llint_slow_path_call_varargs)
</ins><span class="cx"> 
</span><del>-_llint_op_call_varargs:
-    traceExecution()
-    doCallVarargs(_llint_slow_path_call_varargs, prepareForRegularCall)
-
-_llint_op_tail_call_varargs:
-    traceExecution()
-    checkSwitchToJITForEpilogue()
-    # We lie and perform the tail call instead of preparing it since we can't
-    # prepare the frame for a call opcode
-    doCallVarargs(_llint_slow_path_call_varargs, prepareForTailCall)
-
</del><span class="cx"> _llint_op_construct_varargs:
</span><span class="cx">     traceExecution()
</span><del>-    doCallVarargs(_llint_slow_path_construct_varargs, prepareForRegularCall)
</del><ins>+    callSlowPath(_llint_slow_path_size_frame_for_varargs)
+    branchIfException(_llint_throw_from_slow_path_trampoline)
+    # calleeFrame in r1
+    if JSVALUE64
+        move r1, sp
+    else
+        # The calleeFrame is not stack aligned, move down by CallerFrameAndPCSize to align
+        if ARMv7
+            subp r1, CallerFrameAndPCSize, t2
+            move t2, sp
+        else
+            subp r1, CallerFrameAndPCSize, sp
+        end
+    end
+    slowPathForCall(_llint_slow_path_construct_varargs)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> _llint_op_call_eval:
</span><span class="lines">@@ -1541,7 +1496,7 @@
</span><span class="cx">     # and a PC to call, and that PC may be a dummy thunk that just
</span><span class="cx">     # returns the JS value that the eval returned.
</span><span class="cx">     
</span><del>-    slowPathForCall(_llint_slow_path_call_eval, prepareForRegularCall)
</del><ins>+    slowPathForCall(_llint_slow_path_call_eval)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> _llint_generic_return_point:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreter32_64asm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -602,27 +602,13 @@
</span><span class="cx"> .proceedInline:
</span><span class="cx">     loadi CommonSlowPaths::ArityCheckData::paddedStackSpace[r1], t1
</span><span class="cx">     btiz t1, .continue
</span><del>-    loadi PayloadOffset + ArgumentCount[cfr], t2
-    addi CallFrameHeaderSlots, t2
</del><span class="cx"> 
</span><del>-    // Check if there are some unaligned slots we can use
-    move t1, t3
-    andi StackAlignmentSlots - 1, t3
-    btiz t3, .noExtraSlot
-.fillExtraSlots:
-    move 0, t0
-    storei t0, PayloadOffset[cfr, t2, 8]
-    move UndefinedTag, t0
-    storei t0, TagOffset[cfr, t2, 8]
-    addi 1, t2
-    bsubinz 1, t3, .fillExtraSlots
-    andi ~(StackAlignmentSlots - 1), t1
-    btiz t1, .continue
-
-.noExtraSlot:
-    // Move frame up t1 slots
</del><ins>+    // Move frame up &quot;t1 * 2&quot; slots
+    lshiftp 1, t1
</ins><span class="cx">     negi t1
</span><span class="cx">     move cfr, t3
</span><ins>+    loadi PayloadOffset + ArgumentCount[cfr], t2
+    addi CallFrameHeaderSlots, t2
</ins><span class="cx"> .copyLoop:
</span><span class="cx">     loadi PayloadOffset[t3], t0
</span><span class="cx">     storei t0, PayloadOffset[t3, t1, 8]
</span><span class="lines">@@ -1778,7 +1764,7 @@
</span><span class="cx"> .done:
</span><span class="cx"> end
</span><span class="cx"> 
</span><del>-macro doCall(slowPath, prepareCall)
</del><ins>+macro doCall(slowPath)
</ins><span class="cx">     loadi 8[PC], t0
</span><span class="cx">     loadi 20[PC], t1
</span><span class="cx">     loadp LLIntCallLinkInfo::callee[t1], t2
</span><span class="lines">@@ -1793,14 +1779,14 @@
</span><span class="cx">     storei PC, ArgumentCount + TagOffset[cfr]
</span><span class="cx">     storei t2, ArgumentCount + PayloadOffset[t3]
</span><span class="cx">     storei CellTag, Callee + TagOffset[t3]
</span><del>-    move t3, sp
-    prepareCall(LLIntCallLinkInfo::machineCodeTarget[t1], t2, t3, t4)
-    callTargetFunction(LLIntCallLinkInfo::machineCodeTarget[t1])
</del><ins>+    addp CallerFrameAndPCSize, t3
+    callTargetFunction(t1, t3)
</ins><span class="cx"> 
</span><span class="cx"> .opCallSlow:
</span><del>-    slowPathForCall(slowPath, prepareCall)
</del><ins>+    slowPathForCall(slowPath)
</ins><span class="cx"> end
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> _llint_op_ret:
</span><span class="cx">     traceExecution()
</span><span class="cx">     checkSwitchToJITForEpilogue()
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreter64asm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -510,27 +510,14 @@
</span><span class="cx"> .noError:
</span><span class="cx">     loadi CommonSlowPaths::ArityCheckData::paddedStackSpace[r1], t1
</span><span class="cx">     btiz t1, .continue
</span><del>-    loadi PayloadOffset + ArgumentCount[cfr], t2
-    addi CallFrameHeaderSlots, t2
</del><span class="cx"> 
</span><del>-    // Check if there are some unaligned slots we can use
-    move t1, t3
-    andi StackAlignmentSlots - 1, t3
-    btiz t3, .noExtraSlot
-    move ValueUndefined, t0
-.fillExtraSlots:
-    storeq t0, [cfr, t2, 8]
-    addi 1, t2
-    bsubinz 1, t3, .fillExtraSlots
-    andi ~(StackAlignmentSlots - 1), t1
-    btiz t1, .continue
-
-.noExtraSlot:
-    // Move frame up t1 slots
</del><ins>+    // Move frame up &quot;t1 * 2&quot; slots
+    lshiftp 1, t1
</ins><span class="cx">     negq t1
</span><span class="cx">     move cfr, t3
</span><span class="cx">     subp CalleeSaveSpaceAsVirtualRegisters * 8, t3
</span><del>-    addi CalleeSaveSpaceAsVirtualRegisters, t2
</del><ins>+    loadi PayloadOffset + ArgumentCount[cfr], t2
+    addi CallFrameHeaderSlots + CalleeSaveSpaceAsVirtualRegisters, t2
</ins><span class="cx"> .copyLoop:
</span><span class="cx">     loadq [t3], t0
</span><span class="cx">     storeq t0, [t3, t1, 8]
</span><span class="lines">@@ -1666,7 +1653,7 @@
</span><span class="cx"> .done:
</span><span class="cx"> end
</span><span class="cx"> 
</span><del>-macro doCall(slowPath, prepareCall)
</del><ins>+macro doCall(slowPath)
</ins><span class="cx">     loadisFromInstruction(2, t0)
</span><span class="cx">     loadpFromInstruction(5, t1)
</span><span class="cx">     loadp LLIntCallLinkInfo::callee[t1], t2
</span><span class="lines">@@ -1680,14 +1667,14 @@
</span><span class="cx">     loadisFromInstruction(3, t2)
</span><span class="cx">     storei PC, ArgumentCount + TagOffset[cfr]
</span><span class="cx">     storei t2, ArgumentCount + PayloadOffset[t3]
</span><del>-    move t3, sp
-    prepareCall(LLIntCallLinkInfo::machineCodeTarget[t1], t2, t3, t4)
-    callTargetFunction(LLIntCallLinkInfo::machineCodeTarget[t1])
</del><ins>+    addp CallerFrameAndPCSize, t3
+    callTargetFunction(t1, t3)
</ins><span class="cx"> 
</span><span class="cx"> .opCallSlow:
</span><del>-    slowPathForCall(slowPath, prepareCall)
</del><ins>+    slowPathForCall(slowPath)
</ins><span class="cx"> end
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> _llint_op_ret:
</span><span class="cx">     traceExecution()
</span><span class="cx">     checkSwitchToJITForEpilogue()
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCommonSlowPathsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.h        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -59,14 +59,13 @@
</span><span class="cx">     int argumentCountIncludingThis = exec-&gt;argumentCountIncludingThis();
</span><span class="cx">     
</span><span class="cx">     ASSERT(argumentCountIncludingThis &lt; newCodeBlock-&gt;numParameters());
</span><del>-    int frameSize = argumentCountIncludingThis + JSStack::CallFrameHeaderSize;
-    int alignedFrameSizeForParameters = WTF::roundUpToMultipleOf(stackAlignmentRegisters(),
-        newCodeBlock-&gt;numParameters() + JSStack::CallFrameHeaderSize);
-    int paddedStackSpace = alignedFrameSizeForParameters - frameSize;
</del><ins>+    int missingArgumentCount = newCodeBlock-&gt;numParameters() - argumentCountIncludingThis;
+    int neededStackSpace = missingArgumentCount + 1; // Allow space to save the original return PC.
+    int paddedStackSpace = WTF::roundUpToMultipleOf(stackAlignmentRegisters(), neededStackSpace);
</ins><span class="cx"> 
</span><del>-    if (!stack-&gt;ensureCapacityFor(exec-&gt;registers() - paddedStackSpace % stackAlignmentRegisters()))
</del><ins>+    if (!stack-&gt;ensureCapacityFor(exec-&gt;registers() - paddedStackSpace))
</ins><span class="cx">         return -1;
</span><del>-    return paddedStackSpace;
</del><ins>+    return paddedStackSpace / stackAlignmentRegisters();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline bool opIn(ExecState* exec, JSValue propName, JSValue baseVal)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstressmutualtailcallnostackoverflowjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/mutual-tail-call-no-stack-overflow.js (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/mutual-tail-call-no-stack-overflow.js        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/tests/stress/mutual-tail-call-no-stack-overflow.js        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -1,75 +0,0 @@
</span><del>-//@ run(&quot;default&quot;, &quot;--enableTailCalls=true&quot;, &quot;--useDFGJIT=false&quot;)
-//@ run(&quot;no-llint&quot;, &quot;--enableTailCalls=true&quot;, &quot;--useLLInt=false&quot;)
-//@ run(&quot;no-cjit&quot;, &quot;--enableTailCalls=true&quot;, &quot;--useDFGJIT=false&quot;, *NO_CJIT_OPTIONS)
-
-function shouldThrow(func, errorMessage) {
-    var errorThrown = false;
-    var error = null;
-    try {
-        func();
-    } catch (e) {
-        errorThrown = true;
-        error = e;
-    }
-    if (!errorThrown)
-        throw new Error('not thrown');
-    if (String(error) !== errorMessage)
-        throw new Error(`bad error: ${String(error)}`);
-}
-
-function sloppyCountdown(n) {
-    function even(n) {
-        if (n == 0)
-            return n;
-        return odd(n - 1);
-    }
-
-    function odd(n) {
-        if (n == 1)
-            return n;
-        return even(n - 1);
-    }
-
-    if (n % 2 === 0)
-        return even(n);
-    else
-        return odd(n);
-}
-
-function strictCountdown(n) {
-    &quot;use strict&quot;;
-
-    function even(n) {
-        if (n == 0)
-            return n;
-        return odd(n - 1);
-    }
-
-    function odd(n) {
-        if (n == 1)
-            return n;
-        return even(n - 1);
-    }
-
-    if (n % 2 === 0)
-        return even(n);
-    else
-        return odd(n);
-}
-
-shouldThrow(function () { sloppyCountdown(100000); }, &quot;RangeError: Maximum call stack size exceeded.&quot;);
-strictCountdown(100000);
-
-// Parity alterning
-function odd(n) {
-    &quot;use strict&quot;;
-    if (n &gt; 0)
-        return even(n, 0);
-}
-
-function even(n) {
-    &quot;use strict&quot;;
-    return odd(n - 1);
-}
-
-odd(100000);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstresstailcallnostackoverflowjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/tail-call-no-stack-overflow.js (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/tail-call-no-stack-overflow.js        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/tests/stress/tail-call-no-stack-overflow.js        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -1,48 +0,0 @@
</span><del>-//@ run(&quot;default&quot;, &quot;--enableTailCalls=true&quot;, &quot;--useDFGJIT=false&quot;)
-//@ run(&quot;no-llint&quot;, &quot;--enableTailCalls=true&quot;, &quot;--useLLInt=false&quot;)
-
-function shouldThrow(func, errorMessage) {
-    var errorThrown = false;
-    var error = null;
-    try {
-        func();
-    } catch (e) {
-        errorThrown = true;
-        error = e;
-    }
-    if (!errorThrown)
-        throw new Error('not thrown');
-    if (String(error) !== errorMessage)
-        throw new Error(`bad error: ${String(error)}`);
-}
-
-function sloppyLoop(n) {
-    if (n &gt; 0)
-        return sloppyLoop(n - 1);
-}
-
-function strictLoop(n) {
-    &quot;use strict&quot;;
-    if (n &gt; 0)
-        return strictLoop(n - 1);
-}
-
-// We have two of these so that we can test different stack alignments
-function strictLoopArityFixup1(n, dummy) {
-    &quot;use strict&quot;;
-    if (n &gt; 0)
-        return strictLoopArityFixup1(n - 1);
-}
-
-function strictLoopArityFixup2(n, dummy1, dummy2) {
-    &quot;use strict&quot;;
-    if (n &gt; 0)
-        return strictLoopArityFixup2(n - 1);
-}
-
-shouldThrow(function () { sloppyLoop(100000); }, 'RangeError: Maximum call stack size exceeded.');
-
-// These should not throw
-strictLoop(100000);
-strictLoopArityFixup1(1000000);
-strictLoopArityFixup2(1000000);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstresstailcallrecognizejs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/tail-call-recognize.js (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/tail-call-recognize.js        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/tests/stress/tail-call-recognize.js        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -1,183 +0,0 @@
</span><del>-//@ run(&quot;default&quot;, &quot;--enableTailCalls=true&quot;, &quot;--useDFGJIT=false&quot;)
-//@ run(&quot;no-llint&quot;, &quot;--enableTailCalls=true&quot;, &quot;--useLLInt=false&quot;)
-//@ run(&quot;no-cjit&quot;, &quot;--enableTailCalls=true&quot;, &quot;--useDFGJIT=false&quot;, *NO_CJIT_OPTIONS)
-// run(&quot;-no-inline&quot;, &quot;--maximumInliningDepth=1&quot;)
-
-function callerMustBeRun() {
-    if (!Object.is(callerMustBeRun.caller, runTests))
-        throw Error(&quot;Wrong caller, expected run but got &quot;, callerMustBeRun.caller);
-}
-
-function callerMustBeStrict() {
-    var errorThrown = false;
-    try {
-        callerMustBeStrict.caller;
-    } catch (e) {
-        errorThrown = true;
-    }
-    if (!errorThrown)
-        throw Error(&quot;Wrong caller, expected strict caller but got &quot;, callerMustBeStrict.caller);
-}
-
-function runTests() {
-    // Statement tests
-    (function simpleTailCall() {
-        &quot;use strict&quot;;
-        return callerMustBeRun();
-    })();
-
-    (function noTailCallInTry() {
-        &quot;use strict&quot;;
-        try {
-            return callerMustBeStrict();
-        } catch (e) {
-            throw e;
-        }
-    })();
-
-    (function tailCallInCatch() {
-        &quot;use strict&quot;;
-        try { } catch (e) { return callerMustBeRun(); }
-    })();
-
-    (function tailCallInFinally() {
-        &quot;use strict&quot;;
-        try { } finally { return callerMustBeRun(); }
-    })();
-
-    (function tailCallInFinallyWithCatch() {
-        &quot;use strict&quot;;
-        try { } catch (e) { } finally { return callerMustBeRun(); }
-    })();
-
-    (function tailCallInFinallyWithCatchTaken() {
-        &quot;use strict&quot;;
-        try { throw null; } catch (e) { } finally { return callerMustBeRun(); }
-    })();
-
-    (function noTailCallInCatchIfFinally() {
-        &quot;use strict&quot;;
-        try { throw null; } catch (e) { return callerMustBeStrict(); } finally { }
-    })();
-
-    (function tailCallInFor() {
-        &quot;use strict&quot;;
-        for (var i = 0; i &lt; 10; ++i)
-            return callerMustBeRun();
-    })();
-
-    (function tailCallInWhile() {
-        &quot;use strict&quot;;
-        while (true)
-            return callerMustBeRun();
-    })();
-
-    (function tailCallInDoWhile() {
-        &quot;use strict&quot;;
-        do
-            return callerMustBeRun();
-        while (true);
-    })();
-
-    (function noTailCallInForIn() {
-        &quot;use strict&quot;;
-        for (var x in [1, 2])
-            return callerMustBeStrict();
-    })();
-
-    (function noTailCallInForOf() {
-        &quot;use strict&quot;;
-        for (var x of [1, 2])
-            return callerMustBeStrict();
-    })();
-
-    (function tailCallInIf() {
-        &quot;use strict&quot;;
-        if (true)
-            return callerMustBeRun();
-    })();
-
-    (function tailCallInElse() {
-        &quot;use strict&quot;;
-        if (false) throw new Error(&quot;WTF&quot;);
-        else return callerMustBeRun();
-    })();
-
-    (function tailCallInSwitchCase() {
-        &quot;use strict&quot;;
-        switch (0) {
-        case 0: return callerMustBeRun();
-        }
-    })();
-
-    (function tailCallInSwitchDefault() {
-        &quot;use strict&quot;;
-        switch (0) {
-        default: return callerMustBeRun();
-        }
-    })();
-
-    (function tailCallWithLabel() {
-        &quot;use strict&quot;;
-        dummy: return callerMustBeRun();
-    })();
-
-    // Expression tests, we don't enumerate all the cases where there
-    // *shouldn't* be a tail call
-
-    (function tailCallComma() {
-        &quot;use strict&quot;;
-        return callerMustBeStrict(), callerMustBeRun();
-    })();
-
-    (function tailCallTernaryLeft() {
-        &quot;use strict&quot;;
-        return true ? callerMustBeRun() : unreachable();
-    })();
-
-    (function tailCallTernaryRight() {
-        &quot;use strict&quot;;
-        return false ? unreachable() : callerMustBeRun();
-    })();
-
-    (function tailCallLogicalAnd() {
-        &quot;use strict&quot;;
-        return true &amp;&amp; callerMustBeRun();
-    })();
-
-    (function tailCallLogicalOr() {
-        &quot;use strict&quot;;
-        return false || callerMustBeRun();
-    })();
-
-    (function memberTailCall() {
-        &quot;use strict&quot;;
-        return { f: callerMustBeRun }.f();
-    })();
-
-    (function bindTailCall() {
-        &quot;use strict&quot;;
-        return callerMustBeRun.bind()();
-    })();
-
-    // Function.prototype tests
-
-    (function applyTailCall() {
-        &quot;use strict&quot;;
-        return callerMustBeRun.apply();
-    })();
-
-    (function callTailCall() {
-        &quot;use strict&quot;;
-        return callerMustBeRun.call();
-    })();
-
-    // No tail call for constructors
-    (function noTailConstruct() {
-        &quot;use strict&quot;;
-        return new callerMustBeStrict();
-    })();
-}
-
-for (var i = 0; i &lt; 10000; ++i)
-    runTests();
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstresstailcallvarargsnostackoverflowjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/tail-call-varargs-no-stack-overflow.js (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/tail-call-varargs-no-stack-overflow.js        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/tests/stress/tail-call-varargs-no-stack-overflow.js        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -1,32 +0,0 @@
</span><del>-//@ run(&quot;default&quot;, &quot;--enableTailCalls=true&quot;, &quot;--useDFGJIT=false&quot;)
-//@ run(&quot;no-llint&quot;, &quot;--enableTailCalls=true&quot;, &quot;--useLLInt=false&quot;)
-//@ run(&quot;no-cjit&quot;, &quot;--enableTailCalls=true&quot;, &quot;--useDFGJIT=false&quot;, *NO_CJIT_OPTIONS)
-
-function shouldThrow(func, errorMessage) {
-    var errorThrown = false;
-    var error = null;
-    try {
-        func();
-    } catch (e) {
-        errorThrown = true;
-        error = e;
-    }
-    if (!errorThrown)
-        throw new Error('not thrown');
-    if (String(error) !== errorMessage)
-        throw new Error(`bad error: ${String(error)}`);
-}
-
-function sloppyLoop(n) {
-    if (n &gt; 0)
-        return sloppyLoop(...[n - 1]);
-}
-
-function strictLoop(n) {
-    &quot;use strict&quot;;
-    if (n &gt; 0)
-        return strictLoop(...[n - 1]);
-}
-
-shouldThrow(function () { sloppyLoop(100000); }, 'RangeError: Maximum call stack size exceeded.');
-strictLoop(100000);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoretestsstresstailcallsdontoverwritelivestackjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/tests/stress/tail-calls-dont-overwrite-live-stack.js (189847 => 189848)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tests/stress/tail-calls-dont-overwrite-live-stack.js        2015-09-16 06:07:16 UTC (rev 189847)
+++ trunk/Source/JavaScriptCore/tests/stress/tail-calls-dont-overwrite-live-stack.js        2015-09-16 06:14:54 UTC (rev 189848)
</span><span class="lines">@@ -1,30 +0,0 @@
</span><del>-&quot;use strict&quot;;
-
-function tail(a, b) { }
-noInline(tail);
-
-var obj = {
-    method: function (x) {
-        return tail(x, x);
-    },
-
-    get fromNative() { return tail(0, 0); }
-};
-noInline(obj.method);
-
-function getThis(x) { return this; }
-noInline(getThis);
-
-for (var i = 0; i &lt; 10000; ++i) {
-    var that = getThis(obj.method(42));
-
-    if (!Object.is(that, undefined))
-        throw new Error(&quot;Wrong 'this' value in call, expected undefined but got &quot; + that);
-
-    that = getThis(obj.method(...[42]));
-    if (!Object.is(that, undefined))
-        throw new Error(&quot;Wrong 'this' value in varargs call, expected undefined but got &quot; + that);
-
-    if (!Object.is(obj.fromNative, undefined))
-        throw new Error(&quot;Wrong 'fromNative' value, expected undefined but got &quot; + obj.fromNative);
-}
</del></span></pre>
</div>
</div>

</body>
</html>