<!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 <sbarati@apple.com>
+
+ 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 <gskachkov@gmail.com>
</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 < codeOrigins().size();
</del><ins>+ return index.bits() < 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& 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->transition()->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&, 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->setEndOfCode(labelIgnoringWatchpoints());
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ CallSiteIndex addCallSite(CodeOrigin codeOrigin)
+ {
+ return m_jitCode->common.addCodeOrigin(codeOrigin);
+ }
+
</ins><span class="cx"> void emitStoreCodeOrigin(CodeOrigin codeOrigin)
</span><span class="cx"> {
</span><del>- unsigned index = m_jitCode->common.addCodeOrigin(codeOrigin);
- unsigned locationBits = CallFrame::Location::encodeAsCodeOriginIndex(index);
- store32(TrustedImm32(locationBits), tagFor(static_cast<VirtualRegister>(JSStack::ArgumentCount)));
</del><ins>+ CallSiteIndex callSite = addCallSite(codeOrigin);
+ store32(TrustedImm32(callSite.bits()), tagFor(static_cast<VirtualRegister>(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->arguments.size()), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::ArgumentCount)));
</span><span class="cx"> #if USE(JSVALUE64)
</span><span class="cx"> jit.store64(callerFrameGPR, AssemblyHelpers::addressForByteOffset(inlineCallFrame->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->stackOffset + JSStack::ArgumentCount)));
</span><span class="cx"> if (!inlineCallFrame->isClosureCall)
</span><span class="cx"> jit.store64(AssemblyHelpers::TrustedImm64(JSValue::encode(JSValue(inlineCallFrame->calleeConstant()))), AssemblyHelpers::addressFor((VirtualRegister)(inlineCallFrame->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->callerFrameOffset()));
</span><span class="cx"> Instruction* instruction = baselineCodeBlock->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->stackOffset + JSStack::ArgumentCount)));
</span><span class="cx"> jit.store32(AssemblyHelpers::TrustedImm32(JSValue::CellTag), AssemblyHelpers::tagFor((VirtualRegister)(inlineCallFrame->stackOffset + JSStack::Callee)));
</span><span class="cx"> if (!inlineCallFrame->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()->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<const AtomicStringImpl*>(string->tryGetValueImpl()));
</span><span class="cx">
</span><ins>+ stubInfo->callSiteIndex = m_jit.addCallSite(node->origin.semantic);
</ins><span class="cx"> stubInfo->codeOrigin = node->origin.semantic;
</span><span class="cx"> stubInfo->patch.baseGPR = static_cast<int8_t>(baseGPR);
</span><span class="cx"> stubInfo->patch.valueGPR = static_cast<int8_t>(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->common.codeOrigins[getById.callSiteIndex().bits()];
</ins><span class="cx"> for (unsigned i = 0; i < iter->value.size(); ++i) {
</span><span class="cx"> StackMaps::Record& record = iter->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(), &exceptionTarget,
</del><ins>+ state, usedRegisters, slowPathJIT, codeOrigin, &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->common.codeOrigins[putById.callSiteIndex().bits()];
</ins><span class="cx"> for (unsigned i = 0; i < iter->value.size(); ++i) {
</span><span class="cx"> StackMaps::Record& record = iter->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(), &exceptionTarget,
</del><ins>+ state, usedRegisters, slowPathJIT, codeOrigin, &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->common.codeOrigins[checkIn.callSiteIndex().bits()];
</ins><span class="cx"> for (unsigned i = 0; i < iter->value.size(); ++i) {
</span><span class="cx"> StackMaps::Record& record = iter->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->addStubInfo();
</span><del>- stubInfo->codeOrigin = checkIn.codeOrigin();
</del><ins>+ stubInfo->codeOrigin = codeOrigin;
+ stubInfo->callSiteIndex = checkIn.callSiteIndex();
</ins><span class="cx"> stubInfo->patch.baseGPR = static_cast<int8_t>(obj);
</span><span class="cx"> stubInfo->patch.valueGPR = static_cast<int8_t>(result);
</span><span class="cx"> stubInfo->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(), &exceptionTarget,
</del><ins>+ state, usedRegisters, slowPathJIT, codeOrigin, &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, &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->origin.semantic, uid,
</del><ins>+ stackmapID, m_ftlState.jitCode->common.addCodeOrigin(m_node->origin.semantic), uid,
</ins><span class="cx"> m_graph.executableFor(m_node->origin.semantic)->ecmaMode(),
</span><span class="cx"> m_node->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->origin.semantic, str));
</del><ins>+ m_ftlState.checkIns.append(CheckInDescriptor(stackmapID, m_ftlState.jitCode->common.addCodeOrigin(m_node->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->origin.semantic, uid));
</del><ins>+ m_ftlState.getByIds.append(GetByIdDescriptor(stackmapID, m_ftlState.jitCode->common.addCodeOrigin(m_node->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->common.addCodeOrigin(codeOrigin))),
</del><ins>+ m_ftlState.jitCode->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->common.addCodeOrigin(codeOrigin);
- unsigned locationBits = CallFrame::Location::encodeAsCodeOriginIndex(index);
</del><ins>+ CallSiteIndex callSite = state.jitCode->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<VirtualRegister>(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()->instructions().begin();
</del><ins>+ return bitwise_cast<Instruction*>(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()->instructions().begin() + offset);
- ASSERT(hasLocationAsBytecodeOffset());
</del><ins>+ ASSERT(callSiteBitsAreBytecodeOffset());
+ return currentVPC() - codeBlock()->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()->instructions().begin() + locationAsBytecodeOffset();
</del><ins>+ ASSERT(callSiteBitsAreBytecodeOffset());
+ return codeBlock()->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()->instructions().begin());
</del><ins>+ CallSiteIndex callSite(vpc - codeBlock()->instructions().begin());
+ this[JSStack::ArgumentCount].tag() = static_cast<int32_t>(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->codeBlock();
- ASSERT(codeBlock);
-
- CodeOrigin codeOrigin;
- unsigned index = locationAsCodeOriginIndex();
- ASSERT(codeBlock->canGetCodeOrigin(index));
- codeOrigin = codeBlock->codeOrigin(index);
-
- for (InlineCallFrame* inlineCallFrame = codeOrigin.inlineCallFrame; inlineCallFrame;) {
- if (inlineCallFrame->baselineCodeBlock() == codeBlock)
- return codeOrigin.bytecodeIndex;
-
- codeOrigin = inlineCallFrame->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->codeOrigin();
+ for (InlineCallFrame* inlineCallFrame = codeOrigin.inlineCallFrame; inlineCallFrame;) {
+ codeOrigin = inlineCallFrame->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()->canGetCodeOrigin(index));
</span><span class="cx"> return codeBlock()->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<uint32_t>(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& 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 << 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<Instruction*>(this[JSStack::ArgumentCount].tag());
- }
- void setCurrentVPC(Instruction* vpc)
- {
- this[JSStack::ArgumentCount].tag() = bitwise_cast<int32_t>(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<Register*>(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 & s_shiftedMask));
- ASSERT(!(tag & ~s_mask));
- return bits | (tag << s_shift);
-#else
- ASSERT(!(tag & ~s_mask));
- if (tag & CodeOriginIndexTag)
- bits = (bits << s_shift);
- ASSERT(!(bits & s_mask));
- bits |= tag;
- return bits;
-#endif
-}
</del><ins>+ ASSERT(codeBlock());
+ switch (codeBlock()->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 & ~s_shiftedMask;
-#else
- if (isCodeOriginIndex(bits))
- return bits >> s_shift;
- return bits & ~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<uint32_t>(instruction));
- ASSERT(isBytecodeLocation(encodedBits));
- return encodedBits;
-}
-#endif
</del><ins>+ ASSERT(codeBlock());
+ switch (codeBlock()->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<TypeTag>(bits >> s_shift);
- return !!(tag & CodeOriginIndexTag);
-#else
- return !!(bits & 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<int32_t>(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->locationAsCodeOriginIndex();
</del><ins>+ CallSiteIndex index = callFrame->callSiteIndex();
</ins><span class="cx"> ASSERT(codeBlock->canGetCodeOrigin(index));
</span><span class="cx"> if (!codeBlock->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->codeBlock();
</span><span class="cx"> m_frame.m_bytecodeOffset = !m_frame.codeBlock() ? 0
</span><span class="cx"> : codeOrigin ? codeOrigin->bytecodeIndex
</span><del>- : callFrame->locationAsBytecodeOffset();
</del><ins>+ : callFrame->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, "callee: %p\n", callee());
</span><span class="cx"> logF(indent, "returnPC: %p\n", returnPC);
</span><span class="cx"> logF(indent, "callerFrame: %p\n", callerFrame);
</span><del>- unsigned locationRawBits = callFrame->locationAsRawBits();
</del><ins>+ unsigned locationRawBits = callFrame->callSiteAsRawBits();
</ins><span class="cx"> logF(indent, "rawLocationBits: %u 0x%x\n", locationRawBits, locationRawBits);
</span><span class="cx"> logF(indent, "codeBlock: %p ", codeBlock);
</span><span class="cx"> if (codeBlock)
</span><span class="lines">@@ -385,15 +385,15 @@
</span><span class="cx"> if (codeBlock && !isInlined) {
</span><span class="cx"> indent++;
</span><span class="cx">
</span><del>- if (callFrame->hasLocationAsBytecodeOffset()) {
- unsigned bytecodeOffset = callFrame->locationAsBytecodeOffset();
</del><ins>+ if (callFrame->callSiteBitsAreBytecodeOffset()) {
+ unsigned bytecodeOffset = callFrame->bytecodeOffset();
</ins><span class="cx"> log(indent, "bytecodeOffset: ", bytecodeOffset, " of ", codeBlock->instructions().size(), "\n");
</span><span class="cx"> #if ENABLE(DFG_JIT)
</span><span class="cx"> } else {
</span><span class="cx"> log(indent, "hasCodeOrigins: ", codeBlock->hasCodeOrigins(), "\n");
</span><span class="cx"> if (codeBlock->hasCodeOrigins()) {
</span><del>- unsigned codeOriginIndex = callFrame->locationAsCodeOriginIndex();
- log(indent, "codeOriginIndex: ", codeOriginIndex, " of ", codeBlock->codeOrigins().size(), "\n");
</del><ins>+ CallSiteIndex callSiteIndex = callFrame->callSiteIndex();
+ log(indent, "callSiteIndex: ", callSiteIndex.bits(), " of ", codeBlock->codeOrigins().size(), "\n");
</ins><span class="cx">
</span><span class="cx"> JITCode::JITType jitType = codeBlock->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->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<int>(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<int>(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->addStubInfo() : garbageStubInfo();
</span><span class="cx"> m_stubInfo->codeOrigin = codeOrigin;
</span><ins>+ m_stubInfo->callSiteIndex = callSite;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> JITByIdGenerator::JITByIdGenerator(
</span><del>- CodeBlock* codeBlock, CodeOrigin codeOrigin, const RegisterSet& usedRegisters,
</del><ins>+ CodeBlock* codeBlock, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& 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& usedRegisters,
</del><ins>+ CodeBlock* codeBlock, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& 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& usedRegisters,
</del><ins>+ CodeBlock* codeBlock, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& 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&, JSValueRegs base, JSValueRegs value,
</del><ins>+ CodeBlock*, CodeOrigin, CallSiteIndex, const RegisterSet&, 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& usedRegisters, JSValueRegs base,
</del><ins>+ CodeBlock*, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, JSValueRegs base,
</ins><span class="cx"> JSValueRegs value, SpillRegistersMode spillMode);
</span><span class="cx">
</span><span class="cx"> void generateFastPath(MacroAssembler&);
</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& usedRegisters, JSValueRegs base,
</del><ins>+ CodeBlock*, CodeOrigin, CallSiteIndex, const RegisterSet& 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&);
</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<int>(m_bytecodeOffset) >= 0);
</span><span class="cx"> #if USE(JSVALUE32_64)
</span><span class="cx"> Instruction* instruction = m_codeBlock->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, &m_vm->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() && subscript.isInt32()) {
</span><span class="cx"> JSObject* object = asObject(baseValue);
</span><span class="cx">
</span><del>- ASSERT(exec->locationAsBytecodeOffset());
</del><ins>+ ASSERT(exec->bytecodeOffset());
</ins><span class="cx"> ASSERT(!byValInfo->stubRoutine);
</span><span class="cx">
</span><span class="cx"> Structure* structure = object->structure(vm);
</span><span class="lines">@@ -604,7 +604,7 @@
</span><span class="cx"> if (baseValue.isObject() && 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->locationAsBytecodeOffset());
</del><ins>+ ASSERT(exec->bytecodeOffset());
</ins><span class="cx"> ASSERT(!byValInfo->stubRoutine);
</span><span class="cx"> if (byValInfo->seen) {
</span><span class="cx"> if (byValInfo->cachedId == propertyName) {
</span><span class="lines">@@ -659,7 +659,7 @@
</span><span class="cx"> VM& vm = exec->vm();
</span><span class="cx">
</span><span class="cx"> if (subscript.isInt32()) {
</span><del>- ASSERT(exec->locationAsBytecodeOffset());
</del><ins>+ ASSERT(exec->bytecodeOffset());
</ins><span class="cx"> ASSERT(!byValInfo->stubRoutine);
</span><span class="cx">
</span><span class="cx"> Structure* structure = object->structure(vm);
</span><span class="lines">@@ -684,7 +684,7 @@
</span><span class="cx"> Optional<uint32_t> index = parseIndex(propertyName);
</span><span class="cx">
</span><span class="cx"> if (!subscript.isString() || !index) {
</span><del>- ASSERT(exec->locationAsBytecodeOffset());
</del><ins>+ ASSERT(exec->bytecodeOffset());
</ins><span class="cx"> ASSERT(!byValInfo->stubRoutine);
</span><span class="cx"> if (byValInfo->seen) {
</span><span class="cx"> if (byValInfo->cachedId == propertyName) {
</span><span class="lines">@@ -1548,7 +1548,7 @@
</span><span class="cx"> if (JSCell::canUseFastGetOwnProperty(structure)) {
</span><span class="cx"> if (RefPtr<AtomicStringImpl> existingAtomicString = asString(subscript)->toExistingAtomicString(exec)) {
</span><span class="cx"> if (JSValue result = baseValue.asCell()->fastGetOwnProperty(vm, structure, existingAtomicString.get())) {
</span><del>- ASSERT(exec->locationAsBytecodeOffset());
</del><ins>+ ASSERT(exec->bytecodeOffset());
</ins><span class="cx"> if (byValInfo->stubInfo && byValInfo->cachedId.impl() != existingAtomicString)
</span><span class="cx"> byValInfo->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->locationAsBytecodeOffset());
</del><ins>+ ASSERT(exec->bytecodeOffset());
</ins><span class="cx"> byValInfo->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->hadException())
</span><span class="cx"> return jsUndefined();
</span><span class="cx">
</span><del>- ASSERT(exec->locationAsBytecodeOffset());
</del><ins>+ ASSERT(exec->bytecodeOffset());
</ins><span class="cx"> if (byValInfo->stubInfo && (!isStringOrSymbol(subscript) || byValInfo->cachedId != property))
</span><span class="cx"> byValInfo->tookSlowPath = true;
</span><span class="cx">
</span><span class="lines">@@ -1604,7 +1604,7 @@
</span><span class="cx"> if (baseValue.isObject() && subscript.isInt32()) {
</span><span class="cx"> JSObject* object = asObject(baseValue);
</span><span class="cx">
</span><del>- ASSERT(exec->locationAsBytecodeOffset());
</del><ins>+ ASSERT(exec->bytecodeOffset());
</ins><span class="cx"> ASSERT(!byValInfo->stubRoutine);
</span><span class="cx">
</span><span class="cx"> if (hasOptimizableIndexing(object->structure(vm))) {
</span><span class="lines">@@ -1631,7 +1631,7 @@
</span><span class="cx"> if (baseValue.isObject() && 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->locationAsBytecodeOffset());
</del><ins>+ ASSERT(exec->bytecodeOffset());
</ins><span class="cx"> ASSERT(!byValInfo->stubRoutine);
</span><span class="cx"> if (byValInfo->seen) {
</span><span class="cx"> if (byValInfo->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->locationAsBytecodeOffset());
</del><ins>+ ASSERT(exec->bytecodeOffset());
</ins><span class="cx"> ASSERT(!byValInfo->stubRoutine);
</span><span class="cx">
</span><span class="cx"> if (hasOptimizableIndexing(object->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->locationAsBytecodeOffset());
</del><ins>+ ASSERT(exec->bytecodeOffset());
</ins><span class="cx"> ctiPatchCallByReturnAddress(exec->codeBlock(), ReturnAddressPtr(OUR_RETURN_ADDRESS), FunctionPtr(byValInfo->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->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->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->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->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->locationAsRawBits()),
</del><ins>+ stubJit.store32(MacroAssembler::TrustedImm32(stubInfo.callSiteIndex.bits()),
</ins><span class="cx"> CCallHelpers::tagFor(static_cast<VirtualRegister>(JSStack::ArgumentCount)));
</span><span class="cx">
</span><span class="cx"> if (kind == CallGetter || kind == CallSetter) {
</span></span></pre>
</div>
</div>
</body>
</html>