<!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>[188932] 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/188932">188932</a></dd>
<dt>Author</dt> <dd>saambarati1@gmail.com</dd>
<dt>Date</dt> <dd>2015-08-25 12:40:46 -0700 (Tue, 25 Aug 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Lets rename codeOriginIndex to callSiteIndex and get rid of CallFrame::Location.
https://bugs.webkit.org/show_bug.cgi?id=148213

Reviewed by Filip Pizlo.

This patch introduces a struct called CallSiteIndex which is
used as a wrapper for a 32-bit int to place things in the tag for ArgumentCount 
in the call frame. On 32-bit we place Instruction* into this slot for LLInt and Basline.
For 32-bit DFG we place a an index into the code origin table in this slot.
On 64-bit we place a bytecode offset into this slot for LLInt and Baseline.
On 64-bit we place the index into the code origin table in this slot in the
DFG/FTL.

This patch also gets rid of the encoding scheme that describes if something is a
bytecode index or a code origin table index. This information can always
be determined based on the CodeBlock's' JITType.

StructureStubInfo now also has a CallSiteIndex which it stores to
the call frame when making a call.

* bytecode/CodeBlock.h:
(JSC::CodeBlock::hasCodeOrigins):
(JSC::CodeBlock::canGetCodeOrigin):
(JSC::CodeBlock::codeOrigin):
(JSC::CodeBlock::addFrequentExitSite):
* bytecode/StructureStubInfo.h:
(JSC::StructureStubInfo::StructureStubInfo):
* dfg/DFGCommonData.cpp:
(JSC::DFG::CommonData::notifyCompilingStructureTransition):
(JSC::DFG::CommonData::addCodeOrigin):
(JSC::DFG::CommonData::shrinkToFit):
* dfg/DFGCommonData.h:
(JSC::DFG::CommonData::CommonData):
* dfg/DFGJITCompiler.h:
(JSC::DFG::JITCompiler::setEndOfCode):
(JSC::DFG::JITCompiler::addCallSite):
(JSC::DFG::JITCompiler::emitStoreCodeOrigin):
* dfg/DFGOSRExitCompilerCommon.cpp:
(JSC::DFG::reifyInlinedCallFrames):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileIn):
* dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::cachedGetById):
(JSC::DFG::SpeculativeJIT::cachedPutById):
* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::cachedGetById):
(JSC::DFG::SpeculativeJIT::cachedPutById):
* ftl/FTLCompile.cpp:
(JSC::FTL::mmAllocateDataSection):
* ftl/FTLInlineCacheDescriptor.h:
(JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor):
(JSC::FTL::InlineCacheDescriptor::stackmapID):
(JSC::FTL::InlineCacheDescriptor::callSiteIndex):
(JSC::FTL::InlineCacheDescriptor::uid):
(JSC::FTL::GetByIdDescriptor::GetByIdDescriptor):
(JSC::FTL::PutByIdDescriptor::PutByIdDescriptor):
(JSC::FTL::CheckInDescriptor::CheckInDescriptor):
(JSC::FTL::InlineCacheDescriptor::codeOrigin): Deleted.
* ftl/FTLLink.cpp:
(JSC::FTL::link):
* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::DFG::LowerDFGToLLVM::compilePutById):
(JSC::FTL::DFG::LowerDFGToLLVM::compileIn):
(JSC::FTL::DFG::LowerDFGToLLVM::getById):
(JSC::FTL::DFG::LowerDFGToLLVM::callPreflight):
* ftl/FTLSlowPathCall.cpp:
(JSC::FTL::storeCodeOrigin):
* interpreter/CallFrame.cpp:
(JSC::CallFrame::currentVPC):
(JSC::CallFrame::setCurrentVPC):
(JSC::CallFrame::callSiteBitsAsBytecodeOffset):
(JSC::CallFrame::bytecodeOffset):
(JSC::CallFrame::codeOrigin):
(JSC::CallFrame::topOfFrameInternal):
(JSC::CallFrame::locationAsBytecodeOffset): Deleted.
(JSC::CallFrame::setLocationAsBytecodeOffset): Deleted.
(JSC::CallFrame::bytecodeOffsetFromCodeOriginIndex): Deleted.
* interpreter/CallFrame.h:
(JSC::CallSiteIndex::CallSiteIndex):
(JSC::CallSiteIndex::bits):
(JSC::ExecState::returnPCOffset):
(JSC::ExecState::abstractReturnPC):
(JSC::ExecState::topOfFrame):
(JSC::ExecState::setCallerFrame):
(JSC::ExecState::setScope):
(JSC::ExecState::currentVPC): Deleted.
(JSC::ExecState::setCurrentVPC): Deleted.
* interpreter/CallFrameInlines.h:
(JSC::CallFrame::callSiteBitsAreBytecodeOffset):
(JSC::CallFrame::callSiteBitsAreCodeOriginIndex):
(JSC::CallFrame::callSiteAsRawBits):
(JSC::CallFrame::callSiteIndex):
(JSC::CallFrame::hasActivation):
(JSC::CallFrame::Location::encode): Deleted.
(JSC::CallFrame::Location::decode): Deleted.
(JSC::CallFrame::Location::encodeAsBytecodeOffset): Deleted.
(JSC::CallFrame::Location::encodeAsBytecodeInstruction): Deleted.
(JSC::CallFrame::Location::encodeAsCodeOriginIndex): Deleted.
(JSC::CallFrame::Location::isBytecodeLocation): Deleted.
(JSC::CallFrame::Location::isCodeOriginIndex): Deleted.
(JSC::CallFrame::hasLocationAsBytecodeOffset): Deleted.
(JSC::CallFrame::hasLocationAsCodeOriginIndex): Deleted.
(JSC::CallFrame::locationAsRawBits): Deleted.
(JSC::CallFrame::setLocationAsRawBits): Deleted.
(JSC::CallFrame::locationAsBytecodeOffset): Deleted.
(JSC::CallFrame::setLocationAsBytecodeOffset): Deleted.
(JSC::CallFrame::locationAsCodeOriginIndex): Deleted.
* interpreter/StackVisitor.cpp:
(JSC::StackVisitor::readFrame):
(JSC::StackVisitor::readNonInlinedFrame):
(JSC::StackVisitor::Frame::print):
* jit/JITCall.cpp:
(JSC::JIT::compileOpCall):
* jit/JITCall32_64.cpp:
(JSC::JIT::compileOpCall):
* jit/JITInlineCacheGenerator.cpp:
(JSC::garbageStubInfo):
(JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
(JSC::JITByIdGenerator::JITByIdGenerator):
(JSC::JITByIdGenerator::generateFastPathChecks):
(JSC::JITGetByIdGenerator::JITGetByIdGenerator):
(JSC::JITGetByIdGenerator::generateFastPath):
(JSC::JITPutByIdGenerator::JITPutByIdGenerator):
* jit/JITInlineCacheGenerator.h:
(JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
(JSC::JITInlineCacheGenerator::stubInfo):
(JSC::JITByIdGenerator::JITByIdGenerator):
(JSC::JITGetByIdGenerator::JITGetByIdGenerator):
(JSC::JITPutByIdGenerator::JITPutByIdGenerator):
* jit/JITInlines.h:
(JSC::JIT::updateTopCallFrame):
* jit/JITOperations.cpp:
(JSC::getByVal):
(JSC::tryGetByValOptimize):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::emitGetByValWithCachedId):
(JSC::JIT::emitPutByValWithCachedId):
(JSC::JIT::emit_op_get_by_id):
(JSC::JIT::emit_op_put_by_id):
* jit/JITPropertyAccess32_64.cpp:
(JSC::JIT::emitGetByValWithCachedId):
(JSC::JIT::emitPutByValWithCachedId):
(JSC::JIT::emit_op_get_by_id):
(JSC::JIT::emit_op_put_by_id):
* jit/Repatch.cpp:
(JSC::generateByIdStub):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCodeBlockh">trunk/Source/JavaScriptCore/bytecode/CodeBlock.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeStructureStubInfoh">trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGCommonDatacpp">trunk/Source/JavaScriptCore/dfg/DFGCommonData.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGCommonDatah">trunk/Source/JavaScriptCore/dfg/DFGCommonData.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGJITCompilerh">trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGOSRExitCompilerCommoncpp">trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJIT64cpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLCompilecpp">trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLInlineCacheDescriptorh">trunk/Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLLinkcpp">trunk/Source/JavaScriptCore/ftl/FTLLink.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp">trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLSlowPathCallcpp">trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterCallFramecpp">trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterCallFrameh">trunk/Source/JavaScriptCore/interpreter/CallFrame.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterCallFrameInlinesh">trunk/Source/JavaScriptCore/interpreter/CallFrameInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterStackVisitorcpp">trunk/Source/JavaScriptCore/interpreter/StackVisitor.cpp</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="#trunkSourceJavaScriptCorejitJITInlineCacheGeneratorcpp">trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITInlineCacheGeneratorh">trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.h</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="#trunkSourceJavaScriptCorejitJITPropertyAccesscpp">trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITPropertyAccess32_64cpp">trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitRepatchcpp">trunk/Source/JavaScriptCore/jit/Repatch.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -1,3 +1,152 @@
</span><ins>+2015-08-25  Saam barati  &lt;sbarati@apple.com&gt;
+
+        Lets rename codeOriginIndex to callSiteIndex and get rid of CallFrame::Location.
+        https://bugs.webkit.org/show_bug.cgi?id=148213
+
+        Reviewed by Filip Pizlo.
+
+        This patch introduces a struct called CallSiteIndex which is
+        used as a wrapper for a 32-bit int to place things in the tag for ArgumentCount 
+        in the call frame. On 32-bit we place Instruction* into this slot for LLInt and Basline.
+        For 32-bit DFG we place a an index into the code origin table in this slot.
+        On 64-bit we place a bytecode offset into this slot for LLInt and Baseline.
+        On 64-bit we place the index into the code origin table in this slot in the
+        DFG/FTL.
+
+        This patch also gets rid of the encoding scheme that describes if something is a
+        bytecode index or a code origin table index. This information can always
+        be determined based on the CodeBlock's' JITType.
+
+        StructureStubInfo now also has a CallSiteIndex which it stores to
+        the call frame when making a call.
+
+        * bytecode/CodeBlock.h:
+        (JSC::CodeBlock::hasCodeOrigins):
+        (JSC::CodeBlock::canGetCodeOrigin):
+        (JSC::CodeBlock::codeOrigin):
+        (JSC::CodeBlock::addFrequentExitSite):
+        * bytecode/StructureStubInfo.h:
+        (JSC::StructureStubInfo::StructureStubInfo):
+        * dfg/DFGCommonData.cpp:
+        (JSC::DFG::CommonData::notifyCompilingStructureTransition):
+        (JSC::DFG::CommonData::addCodeOrigin):
+        (JSC::DFG::CommonData::shrinkToFit):
+        * dfg/DFGCommonData.h:
+        (JSC::DFG::CommonData::CommonData):
+        * dfg/DFGJITCompiler.h:
+        (JSC::DFG::JITCompiler::setEndOfCode):
+        (JSC::DFG::JITCompiler::addCallSite):
+        (JSC::DFG::JITCompiler::emitStoreCodeOrigin):
+        * dfg/DFGOSRExitCompilerCommon.cpp:
+        (JSC::DFG::reifyInlinedCallFrames):
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::compileIn):
+        * dfg/DFGSpeculativeJIT32_64.cpp:
+        (JSC::DFG::SpeculativeJIT::cachedGetById):
+        (JSC::DFG::SpeculativeJIT::cachedPutById):
+        * dfg/DFGSpeculativeJIT64.cpp:
+        (JSC::DFG::SpeculativeJIT::cachedGetById):
+        (JSC::DFG::SpeculativeJIT::cachedPutById):
+        * ftl/FTLCompile.cpp:
+        (JSC::FTL::mmAllocateDataSection):
+        * ftl/FTLInlineCacheDescriptor.h:
+        (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor):
+        (JSC::FTL::InlineCacheDescriptor::stackmapID):
+        (JSC::FTL::InlineCacheDescriptor::callSiteIndex):
+        (JSC::FTL::InlineCacheDescriptor::uid):
+        (JSC::FTL::GetByIdDescriptor::GetByIdDescriptor):
+        (JSC::FTL::PutByIdDescriptor::PutByIdDescriptor):
+        (JSC::FTL::CheckInDescriptor::CheckInDescriptor):
+        (JSC::FTL::InlineCacheDescriptor::codeOrigin): Deleted.
+        * ftl/FTLLink.cpp:
+        (JSC::FTL::link):
+        * ftl/FTLLowerDFGToLLVM.cpp:
+        (JSC::FTL::DFG::LowerDFGToLLVM::compilePutById):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileIn):
+        (JSC::FTL::DFG::LowerDFGToLLVM::getById):
+        (JSC::FTL::DFG::LowerDFGToLLVM::callPreflight):
+        * ftl/FTLSlowPathCall.cpp:
+        (JSC::FTL::storeCodeOrigin):
+        * interpreter/CallFrame.cpp:
+        (JSC::CallFrame::currentVPC):
+        (JSC::CallFrame::setCurrentVPC):
+        (JSC::CallFrame::callSiteBitsAsBytecodeOffset):
+        (JSC::CallFrame::bytecodeOffset):
+        (JSC::CallFrame::codeOrigin):
+        (JSC::CallFrame::topOfFrameInternal):
+        (JSC::CallFrame::locationAsBytecodeOffset): Deleted.
+        (JSC::CallFrame::setLocationAsBytecodeOffset): Deleted.
+        (JSC::CallFrame::bytecodeOffsetFromCodeOriginIndex): Deleted.
+        * interpreter/CallFrame.h:
+        (JSC::CallSiteIndex::CallSiteIndex):
+        (JSC::CallSiteIndex::bits):
+        (JSC::ExecState::returnPCOffset):
+        (JSC::ExecState::abstractReturnPC):
+        (JSC::ExecState::topOfFrame):
+        (JSC::ExecState::setCallerFrame):
+        (JSC::ExecState::setScope):
+        (JSC::ExecState::currentVPC): Deleted.
+        (JSC::ExecState::setCurrentVPC): Deleted.
+        * interpreter/CallFrameInlines.h:
+        (JSC::CallFrame::callSiteBitsAreBytecodeOffset):
+        (JSC::CallFrame::callSiteBitsAreCodeOriginIndex):
+        (JSC::CallFrame::callSiteAsRawBits):
+        (JSC::CallFrame::callSiteIndex):
+        (JSC::CallFrame::hasActivation):
+        (JSC::CallFrame::Location::encode): Deleted.
+        (JSC::CallFrame::Location::decode): Deleted.
+        (JSC::CallFrame::Location::encodeAsBytecodeOffset): Deleted.
+        (JSC::CallFrame::Location::encodeAsBytecodeInstruction): Deleted.
+        (JSC::CallFrame::Location::encodeAsCodeOriginIndex): Deleted.
+        (JSC::CallFrame::Location::isBytecodeLocation): Deleted.
+        (JSC::CallFrame::Location::isCodeOriginIndex): Deleted.
+        (JSC::CallFrame::hasLocationAsBytecodeOffset): Deleted.
+        (JSC::CallFrame::hasLocationAsCodeOriginIndex): Deleted.
+        (JSC::CallFrame::locationAsRawBits): Deleted.
+        (JSC::CallFrame::setLocationAsRawBits): Deleted.
+        (JSC::CallFrame::locationAsBytecodeOffset): Deleted.
+        (JSC::CallFrame::setLocationAsBytecodeOffset): Deleted.
+        (JSC::CallFrame::locationAsCodeOriginIndex): Deleted.
+        * interpreter/StackVisitor.cpp:
+        (JSC::StackVisitor::readFrame):
+        (JSC::StackVisitor::readNonInlinedFrame):
+        (JSC::StackVisitor::Frame::print):
+        * jit/JITCall.cpp:
+        (JSC::JIT::compileOpCall):
+        * jit/JITCall32_64.cpp:
+        (JSC::JIT::compileOpCall):
+        * jit/JITInlineCacheGenerator.cpp:
+        (JSC::garbageStubInfo):
+        (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
+        (JSC::JITByIdGenerator::JITByIdGenerator):
+        (JSC::JITByIdGenerator::generateFastPathChecks):
+        (JSC::JITGetByIdGenerator::JITGetByIdGenerator):
+        (JSC::JITGetByIdGenerator::generateFastPath):
+        (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
+        * jit/JITInlineCacheGenerator.h:
+        (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
+        (JSC::JITInlineCacheGenerator::stubInfo):
+        (JSC::JITByIdGenerator::JITByIdGenerator):
+        (JSC::JITGetByIdGenerator::JITGetByIdGenerator):
+        (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
+        * jit/JITInlines.h:
+        (JSC::JIT::updateTopCallFrame):
+        * jit/JITOperations.cpp:
+        (JSC::getByVal):
+        (JSC::tryGetByValOptimize):
+        * jit/JITPropertyAccess.cpp:
+        (JSC::JIT::emitGetByValWithCachedId):
+        (JSC::JIT::emitPutByValWithCachedId):
+        (JSC::JIT::emit_op_get_by_id):
+        (JSC::JIT::emit_op_put_by_id):
+        * jit/JITPropertyAccess32_64.cpp:
+        (JSC::JIT::emitGetByValWithCachedId):
+        (JSC::JIT::emitPutByValWithCachedId):
+        (JSC::JIT::emit_op_get_by_id):
+        (JSC::JIT::emit_op_put_by_id):
+        * jit/Repatch.cpp:
+        (JSC::generateByIdStub):
+
</ins><span class="cx"> 2015-08-25 Aleksandr Skachkov   &lt;gskachkov@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Function.prototype.toString is incorrect for ArrowFunction
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCodeBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CodeBlock.h (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CodeBlock.h        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/bytecode/CodeBlock.h        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -501,16 +501,16 @@
</span><span class="cx">         return JITCode::isOptimizingJIT(jitType());
</span><span class="cx">     }
</span><span class="cx">         
</span><del>-    bool canGetCodeOrigin(unsigned index)
</del><ins>+    bool canGetCodeOrigin(CallSiteIndex index)
</ins><span class="cx">     {
</span><span class="cx">         if (!hasCodeOrigins())
</span><span class="cx">             return false;
</span><del>-        return index &lt; codeOrigins().size();
</del><ins>+        return index.bits() &lt; codeOrigins().size();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    CodeOrigin codeOrigin(unsigned index)
</del><ins>+    CodeOrigin codeOrigin(CallSiteIndex index)
</ins><span class="cx">     {
</span><del>-        return codeOrigins()[index];
</del><ins>+        return codeOrigins()[index.bits()];
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     bool addFrequentExitSite(const DFG::FrequentExitSite&amp; site)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeStructureStubInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -96,6 +96,7 @@
</span><span class="cx">         , seen(false)
</span><span class="cx">         , resetByGC(false)
</span><span class="cx">         , tookSlowPath(false)
</span><ins>+        , callSiteIndex(UINT_MAX)
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -189,6 +190,7 @@
</span><span class="cx">     bool tookSlowPath : 1;
</span><span class="cx"> 
</span><span class="cx">     CodeOrigin codeOrigin;
</span><ins>+    CallSiteIndex callSiteIndex;
</ins><span class="cx"> 
</span><span class="cx">     struct {
</span><span class="cx">         unsigned spillMode : 8;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGCommonDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGCommonData.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGCommonData.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/dfg/DFGCommonData.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -47,14 +47,14 @@
</span><span class="cx">         node-&gt;transition()-&gt;next);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-unsigned CommonData::addCodeOrigin(CodeOrigin codeOrigin)
</del><ins>+CallSiteIndex CommonData::addCodeOrigin(CodeOrigin codeOrigin)
</ins><span class="cx"> {
</span><span class="cx">     if (codeOrigins.isEmpty()
</span><span class="cx">         || codeOrigins.last() != codeOrigin)
</span><span class="cx">         codeOrigins.append(codeOrigin);
</span><span class="cx">     unsigned index = codeOrigins.size() - 1;
</span><span class="cx">     ASSERT(codeOrigins[index] == codeOrigin);
</span><del>-    return index;
</del><ins>+    return CallSiteIndex(index);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void CommonData::shrinkToFit()
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGCommonDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGCommonData.h (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGCommonData.h        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/dfg/DFGCommonData.h        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx">     { }
</span><span class="cx">     
</span><span class="cx">     void notifyCompilingStructureTransition(Plan&amp;, CodeBlock*, Node*);
</span><del>-    unsigned addCodeOrigin(CodeOrigin);
</del><ins>+    CallSiteIndex addCodeOrigin(CodeOrigin);
</ins><span class="cx">     
</span><span class="cx">     void shrinkToFit();
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGJITCompilerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.h (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.h        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.h        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -150,11 +150,15 @@
</span><span class="cx">         m_disassembler-&gt;setEndOfCode(labelIgnoringWatchpoints());
</span><span class="cx">     }
</span><span class="cx">     
</span><ins>+    CallSiteIndex addCallSite(CodeOrigin codeOrigin)
+    {
+        return m_jitCode-&gt;common.addCodeOrigin(codeOrigin);
+    }
+
</ins><span class="cx">     void emitStoreCodeOrigin(CodeOrigin codeOrigin)
</span><span class="cx">     {
</span><del>-        unsigned index = m_jitCode-&gt;common.addCodeOrigin(codeOrigin);
-        unsigned locationBits = CallFrame::Location::encodeAsCodeOriginIndex(index);
-        store32(TrustedImm32(locationBits), tagFor(static_cast&lt;VirtualRegister&gt;(JSStack::ArgumentCount)));
</del><ins>+        CallSiteIndex callSite = addCallSite(codeOrigin);
+        store32(TrustedImm32(callSite.bits()), tagFor(static_cast&lt;VirtualRegister&gt;(JSStack::ArgumentCount)));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Add a call out from JIT code, without an exception check.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGOSRExitCompilerCommoncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -201,14 +201,14 @@
</span><span class="cx">             jit.store32(AssemblyHelpers::TrustedImm32(inlineCallFrame-&gt;arguments.size()), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame-&gt;stackOffset + JSStack::ArgumentCount)));
</span><span class="cx"> #if USE(JSVALUE64)
</span><span class="cx">         jit.store64(callerFrameGPR, AssemblyHelpers::addressForByteOffset(inlineCallFrame-&gt;callerFrameOffset()));
</span><del>-        uint32_t locationBits = CallFrame::Location::encodeAsBytecodeOffset(codeOrigin.bytecodeIndex);
</del><ins>+        uint32_t locationBits = CallSiteIndex(codeOrigin.bytecodeIndex).bits();
</ins><span class="cx">         jit.store32(AssemblyHelpers::TrustedImm32(locationBits), AssemblyHelpers::tagFor((VirtualRegister)(inlineCallFrame-&gt;stackOffset + JSStack::ArgumentCount)));
</span><span class="cx">         if (!inlineCallFrame-&gt;isClosureCall)
</span><span class="cx">             jit.store64(AssemblyHelpers::TrustedImm64(JSValue::encode(JSValue(inlineCallFrame-&gt;calleeConstant()))), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame-&gt;stackOffset + JSStack::Callee)));
</span><span class="cx"> #else // USE(JSVALUE64) // so this is the 32-bit part
</span><span class="cx">         jit.storePtr(callerFrameGPR, AssemblyHelpers::addressForByteOffset(inlineCallFrame-&gt;callerFrameOffset()));
</span><span class="cx">         Instruction* instruction = baselineCodeBlock-&gt;instructions().begin() + codeOrigin.bytecodeIndex;
</span><del>-        uint32_t locationBits = CallFrame::Location::encodeAsBytecodeInstruction(instruction);
</del><ins>+        uint32_t locationBits = CallSiteIndex(instruction).bits();
</ins><span class="cx">         jit.store32(AssemblyHelpers::TrustedImm32(locationBits), AssemblyHelpers::tagFor((VirtualRegister)(inlineCallFrame-&gt;stackOffset + JSStack::ArgumentCount)));
</span><span class="cx">         jit.store32(AssemblyHelpers::TrustedImm32(JSValue::CellTag), AssemblyHelpers::tagFor((VirtualRegister)(inlineCallFrame-&gt;stackOffset + JSStack::Callee)));
</span><span class="cx">         if (!inlineCallFrame-&gt;isClosureCall)
</span><span class="lines">@@ -217,10 +217,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if USE(JSVALUE64)
</span><del>-    uint32_t locationBits = CallFrame::Location::encodeAsBytecodeOffset(codeOrigin.bytecodeIndex);
</del><ins>+    uint32_t locationBits = CallSiteIndex(codeOrigin.bytecodeIndex).bits();
</ins><span class="cx"> #else
</span><span class="cx">     Instruction* instruction = jit.baselineCodeBlock()-&gt;instructions().begin() + codeOrigin.bytecodeIndex;
</span><del>-    uint32_t locationBits = CallFrame::Location::encodeAsBytecodeInstruction(instruction);
</del><ins>+    uint32_t locationBits = CallSiteIndex(instruction).bits();
</ins><span class="cx"> #endif
</span><span class="cx">     jit.store32(AssemblyHelpers::TrustedImm32(locationBits), AssemblyHelpers::tagFor((VirtualRegister)(JSStack::ArgumentCount)));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -964,6 +964,7 @@
</span><span class="cx">                 JSValueRegs::payloadOnly(resultGPR), stubInfo, baseGPR,
</span><span class="cx">                 static_cast&lt;const AtomicStringImpl*&gt;(string-&gt;tryGetValueImpl()));
</span><span class="cx">             
</span><ins>+            stubInfo-&gt;callSiteIndex = m_jit.addCallSite(node-&gt;origin.semantic);
</ins><span class="cx">             stubInfo-&gt;codeOrigin = node-&gt;origin.semantic;
</span><span class="cx">             stubInfo-&gt;patch.baseGPR = static_cast&lt;int8_t&gt;(baseGPR);
</span><span class="cx">             stubInfo-&gt;patch.valueGPR = static_cast&lt;int8_t&gt;(resultGPR);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -183,7 +183,7 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     JITGetByIdGenerator gen(
</span><del>-        m_jit.codeBlock(), codeOrigin, usedRegisters(),
</del><ins>+        m_jit.codeBlock(), codeOrigin, m_jit.addCallSite(codeOrigin), usedRegisters(),
</ins><span class="cx">         JSValueRegs(baseTagGPROrNone, basePayloadGPR),
</span><span class="cx">         JSValueRegs(resultTagGPR, resultPayloadGPR), spillMode);
</span><span class="cx">     
</span><span class="lines">@@ -215,7 +215,7 @@
</span><span class="cx"> void SpeculativeJIT::cachedPutById(CodeOrigin codeOrigin, GPRReg basePayloadGPR, GPRReg valueTagGPR, GPRReg valuePayloadGPR, GPRReg scratchGPR, unsigned identifierNumber, PutKind putKind, JITCompiler::Jump slowPathTarget, SpillRegistersMode spillMode)
</span><span class="cx"> {
</span><span class="cx">     JITPutByIdGenerator gen(
</span><del>-        m_jit.codeBlock(), codeOrigin, usedRegisters(),
</del><ins>+        m_jit.codeBlock(), codeOrigin, m_jit.addCallSite(codeOrigin), usedRegisters(),
</ins><span class="cx">         JSValueRegs::payloadOnly(basePayloadGPR), JSValueRegs(valueTagGPR, valuePayloadGPR),
</span><span class="cx">         scratchGPR, spillMode, m_jit.ecmaModeFor(codeOrigin), putKind);
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -154,7 +154,7 @@
</span><span class="cx"> void SpeculativeJIT::cachedGetById(CodeOrigin codeOrigin, GPRReg baseGPR, GPRReg resultGPR, unsigned identifierNumber, JITCompiler::Jump slowPathTarget, SpillRegistersMode spillMode)
</span><span class="cx"> {
</span><span class="cx">     JITGetByIdGenerator gen(
</span><del>-        m_jit.codeBlock(), codeOrigin, usedRegisters(), JSValueRegs(baseGPR),
</del><ins>+        m_jit.codeBlock(), codeOrigin, m_jit.addCallSite(codeOrigin), usedRegisters(), JSValueRegs(baseGPR),
</ins><span class="cx">         JSValueRegs(resultGPR), spillMode);
</span><span class="cx">     gen.generateFastPath(m_jit);
</span><span class="cx">     
</span><span class="lines">@@ -174,7 +174,7 @@
</span><span class="cx"> void SpeculativeJIT::cachedPutById(CodeOrigin codeOrigin, GPRReg baseGPR, GPRReg valueGPR, GPRReg scratchGPR, unsigned identifierNumber, PutKind putKind, JITCompiler::Jump slowPathTarget, SpillRegistersMode spillMode)
</span><span class="cx"> {
</span><span class="cx">     JITPutByIdGenerator gen(
</span><del>-        m_jit.codeBlock(), codeOrigin, usedRegisters(), JSValueRegs(baseGPR),
</del><ins>+        m_jit.codeBlock(), codeOrigin, m_jit.addCallSite(codeOrigin), usedRegisters(), JSValueRegs(baseGPR),
</ins><span class="cx">         JSValueRegs(valueGPR), scratchGPR, spillMode, m_jit.ecmaModeFor(codeOrigin), putKind);
</span><span class="cx"> 
</span><span class="cx">     gen.generateFastPath(m_jit);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLCompilecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -456,6 +456,7 @@
</span><span class="cx">                 continue;
</span><span class="cx">             }
</span><span class="cx">             
</span><ins>+            CodeOrigin codeOrigin = state.jitCode-&gt;common.codeOrigins[getById.callSiteIndex().bits()];
</ins><span class="cx">             for (unsigned i = 0; i &lt; iter-&gt;value.size(); ++i) {
</span><span class="cx">                 StackMaps::Record&amp; record = iter-&gt;value[i];
</span><span class="cx">             
</span><span class="lines">@@ -465,13 +466,13 @@
</span><span class="cx">                 GPRReg base = record.locations[1].directGPR();
</span><span class="cx">                 
</span><span class="cx">                 JITGetByIdGenerator gen(
</span><del>-                    codeBlock, getById.codeOrigin(), usedRegisters, JSValueRegs(base),
</del><ins>+                    codeBlock, codeOrigin, getById.callSiteIndex(), usedRegisters, JSValueRegs(base),
</ins><span class="cx">                     JSValueRegs(result), NeedToSpill);
</span><span class="cx">                 
</span><span class="cx">                 MacroAssembler::Label begin = slowPathJIT.label();
</span><span class="cx"> 
</span><span class="cx">                 MacroAssembler::Call call = callOperation(
</span><del>-                    state, usedRegisters, slowPathJIT, getById.codeOrigin(), &amp;exceptionTarget,
</del><ins>+                    state, usedRegisters, slowPathJIT, codeOrigin, &amp;exceptionTarget,
</ins><span class="cx">                     operationGetByIdOptimize, result, gen.stubInfo(), base, getById.uid());
</span><span class="cx"> 
</span><span class="cx">                 gen.reportSlowPathCall(begin, call);
</span><span class="lines">@@ -493,6 +494,7 @@
</span><span class="cx">                 continue;
</span><span class="cx">             }
</span><span class="cx">             
</span><ins>+            CodeOrigin codeOrigin = state.jitCode-&gt;common.codeOrigins[putById.callSiteIndex().bits()];
</ins><span class="cx">             for (unsigned i = 0; i &lt; iter-&gt;value.size(); ++i) {
</span><span class="cx">                 StackMaps::Record&amp; record = iter-&gt;value[i];
</span><span class="cx">                 
</span><span class="lines">@@ -502,14 +504,14 @@
</span><span class="cx">                 GPRReg value = record.locations[1].directGPR();
</span><span class="cx">                 
</span><span class="cx">                 JITPutByIdGenerator gen(
</span><del>-                    codeBlock, putById.codeOrigin(), usedRegisters, JSValueRegs(base),
</del><ins>+                    codeBlock, codeOrigin, putById.callSiteIndex(), usedRegisters, JSValueRegs(base),
</ins><span class="cx">                     JSValueRegs(value), GPRInfo::patchpointScratchRegister, NeedToSpill,
</span><span class="cx">                     putById.ecmaMode(), putById.putKind());
</span><span class="cx">                 
</span><span class="cx">                 MacroAssembler::Label begin = slowPathJIT.label();
</span><span class="cx">                 
</span><span class="cx">                 MacroAssembler::Call call = callOperation(
</span><del>-                    state, usedRegisters, slowPathJIT, putById.codeOrigin(), &amp;exceptionTarget,
</del><ins>+                    state, usedRegisters, slowPathJIT, codeOrigin, &amp;exceptionTarget,
</ins><span class="cx">                     gen.slowPathFunction(), gen.stubInfo(), value, base, putById.uid());
</span><span class="cx">                 
</span><span class="cx">                 gen.reportSlowPathCall(begin, call);
</span><span class="lines">@@ -531,13 +533,15 @@
</span><span class="cx">                 continue;
</span><span class="cx">             }
</span><span class="cx">             
</span><ins>+            CodeOrigin codeOrigin = state.jitCode-&gt;common.codeOrigins[checkIn.callSiteIndex().bits()];
</ins><span class="cx">             for (unsigned i = 0; i &lt; iter-&gt;value.size(); ++i) {
</span><span class="cx">                 StackMaps::Record&amp; record = iter-&gt;value[i];
</span><span class="cx">                 RegisterSet usedRegisters = usedRegistersFor(record);
</span><span class="cx">                 GPRReg result = record.locations[0].directGPR();
</span><span class="cx">                 GPRReg obj = record.locations[1].directGPR();
</span><span class="cx">                 StructureStubInfo* stubInfo = codeBlock-&gt;addStubInfo(); 
</span><del>-                stubInfo-&gt;codeOrigin = checkIn.codeOrigin();
</del><ins>+                stubInfo-&gt;codeOrigin = codeOrigin;
+                stubInfo-&gt;callSiteIndex = checkIn.callSiteIndex();
</ins><span class="cx">                 stubInfo-&gt;patch.baseGPR = static_cast&lt;int8_t&gt;(obj);
</span><span class="cx">                 stubInfo-&gt;patch.valueGPR = static_cast&lt;int8_t&gt;(result);
</span><span class="cx">                 stubInfo-&gt;patch.usedRegisters = usedRegisters;
</span><span class="lines">@@ -546,7 +550,7 @@
</span><span class="cx">                 MacroAssembler::Label begin = slowPathJIT.label();
</span><span class="cx"> 
</span><span class="cx">                 MacroAssembler::Call slowCall = callOperation(
</span><del>-                    state, usedRegisters, slowPathJIT, checkIn.codeOrigin(), &amp;exceptionTarget,
</del><ins>+                    state, usedRegisters, slowPathJIT, codeOrigin, &amp;exceptionTarget,
</ins><span class="cx">                     operationInOptimize, result, stubInfo, obj, checkIn.m_uid);
</span><span class="cx"> 
</span><span class="cx">                 checkIn.m_slowPathDone.append(slowPathJIT.jump());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLInlineCacheDescriptorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -37,22 +37,24 @@
</span><span class="cx"> 
</span><span class="cx"> class InlineCacheDescriptor {
</span><span class="cx"> public:
</span><del>-    InlineCacheDescriptor() { }
</del><ins>+    InlineCacheDescriptor() 
+        : m_callSiteIndex(UINT_MAX) 
+    { }
</ins><span class="cx">     
</span><del>-    InlineCacheDescriptor(unsigned stackmapID, CodeOrigin codeOrigin, UniquedStringImpl* uid)
</del><ins>+    InlineCacheDescriptor(unsigned stackmapID, CallSiteIndex callSite, UniquedStringImpl* uid)
</ins><span class="cx">         : m_stackmapID(stackmapID)
</span><del>-        , m_codeOrigin(codeOrigin)
</del><ins>+        , m_callSiteIndex(callSite)
</ins><span class="cx">         , m_uid(uid)
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     unsigned stackmapID() const { return m_stackmapID; }
</span><del>-    CodeOrigin codeOrigin() const { return m_codeOrigin; }
</del><ins>+    CallSiteIndex callSiteIndex() const { return m_callSiteIndex; }
</ins><span class="cx">     UniquedStringImpl* uid() const { return m_uid; }
</span><span class="cx">     
</span><span class="cx"> private:
</span><span class="cx">     unsigned m_stackmapID;
</span><del>-    CodeOrigin m_codeOrigin;
</del><ins>+    CallSiteIndex m_callSiteIndex;
</ins><span class="cx">     UniquedStringImpl* m_uid;
</span><span class="cx">     
</span><span class="cx"> public:
</span><span class="lines">@@ -63,8 +65,8 @@
</span><span class="cx"> public:
</span><span class="cx">     GetByIdDescriptor() { }
</span><span class="cx">     
</span><del>-    GetByIdDescriptor(unsigned stackmapID, CodeOrigin codeOrigin, UniquedStringImpl* uid)
-        : InlineCacheDescriptor(stackmapID, codeOrigin, uid)
</del><ins>+    GetByIdDescriptor(unsigned stackmapID, CallSiteIndex callSite, UniquedStringImpl* uid)
+        : InlineCacheDescriptor(stackmapID, callSite, uid)
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -76,9 +78,9 @@
</span><span class="cx">     PutByIdDescriptor() { }
</span><span class="cx">     
</span><span class="cx">     PutByIdDescriptor(
</span><del>-        unsigned stackmapID, CodeOrigin codeOrigin, UniquedStringImpl* uid,
</del><ins>+        unsigned stackmapID, CallSiteIndex callSite, UniquedStringImpl* uid,
</ins><span class="cx">         ECMAMode ecmaMode, PutKind putKind)
</span><del>-        : InlineCacheDescriptor(stackmapID, codeOrigin, uid)
</del><ins>+        : InlineCacheDescriptor(stackmapID, callSite, uid)
</ins><span class="cx">         , m_ecmaMode(ecmaMode)
</span><span class="cx">         , m_putKind(putKind)
</span><span class="cx">     {
</span><span class="lines">@@ -111,8 +113,8 @@
</span><span class="cx"> public:
</span><span class="cx">     CheckInDescriptor() { }
</span><span class="cx">     
</span><del>-    CheckInDescriptor(unsigned stackmapID, CodeOrigin codeOrigin, const UniquedStringImpl* uid)
-        : InlineCacheDescriptor(stackmapID, codeOrigin, nullptr)
</del><ins>+    CheckInDescriptor(unsigned stackmapID, CallSiteIndex callSite, const UniquedStringImpl* uid)
+        : InlineCacheDescriptor(stackmapID, callSite, nullptr)
</ins><span class="cx">         , m_uid(uid)
</span><span class="cx">     {
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLinkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLLink.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLLink.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/ftl/FTLLink.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -153,7 +153,7 @@
</span><span class="cx">         jit.emitFunctionPrologue();
</span><span class="cx">         jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
</span><span class="cx">         jit.store32(
</span><del>-            CCallHelpers::TrustedImm32(CallFrame::Location::encodeAsBytecodeOffset(0)),
</del><ins>+            CCallHelpers::TrustedImm32(CallSiteIndex(0).bits()),
</ins><span class="cx">             CCallHelpers::tagFor(JSStack::ArgumentCount));
</span><span class="cx">         jit.storePtr(GPRInfo::callFrameRegister, &amp;vm.topCallFrame);
</span><span class="cx">         CCallHelpers::Call callArityCheck = jit.call();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -2220,7 +2220,7 @@
</span><span class="cx">         setInstructionCallingConvention(call, LLVMAnyRegCallConv);
</span><span class="cx">         
</span><span class="cx">         m_ftlState.putByIds.append(PutByIdDescriptor(
</span><del>-            stackmapID, m_node-&gt;origin.semantic, uid,
</del><ins>+            stackmapID, m_ftlState.jitCode-&gt;common.addCodeOrigin(m_node-&gt;origin.semantic), uid,
</ins><span class="cx">             m_graph.executableFor(m_node-&gt;origin.semantic)-&gt;ecmaMode(),
</span><span class="cx">             m_node-&gt;op() == PutByIdDirect ? Direct : NotDirect));
</span><span class="cx">     }
</span><span class="lines">@@ -4957,7 +4957,7 @@
</span><span class="cx"> 
</span><span class="cx">                 setInstructionCallingConvention(call, LLVMAnyRegCallConv);
</span><span class="cx"> 
</span><del>-                m_ftlState.checkIns.append(CheckInDescriptor(stackmapID, m_node-&gt;origin.semantic, str));
</del><ins>+                m_ftlState.checkIns.append(CheckInDescriptor(stackmapID, m_ftlState.jitCode-&gt;common.addCodeOrigin(m_node-&gt;origin.semantic), str));
</ins><span class="cx">                 setJSValue(call);
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="lines">@@ -5800,7 +5800,7 @@
</span><span class="cx">             constNull(m_out.ref8), m_out.constInt32(1), base);
</span><span class="cx">         setInstructionCallingConvention(call, LLVMAnyRegCallConv);
</span><span class="cx">         
</span><del>-        m_ftlState.getByIds.append(GetByIdDescriptor(stackmapID, m_node-&gt;origin.semantic, uid));
</del><ins>+        m_ftlState.getByIds.append(GetByIdDescriptor(stackmapID, m_ftlState.jitCode-&gt;common.addCodeOrigin(m_node-&gt;origin.semantic), uid));
</ins><span class="cx">         
</span><span class="cx">         return call;
</span><span class="cx">     }
</span><span class="lines">@@ -8056,8 +8056,7 @@
</span><span class="cx">     {
</span><span class="cx">         m_out.store32(
</span><span class="cx">             m_out.constInt32(
</span><del>-                CallFrame::Location::encodeAsCodeOriginIndex(
-                    m_ftlState.jitCode-&gt;common.addCodeOrigin(codeOrigin))),
</del><ins>+                m_ftlState.jitCode-&gt;common.addCodeOrigin(codeOrigin).bits()),
</ins><span class="cx">             tagFor(JSStack::ArgumentCount));
</span><span class="cx">     }
</span><span class="cx">     void callPreflight()
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLSlowPathCallcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -166,8 +166,8 @@
</span><span class="cx">     if (!codeOrigin.isSet())
</span><span class="cx">         return;
</span><span class="cx">     
</span><del>-    unsigned index = state.jitCode-&gt;common.addCodeOrigin(codeOrigin);
-    unsigned locationBits = CallFrame::Location::encodeAsCodeOriginIndex(index);
</del><ins>+    CallSiteIndex callSite = state.jitCode-&gt;common.addCodeOrigin(codeOrigin);
+    unsigned locationBits = callSite.bits();
</ins><span class="cx">     jit.store32(
</span><span class="cx">         CCallHelpers::TrustedImm32(locationBits),
</span><span class="cx">         CCallHelpers::tagFor(static_cast&lt;VirtualRegister&gt;(JSStack::ArgumentCount)));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterCallFramecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -46,63 +46,63 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if USE(JSVALUE32_64)
</span><del>-unsigned CallFrame::locationAsBytecodeOffset() const
</del><ins>+Instruction* CallFrame::currentVPC() const
</ins><span class="cx"> {
</span><del>-    ASSERT(codeBlock());
-    ASSERT(hasLocationAsBytecodeOffset());
-    return currentVPC() - codeBlock()-&gt;instructions().begin();
</del><ins>+    return bitwise_cast&lt;Instruction*&gt;(callSiteIndex().bits());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CallFrame::setLocationAsBytecodeOffset(unsigned offset)
</del><ins>+void CallFrame::setCurrentVPC(Instruction* vpc)
</ins><span class="cx"> {
</span><ins>+    CallSiteIndex callSite(vpc);
+    this[JSStack::ArgumentCount].tag() = callSite.bits();
+}
+
+unsigned CallFrame::callSiteBitsAsBytecodeOffset() const
+{
</ins><span class="cx">     ASSERT(codeBlock());
</span><del>-    setCurrentVPC(codeBlock()-&gt;instructions().begin() + offset);
-    ASSERT(hasLocationAsBytecodeOffset());
</del><ins>+    ASSERT(callSiteBitsAreBytecodeOffset());
+    return currentVPC() - codeBlock()-&gt;instructions().begin();     
</ins><span class="cx"> }
</span><del>-#else
</del><ins>+
+#else // USE(JSVALUE32_64)
</ins><span class="cx"> Instruction* CallFrame::currentVPC() const
</span><span class="cx"> {
</span><del>-    return codeBlock()-&gt;instructions().begin() + locationAsBytecodeOffset();
</del><ins>+    ASSERT(callSiteBitsAreBytecodeOffset());
+    return codeBlock()-&gt;instructions().begin() + callSiteBitsAsBytecodeOffset();
</ins><span class="cx"> }
</span><ins>+
</ins><span class="cx"> void CallFrame::setCurrentVPC(Instruction* vpc)
</span><span class="cx"> {
</span><del>-    setLocationAsBytecodeOffset(vpc - codeBlock()-&gt;instructions().begin());
</del><ins>+    CallSiteIndex callSite(vpc - codeBlock()-&gt;instructions().begin());
+    this[JSStack::ArgumentCount].tag() = static_cast&lt;int32_t&gt;(callSite.bits());
</ins><span class="cx"> }
</span><del>-#endif
-    
-#if ENABLE(DFG_JIT)
-unsigned CallFrame::bytecodeOffsetFromCodeOriginIndex()
</del><ins>+
+unsigned CallFrame::callSiteBitsAsBytecodeOffset() const
</ins><span class="cx"> {
</span><del>-    ASSERT(hasLocationAsCodeOriginIndex());
-    CodeBlock* codeBlock = this-&gt;codeBlock();
-    ASSERT(codeBlock);
-
-    CodeOrigin codeOrigin;
-    unsigned index = locationAsCodeOriginIndex();
-    ASSERT(codeBlock-&gt;canGetCodeOrigin(index));
-    codeOrigin = codeBlock-&gt;codeOrigin(index);
-
-    for (InlineCallFrame* inlineCallFrame = codeOrigin.inlineCallFrame; inlineCallFrame;) {
-        if (inlineCallFrame-&gt;baselineCodeBlock() == codeBlock)
-            return codeOrigin.bytecodeIndex;
-
-        codeOrigin = inlineCallFrame-&gt;caller;
-        inlineCallFrame = codeOrigin.inlineCallFrame;
-    }
-    return codeOrigin.bytecodeIndex;
</del><ins>+    ASSERT(codeBlock());
+    ASSERT(callSiteBitsAreBytecodeOffset());
+    return callSiteIndex().bits();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-#endif // ENABLE(DFG_JIT)
-
</del><ins>+#endif
+    
</ins><span class="cx"> unsigned CallFrame::bytecodeOffset()
</span><span class="cx"> {
</span><span class="cx">     if (!codeBlock())
</span><span class="cx">         return 0;
</span><span class="cx"> #if ENABLE(DFG_JIT)
</span><del>-    if (hasLocationAsCodeOriginIndex())
-        return bytecodeOffsetFromCodeOriginIndex();
</del><ins>+    if (callSiteBitsAreCodeOriginIndex()) {
+        ASSERT(codeBlock());
+        CodeOrigin codeOrigin = this-&gt;codeOrigin();
+        for (InlineCallFrame* inlineCallFrame = codeOrigin.inlineCallFrame; inlineCallFrame;) {
+            codeOrigin = inlineCallFrame-&gt;caller;
+            inlineCallFrame = codeOrigin.inlineCallFrame;
+        }
+        return codeOrigin.bytecodeIndex;
+    }
</ins><span class="cx"> #endif
</span><del>-    return locationAsBytecodeOffset();
</del><ins>+    ASSERT(callSiteBitsAreBytecodeOffset());
+    return callSiteBitsAsBytecodeOffset();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> CodeOrigin CallFrame::codeOrigin()
</span><span class="lines">@@ -110,13 +110,13 @@
</span><span class="cx">     if (!codeBlock())
</span><span class="cx">         return CodeOrigin(0);
</span><span class="cx"> #if ENABLE(DFG_JIT)
</span><del>-    if (hasLocationAsCodeOriginIndex()) {
-        unsigned index = locationAsCodeOriginIndex();
</del><ins>+    if (callSiteBitsAreCodeOriginIndex()) {
+        CallSiteIndex index = callSiteIndex();
</ins><span class="cx">         ASSERT(codeBlock()-&gt;canGetCodeOrigin(index));
</span><span class="cx">         return codeBlock()-&gt;codeOrigin(index);
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><del>-    return CodeOrigin(locationAsBytecodeOffset());
</del><ins>+    return CodeOrigin(callSiteBitsAsBytecodeOffset());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Register* CallFrame::topOfFrameInternal()
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterCallFrameh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/CallFrame.h (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/CallFrame.h        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/interpreter/CallFrame.h        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -38,6 +38,21 @@
</span><span class="cx">     class Interpreter;
</span><span class="cx">     class JSScope;
</span><span class="cx"> 
</span><ins>+    struct CallSiteIndex {
+        explicit CallSiteIndex(uint32_t bits)
+            : m_bits(bits)
+        { }
+#if USE(JSVALUE32_64)
+        explicit CallSiteIndex(Instruction* instruction)
+            : m_bits(bitwise_cast&lt;uint32_t&gt;(instruction))
+        { }
+#endif
+        inline uint32_t bits() const { return m_bits; }
+
+    private:
+        uint32_t m_bits;
+    };
+
</ins><span class="cx">     // Represents the current state of script execution.
</span><span class="cx">     // Passed as the first argument to most functions.
</span><span class="cx">     class ExecState : private Register {
</span><span class="lines">@@ -107,51 +122,15 @@
</span><span class="cx">         static ptrdiff_t returnPCOffset() { return OBJECT_OFFSETOF(CallerFrameAndPC, pc); }
</span><span class="cx">         AbstractPC abstractReturnPC(VM&amp; vm) { return AbstractPC(vm, this); }
</span><span class="cx"> 
</span><del>-        class Location {
-        public:
-            static inline uint32_t decode(uint32_t bits);
</del><ins>+        bool callSiteBitsAreBytecodeOffset() const;
+        bool callSiteBitsAreCodeOriginIndex() const;
</ins><span class="cx"> 
</span><del>-            static inline bool isBytecodeLocation(uint32_t bits);
-#if USE(JSVALUE64)
-            static inline uint32_t encodeAsBytecodeOffset(uint32_t bits);
-#else
-            static inline uint32_t encodeAsBytecodeInstruction(Instruction*);
-#endif
</del><ins>+        unsigned callSiteAsRawBits() const;
+        CallSiteIndex callSiteIndex() const;
+    private:
+        unsigned callSiteBitsAsBytecodeOffset() const;
+    public:
</ins><span class="cx"> 
</span><del>-            static inline bool isCodeOriginIndex(uint32_t bits);
-            static inline uint32_t encodeAsCodeOriginIndex(uint32_t bits);
-
-        private:
-            enum TypeTag {
-                BytecodeLocationTag = 0,
-                CodeOriginIndexTag = 1,
-            };
-
-            static inline uint32_t encode(TypeTag, uint32_t bits);
-
-            static const uint32_t s_mask = 0x1;
-#if USE(JSVALUE64)
-            static const uint32_t s_shift = 31;
-            static const uint32_t s_shiftedMask = s_mask &lt;&lt; s_shift;
-#else
-            static const uint32_t s_shift = 1;
-#endif
-        };
-
-        bool hasLocationAsBytecodeOffset() const;
-        bool hasLocationAsCodeOriginIndex() const;
-
-        unsigned locationAsRawBits() const;
-        unsigned locationAsBytecodeOffset() const;
-        unsigned locationAsCodeOriginIndex() const;
-
-        void setLocationAsRawBits(unsigned);
-        void setLocationAsBytecodeOffset(unsigned);
-
-#if ENABLE(DFG_JIT)
-        unsigned bytecodeOffsetFromCodeOriginIndex();
-#endif
-        
</del><span class="cx">         // This will try to get you the bytecode offset, but you should be aware that
</span><span class="cx">         // this bytecode offset may be bogus in the presence of inlining. This will
</span><span class="cx">         // also return 0 if the call frame has no notion of bytecode offsets (for
</span><span class="lines">@@ -170,19 +149,8 @@
</span><span class="cx">             return topOfFrameInternal();
</span><span class="cx">         }
</span><span class="cx">     
</span><del>-#if USE(JSVALUE32_64)
-        Instruction* currentVPC() const
-        {
-            return bitwise_cast&lt;Instruction*&gt;(this[JSStack::ArgumentCount].tag());
-        }
-        void setCurrentVPC(Instruction* vpc)
-        {
-            this[JSStack::ArgumentCount].tag() = bitwise_cast&lt;int32_t&gt;(vpc);
-        }
-#else
-        Instruction* currentVPC() const;
</del><ins>+        Instruction* currentVPC() const; // This only makes sense in the LLInt and baseline.
</ins><span class="cx">         void setCurrentVPC(Instruction* vpc);
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx">         void setCallerFrame(CallFrame* frame) { callerFrameAndPC().callerFrame = frame; }
</span><span class="cx">         void setScope(int scopeRegisterOffset, JSScope* scope) { static_cast&lt;Register*&gt;(this)[scopeRegisterOffset] = scope; }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterCallFrameInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/CallFrameInlines.h (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/CallFrameInlines.h        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/interpreter/CallFrameInlines.h        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -31,114 +31,54 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC  {
</span><span class="cx"> 
</span><del>-inline uint32_t CallFrame::Location::encode(CallFrame::Location::TypeTag tag, uint32_t bits)
</del><ins>+inline bool CallFrame::callSiteBitsAreBytecodeOffset() const
</ins><span class="cx"> {
</span><del>-#if USE(JSVALUE64)
-    ASSERT(!(bits &amp; s_shiftedMask));
-    ASSERT(!(tag &amp; ~s_mask));
-    return bits | (tag &lt;&lt; s_shift);
-#else
-    ASSERT(!(tag &amp; ~s_mask));
-    if (tag &amp; CodeOriginIndexTag)
-        bits = (bits &lt;&lt; s_shift);
-    ASSERT(!(bits &amp; s_mask));
-    bits |= tag;
-    return bits;
-#endif
-}
</del><ins>+    ASSERT(codeBlock());
+    switch (codeBlock()-&gt;jitType()) {
+    case JITCode::InterpreterThunk:
+    case JITCode::BaselineJIT:
+        return true;
+    case JITCode::None:
+    case JITCode::HostCallThunk:
+        RELEASE_ASSERT_NOT_REACHED();
+        return false;
+    default:
+        return false;
+    }
</ins><span class="cx"> 
</span><del>-inline uint32_t CallFrame::Location::decode(uint32_t bits)
-{
-#if USE(JSVALUE64)
-    return bits &amp; ~s_shiftedMask;
-#else
-    if (isCodeOriginIndex(bits))
-        return bits &gt;&gt; s_shift;
-    return bits &amp; ~s_mask;
-#endif
</del><ins>+    RELEASE_ASSERT_NOT_REACHED();
+    return false;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if USE(JSVALUE64)
-inline uint32_t CallFrame::Location::encodeAsBytecodeOffset(uint32_t bits)
</del><ins>+inline bool CallFrame::callSiteBitsAreCodeOriginIndex() const
</ins><span class="cx"> {
</span><del>-    uint32_t encodedBits = encode(BytecodeLocationTag, bits);
-    ASSERT(isBytecodeLocation(encodedBits));
-    return encodedBits;
-}
-#else
-inline uint32_t CallFrame::Location::encodeAsBytecodeInstruction(Instruction* instruction)
-{
-    uint32_t encodedBits = encode(BytecodeLocationTag, reinterpret_cast&lt;uint32_t&gt;(instruction));
-    ASSERT(isBytecodeLocation(encodedBits));
-    return encodedBits;
-}
-#endif
</del><ins>+    ASSERT(codeBlock());
+    switch (codeBlock()-&gt;jitType()) {
+    case JITCode::DFGJIT:
+    case JITCode::FTLJIT:
+        return true;
+    case JITCode::None:
+    case JITCode::HostCallThunk:
+        RELEASE_ASSERT_NOT_REACHED();
+        return false;
+    default:
+        return false;
+    }
</ins><span class="cx"> 
</span><del>-inline uint32_t CallFrame::Location::encodeAsCodeOriginIndex(uint32_t bits)
-{
-    uint32_t encodedBits = encode(CodeOriginIndexTag, bits);
-    ASSERT(isCodeOriginIndex(encodedBits));
-    return encodedBits;
</del><ins>+    RELEASE_ASSERT_NOT_REACHED();
+    return false;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline bool CallFrame::Location::isBytecodeLocation(uint32_t bits)
</del><ins>+inline unsigned CallFrame::callSiteAsRawBits() const
</ins><span class="cx"> {
</span><del>-    return !isCodeOriginIndex(bits);
-}
-
-inline bool CallFrame::Location::isCodeOriginIndex(uint32_t bits)
-{
-#if USE(JSVALUE64)
-    TypeTag tag = static_cast&lt;TypeTag&gt;(bits &gt;&gt; s_shift);
-    return !!(tag &amp; CodeOriginIndexTag);
-#else
-    return !!(bits &amp; CodeOriginIndexTag);
-#endif
-}
-
-inline bool CallFrame::hasLocationAsBytecodeOffset() const
-{
-    return Location::isBytecodeLocation(locationAsRawBits());
-}
-
-inline bool CallFrame::hasLocationAsCodeOriginIndex() const
-{
-    return Location::isCodeOriginIndex(locationAsRawBits());
-}
-
-inline unsigned CallFrame::locationAsRawBits() const
-{
</del><span class="cx">     return this[JSStack::ArgumentCount].tag();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline void CallFrame::setLocationAsRawBits(unsigned bits)
</del><ins>+inline CallSiteIndex CallFrame::callSiteIndex() const
</ins><span class="cx"> {
</span><del>-    this[JSStack::ArgumentCount].tag() = static_cast&lt;int32_t&gt;(bits);
</del><ins>+    return CallSiteIndex(callSiteAsRawBits());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if USE(JSVALUE64)
-inline unsigned CallFrame::locationAsBytecodeOffset() const
-{
-    ASSERT(hasLocationAsBytecodeOffset());
-    ASSERT(codeBlock());
-    return Location::decode(locationAsRawBits());
-}
-
-inline void CallFrame::setLocationAsBytecodeOffset(unsigned offset)
-{
-    ASSERT(codeBlock());
-    setLocationAsRawBits(Location::encodeAsBytecodeOffset(offset));
-    ASSERT(hasLocationAsBytecodeOffset());
-}
-#endif // USE(JSVALUE64)
-
-inline unsigned CallFrame::locationAsCodeOriginIndex() const
-{
-    ASSERT(hasLocationAsCodeOriginIndex());
-    ASSERT(codeBlock());
-    return Location::decode(locationAsRawBits());
-}
-
</del><span class="cx"> inline bool CallFrame::hasActivation() const
</span><span class="cx"> {
</span><span class="cx">     JSValue activation = uncheckedActivation();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterStackVisitorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/StackVisitor.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/StackVisitor.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/interpreter/StackVisitor.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    unsigned index = callFrame-&gt;locationAsCodeOriginIndex();
</del><ins>+    CallSiteIndex index = callFrame-&gt;callSiteIndex();
</ins><span class="cx">     ASSERT(codeBlock-&gt;canGetCodeOrigin(index));
</span><span class="cx">     if (!codeBlock-&gt;canGetCodeOrigin(index)) {
</span><span class="cx">         // See assertion above. In release builds, we try to protect ourselves
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx">     m_frame.m_codeBlock = callFrame-&gt;codeBlock();
</span><span class="cx">     m_frame.m_bytecodeOffset = !m_frame.codeBlock() ? 0
</span><span class="cx">         : codeOrigin ? codeOrigin-&gt;bytecodeIndex
</span><del>-        : callFrame-&gt;locationAsBytecodeOffset();
</del><ins>+        : callFrame-&gt;bytecodeOffset();
</ins><span class="cx"> #if ENABLE(DFG_JIT)
</span><span class="cx">     m_frame.m_inlineCallFrame = 0;
</span><span class="cx"> #endif
</span><span class="lines">@@ -376,7 +376,7 @@
</span><span class="cx">         logF(indent, &quot;callee: %p\n&quot;, callee());
</span><span class="cx">         logF(indent, &quot;returnPC: %p\n&quot;, returnPC);
</span><span class="cx">         logF(indent, &quot;callerFrame: %p\n&quot;, callerFrame);
</span><del>-        unsigned locationRawBits = callFrame-&gt;locationAsRawBits();
</del><ins>+        unsigned locationRawBits = callFrame-&gt;callSiteAsRawBits();
</ins><span class="cx">         logF(indent, &quot;rawLocationBits: %u 0x%x\n&quot;, locationRawBits, locationRawBits);
</span><span class="cx">         logF(indent, &quot;codeBlock: %p &quot;, codeBlock);
</span><span class="cx">         if (codeBlock)
</span><span class="lines">@@ -385,15 +385,15 @@
</span><span class="cx">         if (codeBlock &amp;&amp; !isInlined) {
</span><span class="cx">             indent++;
</span><span class="cx"> 
</span><del>-            if (callFrame-&gt;hasLocationAsBytecodeOffset()) {
-                unsigned bytecodeOffset = callFrame-&gt;locationAsBytecodeOffset();
</del><ins>+            if (callFrame-&gt;callSiteBitsAreBytecodeOffset()) {
+                unsigned bytecodeOffset = callFrame-&gt;bytecodeOffset();
</ins><span class="cx">                 log(indent, &quot;bytecodeOffset: &quot;, bytecodeOffset, &quot; of &quot;, codeBlock-&gt;instructions().size(), &quot;\n&quot;);
</span><span class="cx"> #if ENABLE(DFG_JIT)
</span><span class="cx">             } else {
</span><span class="cx">                 log(indent, &quot;hasCodeOrigins: &quot;, codeBlock-&gt;hasCodeOrigins(), &quot;\n&quot;);
</span><span class="cx">                 if (codeBlock-&gt;hasCodeOrigins()) {
</span><del>-                    unsigned codeOriginIndex = callFrame-&gt;locationAsCodeOriginIndex();
-                    log(indent, &quot;codeOriginIndex: &quot;, codeOriginIndex, &quot; of &quot;, codeBlock-&gt;codeOrigins().size(), &quot;\n&quot;);
</del><ins>+                    CallSiteIndex callSiteIndex = callFrame-&gt;callSiteIndex();
+                    log(indent, &quot;callSiteIndex: &quot;, callSiteIndex.bits(), &quot; of &quot;, codeBlock-&gt;codeOrigins().size(), &quot;\n&quot;);
</ins><span class="cx"> 
</span><span class="cx">                     JITCode::JITType jitType = codeBlock-&gt;jitType();
</span><span class="cx">                     if (jitType != JITCode::FTLJIT) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITCallcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITCall.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITCall.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/jit/JITCall.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -168,7 +168,7 @@
</span><span class="cx">     } // SP holds newCallFrame + sizeof(CallerFrameAndPC), with ArgumentCount initialized.
</span><span class="cx">     
</span><span class="cx">     uint32_t bytecodeOffset = instruction - m_codeBlock-&gt;instructions().begin();
</span><del>-    uint32_t locationBits = CallFrame::Location::encodeAsBytecodeOffset(bytecodeOffset);
</del><ins>+    uint32_t locationBits = CallSiteIndex(bytecodeOffset).bits();
</ins><span class="cx">     store32(TrustedImm32(locationBits), Address(callFrameRegister, JSStack::ArgumentCount * static_cast&lt;int&gt;(sizeof(Register)) + TagOffset));
</span><span class="cx">     emitGetVirtualRegister(callee, regT0); // regT0 holds callee.
</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 (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITCall32_64.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/jit/JITCall32_64.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -229,7 +229,7 @@
</span><span class="cx">         store32(TrustedImm32(argCount), Address(stackPointerRegister, JSStack::ArgumentCount * static_cast&lt;int&gt;(sizeof(Register)) + PayloadOffset - sizeof(CallerFrameAndPC)));
</span><span class="cx">     } // SP holds newCallFrame + sizeof(CallerFrameAndPC), with ArgumentCount initialized.
</span><span class="cx">     
</span><del>-    uint32_t locationBits = CallFrame::Location::encodeAsBytecodeInstruction(instruction);
</del><ins>+    uint32_t locationBits = CallSiteIndex(instruction).bits();
</ins><span class="cx">     store32(TrustedImm32(locationBits), tagFor(JSStack::ArgumentCount, callFrameRegister));
</span><span class="cx">     emitLoad(callee, regT1, regT0); // regT1, regT0 holds callee.
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITInlineCacheGeneratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -40,17 +40,18 @@
</span><span class="cx">     return stubInfo;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JITInlineCacheGenerator::JITInlineCacheGenerator(CodeBlock* codeBlock, CodeOrigin codeOrigin)
</del><ins>+JITInlineCacheGenerator::JITInlineCacheGenerator(CodeBlock* codeBlock, CodeOrigin codeOrigin, CallSiteIndex callSite)
</ins><span class="cx">     : m_codeBlock(codeBlock)
</span><span class="cx"> {
</span><span class="cx">     m_stubInfo = m_codeBlock ? m_codeBlock-&gt;addStubInfo() : garbageStubInfo();
</span><span class="cx">     m_stubInfo-&gt;codeOrigin = codeOrigin;
</span><ins>+    m_stubInfo-&gt;callSiteIndex = callSite;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JITByIdGenerator::JITByIdGenerator(
</span><del>-    CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet&amp; usedRegisters,
</del><ins>+    CodeBlock* codeBlock, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet&amp; usedRegisters,
</ins><span class="cx">     JSValueRegs base, JSValueRegs value, SpillRegistersMode spillMode)
</span><del>-    : JITInlineCacheGenerator(codeBlock, codeOrigin)
</del><ins>+    : JITInlineCacheGenerator(codeBlock, codeOrigin, callSite)
</ins><span class="cx">     , m_base(base)
</span><span class="cx">     , m_value(value)
</span><span class="cx"> {
</span><span class="lines">@@ -111,9 +112,9 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JITGetByIdGenerator::JITGetByIdGenerator(
</span><del>-    CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet&amp; usedRegisters,
</del><ins>+    CodeBlock* codeBlock, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet&amp; usedRegisters,
</ins><span class="cx">     JSValueRegs base, JSValueRegs value, SpillRegistersMode spillMode)
</span><del>-    : JITByIdGenerator(codeBlock, codeOrigin, usedRegisters, base, value, spillMode)
</del><ins>+    : JITByIdGenerator(codeBlock, codeOrigin, callSite, usedRegisters, base, value, spillMode)
</ins><span class="cx"> {
</span><span class="cx">     RELEASE_ASSERT(base.payloadGPR() != value.tagGPR());
</span><span class="cx"> }
</span><span class="lines">@@ -136,10 +137,10 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JITPutByIdGenerator::JITPutByIdGenerator(
</span><del>-    CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet&amp; usedRegisters,
</del><ins>+    CodeBlock* codeBlock, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet&amp; usedRegisters,
</ins><span class="cx">     JSValueRegs base, JSValueRegs value, GPRReg scratch, SpillRegistersMode spillMode,
</span><span class="cx">     ECMAMode ecmaMode, PutKind putKind)
</span><del>-    : JITByIdGenerator(codeBlock, codeOrigin, usedRegisters, base, value, spillMode)
</del><ins>+    : JITByIdGenerator(codeBlock, codeOrigin, callSite, usedRegisters, base, value, spillMode)
</ins><span class="cx">     , m_scratch(scratch)
</span><span class="cx">     , m_ecmaMode(ecmaMode)
</span><span class="cx">     , m_putKind(putKind)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITInlineCacheGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.h (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.h        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.h        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx"> class JITInlineCacheGenerator {
</span><span class="cx"> protected:
</span><span class="cx">     JITInlineCacheGenerator() { }
</span><del>-    JITInlineCacheGenerator(CodeBlock*, CodeOrigin);
</del><ins>+    JITInlineCacheGenerator(CodeBlock*, CodeOrigin, CallSiteIndex);
</ins><span class="cx">     
</span><span class="cx"> public:
</span><span class="cx">     StructureStubInfo* stubInfo() const { return m_stubInfo; }
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx">     JITByIdGenerator() { }
</span><span class="cx"> 
</span><span class="cx">     JITByIdGenerator(
</span><del>-        CodeBlock*, CodeOrigin, const RegisterSet&amp;, JSValueRegs base, JSValueRegs value,
</del><ins>+        CodeBlock*, CodeOrigin, CallSiteIndex, const RegisterSet&amp;, JSValueRegs base, JSValueRegs value,
</ins><span class="cx">         SpillRegistersMode spillMode);
</span><span class="cx">     
</span><span class="cx"> public:
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx">     JITGetByIdGenerator() { }
</span><span class="cx"> 
</span><span class="cx">     JITGetByIdGenerator(
</span><del>-        CodeBlock*, CodeOrigin, const RegisterSet&amp; usedRegisters, JSValueRegs base,
</del><ins>+        CodeBlock*, CodeOrigin, CallSiteIndex, const RegisterSet&amp; usedRegisters, JSValueRegs base,
</ins><span class="cx">         JSValueRegs value, SpillRegistersMode spillMode);
</span><span class="cx">     
</span><span class="cx">     void generateFastPath(MacroAssembler&amp;);
</span><span class="lines">@@ -106,7 +106,7 @@
</span><span class="cx">     JITPutByIdGenerator() { }
</span><span class="cx"> 
</span><span class="cx">     JITPutByIdGenerator(
</span><del>-        CodeBlock*, CodeOrigin, const RegisterSet&amp; usedRegisters, JSValueRegs base,
</del><ins>+        CodeBlock*, CodeOrigin, CallSiteIndex, const RegisterSet&amp; usedRegisters, JSValueRegs base,
</ins><span class="cx">         JSValueRegs, GPRReg scratch, SpillRegistersMode spillMode, ECMAMode, PutKind);
</span><span class="cx">     
</span><span class="cx">     void generateFastPath(MacroAssembler&amp;);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITInlines.h (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITInlines.h        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/jit/JITInlines.h        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -130,9 +130,9 @@
</span><span class="cx">     ASSERT(static_cast&lt;int&gt;(m_bytecodeOffset) &gt;= 0);
</span><span class="cx"> #if USE(JSVALUE32_64)
</span><span class="cx">     Instruction* instruction = m_codeBlock-&gt;instructions().begin() + m_bytecodeOffset + 1; 
</span><del>-    uint32_t locationBits = CallFrame::Location::encodeAsBytecodeInstruction(instruction);
</del><ins>+    uint32_t locationBits = CallSiteIndex(instruction).bits();
</ins><span class="cx"> #else
</span><del>-    uint32_t locationBits = CallFrame::Location::encodeAsBytecodeOffset(m_bytecodeOffset + 1);
</del><ins>+    uint32_t locationBits = CallSiteIndex(m_bytecodeOffset + 1).bits();
</ins><span class="cx"> #endif
</span><span class="cx">     store32(TrustedImm32(locationBits), intTagFor(JSStack::ArgumentCount));
</span><span class="cx">     storePtr(callFrameRegister, &amp;m_vm-&gt;topCallFrame);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -579,7 +579,7 @@
</span><span class="cx">     if (baseValue.isObject() &amp;&amp; subscript.isInt32()) {
</span><span class="cx">         JSObject* object = asObject(baseValue);
</span><span class="cx"> 
</span><del>-        ASSERT(exec-&gt;locationAsBytecodeOffset());
</del><ins>+        ASSERT(exec-&gt;bytecodeOffset());
</ins><span class="cx">         ASSERT(!byValInfo-&gt;stubRoutine);
</span><span class="cx"> 
</span><span class="cx">         Structure* structure = object-&gt;structure(vm);
</span><span class="lines">@@ -604,7 +604,7 @@
</span><span class="cx">     if (baseValue.isObject() &amp;&amp; isStringOrSymbol(subscript)) {
</span><span class="cx">         const Identifier propertyName = subscript.toPropertyKey(exec);
</span><span class="cx">         if (!subscript.isString() || !parseIndex(propertyName)) {
</span><del>-            ASSERT(exec-&gt;locationAsBytecodeOffset());
</del><ins>+            ASSERT(exec-&gt;bytecodeOffset());
</ins><span class="cx">             ASSERT(!byValInfo-&gt;stubRoutine);
</span><span class="cx">             if (byValInfo-&gt;seen) {
</span><span class="cx">                 if (byValInfo-&gt;cachedId == propertyName) {
</span><span class="lines">@@ -659,7 +659,7 @@
</span><span class="cx">     VM&amp; vm = exec-&gt;vm();
</span><span class="cx"> 
</span><span class="cx">     if (subscript.isInt32()) {
</span><del>-        ASSERT(exec-&gt;locationAsBytecodeOffset());
</del><ins>+        ASSERT(exec-&gt;bytecodeOffset());
</ins><span class="cx">         ASSERT(!byValInfo-&gt;stubRoutine);
</span><span class="cx"> 
</span><span class="cx">         Structure* structure = object-&gt;structure(vm);
</span><span class="lines">@@ -684,7 +684,7 @@
</span><span class="cx">         Optional&lt;uint32_t&gt; index = parseIndex(propertyName);
</span><span class="cx"> 
</span><span class="cx">         if (!subscript.isString() || !index) {
</span><del>-            ASSERT(exec-&gt;locationAsBytecodeOffset());
</del><ins>+            ASSERT(exec-&gt;bytecodeOffset());
</ins><span class="cx">             ASSERT(!byValInfo-&gt;stubRoutine);
</span><span class="cx">             if (byValInfo-&gt;seen) {
</span><span class="cx">                 if (byValInfo-&gt;cachedId == propertyName) {
</span><span class="lines">@@ -1548,7 +1548,7 @@
</span><span class="cx">         if (JSCell::canUseFastGetOwnProperty(structure)) {
</span><span class="cx">             if (RefPtr&lt;AtomicStringImpl&gt; existingAtomicString = asString(subscript)-&gt;toExistingAtomicString(exec)) {
</span><span class="cx">                 if (JSValue result = baseValue.asCell()-&gt;fastGetOwnProperty(vm, structure, existingAtomicString.get())) {
</span><del>-                    ASSERT(exec-&gt;locationAsBytecodeOffset());
</del><ins>+                    ASSERT(exec-&gt;bytecodeOffset());
</ins><span class="cx">                     if (byValInfo-&gt;stubInfo &amp;&amp; byValInfo-&gt;cachedId.impl() != existingAtomicString)
</span><span class="cx">                         byValInfo-&gt;tookSlowPath = true;
</span><span class="cx">                     return result;
</span><span class="lines">@@ -1558,7 +1558,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (subscript.isUInt32()) {
</span><del>-        ASSERT(exec-&gt;locationAsBytecodeOffset());
</del><ins>+        ASSERT(exec-&gt;bytecodeOffset());
</ins><span class="cx">         byValInfo-&gt;tookSlowPath = true;
</span><span class="cx"> 
</span><span class="cx">         uint32_t i = subscript.asUInt32();
</span><span class="lines">@@ -1587,7 +1587,7 @@
</span><span class="cx">     if (exec-&gt;hadException())
</span><span class="cx">         return jsUndefined();
</span><span class="cx"> 
</span><del>-    ASSERT(exec-&gt;locationAsBytecodeOffset());
</del><ins>+    ASSERT(exec-&gt;bytecodeOffset());
</ins><span class="cx">     if (byValInfo-&gt;stubInfo &amp;&amp; (!isStringOrSymbol(subscript) || byValInfo-&gt;cachedId != property))
</span><span class="cx">         byValInfo-&gt;tookSlowPath = true;
</span><span class="cx"> 
</span><span class="lines">@@ -1604,7 +1604,7 @@
</span><span class="cx">     if (baseValue.isObject() &amp;&amp; subscript.isInt32()) {
</span><span class="cx">         JSObject* object = asObject(baseValue);
</span><span class="cx"> 
</span><del>-        ASSERT(exec-&gt;locationAsBytecodeOffset());
</del><ins>+        ASSERT(exec-&gt;bytecodeOffset());
</ins><span class="cx">         ASSERT(!byValInfo-&gt;stubRoutine);
</span><span class="cx"> 
</span><span class="cx">         if (hasOptimizableIndexing(object-&gt;structure(vm))) {
</span><span class="lines">@@ -1631,7 +1631,7 @@
</span><span class="cx">     if (baseValue.isObject() &amp;&amp; isStringOrSymbol(subscript)) {
</span><span class="cx">         const Identifier propertyName = subscript.toPropertyKey(exec);
</span><span class="cx">         if (!subscript.isString() || !parseIndex(propertyName)) {
</span><del>-            ASSERT(exec-&gt;locationAsBytecodeOffset());
</del><ins>+            ASSERT(exec-&gt;bytecodeOffset());
</ins><span class="cx">             ASSERT(!byValInfo-&gt;stubRoutine);
</span><span class="cx">             if (byValInfo-&gt;seen) {
</span><span class="cx">                 if (byValInfo-&gt;cachedId == propertyName) {
</span><span class="lines">@@ -1706,7 +1706,7 @@
</span><span class="cx">     JSObject* object = asObject(baseValue);
</span><span class="cx">     bool didOptimize = false;
</span><span class="cx"> 
</span><del>-    ASSERT(exec-&gt;locationAsBytecodeOffset());
</del><ins>+    ASSERT(exec-&gt;bytecodeOffset());
</ins><span class="cx">     ASSERT(!byValInfo-&gt;stubRoutine);
</span><span class="cx">     
</span><span class="cx">     if (hasOptimizableIndexing(object-&gt;structure(vm))) {
</span><span class="lines">@@ -1775,7 +1775,7 @@
</span><span class="cx">         else {
</span><span class="cx">             result = baseValue.get(exec, i);
</span><span class="cx">             if (!isJSString(baseValue)) {
</span><del>-                ASSERT(exec-&gt;locationAsBytecodeOffset());
</del><ins>+                ASSERT(exec-&gt;bytecodeOffset());
</ins><span class="cx">                 ctiPatchCallByReturnAddress(exec-&gt;codeBlock(), ReturnAddressPtr(OUR_RETURN_ADDRESS), FunctionPtr(byValInfo-&gt;stubRoutine ? operationGetByValGeneric : operationGetByValOptimize));
</span><span class="cx">             }
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITPropertyAccesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -213,7 +213,7 @@
</span><span class="cx">     emitIdentifierCheck(regT1, regT3, propertyName, slowCases);
</span><span class="cx"> 
</span><span class="cx">     JITGetByIdGenerator gen(
</span><del>-        m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</del><ins>+        m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(m_bytecodeOffset), RegisterSet::specialRegisters(),
</ins><span class="cx">         JSValueRegs(regT0), JSValueRegs(regT0), DontSpill);
</span><span class="cx">     gen.generateFastPath(*this);
</span><span class="cx"> 
</span><span class="lines">@@ -446,7 +446,7 @@
</span><span class="cx">     emitGetVirtualRegisters(base, regT0, value, regT1);
</span><span class="cx"> 
</span><span class="cx">     JITPutByIdGenerator gen(
</span><del>-        m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</del><ins>+        m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(m_bytecodeOffset), RegisterSet::specialRegisters(),
</ins><span class="cx">         JSValueRegs(regT0), JSValueRegs(regT1), regT2, DontSpill, m_codeBlock-&gt;ecmaMode(), putKind);
</span><span class="cx">     gen.generateFastPath(*this);
</span><span class="cx">     doneCases.append(jump());
</span><span class="lines">@@ -556,7 +556,7 @@
</span><span class="cx">         emitArrayProfilingSiteForBytecodeIndexWithCell(regT0, regT1, m_bytecodeOffset);
</span><span class="cx"> 
</span><span class="cx">     JITGetByIdGenerator gen(
</span><del>-        m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</del><ins>+        m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(m_bytecodeOffset), RegisterSet::specialRegisters(),
</ins><span class="cx">         JSValueRegs(regT0), JSValueRegs(regT0), DontSpill);
</span><span class="cx">     gen.generateFastPath(*this);
</span><span class="cx">     addSlowCase(gen.slowPathJump());
</span><span class="lines">@@ -603,7 +603,7 @@
</span><span class="cx">     emitJumpSlowCaseIfNotJSCell(regT0, baseVReg);
</span><span class="cx"> 
</span><span class="cx">     JITPutByIdGenerator gen(
</span><del>-        m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</del><ins>+        m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(m_bytecodeOffset), RegisterSet::specialRegisters(),
</ins><span class="cx">         JSValueRegs(regT0), JSValueRegs(regT1), regT2, DontSpill, m_codeBlock-&gt;ecmaMode(),
</span><span class="cx">         direct ? Direct : NotDirect);
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITPropertyAccess32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -256,7 +256,7 @@
</span><span class="cx">     emitIdentifierCheck(regT2, regT4, propertyName, slowCases);
</span><span class="cx"> 
</span><span class="cx">     JITGetByIdGenerator gen(
</span><del>-        m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</del><ins>+        m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(currentInstruction), RegisterSet::specialRegisters(),
</ins><span class="cx">         JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), DontSpill);
</span><span class="cx">     gen.generateFastPath(*this);
</span><span class="cx"> 
</span><span class="lines">@@ -468,7 +468,7 @@
</span><span class="cx">     emitLoad(value, regT3, regT2);
</span><span class="cx"> 
</span><span class="cx">     JITPutByIdGenerator gen(
</span><del>-        m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</del><ins>+        m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(currentInstruction), RegisterSet::specialRegisters(),
</ins><span class="cx">         JSValueRegs::payloadOnly(regT0), JSValueRegs(regT3, regT2), regT1, DontSpill, m_codeBlock-&gt;ecmaMode(), putKind);
</span><span class="cx">     gen.generateFastPath(*this);
</span><span class="cx">     doneCases.append(jump());
</span><span class="lines">@@ -561,7 +561,7 @@
</span><span class="cx">         emitArrayProfilingSiteForBytecodeIndexWithCell(regT0, regT2, m_bytecodeOffset);
</span><span class="cx"> 
</span><span class="cx">     JITGetByIdGenerator gen(
</span><del>-        m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</del><ins>+        m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(currentInstruction), RegisterSet::specialRegisters(),
</ins><span class="cx">         JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), DontSpill);
</span><span class="cx">     gen.generateFastPath(*this);
</span><span class="cx">     addSlowCase(gen.slowPathJump());
</span><span class="lines">@@ -606,7 +606,7 @@
</span><span class="cx">     emitJumpSlowCaseIfNotJSCell(base, regT1);
</span><span class="cx"> 
</span><span class="cx">     JITPutByIdGenerator gen(
</span><del>-        m_codeBlock, CodeOrigin(m_bytecodeOffset), RegisterSet::specialRegisters(),
</del><ins>+        m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(currentInstruction), RegisterSet::specialRegisters(),
</ins><span class="cx">         JSValueRegs::payloadOnly(regT0), JSValueRegs(regT3, regT2),
</span><span class="cx">         regT1, DontSpill, m_codeBlock-&gt;ecmaMode(), direct ? Direct : NotDirect);
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitRepatchcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/Repatch.cpp (188931 => 188932)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/Repatch.cpp        2015-08-25 19:16:08 UTC (rev 188931)
+++ trunk/Source/JavaScriptCore/jit/Repatch.cpp        2015-08-25 19:40:46 UTC (rev 188932)
</span><span class="lines">@@ -411,7 +411,7 @@
</span><span class="cx">         // Need to make sure that whenever this call is made in the future, we remember the
</span><span class="cx">         // place that we made it from. It just so happens to be the place that we are at
</span><span class="cx">         // right now!
</span><del>-        stubJit.store32(MacroAssembler::TrustedImm32(exec-&gt;locationAsRawBits()),
</del><ins>+        stubJit.store32(MacroAssembler::TrustedImm32(stubInfo.callSiteIndex.bits()),
</ins><span class="cx">             CCallHelpers::tagFor(static_cast&lt;VirtualRegister&gt;(JSStack::ArgumentCount)));
</span><span class="cx"> 
</span><span class="cx">         if (kind == CallGetter || kind == CallSetter) {
</span></span></pre>
</div>
</div>

</body>
</html>