<!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>[161364] trunk/Source</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/161364">161364</a></dd>
<dt>Author</dt> <dd>fpizlo@apple.com</dd>
<dt>Date</dt> <dd>2014-01-06 12:41:32 -0800 (Mon, 06 Jan 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Get rid of ENABLE(VALUE_PROFILER). It's on all the time now.
Rubber stamped by Mark Hahnenberg.
Source/JavaScriptCore:
* bytecode/CallLinkStatus.cpp:
(JSC::CallLinkStatus::computeFor):
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::dumpValueProfiling):
(JSC::CodeBlock::dumpArrayProfiling):
(JSC::CodeBlock::dumpRareCaseProfile):
(JSC::CodeBlock::dumpBytecode):
(JSC::CodeBlock::CodeBlock):
(JSC::CodeBlock::setNumParameters):
(JSC::CodeBlock::shrinkToFit):
(JSC::CodeBlock::shouldOptimizeNow):
* bytecode/CodeBlock.h:
(JSC::CodeBlock::valueProfileForBytecodeOffset):
* bytecode/GetByIdStatus.cpp:
(JSC::GetByIdStatus::computeForChain):
(JSC::GetByIdStatus::computeFor):
* bytecode/LazyOperandValueProfile.cpp:
* bytecode/LazyOperandValueProfile.h:
* bytecode/PutByIdStatus.cpp:
(JSC::PutByIdStatus::computeFor):
* bytecode/ValueProfile.h:
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::newArrayProfile):
(JSC::BytecodeGenerator::newArrayAllocationProfile):
(JSC::BytecodeGenerator::emitProfiledOpcode):
* jit/GPRInfo.h:
* jit/JIT.cpp:
(JSC::JIT::JIT):
(JSC::JIT::privateCompileSlowCases):
(JSC::JIT::privateCompile):
* jit/JIT.h:
* jit/JITArithmetic.cpp:
(JSC::JIT::compileBinaryArithOp):
(JSC::JIT::emit_op_mul):
(JSC::JIT::emit_op_div):
* jit/JITArithmetic32_64.cpp:
(JSC::JIT::emitBinaryDoubleOp):
(JSC::JIT::emit_op_mul):
(JSC::JIT::emitSlow_op_mul):
(JSC::JIT::emit_op_div):
* jit/JITCall.cpp:
(JSC::JIT::emitPutCallResult):
* jit/JITCall32_64.cpp:
(JSC::JIT::emitPutCallResult):
* jit/JITInlines.h:
(JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
(JSC::JIT::emitValueProfilingSite):
(JSC::JIT::emitArrayProfilingSiteForBytecodeIndex):
(JSC::JIT::emitArrayProfileStoreToHoleSpecialCase):
(JSC::JIT::emitArrayProfileOutOfBoundsSpecialCase):
(JSC::arrayProfileSaw):
(JSC::JIT::chooseArrayMode):
* jit/JITOpcodes.cpp:
(JSC::JIT::emit_op_get_argument_by_val):
* jit/JITOpcodes32_64.cpp:
(JSC::JIT::emit_op_get_argument_by_val):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::emit_op_get_by_val):
(JSC::JIT::emitSlow_op_get_by_val):
(JSC::JIT::emit_op_get_by_id):
(JSC::JIT::emit_op_get_from_scope):
* jit/JITPropertyAccess32_64.cpp:
(JSC::JIT::emit_op_get_by_val):
(JSC::JIT::emitSlow_op_get_by_val):
(JSC::JIT::emit_op_get_by_id):
(JSC::JIT::emit_op_get_from_scope):
* llint/LLIntOfflineAsmConfig.h:
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::LLINT_SLOW_PATH_DECL):
* llint/LowLevelInterpreter.asm:
* llint/LowLevelInterpreter32_64.asm:
* llint/LowLevelInterpreter64.asm:
* profiler/ProfilerBytecodeSequence.cpp:
(JSC::Profiler::BytecodeSequence::BytecodeSequence):
* runtime/CommonSlowPaths.cpp:
Source/WTF:
* wtf/Platform.h:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCallLinkStatuscpp">trunk/Source/JavaScriptCore/bytecode/CallLinkStatus.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCodeBlockh">trunk/Source/JavaScriptCore/bytecode/CodeBlock.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeGetByIdStatuscpp">trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeLazyOperandValueProfilecpp">trunk/Source/JavaScriptCore/bytecode/LazyOperandValueProfile.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeLazyOperandValueProfileh">trunk/Source/JavaScriptCore/bytecode/LazyOperandValueProfile.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodePutByIdStatuscpp">trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeValueProfileh">trunk/Source/JavaScriptCore/bytecode/ValueProfile.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp">trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitGPRInfoh">trunk/Source/JavaScriptCore/jit/GPRInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITcpp">trunk/Source/JavaScriptCore/jit/JIT.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITh">trunk/Source/JavaScriptCore/jit/JIT.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITArithmeticcpp">trunk/Source/JavaScriptCore/jit/JITArithmetic.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITArithmetic32_64cpp">trunk/Source/JavaScriptCore/jit/JITArithmetic32_64.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="#trunkSourceJavaScriptCorejitJITInlinesh">trunk/Source/JavaScriptCore/jit/JITInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOpcodescpp">trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOpcodes32_64cpp">trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.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="#trunkSourceJavaScriptCorellintLLIntOfflineAsmConfigh">trunk/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntSlowPathscpp">trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreterasm">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreter32_64asm">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreter64asm">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm</a></li>
<li><a href="#trunkSourceJavaScriptCoreprofilerProfilerBytecodeSequencecpp">trunk/Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCommonSlowPathscpp">trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfPlatformh">trunk/Source/WTF/wtf/Platform.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -1,5 +1,87 @@
</span><span class="cx"> 2014-01-06 Filip Pizlo <fpizlo@apple.com>
</span><span class="cx">
</span><ins>+ Get rid of ENABLE(VALUE_PROFILER). It's on all the time now.
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * bytecode/CallLinkStatus.cpp:
+ (JSC::CallLinkStatus::computeFor):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpValueProfiling):
+ (JSC::CodeBlock::dumpArrayProfiling):
+ (JSC::CodeBlock::dumpRareCaseProfile):
+ (JSC::CodeBlock::dumpBytecode):
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::setNumParameters):
+ (JSC::CodeBlock::shrinkToFit):
+ (JSC::CodeBlock::shouldOptimizeNow):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::valueProfileForBytecodeOffset):
+ * bytecode/GetByIdStatus.cpp:
+ (JSC::GetByIdStatus::computeForChain):
+ (JSC::GetByIdStatus::computeFor):
+ * bytecode/LazyOperandValueProfile.cpp:
+ * bytecode/LazyOperandValueProfile.h:
+ * bytecode/PutByIdStatus.cpp:
+ (JSC::PutByIdStatus::computeFor):
+ * bytecode/ValueProfile.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::newArrayProfile):
+ (JSC::BytecodeGenerator::newArrayAllocationProfile):
+ (JSC::BytecodeGenerator::emitProfiledOpcode):
+ * jit/GPRInfo.h:
+ * jit/JIT.cpp:
+ (JSC::JIT::JIT):
+ (JSC::JIT::privateCompileSlowCases):
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::compileBinaryArithOp):
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emit_op_div):
+ * jit/JITArithmetic32_64.cpp:
+ (JSC::JIT::emitBinaryDoubleOp):
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emitSlow_op_mul):
+ (JSC::JIT::emit_op_div):
+ * jit/JITCall.cpp:
+ (JSC::JIT::emitPutCallResult):
+ * jit/JITCall32_64.cpp:
+ (JSC::JIT::emitPutCallResult):
+ * jit/JITInlines.h:
+ (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
+ (JSC::JIT::emitValueProfilingSite):
+ (JSC::JIT::emitArrayProfilingSiteForBytecodeIndex):
+ (JSC::JIT::emitArrayProfileStoreToHoleSpecialCase):
+ (JSC::JIT::emitArrayProfileOutOfBoundsSpecialCase):
+ (JSC::arrayProfileSaw):
+ (JSC::JIT::chooseArrayMode):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_get_argument_by_val):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_get_argument_by_val):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::emit_op_get_from_scope):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::emit_op_get_from_scope):
+ * llint/LLIntOfflineAsmConfig.h:
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * profiler/ProfilerBytecodeSequence.cpp:
+ (JSC::Profiler::BytecodeSequence::BytecodeSequence):
+ * runtime/CommonSlowPaths.cpp:
+
+2014-01-06 Filip Pizlo <fpizlo@apple.com>
+
</ins><span class="cx"> LLInt shouldn't check for ENABLE(JIT).
</span><span class="cx">
</span><span class="cx"> Rubber stamped by Mark Hahnenberg.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCallLinkStatuscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CallLinkStatus.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CallLinkStatus.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/bytecode/CallLinkStatus.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -101,7 +101,7 @@
</span><span class="cx">
</span><span class="cx"> UNUSED_PARAM(profiledBlock);
</span><span class="cx"> UNUSED_PARAM(bytecodeIndex);
</span><del>-#if ENABLE(JIT) && ENABLE(VALUE_PROFILER)
</del><ins>+#if ENABLE(JIT)
</ins><span class="cx"> if (!profiledBlock->hasBaselineJITProfiling())
</span><span class="cx"> return computeFromLLInt(profiledBlock, bytecodeIndex);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -622,16 +622,11 @@
</span><span class="cx"> ConcurrentJITLocker locker(m_lock);
</span><span class="cx">
</span><span class="cx"> ++it;
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> CString description = it->u.profile->briefDescription(locker);
</span><span class="cx"> if (!description.length())
</span><span class="cx"> return;
</span><span class="cx"> beginDumpProfiling(out, hasPrintedProfiling);
</span><span class="cx"> out.print(description);
</span><del>-#else
- UNUSED_PARAM(out);
- UNUSED_PARAM(hasPrintedProfiling);
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void CodeBlock::dumpArrayProfiling(PrintStream& out, const Instruction*& it, bool& hasPrintedProfiling)
</span><span class="lines">@@ -639,7 +634,6 @@
</span><span class="cx"> ConcurrentJITLocker locker(m_lock);
</span><span class="cx">
</span><span class="cx"> ++it;
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> if (!it->u.arrayProfile)
</span><span class="cx"> return;
</span><span class="cx"> CString description = it->u.arrayProfile->briefDescription(locker, this);
</span><span class="lines">@@ -647,13 +641,8 @@
</span><span class="cx"> return;
</span><span class="cx"> beginDumpProfiling(out, hasPrintedProfiling);
</span><span class="cx"> out.print(description);
</span><del>-#else
- UNUSED_PARAM(out);
- UNUSED_PARAM(hasPrintedProfiling);
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> void CodeBlock::dumpRareCaseProfile(PrintStream& out, const char* name, RareCaseProfile* profile, bool& hasPrintedProfiling)
</span><span class="cx"> {
</span><span class="cx"> if (!profile || !profile->m_counter)
</span><span class="lines">@@ -662,7 +651,6 @@
</span><span class="cx"> beginDumpProfiling(out, hasPrintedProfiling);
</span><span class="cx"> out.print(name, profile->m_counter);
</span><span class="cx"> }
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> void CodeBlock::dumpBytecode(PrintStream& out, ExecState* exec, const Instruction* begin, const Instruction*& it, const StubInfoMap& map)
</span><span class="cx"> {
</span><span class="lines">@@ -1422,10 +1410,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> dumpRareCaseProfile(out, "rare case: ", rareCaseProfileForBytecodeOffset(location), hasPrintedProfiling);
</span><span class="cx"> dumpRareCaseProfile(out, "special fast case: ", specialFastCaseProfileForBytecodeOffset(location), hasPrintedProfiling);
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> #if ENABLE(DFG_JIT)
</span><span class="cx"> Vector<DFG::FrequentExitSite> exitSites = exitProfile().exitSitesFor(location);
</span><span class="lines">@@ -1799,12 +1785,10 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> case op_get_from_scope: {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> ValueProfile* profile = &m_valueProfiles[pc[i + opLength - 1].u.operand];
</span><span class="cx"> ASSERT(profile->m_bytecodeOffset == -1);
</span><span class="cx"> profile->m_bytecodeOffset = i;
</span><span class="cx"> instructions[i + opLength - 1] = profile;
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> // get_from_scope dst, scope, id, ResolveModeAndType, Structure, Operand
</span><span class="cx"> const Identifier& ident = identifier(pc[i + 3].u.operand);
</span><span class="lines">@@ -1924,9 +1908,7 @@
</span><span class="cx"> {
</span><span class="cx"> m_numParameters = newValue;
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> m_argumentValueProfiles.resizeToFit(newValue);
</span><del>-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void EvalCodeCache::visitAggregate(SlotVisitor& visitor)
</span><span class="lines">@@ -2596,10 +2578,8 @@
</span><span class="cx"> #if ENABLE(JIT)
</span><span class="cx"> m_callLinkInfos.shrinkToFit();
</span><span class="cx"> #endif
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> m_rareCaseProfiles.shrinkToFit();
</span><span class="cx"> m_specialFastCaseProfiles.shrinkToFit();
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> if (shrinkMode == EarlyShrink) {
</span><span class="cx"> m_additionalIdentifiers.shrinkToFit();
</span><span class="lines">@@ -3181,7 +3161,6 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> ArrayProfile* CodeBlock::getArrayProfile(unsigned bytecodeOffset)
</span><span class="cx"> {
</span><span class="cx"> for (unsigned i = 0; i < m_arrayProfiles.size(); ++i) {
</span><span class="lines">@@ -3254,10 +3233,6 @@
</span><span class="cx"> if (Options::verboseOSR())
</span><span class="cx"> dataLog("Considering optimizing ", *this, "...\n");
</span><span class="cx">
</span><del>-#if ENABLE(VERBOSE_VALUE_PROFILE)
- dumpValueProfiles();
-#endif
-
</del><span class="cx"> if (m_optimizationDelayCounter >= Options::maximumOptimizationDelay())
</span><span class="cx"> return true;
</span><span class="cx">
</span><span class="lines">@@ -3286,7 +3261,6 @@
</span><span class="cx"> optimizeAfterWarmUp();
</span><span class="cx"> return false;
</span><span class="cx"> }
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> #if ENABLE(DFG_JIT)
</span><span class="cx"> void CodeBlock::tallyFrequentExitSites()
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCodeBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CodeBlock.h (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CodeBlock.h        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/bytecode/CodeBlock.h        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -277,12 +277,12 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if ENABLE(JIT)
</del><span class="cx"> bool hasBaselineJITProfiling() const
</span><span class="cx"> {
</span><span class="cx"> return jitType() == JITCode::BaselineJIT;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if ENABLE(JIT)
</ins><span class="cx"> virtual CodeBlock* replacement() = 0;
</span><span class="cx">
</span><span class="cx"> virtual DFG::CapabilityLevel capabilityLevelInternal() = 0;
</span><span class="lines">@@ -410,7 +410,6 @@
</span><span class="cx"> CallLinkInfo& callLinkInfo(int index) { return m_callLinkInfos[index]; }
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> unsigned numberOfArgumentValueProfiles()
</span><span class="cx"> {
</span><span class="cx"> ASSERT(m_numParameters >= 0);
</span><span class="lines">@@ -429,13 +428,12 @@
</span><span class="cx"> ValueProfile* valueProfileForBytecodeOffset(int bytecodeOffset)
</span><span class="cx"> {
</span><span class="cx"> ValueProfile* result = binarySearch<ValueProfile, int>(
</span><del>- m_valueProfiles, m_valueProfiles.size(), bytecodeOffset,
- getValueProfileBytecodeOffset<ValueProfile>);
</del><ins>+ m_valueProfiles, m_valueProfiles.size(), bytecodeOffset,
+ getValueProfileBytecodeOffset<ValueProfile>);
</ins><span class="cx"> ASSERT(result->m_bytecodeOffset != -1);
</span><span class="cx"> ASSERT(instructions()[bytecodeOffset + opcodeLength(
</span><del>- m_vm->interpreter->getOpcodeID(
- instructions()[
- bytecodeOffset].u.opcode)) - 1].u.profile == result);
</del><ins>+ m_vm->interpreter->getOpcodeID(
+ instructions()[bytecodeOffset].u.opcode)) - 1].u.profile == result);
</ins><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx"> SpeculatedType valueProfilePredictionForBytecodeOffset(const ConcurrentJITLocker& locker, int bytecodeOffset)
</span><span class="lines">@@ -543,7 +541,6 @@
</span><span class="cx"> }
</span><span class="cx"> ArrayProfile* getArrayProfile(unsigned bytecodeOffset);
</span><span class="cx"> ArrayProfile* getOrAddArrayProfile(unsigned bytecodeOffset);
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> // Exception handling support
</span><span class="cx">
</span><span class="lines">@@ -884,22 +881,11 @@
</span><span class="cx"> unsigned numberOfDFGCompiles() { return 0; }
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> bool shouldOptimizeNow();
</span><span class="cx"> void updateAllValueProfilePredictions();
</span><span class="cx"> void updateAllArrayPredictions();
</span><span class="cx"> void updateAllPredictions();
</span><del>-#else
- bool updateAllPredictionsAndCheckIfShouldOptimizeNow() { return false; }
- void updateAllValueProfilePredictions() { }
- void updateAllArrayPredictions() { }
- void updateAllPredictions() { }
-#endif
</del><span class="cx">
</span><del>-#if ENABLE(VERBOSE_VALUE_PROFILE)
- void dumpValueProfiles();
-#endif
-
</del><span class="cx"> unsigned frameRegisterCount();
</span><span class="cx">
</span><span class="cx"> // FIXME: Make these remaining members private.
</span><span class="lines">@@ -959,9 +945,7 @@
</span><span class="cx"> ClosureCallStubRoutine* findClosureCallForReturnPC(ReturnAddressPtr);
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> void updateAllPredictionsAndCountLiveness(unsigned& numberOfLiveNonArgumentValueProfiles, unsigned& numberOfSamplesInProfiles);
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> void setConstantRegisters(const Vector<WriteBarrier<Unknown>>& constants)
</span><span class="cx"> {
</span><span class="lines">@@ -996,9 +980,7 @@
</span><span class="cx"> void beginDumpProfiling(PrintStream&, bool& hasPrintedProfiling);
</span><span class="cx"> void dumpValueProfiling(PrintStream&, const Instruction*&, bool& hasPrintedProfiling);
</span><span class="cx"> void dumpArrayProfiling(PrintStream&, const Instruction*&, bool& hasPrintedProfiling);
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> void dumpRareCaseProfile(PrintStream&, const char* name, RareCaseProfile*, bool& hasPrintedProfiling);
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> #if ENABLE(DFG_JIT)
</span><span class="cx"> bool shouldImmediatelyAssumeLivenessDuringScan()
</span><span class="lines">@@ -1080,14 +1062,12 @@
</span><span class="cx"> DFG::ExitProfile m_exitProfile;
</span><span class="cx"> CompressedLazyOperandValueProfileHolder m_lazyOperandValueProfiles;
</span><span class="cx"> #endif
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> Vector<ValueProfile> m_argumentValueProfiles;
</span><span class="cx"> Vector<ValueProfile> m_valueProfiles;
</span><span class="cx"> SegmentedVector<RareCaseProfile, 8> m_rareCaseProfiles;
</span><span class="cx"> SegmentedVector<RareCaseProfile, 8> m_specialFastCaseProfiles;
</span><span class="cx"> Vector<ArrayAllocationProfile> m_arrayAllocationProfiles;
</span><span class="cx"> ArrayProfileVector m_arrayProfiles;
</span><del>-#endif
</del><span class="cx"> Vector<ObjectAllocationProfile> m_objectAllocationProfiles;
</span><span class="cx">
</span><span class="cx"> // Constant Pool
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeGetByIdStatuscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">
</span><span class="cx"> void GetByIdStatus::computeForChain(GetByIdStatus& result, CodeBlock* profiledBlock, StringImpl* uid)
</span><span class="cx"> {
</span><del>-#if ENABLE(JIT) && ENABLE(VALUE_PROFILER)
</del><ins>+#if ENABLE(JIT)
</ins><span class="cx"> // Validate the chain. If the chain is invalid, then currently the best thing
</span><span class="cx"> // we can do is to assume that TakesSlow is true. In the future, it might be
</span><span class="cx"> // worth exploring reifying the structure chain from the structure we've got
</span><span class="lines">@@ -123,7 +123,7 @@
</span><span class="cx"> UNUSED_PARAM(profiledBlock);
</span><span class="cx"> UNUSED_PARAM(bytecodeIndex);
</span><span class="cx"> UNUSED_PARAM(uid);
</span><del>-#if ENABLE(JIT) && ENABLE(VALUE_PROFILER)
</del><ins>+#if ENABLE(JIT)
</ins><span class="cx"> StructureStubInfo* stubInfo = map.get(CodeOrigin(bytecodeIndex));
</span><span class="cx"> if (!stubInfo || !stubInfo->seen)
</span><span class="cx"> return computeFromLLInt(profiledBlock, bytecodeIndex, uid);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeLazyOperandValueProfilecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/LazyOperandValueProfile.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/LazyOperandValueProfile.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/bytecode/LazyOperandValueProfile.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -26,8 +26,6 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "LazyOperandValueProfile.h"
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
-
</del><span class="cx"> #include "Operations.h"
</span><span class="cx">
</span><span class="cx"> namespace JSC {
</span><span class="lines">@@ -100,5 +98,3 @@
</span><span class="cx">
</span><span class="cx"> } // namespace JSC
</span><span class="cx">
</span><del>-#endif // ENABLE(VALUE_PROFILER)
-
</del></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeLazyOperandValueProfileh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/LazyOperandValueProfile.h (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/LazyOperandValueProfile.h        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/bytecode/LazyOperandValueProfile.h        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -26,10 +26,6 @@
</span><span class="cx"> #ifndef LazyOperandValueProfile_h
</span><span class="cx"> #define LazyOperandValueProfile_h
</span><span class="cx">
</span><del>-#include <wtf/Platform.h>
-
-#if ENABLE(VALUE_PROFILER)
-
</del><span class="cx"> #include "ConcurrentJITLock.h"
</span><span class="cx"> #include "ValueProfile.h"
</span><span class="cx"> #include "VirtualRegister.h"
</span><span class="lines">@@ -188,8 +184,6 @@
</span><span class="cx">
</span><span class="cx"> } // namespace JSC
</span><span class="cx">
</span><del>-#endif // ENABLE(VALUE_PROFILER)
-
</del><span class="cx"> #endif // LazyOperandValueProfile_h
</span><span class="cx">
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodePutByIdStatuscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -88,7 +88,7 @@
</span><span class="cx"> UNUSED_PARAM(profiledBlock);
</span><span class="cx"> UNUSED_PARAM(bytecodeIndex);
</span><span class="cx"> UNUSED_PARAM(uid);
</span><del>-#if ENABLE(JIT) && ENABLE(VALUE_PROFILER)
</del><ins>+#if ENABLE(JIT)
</ins><span class="cx"> if (profiledBlock->likelyToTakeSlowCase(bytecodeIndex))
</span><span class="cx"> return PutByIdStatus(TakesSlowPath, 0, 0, 0, invalidOffset);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeValueProfileh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/ValueProfile.h (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/ValueProfile.h        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/bytecode/ValueProfile.h        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -29,10 +29,6 @@
</span><span class="cx"> #ifndef ValueProfile_h
</span><span class="cx"> #define ValueProfile_h
</span><span class="cx">
</span><del>-#include <wtf/Platform.h>
-
-#if ENABLE(VALUE_PROFILER)
-
</del><span class="cx"> #include "ConcurrentJITLock.h"
</span><span class="cx"> #include "Heap.h"
</span><span class="cx"> #include "JSArray.h"
</span><span class="lines">@@ -212,7 +208,5 @@
</span><span class="cx">
</span><span class="cx"> } // namespace JSC
</span><span class="cx">
</span><del>-#endif // ENABLE(VALUE_PROFILER)
-
</del><span class="cx"> #endif // ValueProfile_h
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecompilerBytecodeGeneratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -636,20 +636,12 @@
</span><span class="cx">
</span><span class="cx"> UnlinkedArrayProfile BytecodeGenerator::newArrayProfile()
</span><span class="cx"> {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> return m_codeBlock->addArrayProfile();
</span><del>-#else
- return 0;
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> UnlinkedArrayAllocationProfile BytecodeGenerator::newArrayAllocationProfile()
</span><span class="cx"> {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> return m_codeBlock->addArrayAllocationProfile();
</span><del>-#else
- return 0;
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> UnlinkedObjectAllocationProfile BytecodeGenerator::newObjectAllocationProfile()
</span><span class="lines">@@ -659,11 +651,7 @@
</span><span class="cx">
</span><span class="cx"> UnlinkedValueProfile BytecodeGenerator::emitProfiledOpcode(OpcodeID opcodeID)
</span><span class="cx"> {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> UnlinkedValueProfile result = m_codeBlock->addValueProfile();
</span><del>-#else
- UnlinkedValueProfile result = 0;
-#endif
</del><span class="cx"> emitOpcode(opcodeID);
</span><span class="cx"> return result;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitGPRInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/GPRInfo.h (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/GPRInfo.h        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/GPRInfo.h        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -574,10 +574,6 @@
</span><span class="cx"> static const GPRReg returnValueGPR2 = ARM64Registers::x1; // regT1
</span><span class="cx"> static const GPRReg nonPreservedNonReturnGPR = ARM64Registers::x2;
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
- static const GPRReg bucketCounterRegister = ARM64Registers::x7;
-#endif
-
</del><span class="cx"> // GPRReg mapping is direct, the machine regsiter numbers can
</span><span class="cx"> // be used directly as indices into the GPR RegisterBank.
</span><span class="cx"> COMPILE_ASSERT(ARM64Registers::q0 == 0, q0_is_0);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JIT.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JIT.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/JIT.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -81,10 +81,8 @@
</span><span class="cx"> , m_byValInstructionIndex(UINT_MAX)
</span><span class="cx"> , m_callLinkInfoIndex(UINT_MAX)
</span><span class="cx"> , m_randomGenerator(cryptographicallyRandomNumber())
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> , m_canBeOptimized(false)
</span><span class="cx"> , m_shouldEmitProfiling(false)
</span><del>-#endif
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -329,7 +327,6 @@
</span><span class="cx"> m_byValInstructionIndex = 0;
</span><span class="cx"> m_callLinkInfoIndex = 0;
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> // Use this to assert that slow-path code associates new profiling sites with existing
</span><span class="cx"> // ValueProfiles rather than creating new ones. This ensures that for a given instruction
</span><span class="cx"> // (say, get_by_id) we get combined statistics for both the fast-path executions of that
</span><span class="lines">@@ -337,7 +334,6 @@
</span><span class="cx"> // new ValueProfiles then the ValueProfiles would no longer be sorted by bytecode offset,
</span><span class="cx"> // which would break the invariant necessary to use CodeBlock::valueProfileForBytecodeOffset().
</span><span class="cx"> unsigned numberOfValueProfiles = m_codeBlock->numberOfValueProfiles();
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> for (Vector<SlowCaseEntry>::iterator iter = m_slowCases.begin(); iter != m_slowCases.end();) {
</span><span class="cx"> m_bytecodeOffset = iter->to;
</span><span class="lines">@@ -346,11 +342,9 @@
</span><span class="cx">
</span><span class="cx"> Instruction* currentInstruction = instructionsBegin + m_bytecodeOffset;
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> RareCaseProfile* rareCaseProfile = 0;
</span><span class="cx"> if (shouldEmitProfiling())
</span><span class="cx"> rareCaseProfile = m_codeBlock->addRareCaseProfile(m_bytecodeOffset);
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> #if ENABLE(JIT_VERBOSE)
</span><span class="cx"> dataLogF("Old JIT emitting slow code for bc#%u at offset 0x%lx.\n", m_bytecodeOffset, (long)debugOffset());
</span><span class="lines">@@ -431,10 +425,8 @@
</span><span class="cx"> RELEASE_ASSERT_WITH_MESSAGE(iter == m_slowCases.end() || firstTo != iter->to, "Not enough jumps linked in slow case codegen.");
</span><span class="cx"> RELEASE_ASSERT_WITH_MESSAGE(firstTo == (iter - 1)->to, "Too many jumps linked in slow case codegen.");
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> if (shouldEmitProfiling())
</span><span class="cx"> add32(TrustedImm32(1), AbsoluteAddress(&rareCaseProfile->m_counter));
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> emitJumpSlowToHot(jump(), 0);
</span><span class="cx"> }
</span><span class="lines">@@ -442,9 +434,7 @@
</span><span class="cx"> RELEASE_ASSERT(m_getByIdIndex == m_getByIds.size());
</span><span class="cx"> RELEASE_ASSERT(m_putByIdIndex == m_putByIds.size());
</span><span class="cx"> RELEASE_ASSERT(m_callLinkInfoIndex == m_callStructureStubCompilationInfo.size());
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> RELEASE_ASSERT(numberOfValueProfiles == m_codeBlock->numberOfValueProfiles());
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> // Reset this, in order to guard its use with ASSERTs.
</span><span class="lines">@@ -454,7 +444,6 @@
</span><span class="cx">
</span><span class="cx"> CompilationResult JIT::privateCompile(JITCompilationEffort effort)
</span><span class="cx"> {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> DFG::CapabilityLevel level = m_codeBlock->capabilityLevel();
</span><span class="cx"> switch (level) {
</span><span class="cx"> case DFG::CannotCompile:
</span><span class="lines">@@ -489,7 +478,6 @@
</span><span class="cx"> m_codeBlock->m_shouldAlwaysBeInlined &= canInline(level) && DFG::mightInlineFunction(m_codeBlock);
</span><span class="cx"> break;
</span><span class="cx"> }
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> if (Options::showDisassembly() || m_vm->m_perBytecodeProfiler)
</span><span class="cx"> m_disassembler = adoptPtr(new JITDisassembler(m_codeBlock));
</span><span class="lines">@@ -521,7 +509,6 @@
</span><span class="cx">
</span><span class="cx"> Jump stackCheck;
</span><span class="cx"> if (m_codeBlock->codeType() == FunctionCode) {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> ASSERT(m_bytecodeOffset == (unsigned)-1);
</span><span class="cx"> if (shouldEmitProfiling()) {
</span><span class="cx"> for (int argument = 0; argument < m_codeBlock->numParameters(); ++argument) {
</span><span class="lines">@@ -536,10 +523,9 @@
</span><span class="cx"> load32(Address(callFrameRegister, offset + OBJECT_OFFSETOF(JSValue, u.asBits.payload)), regT0);
</span><span class="cx"> load32(Address(callFrameRegister, offset + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), regT1);
</span><span class="cx"> #endif
</span><del>- emitValueProfilingSite(m_codeBlock->valueProfileForArgument(argument), regT4);
</del><ins>+ emitValueProfilingSite(m_codeBlock->valueProfileForArgument(argument));
</ins><span class="cx"> }
</span><span class="cx"> }
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> addPtr(TrustedImm32(virtualRegisterForLocal(frameRegisterCountFor(m_codeBlock)).offset() * sizeof(Register)), callFrameRegister, regT1);
</span><span class="cx"> stackCheck = branchPtr(Above, AbsoluteAddress(m_vm->addressOfJSStackLimit()), regT1);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JIT.h (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JIT.h        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/JIT.h        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -331,16 +331,11 @@
</span><span class="cx"> template<typename StructureType> // StructureType can be RegisterID or ImmPtr.
</span><span class="cx"> void emitAllocateJSObject(RegisterID allocator, StructureType, RegisterID result, RegisterID scratch);
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> // This assumes that the value to profile is in regT0 and that regT3 is available for
</span><span class="cx"> // scratch.
</span><del>- void emitValueProfilingSite(ValueProfile*, RegisterID);
- void emitValueProfilingSite(unsigned bytecodeOffset, RegisterID);
- void emitValueProfilingSite(RegisterID);
-#else
- void emitValueProfilingSite(unsigned, RegisterID) { }
- void emitValueProfilingSite(RegisterID) { }
-#endif
</del><ins>+ void emitValueProfilingSite(ValueProfile*);
+ void emitValueProfilingSite(unsigned bytecodeOffset);
+ void emitValueProfilingSite();
</ins><span class="cx"> void emitArrayProfilingSite(RegisterID structureAndIndexingType, RegisterID scratch, ArrayProfile*);
</span><span class="cx"> void emitArrayProfilingSiteForBytecodeIndex(RegisterID structureAndIndexingType, RegisterID scratch, unsigned bytecodeIndex);
</span><span class="cx"> void emitArrayProfileStoreToHoleSpecialCase(ArrayProfile*);
</span><span class="lines">@@ -827,11 +822,9 @@
</span><span class="cx"> WeakRandom m_randomGenerator;
</span><span class="cx"> static CodeRef stringGetByValStubGenerator(VM*);
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> bool m_canBeOptimized;
</span><span class="cx"> bool m_canBeOptimizedOrInlined;
</span><span class="cx"> bool m_shouldEmitProfiling;
</span><del>-#endif
</del><span class="cx"> } JIT_CLASS_ALIGNMENT;
</span><span class="cx">
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITArithmeticcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITArithmetic.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITArithmetic.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/JITArithmetic.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -668,16 +668,13 @@
</span><span class="cx"> emitGetVirtualRegisters(op1, regT0, op2, regT1);
</span><span class="cx"> emitJumpSlowCaseIfNotImmediateInteger(regT0);
</span><span class="cx"> emitJumpSlowCaseIfNotImmediateInteger(regT1);
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> RareCaseProfile* profile = m_codeBlock->addSpecialFastCaseProfile(m_bytecodeOffset);
</span><del>-#endif
</del><span class="cx"> if (opcodeID == op_add)
</span><span class="cx"> addSlowCase(branchAdd32(Overflow, regT1, regT0));
</span><span class="cx"> else if (opcodeID == op_sub)
</span><span class="cx"> addSlowCase(branchSub32(Overflow, regT1, regT0));
</span><span class="cx"> else {
</span><span class="cx"> ASSERT(opcodeID == op_mul);
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> if (shouldEmitProfiling()) {
</span><span class="cx"> // We want to be able to measure if this is taking the slow case just
</span><span class="cx"> // because of negative zero. If this produces positive zero, then we
</span><span class="lines">@@ -701,10 +698,6 @@
</span><span class="cx"> addSlowCase(branchMul32(Overflow, regT1, regT0));
</span><span class="cx"> addSlowCase(branchTest32(Zero, regT0));
</span><span class="cx"> }
</span><del>-#else
- addSlowCase(branchMul32(Overflow, regT1, regT0));
- addSlowCase(branchTest32(Zero, regT0));
-#endif
</del><span class="cx"> }
</span><span class="cx"> emitFastArithIntToImmNoCheck(regT0, regT0);
</span><span class="cx"> }
</span><span class="lines">@@ -849,19 +842,15 @@
</span><span class="cx"> // For now, only plant a fast int case if the constant operand is greater than zero.
</span><span class="cx"> int32_t value;
</span><span class="cx"> if (isOperandConstantImmediateInt(op1) && ((value = getConstantOperandImmediateInt(op1)) > 0)) {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> // Add a special fast case profile because the DFG JIT will expect one.
</span><span class="cx"> m_codeBlock->addSpecialFastCaseProfile(m_bytecodeOffset);
</span><del>-#endif
</del><span class="cx"> emitGetVirtualRegister(op2, regT0);
</span><span class="cx"> emitJumpSlowCaseIfNotImmediateInteger(regT0);
</span><span class="cx"> addSlowCase(branchMul32(Overflow, Imm32(value), regT0, regT1));
</span><span class="cx"> emitFastArithReTagImmediate(regT1, regT0);
</span><span class="cx"> } else if (isOperandConstantImmediateInt(op2) && ((value = getConstantOperandImmediateInt(op2)) > 0)) {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> // Add a special fast case profile because the DFG JIT will expect one.
</span><span class="cx"> m_codeBlock->addSpecialFastCaseProfile(m_bytecodeOffset);
</span><del>-#endif
</del><span class="cx"> emitGetVirtualRegister(op1, regT0);
</span><span class="cx"> emitJumpSlowCaseIfNotImmediateInteger(regT0);
</span><span class="cx"> addSlowCase(branchMul32(Overflow, Imm32(value), regT0, regT1));
</span><span class="lines">@@ -930,7 +919,6 @@
</span><span class="cx"> }
</span><span class="cx"> divDouble(fpRegT1, fpRegT0);
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> // Is the result actually an integer? The DFG JIT would really like to know. If it's
</span><span class="cx"> // not an integer, we increment a count. If this together with the slow case counter
</span><span class="cx"> // are below threshold then the DFG JIT will compile this division with a specualtion
</span><span class="lines">@@ -957,11 +945,6 @@
</span><span class="cx"> move(tagTypeNumberRegister, regT0);
</span><span class="cx"> trueDouble.link(this);
</span><span class="cx"> isInteger.link(this);
</span><del>-#else
- // Double result.
- moveDoubleTo64(fpRegT0, regT0);
- sub64(tagTypeNumberRegister, regT0);
-#endif
</del><span class="cx">
</span><span class="cx"> emitPutVirtualRegister(dst, regT0);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITArithmetic32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITArithmetic32_64.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITArithmetic32_64.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/JITArithmetic32_64.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -742,7 +742,6 @@
</span><span class="cx"> emitLoadDouble(op1, fpRegT1);
</span><span class="cx"> divDouble(fpRegT0, fpRegT1);
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> // Is the result actually an integer? The DFG JIT would really like to know. If it's
</span><span class="cx"> // not an integer, we increment a count. If this together with the slow case counter
</span><span class="cx"> // are below threshold then the DFG JIT will compile this division with a specualtion
</span><span class="lines">@@ -766,9 +765,6 @@
</span><span class="cx"> add32(TrustedImm32(1), AbsoluteAddress(&m_codeBlock->specialFastCaseProfileForBytecodeOffset(m_bytecodeOffset)->m_counter));
</span><span class="cx"> emitStoreDouble(dst, fpRegT1);
</span><span class="cx"> isInteger.link(this);
</span><del>-#else
- emitStoreDouble(dst, fpRegT1);
-#endif
</del><span class="cx"> break;
</span><span class="cx"> }
</span><span class="cx"> case op_jless:
</span><span class="lines">@@ -846,7 +842,6 @@
</span><span class="cx"> case op_div: {
</span><span class="cx"> emitLoadDouble(op2, fpRegT2);
</span><span class="cx"> divDouble(fpRegT2, fpRegT0);
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> // Is the result actually an integer? The DFG JIT would really like to know. If it's
</span><span class="cx"> // not an integer, we increment a count. If this together with the slow case counter
</span><span class="cx"> // are below threshold then the DFG JIT will compile this division with a specualtion
</span><span class="lines">@@ -870,9 +865,6 @@
</span><span class="cx"> add32(TrustedImm32(1), AbsoluteAddress(&m_codeBlock->specialFastCaseProfileForBytecodeOffset(m_bytecodeOffset)->m_counter));
</span><span class="cx"> emitStoreDouble(dst, fpRegT0);
</span><span class="cx"> isInteger.link(this);
</span><del>-#else
- emitStoreDouble(dst, fpRegT0);
-#endif
</del><span class="cx"> break;
</span><span class="cx"> }
</span><span class="cx"> case op_jless:
</span><span class="lines">@@ -924,9 +916,7 @@
</span><span class="cx"> int op2 = currentInstruction[3].u.operand;
</span><span class="cx"> OperandTypes types = OperandTypes::fromInt(currentInstruction[4].u.operand);
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> m_codeBlock->addSpecialFastCaseProfile(m_bytecodeOffset);
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> JumpList notInt32Op1;
</span><span class="cx"> JumpList notInt32Op2;
</span><span class="lines">@@ -969,12 +959,10 @@
</span><span class="cx"> emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_mul));
</span><span class="cx">
</span><span class="cx"> negZero.link(this);
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> // We only get here if we have a genuine negative zero. Record this,
</span><span class="cx"> // so that the speculative JIT knows that we failed speculation
</span><span class="cx"> // because of a negative zero.
</span><span class="cx"> add32(TrustedImm32(1), AbsoluteAddress(&m_codeBlock->specialFastCaseProfileForBytecodeOffset(m_bytecodeOffset)->m_counter));
</span><del>-#endif
</del><span class="cx"> overflow.link(this);
</span><span class="cx">
</span><span class="cx"> if (!supportsFloatingPoint()) {
</span><span class="lines">@@ -1005,9 +993,7 @@
</span><span class="cx"> int op2 = currentInstruction[3].u.operand;
</span><span class="cx"> OperandTypes types = OperandTypes::fromInt(currentInstruction[4].u.operand);
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> m_codeBlock->addSpecialFastCaseProfile(m_bytecodeOffset);
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> if (!supportsFloatingPoint()) {
</span><span class="cx"> addSlowCase(jump());
</span><span class="lines">@@ -1028,7 +1014,6 @@
</span><span class="cx"> convertInt32ToDouble(regT0, fpRegT0);
</span><span class="cx"> convertInt32ToDouble(regT2, fpRegT1);
</span><span class="cx"> divDouble(fpRegT1, fpRegT0);
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> // Is the result actually an integer? The DFG JIT would really like to know. If it's
</span><span class="cx"> // not an integer, we increment a count. If this together with the slow case counter
</span><span class="cx"> // are below threshold then the DFG JIT will compile this division with a specualtion
</span><span class="lines">@@ -1051,9 +1036,6 @@
</span><span class="cx"> notInteger.link(this);
</span><span class="cx"> add32(TrustedImm32(1), AbsoluteAddress(&m_codeBlock->specialFastCaseProfileForBytecodeOffset(m_bytecodeOffset)->m_counter));
</span><span class="cx"> emitStoreDouble(dst, fpRegT0);
</span><del>-#else
- emitStoreDouble(dst, fpRegT0);
-#endif
</del><span class="cx"> end.append(jump());
</span><span class="cx">
</span><span class="cx"> // Double divide.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITCallcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITCall.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITCall.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/JITCall.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> void JIT::emitPutCallResult(Instruction* instruction)
</span><span class="cx"> {
</span><span class="cx"> int dst = instruction[1].u.operand;
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> emitPutVirtualRegister(dst);
</span><span class="cx"> }
</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 (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITCall32_64.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/JITCall32_64.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> void JIT::emitPutCallResult(Instruction* instruction)
</span><span class="cx"> {
</span><span class="cx"> int dst = instruction[1].u.operand;
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> emitStore(dst, regT1, regT0);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITInlines.h (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITInlines.h        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/JITInlines.h        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -142,7 +142,7 @@
</span><span class="cx"> ALWAYS_INLINE MacroAssembler::Call JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile(const FunctionPtr& function, int dst)
</span><span class="cx"> {
</span><span class="cx"> MacroAssembler::Call call = appendCallWithExceptionCheck(function);
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> #if USE(JSVALUE64)
</span><span class="cx"> emitPutVirtualRegister(dst, returnValueGPR);
</span><span class="cx"> #else
</span><span class="lines">@@ -680,8 +680,7 @@
</span><span class="cx"> storePtr(TrustedImmPtr(0), Address(result, JSObject::butterflyOffset()));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
-inline void JIT::emitValueProfilingSite(ValueProfile* valueProfile, RegisterID bucketCounterRegister)
</del><ins>+inline void JIT::emitValueProfilingSite(ValueProfile* valueProfile)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(shouldEmitProfiling());
</span><span class="cx"> ASSERT(valueProfile);
</span><span class="lines">@@ -690,47 +689,29 @@
</span><span class="cx"> #if USE(JSVALUE32_64)
</span><span class="cx"> const RegisterID valueTag = regT1;
</span><span class="cx"> #endif
</span><del>- const RegisterID scratch = regT3;
</del><span class="cx">
</span><del>- if (ValueProfile::numberOfBuckets == 1) {
- // We're in a simple configuration: only one bucket, so we can just do a direct
- // store.
</del><ins>+ // We're in a simple configuration: only one bucket, so we can just do a direct
+ // store.
</ins><span class="cx"> #if USE(JSVALUE64)
</span><del>- store64(value, valueProfile->m_buckets);
</del><ins>+ store64(value, valueProfile->m_buckets);
</ins><span class="cx"> #else
</span><del>- EncodedValueDescriptor* descriptor = bitwise_cast<EncodedValueDescriptor*>(valueProfile->m_buckets);
- store32(value, &descriptor->asBits.payload);
- store32(valueTag, &descriptor->asBits.tag);
</del><ins>+ EncodedValueDescriptor* descriptor = bitwise_cast<EncodedValueDescriptor*>(valueProfile->m_buckets);
+ store32(value, &descriptor->asBits.payload);
+ store32(valueTag, &descriptor->asBits.tag);
</ins><span class="cx"> #endif
</span><del>- return;
- }
-
- if (m_randomGenerator.getUint32() & 1)
- add32(TrustedImm32(1), bucketCounterRegister);
- else
- add32(TrustedImm32(3), bucketCounterRegister);
- and32(TrustedImm32(ValueProfile::bucketIndexMask), bucketCounterRegister);
- move(TrustedImmPtr(valueProfile->m_buckets), scratch);
-#if USE(JSVALUE64)
- store64(value, BaseIndex(scratch, bucketCounterRegister, TimesEight));
-#elif USE(JSVALUE32_64)
- store32(value, BaseIndex(scratch, bucketCounterRegister, TimesEight, OBJECT_OFFSETOF(JSValue, u.asBits.payload)));
- store32(valueTag, BaseIndex(scratch, bucketCounterRegister, TimesEight, OBJECT_OFFSETOF(JSValue, u.asBits.tag)));
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><del>-inline void JIT::emitValueProfilingSite(unsigned bytecodeOffset, RegisterID bucketCounterRegister)
</del><ins>+inline void JIT::emitValueProfilingSite(unsigned bytecodeOffset)
</ins><span class="cx"> {
</span><span class="cx"> if (!shouldEmitProfiling())
</span><span class="cx"> return;
</span><del>- emitValueProfilingSite(m_codeBlock->valueProfileForBytecodeOffset(bytecodeOffset), bucketCounterRegister);
</del><ins>+ emitValueProfilingSite(m_codeBlock->valueProfileForBytecodeOffset(bytecodeOffset));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-inline void JIT::emitValueProfilingSite(RegisterID bucketCounterRegister)
</del><ins>+inline void JIT::emitValueProfilingSite()
</ins><span class="cx"> {
</span><del>- emitValueProfilingSite(m_bytecodeOffset, bucketCounterRegister);
</del><ins>+ emitValueProfilingSite(m_bytecodeOffset);
</ins><span class="cx"> }
</span><del>-#endif // ENABLE(VALUE_PROFILER)
</del><span class="cx">
</span><span class="cx"> inline void JIT::emitArrayProfilingSite(RegisterID structureAndIndexingType, RegisterID scratch, ArrayProfile* arrayProfile)
</span><span class="cx"> {
</span><span class="lines">@@ -747,46 +728,26 @@
</span><span class="cx">
</span><span class="cx"> inline void JIT::emitArrayProfilingSiteForBytecodeIndex(RegisterID structureAndIndexingType, RegisterID scratch, unsigned bytecodeIndex)
</span><span class="cx"> {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> emitArrayProfilingSite(structureAndIndexingType, scratch, m_codeBlock->getOrAddArrayProfile(bytecodeIndex));
</span><del>-#else
- UNUSED_PARAM(bytecodeIndex);
- emitArrayProfilingSite(structureAndIndexingType, scratch, 0);
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> inline void JIT::emitArrayProfileStoreToHoleSpecialCase(ArrayProfile* arrayProfile)
</span><span class="cx"> {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> store8(TrustedImm32(1), arrayProfile->addressOfMayStoreToHole());
</span><del>-#else
- UNUSED_PARAM(arrayProfile);
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> inline void JIT::emitArrayProfileOutOfBoundsSpecialCase(ArrayProfile* arrayProfile)
</span><span class="cx"> {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> store8(TrustedImm32(1), arrayProfile->addressOfOutOfBounds());
</span><del>-#else
- UNUSED_PARAM(arrayProfile);
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> static inline bool arrayProfileSaw(ArrayModes arrayModes, IndexingType capability)
</span><span class="cx"> {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> return arrayModesInclude(arrayModes, capability);
</span><del>-#else
- UNUSED_PARAM(arrayModes);
- UNUSED_PARAM(capability);
- return false;
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> inline JITArrayMode JIT::chooseArrayMode(ArrayProfile* profile)
</span><span class="cx"> {
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> ConcurrentJITLocker locker(m_codeBlock->m_lock);
</span><span class="cx"> profile->computeUpdatedPrediction(locker, m_codeBlock);
</span><span class="cx"> ArrayModes arrayModes = profile->observedArrayModes(locker);
</span><span class="lines">@@ -797,10 +758,6 @@
</span><span class="cx"> if (arrayProfileSaw(arrayModes, ArrayStorageShape))
</span><span class="cx"> return JITArrayStorage;
</span><span class="cx"> return JITContiguous;
</span><del>-#else
- UNUSED_PARAM(profile);
- return JITContiguous;
-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #if USE(JSVALUE32_64)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOpcodescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -1071,7 +1071,7 @@
</span><span class="cx">
</span><span class="cx"> signExtend32ToPtr(regT1, regT1);
</span><span class="cx"> load64(BaseIndex(callFrameRegister, regT1, TimesEight, CallFrame::thisArgumentOffset() * static_cast<int>(sizeof(Register))), regT0);
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> emitPutVirtualRegister(dst, regT0);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOpcodes32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -1170,7 +1170,7 @@
</span><span class="cx">
</span><span class="cx"> loadPtr(BaseIndex(callFrameRegister, regT2, TimesEight, OBJECT_OFFSETOF(JSValue, u.asBits.payload) + CallFrame::thisArgumentOffset() * static_cast<int>(sizeof(Register))), regT0);
</span><span class="cx"> loadPtr(BaseIndex(callFrameRegister, regT2, TimesEight, OBJECT_OFFSETOF(JSValue, u.asBits.tag) + CallFrame::thisArgumentOffset() * static_cast<int>(sizeof(Register))), regT1);
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> emitStore(dst, regT1, regT0);
</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 (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -143,7 +143,7 @@
</span><span class="cx"> resultOK.link(this);
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> emitPutVirtualRegister(dst);
</span><span class="cx">
</span><span class="cx"> m_byValCompilationInfo.append(ByValCompilationInfo(m_bytecodeOffset, badType, mode, done));
</span><span class="lines">@@ -232,7 +232,7 @@
</span><span class="cx"> m_byValCompilationInfo[m_byValInstructionIndex].returnAddress = call;
</span><span class="cx"> m_byValInstructionIndex++;
</span><span class="cx">
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void JIT::compileGetDirectOffset(RegisterID base, RegisterID result, RegisterID offset, RegisterID scratch, FinalObjectMode finalObjectMode)
</span><span class="lines">@@ -525,7 +525,7 @@
</span><span class="cx"> addSlowCase(gen.slowPathJump());
</span><span class="cx"> m_getByIds.append(gen);
</span><span class="cx">
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> emitPutVirtualRegister(resultVReg);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -743,7 +743,7 @@
</span><span class="cx"> break;
</span><span class="cx"> }
</span><span class="cx"> emitPutVirtualRegister(dst);
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void JIT::emitSlow_op_get_from_scope(Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITPropertyAccess32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -168,7 +168,7 @@
</span><span class="cx"> resultOK.link(this);
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> emitStore(dst, regT1, regT0);
</span><span class="cx">
</span><span class="cx"> m_byValCompilationInfo.append(ByValCompilationInfo(m_bytecodeOffset, badType, mode, done));
</span><span class="lines">@@ -263,7 +263,7 @@
</span><span class="cx"> m_byValCompilationInfo[m_byValInstructionIndex].returnAddress = call;
</span><span class="cx"> m_byValInstructionIndex++;
</span><span class="cx">
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void JIT::emit_op_put_by_val(Instruction* currentInstruction)
</span><span class="lines">@@ -487,7 +487,7 @@
</span><span class="cx"> addSlowCase(gen.slowPathJump());
</span><span class="cx"> m_getByIds.append(gen);
</span><span class="cx">
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> emitStore(dst, regT1, regT0);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -783,7 +783,7 @@
</span><span class="cx"> addSlowCase(jump());
</span><span class="cx"> break;
</span><span class="cx"> }
</span><del>- emitValueProfilingSite(regT4);
</del><ins>+ emitValueProfilingSite();
</ins><span class="cx"> emitStore(dst, regT1, regT0);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntOfflineAsmConfigh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -148,10 +148,4 @@
</span><span class="cx"> #define OFFLINE_ASM_ALWAYS_ALLOCATE_SLOW 0
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
-#define OFFLINE_ASM_VALUE_PROFILER 1
-#else
-#define OFFLINE_ASM_VALUE_PROFILER 0
-#endif
-
</del><span class="cx"> #endif // LLIntOfflineAsmConfig_h
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -119,7 +119,6 @@
</span><span class="cx"> LLINT_END_IMPL(); \
</span><span class="cx"> } while (false)
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> #define LLINT_RETURN_PROFILED(opcode, value) do { \
</span><span class="cx"> JSValue __rp_returnValue = (value); \
</span><span class="cx"> LLINT_CHECK_EXCEPTION(); \
</span><span class="lines">@@ -133,13 +132,6 @@
</span><span class="cx"> JSValue::encode(value); \
</span><span class="cx"> } while (false)
</span><span class="cx">
</span><del>-#else // ENABLE(VALUE_PROFILER)
-#define LLINT_RETURN_PROFILED(opcode, value) LLINT_RETURN(value)
-
-#define LLINT_PROFILE_VALUE(opcode, value) do { } while (false)
-
-#endif // ENABLE(VALUE_PROFILER)
-
</del><span class="cx"> #define LLINT_CALL_END_IMPL(exec, callTarget) LLINT_RETURN_TWO((callTarget), (exec))
</span><span class="cx">
</span><span class="cx"> #define LLINT_CALL_THROW(exec, exceptionToThrow) do { \
</span><span class="lines">@@ -565,16 +557,12 @@
</span><span class="cx"> && isJSArray(baseValue)
</span><span class="cx"> && ident == exec->propertyNames().length) {
</span><span class="cx"> pc[0].u.opcode = LLInt::getOpcode(llint_op_get_array_length);
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> ArrayProfile* arrayProfile = codeBlock->getOrAddArrayProfile(pc - codeBlock->instructions().begin());
</span><span class="cx"> arrayProfile->observeStructure(baseValue.asCell()->structure());
</span><span class="cx"> pc[4].u.arrayProfile = arrayProfile;
</span><del>-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> pc[OPCODE_LENGTH(op_get_by_id) - 1].u.profile->m_buckets[0] = JSValue::encode(result);
</span><del>-#endif
</del><span class="cx"> LLINT_END();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreterasm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -259,9 +259,7 @@
</span><span class="cx"> macro arrayProfile(structureAndIndexingType, profile, scratch)
</span><span class="cx"> const structure = structureAndIndexingType
</span><span class="cx"> const indexingType = structureAndIndexingType
</span><del>- if VALUE_PROFILER
- storep structure, ArrayProfile::m_lastSeenStructure[profile]
- end
</del><ins>+ storep structure, ArrayProfile::m_lastSeenStructure[profile]
</ins><span class="cx"> loadb Structure::m_indexingType[structure], indexingType
</span><span class="cx"> end
</span><span class="cx">
</span><span class="lines">@@ -343,37 +341,35 @@
</span><span class="cx"> # Expects that CodeBlock is in t1, which is what prologue() leaves behind.
</span><span class="cx"> # Must call dispatch(0) after calling this.
</span><span class="cx"> macro functionInitialization(profileArgSkip)
</span><del>- if VALUE_PROFILER
- # Profile the arguments. Unfortunately, we have no choice but to do this. This
- # code is pretty horrendous because of the difference in ordering between
- # arguments and value profiles, the desire to have a simple loop-down-to-zero
- # loop, and the desire to use only three registers so as to preserve the PC and
- # the code block. It is likely that this code should be rewritten in a more
- # optimal way for architectures that have more than five registers available
- # for arbitrary use in the interpreter.
- loadi CodeBlock::m_numParameters[t1], t0
- addp -profileArgSkip, t0 # Use addi because that's what has the peephole
- assert(macro (ok) bpgteq t0, 0, ok end)
- btpz t0, .argumentProfileDone
- loadp CodeBlock::m_argumentValueProfiles + VectorBufferOffset[t1], t3
- mulp sizeof ValueProfile, t0, t2 # Aaaaahhhh! Need strength reduction!
- lshiftp 3, t0
- addp t2, t3
- .argumentProfileLoop:
- if JSVALUE64
- loadq ThisArgumentOffset - 8 + profileArgSkip * 8[cfr, t0], t2
- subp sizeof ValueProfile, t3
- storeq t2, profileArgSkip * sizeof ValueProfile + ValueProfile::m_buckets[t3]
- else
- loadi ThisArgumentOffset + TagOffset - 8 + profileArgSkip * 8[cfr, t0], t2
- subp sizeof ValueProfile, t3
- storei t2, profileArgSkip * sizeof ValueProfile + ValueProfile::m_buckets + TagOffset[t3]
- loadi ThisArgumentOffset + PayloadOffset - 8 + profileArgSkip * 8[cfr, t0], t2
- storei t2, profileArgSkip * sizeof ValueProfile + ValueProfile::m_buckets + PayloadOffset[t3]
- end
- baddpnz -8, t0, .argumentProfileLoop
- .argumentProfileDone:
</del><ins>+ # Profile the arguments. Unfortunately, we have no choice but to do this. This
+ # code is pretty horrendous because of the difference in ordering between
+ # arguments and value profiles, the desire to have a simple loop-down-to-zero
+ # loop, and the desire to use only three registers so as to preserve the PC and
+ # the code block. It is likely that this code should be rewritten in a more
+ # optimal way for architectures that have more than five registers available
+ # for arbitrary use in the interpreter.
+ loadi CodeBlock::m_numParameters[t1], t0
+ addp -profileArgSkip, t0 # Use addi because that's what has the peephole
+ assert(macro (ok) bpgteq t0, 0, ok end)
+ btpz t0, .argumentProfileDone
+ loadp CodeBlock::m_argumentValueProfiles + VectorBufferOffset[t1], t3
+ mulp sizeof ValueProfile, t0, t2 # Aaaaahhhh! Need strength reduction!
+ lshiftp 3, t0
+ addp t2, t3
+.argumentProfileLoop:
+ if JSVALUE64
+ loadq ThisArgumentOffset - 8 + profileArgSkip * 8[cfr, t0], t2
+ subp sizeof ValueProfile, t3
+ storeq t2, profileArgSkip * sizeof ValueProfile + ValueProfile::m_buckets[t3]
+ else
+ loadi ThisArgumentOffset + TagOffset - 8 + profileArgSkip * 8[cfr, t0], t2
+ subp sizeof ValueProfile, t3
+ storei t2, profileArgSkip * sizeof ValueProfile + ValueProfile::m_buckets + TagOffset[t3]
+ loadi ThisArgumentOffset + PayloadOffset - 8 + profileArgSkip * 8[cfr, t0], t2
+ storei t2, profileArgSkip * sizeof ValueProfile + ValueProfile::m_buckets + PayloadOffset[t3]
</ins><span class="cx"> end
</span><ins>+ baddpnz -8, t0, .argumentProfileLoop
+.argumentProfileDone:
</ins><span class="cx">
</span><span class="cx"> # Check stack height.
</span><span class="cx"> loadi CodeBlock::m_numCalleeRegisters[t1], t0
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreter32_64asm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -496,11 +496,9 @@
</span><span class="cx"> end
</span><span class="cx">
</span><span class="cx"> macro valueProfile(tag, payload, operand, scratch)
</span><del>- if VALUE_PROFILER
- loadp operand[PC], scratch
- storei tag, ValueProfile::m_buckets + TagOffset[scratch]
- storei payload, ValueProfile::m_buckets + PayloadOffset[scratch]
- end
</del><ins>+ loadp operand[PC], scratch
+ storei tag, ValueProfile::m_buckets + TagOffset[scratch]
+ storei payload, ValueProfile::m_buckets + PayloadOffset[scratch]
</ins><span class="cx"> end
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -1483,10 +1481,8 @@
</span><span class="cx"> dispatch(6)
</span><span class="cx">
</span><span class="cx"> .opGetByValOutOfBounds:
</span><del>- if VALUE_PROFILER
- loadpFromInstruction(4, t0)
- storeb 1, ArrayProfile::m_outOfBounds[t0]
- end
</del><ins>+ loadpFromInstruction(4, t0)
+ storeb 1, ArrayProfile::m_outOfBounds[t0]
</ins><span class="cx"> .opGetByValSlow:
</span><span class="cx"> callSlowPath(_llint_slow_path_get_by_val)
</span><span class="cx"> dispatch(6)
</span><span class="lines">@@ -1556,10 +1552,8 @@
</span><span class="cx">
</span><span class="cx"> .outOfBounds:
</span><span class="cx"> biaeq t3, -sizeof IndexingHeader + IndexingHeader::u.lengths.vectorLength[t0], .opPutByValOutOfBounds
</span><del>- if VALUE_PROFILER
- loadp 16[PC], t2
- storeb 1, ArrayProfile::m_mayStoreToHole[t2]
- end
</del><ins>+ loadp 16[PC], t2
+ storeb 1, ArrayProfile::m_mayStoreToHole[t2]
</ins><span class="cx"> addi 1, t3, t2
</span><span class="cx"> storei t2, -sizeof IndexingHeader + IndexingHeader::u.lengths.publicLength[t0]
</span><span class="cx"> jmp .storeResult
</span><span class="lines">@@ -1626,10 +1620,8 @@
</span><span class="cx"> dispatch(5)
</span><span class="cx">
</span><span class="cx"> .opPutByValArrayStorageEmpty:
</span><del>- if VALUE_PROFILER
- loadp 16[PC], t1
- storeb 1, ArrayProfile::m_mayStoreToHole[t1]
- end
</del><ins>+ loadp 16[PC], t1
+ storeb 1, ArrayProfile::m_mayStoreToHole[t1]
</ins><span class="cx"> addi 1, ArrayStorage::m_numValuesInVector[t0]
</span><span class="cx"> bib t3, -sizeof IndexingHeader + IndexingHeader::u.lengths.publicLength[t0], .opPutByValArrayStorageStoreResult
</span><span class="cx"> addi 1, t3, t1
</span><span class="lines">@@ -1637,10 +1629,8 @@
</span><span class="cx"> jmp .opPutByValArrayStorageStoreResult
</span><span class="cx">
</span><span class="cx"> .opPutByValOutOfBounds:
</span><del>- if VALUE_PROFILER
- loadpFromInstruction(4, t0)
- storeb 1, ArrayProfile::m_outOfBounds[t0]
- end
</del><ins>+ loadpFromInstruction(4, t0)
+ storeb 1, ArrayProfile::m_outOfBounds[t0]
</ins><span class="cx"> .opPutByValSlow:
</span><span class="cx"> callSlowPath(slowPath)
</span><span class="cx"> dispatch(5)
</span><span class="lines">@@ -1857,16 +1847,14 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> macro arrayProfileForCall()
</span><del>- if VALUE_PROFILER
- loadi 16[PC], t3
- negi t3
- bineq ThisArgumentOffset + TagOffset[cfr, t3, 8], CellTag, .done
- loadi ThisArgumentOffset + PayloadOffset[cfr, t3, 8], t0
- loadp JSCell::m_structure[t0], t0
- loadp 24[PC], t1
- storep t0, ArrayProfile::m_lastSeenStructure[t1]
- .done:
- end
</del><ins>+ loadi 16[PC], t3
+ negi t3
+ bineq ThisArgumentOffset + TagOffset[cfr, t3, 8], CellTag, .done
+ loadi ThisArgumentOffset + PayloadOffset[cfr, t3, 8], t0
+ loadp JSCell::m_structure[t0], t0
+ loadp 24[PC], t1
+ storep t0, ArrayProfile::m_lastSeenStructure[t1]
+.done:
</ins><span class="cx"> end
</span><span class="cx">
</span><span class="cx"> macro doCall(slowPath)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreter64asm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -336,10 +336,8 @@
</span><span class="cx"> end
</span><span class="cx">
</span><span class="cx"> macro valueProfile(value, operand, scratch)
</span><del>- if VALUE_PROFILER
- loadpFromInstruction(operand, scratch)
- storeq value, ValueProfile::m_buckets[scratch]
- end
</del><ins>+ loadpFromInstruction(operand, scratch)
+ storeq value, ValueProfile::m_buckets[scratch]
</ins><span class="cx"> end
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -1284,10 +1282,8 @@
</span><span class="cx"> dispatch(6)
</span><span class="cx">
</span><span class="cx"> .opGetByValOutOfBounds:
</span><del>- if VALUE_PROFILER
- loadpFromInstruction(4, t0)
- storeb 1, ArrayProfile::m_outOfBounds[t0]
- end
</del><ins>+ loadpFromInstruction(4, t0)
+ storeb 1, ArrayProfile::m_outOfBounds[t0]
</ins><span class="cx"> .opGetByValSlow:
</span><span class="cx"> callSlowPath(_llint_slow_path_get_by_val)
</span><span class="cx"> dispatch(6)
</span><span class="lines">@@ -1357,10 +1353,8 @@
</span><span class="cx">
</span><span class="cx"> .outOfBounds:
</span><span class="cx"> biaeq t3, -sizeof IndexingHeader + IndexingHeader::u.lengths.vectorLength[t0], .opPutByValOutOfBounds
</span><del>- if VALUE_PROFILER
- loadp 32[PB, PC, 8], t2
- storeb 1, ArrayProfile::m_mayStoreToHole[t2]
- end
</del><ins>+ loadp 32[PB, PC, 8], t2
+ storeb 1, ArrayProfile::m_mayStoreToHole[t2]
</ins><span class="cx"> addi 1, t3, t2
</span><span class="cx"> storei t2, -sizeof IndexingHeader + IndexingHeader::u.lengths.publicLength[t0]
</span><span class="cx"> jmp .storeResult
</span><span class="lines">@@ -1423,10 +1417,8 @@
</span><span class="cx"> dispatch(5)
</span><span class="cx">
</span><span class="cx"> .opPutByValArrayStorageEmpty:
</span><del>- if VALUE_PROFILER
- loadpFromInstruction(4, t1)
- storeb 1, ArrayProfile::m_mayStoreToHole[t1]
- end
</del><ins>+ loadpFromInstruction(4, t1)
+ storeb 1, ArrayProfile::m_mayStoreToHole[t1]
</ins><span class="cx"> addi 1, ArrayStorage::m_numValuesInVector[t0]
</span><span class="cx"> bib t3, -sizeof IndexingHeader + IndexingHeader::u.lengths.publicLength[t0], .opPutByValArrayStorageStoreResult
</span><span class="cx"> addi 1, t3, t1
</span><span class="lines">@@ -1434,10 +1426,8 @@
</span><span class="cx"> jmp .opPutByValArrayStorageStoreResult
</span><span class="cx">
</span><span class="cx"> .opPutByValOutOfBounds:
</span><del>- if VALUE_PROFILER
- loadpFromInstruction(4, t0)
- storeb 1, ArrayProfile::m_outOfBounds[t0]
- end
</del><ins>+ loadpFromInstruction(4, t0)
+ storeb 1, ArrayProfile::m_outOfBounds[t0]
</ins><span class="cx"> .opPutByValSlow:
</span><span class="cx"> callSlowPath(slowPath)
</span><span class="cx"> dispatch(5)
</span><span class="lines">@@ -1659,16 +1649,14 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> macro arrayProfileForCall()
</span><del>- if VALUE_PROFILER
- loadisFromInstruction(4, t3)
- negp t3
- loadq ThisArgumentOffset[cfr, t3, 8], t0
- btqnz t0, tagMask, .done
- loadp JSCell::m_structure[t0], t0
- loadpFromInstruction(6, t1)
- storep t0, ArrayProfile::m_lastSeenStructure[t1]
- .done:
- end
</del><ins>+ loadisFromInstruction(4, t3)
+ negp t3
+ loadq ThisArgumentOffset[cfr, t3, 8], t0
+ btqnz t0, tagMask, .done
+ loadp JSCell::m_structure[t0], t0
+ loadpFromInstruction(6, t1)
+ storep t0, ArrayProfile::m_lastSeenStructure[t1]
+.done:
</ins><span class="cx"> end
</span><span class="cx">
</span><span class="cx"> macro doCall(slowPath)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreprofilerProfilerBytecodeSequencecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -38,7 +38,6 @@
</span><span class="cx"> {
</span><span class="cx"> StringPrintStream out;
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> for (unsigned i = 0; i < codeBlock->numberOfArgumentValueProfiles(); ++i) {
</span><span class="cx"> ConcurrentJITLocker locker(codeBlock->m_lock);
</span><span class="cx"> CString description = codeBlock->valueProfileForArgument(i)->briefDescription(locker);
</span><span class="lines">@@ -48,7 +47,6 @@
</span><span class="cx"> out.print("arg", i, " (r", virtualRegisterForArgument(i).offset(), "): ", description);
</span><span class="cx"> m_header.append(out.toCString());
</span><span class="cx"> }
</span><del>-#endif // ENABLE(VALUE_PROFILER)
</del><span class="cx">
</span><span class="cx"> for (unsigned bytecodeIndex = 0; bytecodeIndex < codeBlock->instructions().size();) {
</span><span class="cx"> out.reset();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCommonSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -124,7 +124,6 @@
</span><span class="cx"> END_IMPL(); \
</span><span class="cx"> } while (false)
</span><span class="cx">
</span><del>-#if ENABLE(VALUE_PROFILER)
</del><span class="cx"> #define RETURN_PROFILED(opcode, value) do { \
</span><span class="cx"> JSValue rpPeturnValue = (value); \
</span><span class="cx"> CHECK_EXCEPTION(); \
</span><span class="lines">@@ -138,13 +137,6 @@
</span><span class="cx"> JSValue::encode(value); \
</span><span class="cx"> } while (false)
</span><span class="cx">
</span><del>-#else // ENABLE(VALUE_PROFILER)
-#define RETURN_PROFILED(opcode, value) RETURN(value)
-
-#define PROFILE_VALUE(opcode, value) do { } while (false)
-
-#endif // ENABLE(VALUE_PROFILER)
-
</del><span class="cx"> #define CALL_END_IMPL(exec, callTarget) RETURN_TWO((callTarget), (exec))
</span><span class="cx">
</span><span class="cx"> #define CALL_THROW(exec, pc, exceptionToThrow) do { \
</span></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/WTF/ChangeLog        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -1,3 +1,11 @@
</span><ins>+2014-01-06 Filip Pizlo <fpizlo@apple.com>
+
+ Get rid of ENABLE(VALUE_PROFILER). It's on all the time now.
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * wtf/Platform.h:
+
</ins><span class="cx"> 2014-01-06 Zan Dobersek <zdobersek@igalia.com>
</span><span class="cx">
</span><span class="cx"> Remove using directives for the std namespace from WTF
</span></span></pre></div>
<a id="trunkSourceWTFwtfPlatformh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Platform.h (161363 => 161364)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Platform.h        2014-01-06 20:35:58 UTC (rev 161363)
+++ trunk/Source/WTF/wtf/Platform.h        2014-01-06 20:41:32 UTC (rev 161364)
</span><span class="lines">@@ -772,18 +772,6 @@
</span><span class="cx"> #error You have to have at least one execution model enabled to build JSC
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-/* Profiling of types and values used by JIT code. DFG_JIT depends on it, but you
- can enable it manually with DFG turned off if you want to use it as a standalone
- profiler. In that case, you probably want to also enable VERBOSE_VALUE_PROFILE
- below. */
-#if !defined(ENABLE_VALUE_PROFILER) && ENABLE(DFG_JIT)
-#define ENABLE_VALUE_PROFILER 1
-#endif
-
-#if !defined(ENABLE_VERBOSE_VALUE_PROFILE) && ENABLE(VALUE_PROFILER)
-#define ENABLE_VERBOSE_VALUE_PROFILE 0
-#endif
-
</del><span class="cx"> /* Generational collector for JSC */
</span><span class="cx"> #if !defined(ENABLE_GGC)
</span><span class="cx"> #define ENABLE_GGC 0
</span></span></pre>
</div>
</div>
</body>
</html>