<!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>[169578] branches/ftlopt</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/169578">169578</a></dd>
<dt>Author</dt> <dd>fpizlo@apple.com</dd>
<dt>Date</dt> <dd>2014-06-03 19:50:58 -0700 (Tue, 03 Jun 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[ftlopt] Added system for inlining native functions via the FTL.
https://bugs.webkit.org/show_bug.cgi?id=131515

Patch by Matthew Mirman &lt;mmirman@apple.com&gt; on 2014-06-03
Reviewed by Filip Pizlo.


Source/JavaScriptCore: 
Also fixed the build to not compress the bitcode and to 
include all of the relevant runtime. With GCC_GENERATE_DEBUGGING_SYMBOLS = NO, 
the produced bitcode files are a 100th the size they were before.  
Now we can include all of the relevant runtime files with only a 3mb overhead. 
This is the same overhead as for two compressed files before, 
but done more efficiently (on both ends) and with less code.
        
Deciding whether to inline native functions is left up to LLVM. 
The entire module containing the function is linked into the current 
compiled JS so that inlining the native functions shouldn't make them smaller.
        
Rather than loading Runtime.symtbl at runtime FTLState.cpp now includes a file 
InlineRuntimeSymbolTable.h which statically builds the symbol table hash table.  
Currently build-symbol-table-index.py updates this file from the 
contents of tested-symbols.symlst when done building as a matter of convenience.  
However, in order to include the new contents of the file in the build
you'd need to build twice.  This will be fixed in future versions.

* JavaScriptCore.xcodeproj/project.pbxproj: Added back runtime files to compile.
* build-symbol-table-index.py: Changed bitcode suffix. 
Added inclusion of only tested symbols.  
Added output to InlineRuntimeSymbolTable.h. 
* build-symbol-table-index.sh: Changed bitcode suffix.
* copy-llvm-ir-to-derived-sources.sh: Removed gzip compression.
* tested-symbols.symlst: Added.
* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::handleCall):  
Now sets the knownFunction of the call node if such a function exists 
and emits a check that during runtime the callee is in fact known.
* dfg/DFGNode.h:
Added functions to set the known function of a call node.
(JSC::DFG::Node::canBeKnownFunction): Added.
(JSC::DFG::Node::hasKnownFunction): Added.
(JSC::DFG::Node::knownFunction): Added.
(JSC::DFG::Node::giveKnownFunction): Added.
* ftl/FTLAbbreviatedTypes.h: Added a typedef for LLVMMemoryBufferRef
* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::LowerDFGToLLVM::isInlinableSize): Added. Hardcoded threshold to 275.
(JSC::FTL::LowerDFGToLLVM::getModuleByPathForSymbol): Added.
(JSC::FTL::LowerDFGToLLVM::getFunctionBySymbol): Added.
(JSC::FTL::LowerDFGToLLVM::possiblyCompileInlineableNativeCall): Added.
(JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct):  
Added call to possiblyCompileInlineableNativeCall
* ftl/FTLOutput.h:
(JSC::FTL::Output::allocaName):  Added. Useful for debugging.
* ftl/FTLState.cpp:
(JSC::FTL::State::State): Added an include for InlineRuntimeSymbolTable.h
* ftl/FTLState.h: Added symbol table hash table.
* ftl/FTLCompile.cpp:
(JSC::FTL::compile): Added inlining and dead function elimination passes.
* heap/HandleStack.h: Added JS_EXPORT_PRIVATE to a few functions to get inlining to compile.
* InlineRuntimeSymbolTable.h: Added.  
* llvm/InitializeLLVMMac.mm: Deleted.
* llvm/InitializeLLVMMac.cpp: Added.
* llvm/LLVMAPIFunctions.h: Added macros to include Bitcode parsing and linking functions.
* llvm/LLVMHeaders.h: Added includes for Bitcode parsing and linking.
* runtime/BundlePath.h: Added.
* runtime/BundlePath.mm: Added.
* runtime/DateInstance.h: Added JS_EXPORT_PRIVATE to a few functions to get inlining to compile.
* runtime/DateInstance.h: ditto.
* runtime/DateConversion.h: ditto.
* runtime/ExceptionHelpers.h: ditto.
* runtime/JSCJSValue.h: ditto.
* runtime/JSArray.h: ditto.
* runtime/JSDateMath.h: ditto.
* runtime/JSObject.h: ditto.
* runtime/JSObject.h: ditto.
* runtime/RegExp.h: ditto.
* runtime/Structure.h: ditto.
* runtime/Options.h:  Added maximumLLVMInstructionCountForNativeInlining.
* tests/stress/ftl-library-inlining-random.js: Added.
* tests/stress/ftl-library-substring.js: Added.

LayoutTests: 
Adds microbenchmarks. 

* js/regress/script-tests/ftl-library-inlining.js: Added.
* js/regress/ftl-library-inlining-expected.txt: Added.
* js/regress/ftl-library-inlining.html: Added.
* js/regress/script-tests/ftl-library-inlining-dataview.js: Added.
* js/regress/ftl-library-inlining-dataview-expected.txt: Added.
* js/regress/ftl-library-inlining-dataview.html: Added.
* js/regress/script-tests/ftl-library-inlining-exceptions.js: Added.
* js/regress/ftl-library-inlining-exceptions-expected.txt: Added.        
* js/regress/ftl-library-inlining-exceptions.html: Added.                
* js/regress/script-tests/ftl-library-inlining-folding.js: Added.
* js/regress/ftl-library-inlining-folding-expected.txt: Added.        
* js/regress/ftl-library-inlining-folding-expected.html: Added.                
* js/regress/script-tests/ftl-library-inlining-loops.js: Added.
* js/regress/ftl-library-inlining-loops-expected.txt: Added.        
* js/regress/ftl-library-inlining-loops.html: Added.                </pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchesftloptLayoutTestsChangeLog">branches/ftlopt/LayoutTests/ChangeLog</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreChangeLog">branches/ftlopt/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">branches/ftlopt/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#branchesftloptSourceJavaScriptCorebuildsymboltableindexpy">branches/ftlopt/Source/JavaScriptCore/build-symbol-table-index.py</a></li>
<li><a href="#branchesftloptSourceJavaScriptCorebuildsymboltableindexsh">branches/ftlopt/Source/JavaScriptCore/build-symbol-table-index.sh</a></li>
<li><a href="#branchesftloptSourceJavaScriptCorecopyllvmirtoderivedsourcessh">branches/ftlopt/Source/JavaScriptCore/copy-llvm-ir-to-derived-sources.sh</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoredfgDFGByteCodeParsercpp">branches/ftlopt/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoredfgDFGNodeh">branches/ftlopt/Source/JavaScriptCore/dfg/DFGNode.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreftlFTLAbbreviatedTypesh">branches/ftlopt/Source/JavaScriptCore/ftl/FTLAbbreviatedTypes.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreftlFTLCompilecpp">branches/ftlopt/Source/JavaScriptCore/ftl/FTLCompile.cpp</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp">branches/ftlopt/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreftlFTLStatecpp">branches/ftlopt/Source/JavaScriptCore/ftl/FTLState.cpp</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreftlFTLStateh">branches/ftlopt/Source/JavaScriptCore/ftl/FTLState.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreheapHandleStackh">branches/ftlopt/Source/JavaScriptCore/heap/HandleStack.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCorellvmInitializeLLVMh">branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVM.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCorellvmLLVMAPIFunctionsh">branches/ftlopt/Source/JavaScriptCore/llvm/LLVMAPIFunctions.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCorellvmLLVMHeadersh">branches/ftlopt/Source/JavaScriptCore/llvm/LLVMHeaders.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeDateConversionh">branches/ftlopt/Source/JavaScriptCore/runtime/DateConversion.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeDateInstanceh">branches/ftlopt/Source/JavaScriptCore/runtime/DateInstance.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeExceptionHelpersh">branches/ftlopt/Source/JavaScriptCore/runtime/ExceptionHelpers.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeJSArrayh">branches/ftlopt/Source/JavaScriptCore/runtime/JSArray.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeJSCJSValueh">branches/ftlopt/Source/JavaScriptCore/runtime/JSCJSValue.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeJSDateMathh">branches/ftlopt/Source/JavaScriptCore/runtime/JSDateMath.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeJSObjecth">branches/ftlopt/Source/JavaScriptCore/runtime/JSObject.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeJSWrapperObjecth">branches/ftlopt/Source/JavaScriptCore/runtime/JSWrapperObject.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeOptionsh">branches/ftlopt/Source/JavaScriptCore/runtime/Options.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeRegExph">branches/ftlopt/Source/JavaScriptCore/runtime/RegExp.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeStringObjecth">branches/ftlopt/Source/JavaScriptCore/runtime/StringObject.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeStructureh">branches/ftlopt/Source/JavaScriptCore/runtime/Structure.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#branchesftloptLayoutTestsjsregressftllibraryinliningdataviewexpectedtxt">branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-dataview-expected.txt</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressftllibraryinliningdataviewhtml">branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-dataview.html</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressftllibraryinliningexceptionsexpectedtxt">branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-exceptions-expected.txt</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressftllibraryinliningexceptionshtml">branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-exceptions.html</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressftllibraryinliningexpectedtxt">branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-expected.txt</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressftllibraryinliningfoldingexpectedtxt">branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-folding-expected.txt</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressftllibraryinliningfoldinghtml">branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-folding.html</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressftllibraryinliningloopsexpectedtxt">branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-loops-expected.txt</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressftllibraryinliningloopshtml">branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-loops.html</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressftllibraryinlininghtml">branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining.html</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressscripttestsftllibraryinliningdataviewjs">branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-dataview.js</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressscripttestsftllibraryinliningexceptionsjs">branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-exceptions.js</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressscripttestsftllibraryinliningfoldingjs">branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-folding.js</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressscripttestsftllibraryinliningloopsjs">branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-loops.js</a></li>
<li><a href="#branchesftloptLayoutTestsjsregressscripttestsftllibraryinliningjs">branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining.js</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreInlineRuntimeSymbolTableh">branches/ftlopt/Source/JavaScriptCore/InlineRuntimeSymbolTable.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCorellvmInitializeLLVMMaccpp">branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVMMac.cpp</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeBundlePathh">branches/ftlopt/Source/JavaScriptCore/runtime/BundlePath.h</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoreruntimeBundlePathmm">branches/ftlopt/Source/JavaScriptCore/runtime/BundlePath.mm</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoretestedsymbolssymlst">branches/ftlopt/Source/JavaScriptCore/tested-symbols.symlst</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoretestsstressftllibraryexceptionjs">branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-exception.js</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoretestsstressftllibraryinliningrandomjs">branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-inlining-random.js</a></li>
<li><a href="#branchesftloptSourceJavaScriptCoretestsstressftllibrarysubstringjs">branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-substring.js</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#branchesftloptSourceJavaScriptCorellvmInitializeLLVMMacmm">branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVMMac.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchesftloptLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/LayoutTests/ChangeLog (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/ChangeLog        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/LayoutTests/ChangeLog        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -1,3 +1,28 @@
</span><ins>+2014-06-03  Matthew Mirman  &lt;mmirman@apple.com&gt;
+
+        [ftlopt] Added system for inlining native functions via the FTL.
+        https://bugs.webkit.org/show_bug.cgi?id=131515
+
+        Reviewed by Filip Pizlo.
+
+        Adds microbenchmarks. 
+
+        * js/regress/script-tests/ftl-library-inlining.js: Added.
+        * js/regress/ftl-library-inlining-expected.txt: Added.
+        * js/regress/ftl-library-inlining.html: Added.
+        * js/regress/script-tests/ftl-library-inlining-dataview.js: Added.
+        * js/regress/ftl-library-inlining-dataview-expected.txt: Added.
+        * js/regress/ftl-library-inlining-dataview.html: Added.
+        * js/regress/script-tests/ftl-library-inlining-exceptions.js: Added.
+        * js/regress/ftl-library-inlining-exceptions-expected.txt: Added.        
+        * js/regress/ftl-library-inlining-exceptions.html: Added.                
+        * js/regress/script-tests/ftl-library-inlining-folding.js: Added.
+        * js/regress/ftl-library-inlining-folding-expected.txt: Added.        
+        * js/regress/ftl-library-inlining-folding-expected.html: Added.                
+        * js/regress/script-tests/ftl-library-inlining-loops.js: Added.
+        * js/regress/ftl-library-inlining-loops-expected.txt: Added.        
+        * js/regress/ftl-library-inlining-loops.html: Added.                
+        
</ins><span class="cx"> 2014-05-21  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [ftlopt] DFG::clobberize should be blind to the effects of GC
</span></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressftllibraryinliningdataviewexpectedtxt"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-dataview-expected.txt (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-dataview-expected.txt                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-dataview-expected.txt        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/ftl-library-inlining-dataview
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressftllibraryinliningdataviewhtml"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-dataview.html (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-dataview.html                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-dataview.html        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/ftl-library-inlining-dataview.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressftllibraryinliningexceptionsexpectedtxt"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-exceptions-expected.txt (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-exceptions-expected.txt                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-exceptions-expected.txt        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/ftl-library-inlining-exceptions
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressftllibraryinliningexceptionshtml"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-exceptions.html (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-exceptions.html                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-exceptions.html        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/ftl-library-inlining-exceptions.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressftllibraryinliningexpectedtxt"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-expected.txt (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-expected.txt                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-expected.txt        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/ftl-library-inlining
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressftllibraryinliningfoldingexpectedtxt"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-folding-expected.txt (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-folding-expected.txt                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-folding-expected.txt        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/ftl-library-inlining-folding
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressftllibraryinliningfoldinghtml"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-folding.html (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-folding.html                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-folding.html        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/ftl-library-inlining-folding.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressftllibraryinliningloopsexpectedtxt"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-loops-expected.txt (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-loops-expected.txt                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-loops-expected.txt        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+JSRegress/ftl-library-inlining-loops
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS no exception thrown
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressftllibraryinliningloopshtml"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-loops.html (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-loops.html                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining-loops.html        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/ftl-library-inlining-loops.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressftllibraryinlininghtml"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining.html (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining.html                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/ftl-library-inlining.html        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;../../resources/regress-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;script-tests/ftl-library-inlining.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/regress-post.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressscripttestsftllibraryinliningdataviewjs"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-dataview.js (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-dataview.js                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-dataview.js        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+function foo(d){
+    d.setInt8(0, 4);
+    d.setInt8(1, 2);
+    d.setInt8(2, 6);
+    d.setInt16(0, 20);
+    return d.getInt8(2) + d.getInt8(0);
+}
+
+noInline(foo);
+
+var result = 0;
+for (var i = 0 ; i &lt; 4000000; i++){
+    result += foo(new DataView(new ArrayBuffer(5)));
+}
+
+if(result != 24000000) 
+   throw &quot;Bad result: &quot; + result;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressscripttestsftllibraryinliningexceptionsjs"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-exceptions.js (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-exceptions.js                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-exceptions.js        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+function foo(d){
+    return Date.prototype.getTimezoneOffset.call(d);
+}
+
+noInline(foo);
+
+var x;
+var count = 1000000;
+for (var i = 0 ; i &lt; count; i++){
+    try { 
+        foo(i &lt; count - 1000 ? new Date() : &quot;a&quot;);
+        x = false;
+    } catch (e) {
+        x = true;
+    }
+}
+
+if (!x)
+    throw &quot;bad result: &quot;+ x;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressscripttestsftllibraryinliningfoldingjs"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-folding.js (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-folding.js                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-folding.js        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+function foo(){
+    var d = new DataView(new ArrayBuffer(5));
+    d.setInt8(0, 4);
+    d.setInt8(1, 2);
+    d.setInt8(2, 6);
+    d.setInt16(0, 20);
+    return d.getInt8(2) + d.getInt8(0);
+}
+
+noInline(foo);
+
+var result = 0;
+for (var i = 0 ; i &lt; 3000000; i++){
+    result += foo();
+}
+
+if (result != 18000000)
+    throw &quot;Bad result: &quot; + result;
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressscripttestsftllibraryinliningloopsjs"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-loops.js (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-loops.js                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining-loops.js        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+function foo(){
+    var count = 100;
+    var d = new DataView(new ArrayBuffer(count));
+
+    for (var i = 0; i &lt; count / 4; i++){
+        d.setInt32(i, i);
+    }
+
+    for (var i = 0; i &lt; count; i++){
+        d.setInt8(i, i);
+    }
+    var result = 0;
+    for (var i = 0; i &lt; count; i++){
+        result += d.getInt8(i);
+    }
+    return result;
+}
+
+noInline(foo);
+
+var r = 0;
+for (var i = 0 ; i &lt; 500000; i++){
+    r += foo();
+}
+
+if (r != 2475000000)
+    throw &quot;Bad result: &quot; + r;
+
</ins></span></pre></div>
<a id="branchesftloptLayoutTestsjsregressscripttestsftllibraryinliningjs"></a>
<div class="addfile"><h4>Added: branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining.js (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining.js                                (rev 0)
+++ branches/ftlopt/LayoutTests/js/regress/script-tests/ftl-library-inlining.js        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+function foo(x, d){
+    return x + Math.random() + d.getTimezoneOffset();
+}
+
+noInline(foo);
+
+for (var i = 0 ; i &lt; 1000000; i++){
+    foo(i, new Date());
+}
+
</ins></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/ChangeLog (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/ChangeLog        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/ChangeLog        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -1,3 +1,83 @@
</span><ins>+2014-06-03  Matthew Mirman  &lt;mmirman@apple.com&gt;
+
+        [ftlopt] Added system for inlining native functions via the FTL.
+        https://bugs.webkit.org/show_bug.cgi?id=131515
+
+        Reviewed by Filip Pizlo.
+
+        Also fixed the build to not compress the bitcode and to 
+        include all of the relevant runtime. With GCC_GENERATE_DEBUGGING_SYMBOLS = NO, 
+        the produced bitcode files are a 100th the size they were before.  
+        Now we can include all of the relevant runtime files with only a 3mb overhead. 
+        This is the same overhead as for two compressed files before, 
+        but done more efficiently (on both ends) and with less code.
+        
+        Deciding whether to inline native functions is left up to LLVM. 
+        The entire module containing the function is linked into the current 
+        compiled JS so that inlining the native functions shouldn't make them smaller.
+        
+        Rather than loading Runtime.symtbl at runtime FTLState.cpp now includes a file 
+        InlineRuntimeSymbolTable.h which statically builds the symbol table hash table.  
+        Currently build-symbol-table-index.py updates this file from the 
+        contents of tested-symbols.symlst when done building as a matter of convenience.  
+        However, in order to include the new contents of the file in the build
+        you'd need to build twice.  This will be fixed in future versions.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Added back runtime files to compile.
+        * build-symbol-table-index.py: Changed bitcode suffix. 
+        Added inclusion of only tested symbols.  
+        Added output to InlineRuntimeSymbolTable.h. 
+        * build-symbol-table-index.sh: Changed bitcode suffix.
+        * copy-llvm-ir-to-derived-sources.sh: Removed gzip compression.
+        * tested-symbols.symlst: Added.
+        * dfg/DFGByteCodeParser.cpp:
+        (JSC::DFG::ByteCodeParser::handleCall):  
+        Now sets the knownFunction of the call node if such a function exists 
+        and emits a check that during runtime the callee is in fact known.
+        * dfg/DFGNode.h:
+        Added functions to set the known function of a call node.
+        (JSC::DFG::Node::canBeKnownFunction): Added.
+        (JSC::DFG::Node::hasKnownFunction): Added.
+        (JSC::DFG::Node::knownFunction): Added.
+        (JSC::DFG::Node::giveKnownFunction): Added.
+        * ftl/FTLAbbreviatedTypes.h: Added a typedef for LLVMMemoryBufferRef
+        * ftl/FTLLowerDFGToLLVM.cpp:
+        (JSC::FTL::LowerDFGToLLVM::isInlinableSize): Added. Hardcoded threshold to 275.
+        (JSC::FTL::LowerDFGToLLVM::getModuleByPathForSymbol): Added.
+        (JSC::FTL::LowerDFGToLLVM::getFunctionBySymbol): Added.
+        (JSC::FTL::LowerDFGToLLVM::possiblyCompileInlineableNativeCall): Added.
+        (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct):  
+        Added call to possiblyCompileInlineableNativeCall
+        * ftl/FTLOutput.h:
+        (JSC::FTL::Output::allocaName):  Added. Useful for debugging.
+        * ftl/FTLState.cpp:
+        (JSC::FTL::State::State): Added an include for InlineRuntimeSymbolTable.h
+        * ftl/FTLState.h: Added symbol table hash table.
+        * ftl/FTLCompile.cpp:
+        (JSC::FTL::compile): Added inlining and dead function elimination passes.
+        * heap/HandleStack.h: Added JS_EXPORT_PRIVATE to a few functions to get inlining to compile.
+        * InlineRuntimeSymbolTable.h: Added.  
+        * llvm/InitializeLLVMMac.mm: Deleted.
+        * llvm/InitializeLLVMMac.cpp: Added.
+        * llvm/LLVMAPIFunctions.h: Added macros to include Bitcode parsing and linking functions.
+        * llvm/LLVMHeaders.h: Added includes for Bitcode parsing and linking.
+        * runtime/BundlePath.h: Added.
+        * runtime/BundlePath.mm: Added.
+        * runtime/DateInstance.h: Added JS_EXPORT_PRIVATE to a few functions to get inlining to compile.
+        * runtime/DateInstance.h: ditto.
+        * runtime/DateConversion.h: ditto.
+        * runtime/ExceptionHelpers.h: ditto.
+        * runtime/JSCJSValue.h: ditto.
+        * runtime/JSArray.h: ditto.
+        * runtime/JSDateMath.h: ditto.
+        * runtime/JSObject.h: ditto.
+        * runtime/JSObject.h: ditto.
+        * runtime/RegExp.h: ditto.
+        * runtime/Structure.h: ditto.
+        * runtime/Options.h:  Added maximumLLVMInstructionCountForNativeInlining.
+        * tests/stress/ftl-library-inlining-random.js: Added.
+        * tests/stress/ftl-library-substring.js: Added.
+
</ins><span class="cx"> 2014-05-21  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [ftlopt] DFG::clobberize should be blind to the effects of GC
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreInlineRuntimeSymbolTableh"></a>
<div class="addfile"><h4>Added: branches/ftlopt/Source/JavaScriptCore/InlineRuntimeSymbolTable.h (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/InlineRuntimeSymbolTable.h                                (rev 0)
+++ branches/ftlopt/Source/JavaScriptCore/InlineRuntimeSymbolTable.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,80 @@
</span><ins>+#define FOR_EACH_LIBRARY_SYMBOL(macro) \
+macro(&quot;_ZN3JSC19JSDataViewPrototype6s_infoE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL22JSONProtoFuncStringifyEPNS_9ExecStateE&quot;, &quot;JSONObject.bc&quot;) \
+macro(&quot;_ZN3JSCL19dateProtoFuncGetDayEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL18mathProtoFuncASinhEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL20dateProtoFuncGetYearEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL18mathProtoFuncACoshEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSC7setDataINS_11Int8AdaptorEEExPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL31dateProtoFuncGetUTCMillisecondsEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL17mathProtoFuncCoshEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL23dateProtoFuncGetSecondsEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL17mathProtoFuncSinhEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL17mathProtoFuncASinEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSC7setDataINS_14Float32AdaptorEEExPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL16mathProtoFuncCosEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL24dateProtoFuncGetUTCHoursEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL25dataViewProtoFuncSetInt16EPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSC15globalFuncIsNaNEPNS_9ExecStateE&quot;, &quot;JSGlobalObjectFunctions.bc&quot;) \
+macro(&quot;_ZN3JSCL25dataViewProtoFuncGetUint8EPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSC7getDataINS_12Uint8AdaptorEEExPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL21dateProtoFuncGetHoursEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL18dataViewTableIndexE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL23objectConstructorFreezeEPNS_9ExecStateE&quot;, &quot;ObjectConstructor.bc&quot;) \
+macro(&quot;_ZN3JSCL24dateProtoFuncGetUTCMonthEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL20dateProtoFuncGetTimeEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL21dateProtoFuncToStringEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL18mathProtoFuncTruncEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSC23objectProtoFuncToStringEPNS_9ExecStateE&quot;, &quot;ObjectPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL25dataViewProtoFuncSetUint8EPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL25dateProtoFuncToDateStringEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL18mathProtoFuncLog1pEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL19mathProtoFuncRandomEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSC7setDataINS_12Int16AdaptorEEExPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL20stringProtoFuncSliceEPNS_9ExecStateE&quot;, &quot;StringPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL20dateProtoFuncGetDateEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSC19JSDataViewPrototype15createStructureERNS_2VMEPNS_14JSGlobalObjectENS_7JSValueE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL23dateProtoFuncGetMinutesEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL18mathProtoFuncExpm1EPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL22dateProtoFuncGetUTCDayEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL18mathProtoFuncHypotEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL27dataViewProtoFuncSetFloat32EPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL26stringProtoFuncToLowerCaseEPNS_9ExecStateE&quot;, &quot;StringPrototype.bc&quot;) \
+macro(&quot;_ZN3JSC19JSDataViewPrototype6createERNS_2VMEPNS_9StructureE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL17mathProtoFuncCbrtEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL9dateParseEPNS_9ExecStateE&quot;, &quot;DateConstructor.bc&quot;) \
+macro(&quot;_ZN3JSCL27dataViewProtoFuncSetFloat64EPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL17mathProtoFuncLog2EPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSC7setDataINS_12Int32AdaptorEEExPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSC9ExecState13dataViewTableERNS_2VME&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSC7setDataINS_13Uint32AdaptorEEExPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL16mathProtoFuncTanEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL25dataViewProtoFuncSetInt32EPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL24dataViewProtoFuncGetInt8EPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL27dateProtoFuncGetUTCFullYearEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL18mathProtoFuncATanhEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL24dataViewProtoFuncSetInt8EPNS_9ExecStateE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL26dateProtoFuncGetUTCMinutesEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL17mathProtoFuncATanEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL25dateProtoFuncToTimeStringEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL21dateProtoFuncGetMonthEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL16mathProtoFuncSinEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL25objectConstructorIsFrozenEPNS_9ExecStateE&quot;, &quot;ObjectConstructor.bc&quot;) \
+macro(&quot;_ZN3JSCL26stringProtoFuncToUpperCaseEPNS_9ExecStateE&quot;, &quot;StringPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL24dateProtoFuncGetFullYearEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL23dateProtoFuncGetUTCDateEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL28dateProtoFuncGetMilliSecondsEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL18mathProtoFuncATan2EPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL19arrayProtoFuncShiftEPNS_9ExecStateE&quot;, &quot;ArrayPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL31dateProtoFuncToLocaleDateStringEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL30dateProtoFuncGetTimezoneOffsetEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL18mathProtoFuncLog10EPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL36objectConstructorGetOwnPropertyNamesEPNS_9ExecStateE&quot;, &quot;ObjectConstructor.bc&quot;) \
+macro(&quot;_ZN3JSCL26dateProtoFuncGetUTCSecondsEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSC13dataViewTableE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL17mathProtoFuncTanhEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL17mathProtoFuncACosEPNS_9ExecStateE&quot;, &quot;MathObject.bc&quot;) \
+macro(&quot;_ZN3JSCL19dataViewTableValuesE&quot;, &quot;JSDataViewPrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL20dateProtoFuncSetDateEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;) \
+macro(&quot;_ZN3JSCL34objectConstructorPreventExtensionsEPNS_9ExecStateE&quot;, &quot;ObjectConstructor.bc&quot;) \
+macro(&quot;_ZN3JSCL24dateProtoFuncToUTCStringEPNS_9ExecStateE&quot;, &quot;DatePrototype.bc&quot;)
</ins></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -477,11 +477,9 @@
</span><span class="cx">                 0FCEFAAB1804C13E00472CE4 /* FTLSaveRestore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAA91804C13E00472CE4 /* FTLSaveRestore.cpp */; };
</span><span class="cx">                 0FCEFAAC1804C13E00472CE4 /* FTLSaveRestore.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFAAA1804C13E00472CE4 /* FTLSaveRestore.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 0FCEFAB01805CA6D00472CE4 /* InitializeLLVM.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFAAE1805CA6D00472CE4 /* InitializeLLVM.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                0FCEFAB11805CA6D00472CE4 /* InitializeLLVMMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAAF1805CA6D00472CE4 /* InitializeLLVMMac.mm */; };
</del><span class="cx">                 0FCEFAC11805D94E00472CE4 /* LLVMOverrides.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC01805D94100472CE4 /* LLVMOverrides.cpp */; };
</span><span class="cx">                 0FCEFAC31805E74000472CE4 /* LLVMExports.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC21805E74000472CE4 /* LLVMExports.cpp */; };
</span><span class="cx">                 0FCEFACA1805E75500472CE4 /* InitializeLLVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC41805E75500472CE4 /* InitializeLLVM.cpp */; };
</span><del>-                0FCEFACB1805E75500472CE4 /* InitializeLLVMPOSIX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC51805E75500472CE4 /* InitializeLLVMPOSIX.cpp */; };
</del><span class="cx">                 0FCEFACC1805E75500472CE4 /* InitializeLLVMPOSIX.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFAC61805E75500472CE4 /* InitializeLLVMPOSIX.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 0FCEFACD1805E75500472CE4 /* LLVMAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC71805E75500472CE4 /* LLVMAPI.cpp */; };
</span><span class="cx">                 0FCEFACE1805E75500472CE4 /* LLVMAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFAC81805E75500472CE4 /* LLVMAPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -824,6 +822,7 @@
</span><span class="cx">                 4443AE3316E188D90076F110 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51F0EB6105C86C6B00E6DF1B /* Foundation.framework */; };
</span><span class="cx">                 451539B912DC994500EF7AC4 /* Yarr.h in Headers */ = {isa = PBXBuildFile; fileRef = 451539B812DC994500EF7AC4 /* Yarr.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 5510502618EB827500001F3E /* JSCallbackFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 1440F88F0A508B100005F061 /* JSCallbackFunction.h */; };
</span><ins>+                552EA70C1908704800A66F2F /* JSDataViewPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66BF17B6B5AB00A7AE3F /* JSDataViewPrototype.cpp */; };
</ins><span class="cx">                 5540757218DA58AD00EFF7F2 /* ArgList.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF605120E203EF800B9A64D /* ArgList.h */; };
</span><span class="cx">                 5540757318DA58AD00EFF7F2 /* Arguments.h in Headers */ = {isa = PBXBuildFile; fileRef = BC257DE60E1F51C50016B6C9 /* Arguments.h */; };
</span><span class="cx">                 5540757418DA58AD00EFF7F2 /* ArgumentsIteratorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A76140C8182982CB00750624 /* ArgumentsIteratorConstructor.h */; };
</span><span class="lines">@@ -1057,6 +1056,46 @@
</span><span class="cx">                 554078AF18DA58AD00EFF7F2 /* ArrayPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A84D0255597D01FF60F7 /* ArrayPrototype.cpp */; };
</span><span class="cx">                 55407A3818DA58AD00EFF7F2 /* NumberConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C20E16D4E900A06E92 /* NumberConstructor.cpp */; };
</span><span class="cx">                 55407A3A18DA58AD00EFF7F2 /* NumberPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C40E16D4E900A06E92 /* NumberPrototype.cpp */; };
</span><ins>+                556A35C8190842BC00B56747 /* SetConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7299DA317D12858005F5FF9 /* SetConstructor.cpp */; };
+                556A35C9190842D500B56747 /* NativeErrorConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC02E9080E1839DB000F9297 /* NativeErrorConstructor.cpp */; };
+                556A35CA190842DD00B56747 /* Arguments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC257DE50E1F51C50016B6C9 /* Arguments.cpp */; };
+                556A35CB190842E800B56747 /* ArgumentsIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A76140C9182982CB00750624 /* ArgumentsIteratorPrototype.cpp */; };
+                556A35CC190842F300B56747 /* ArrayIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7BDAEC217F4EA1400F6140C /* ArrayIteratorPrototype.cpp */; };
+                556A35CD190842FD00B56747 /* BooleanConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7952320E15EB5600A898AB /* BooleanConstructor.cpp */; };
+                556A35CE1908430B00B56747 /* BooleanPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7952340E15EB5600A898AB /* BooleanPrototype.cpp */; };
+                556A35CF1908431600B56747 /* DateConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD203450E17135E002C7E82 /* DateConstructor.cpp */; };
+                556A35D01908432000B56747 /* DatePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD203470E17135E002C7E82 /* DatePrototype.cpp */; };
+                556A35D11908432900B56747 /* ErrorConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC02E9040E1839DB000F9297 /* ErrorConstructor.cpp */; };
+                556A35D21908433300B56747 /* ErrorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC02E9060E1839DB000F9297 /* ErrorPrototype.cpp */; };
+                556A35D31908434300B56747 /* FunctionConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C00E16D4E900A06E92 /* FunctionConstructor.cpp */; };
+                556A35D41908434D00B56747 /* FunctionPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A85C0255597D01FF60F7 /* FunctionPrototype.cpp */; };
+                556A35D51908436800B56747 /* JSArrayBufferConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66B617B6B5AB00A7AE3F /* JSArrayBufferConstructor.cpp */; };
+                556A35D61908437500B56747 /* JSArrayBufferPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66B817B6B5AB00A7AE3F /* JSArrayBufferPrototype.cpp */; };
+                556A35D71908438A00B56747 /* JSArrayIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7BDAEC417F4EA1400F6140C /* JSArrayIterator.cpp */; };
+                556A35D81908439D00B56747 /* JSBoundFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86FA9E8F142BBB2D001773B7 /* JSBoundFunction.cpp */; };
+                556A35D9190843B100B56747 /* JSFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A85E0255597D01FF60F7 /* JSFunction.cpp */; };
+                556A35DA190843C200B56747 /* JSGlobalObjectFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC756FC60E2031B200DE7D12 /* JSGlobalObjectFunctions.cpp */; };
+                556A35DB190843CF00B56747 /* JSONObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7F9935E0FD7325100A0B2D0 /* JSONObject.cpp */; };
+                556A35DC190843E700B56747 /* JSPromiseConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C184E2017BEE240007CB63A /* JSPromiseConstructor.cpp */; };
+                556A35DD190843E700B56747 /* JSPromiseFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C008CD0186F8A9300955C24 /* JSPromiseFunctions.cpp */; };
+                556A35DE190843E700B56747 /* JSPromisePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C184E1C17BEE22E007CB63A /* JSPromisePrototype.cpp */; };
+                556A35DF190843F300B56747 /* ConsolePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A53CE08118BC1A5600BEDF76 /* ConsolePrototype.cpp */; };
+                556A35E01908441D00B56747 /* MapConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A700873717CBE85300C3E643 /* MapConstructor.cpp */; };
+                556A35E11908441D00B56747 /* MapIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A74DEF8D182D991400522C22 /* MapIteratorPrototype.cpp */; };
+                556A35E21908441D00B56747 /* MapPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A700873B17CBE8D300C3E643 /* MapPrototype.cpp */; };
+                556A35E31908442A00B56747 /* MathObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A86A0255597D01FF60F7 /* MathObject.cpp */; };
+                556A35E41908443700B56747 /* NameConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86EBF2F91560F036008E9222 /* NameConstructor.cpp */; };
+                556A35E51908443700B56747 /* NamePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86EBF2FD1560F036008E9222 /* NamePrototype.cpp */; };
+                556A35E61908444900B56747 /* ObjectConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C60E16D4E900A06E92 /* ObjectConstructor.cpp */; };
+                556A35E71908444900B56747 /* ObjectPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C80E16D4E900A06E92 /* ObjectPrototype.cpp */; };
+                556A35E81908448000B56747 /* RegExpConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD202BD0E1706A7002C7E82 /* RegExpConstructor.cpp */; };
+                556A35E91908448000B56747 /* RegExpPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD202BF0E1706A7002C7E82 /* RegExpPrototype.cpp */; };
+                556A35EA190844A000B56747 /* SetIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A790DD67182F499700588807 /* SetIteratorPrototype.cpp */; };
+                556A35EB190844A000B56747 /* SetPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7299D9F17D12848005F5FF9 /* SetPrototype.cpp */; };
+                556A35EC190844AA00B56747 /* StringConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC18C3C00E16EE3300B34460 /* StringConstructor.cpp */; };
+                556A35ED190844B500B56747 /* WeakMapConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7CA3ADD17DA41AE006538AF /* WeakMapConstructor.cpp */; };
+                556A35EE190844C000B56747 /* WeakMapPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7CA3ADF17DA41AE006538AF /* WeakMapPrototype.cpp */; };
+                55A04E211908653D0024E40C /* StringPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC18C3C50E16EE3300B34460 /* StringPrototype.cpp */; };
</ins><span class="cx">                 5D53726F0E1C54880021E549 /* Tracing.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D53726E0E1C54880021E549 /* Tracing.h */; };
</span><span class="cx">                 5D5D8AD10E0D0EBE00F9C692 /* libedit.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D5D8AD00E0D0EBE00F9C692 /* libedit.dylib */; };
</span><span class="cx">                 5DBB151B131D0B310056AD36 /* testapi.js in Copy Support Script */ = {isa = PBXBuildFile; fileRef = 14D857740A4696C80032146C /* testapi.js */; };
</span><span class="lines">@@ -1230,6 +1269,11 @@
</span><span class="cx">                 99E45A2618A1B2590026D88F /* EncodedValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 99E45A2118A1B2590026D88F /* EncodedValue.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 99E45A2718A1B2590026D88F /* InputCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 99E45A2218A1B2590026D88F /* InputCursor.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 99E45A2818A1B2590026D88F /* NondeterministicInput.h in Headers */ = {isa = PBXBuildFile; fileRef = 99E45A2318A1B2590026D88F /* NondeterministicInput.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                9E729407190F01A5001A91B5 /* InitializeThreading.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E178636C0D9BEEC300D74E75 /* InitializeThreading.cpp */; };
+                9E729408190F021E001A91B5 /* InitializeLLVMPOSIX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC51805E75500472CE4 /* InitializeLLVMPOSIX.cpp */; };
+                9E72940B190F0514001A91B5 /* BundlePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E72940A190F0514001A91B5 /* BundlePath.h */; };
+                9EA5C7A1190F084200508EBE /* BundlePath.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9E729409190F0306001A91B5 /* BundlePath.mm */; };
+                9EA5C7A2190F088700508EBE /* InitializeLLVMMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9EA5C7A0190F05D200508EBE /* InitializeLLVMMac.cpp */; };
</ins><span class="cx">                 A1712B3B11C7B212007A5315 /* RegExpCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1712B3A11C7B212007A5315 /* RegExpCache.cpp */; };
</span><span class="cx">                 A1712B3F11C7B228007A5315 /* RegExpCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A1712B3E11C7B228007A5315 /* RegExpCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 A1712B4111C7B235007A5315 /* RegExpKey.h in Headers */ = {isa = PBXBuildFile; fileRef = A1712B4011C7B235007A5315 /* RegExpKey.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -1702,7 +1746,6 @@
</span><span class="cx">                 C2FE18A416BAEC4000AF3061 /* StructureRareData.h in Headers */ = {isa = PBXBuildFile; fileRef = C2FE18A316BAEC4000AF3061 /* StructureRareData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 E124A8F70E555775003091F1 /* OpaqueJSString.h in Headers */ = {isa = PBXBuildFile; fileRef = E124A8F50E555775003091F1 /* OpaqueJSString.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 E124A8F80E555775003091F1 /* OpaqueJSString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E124A8F60E555775003091F1 /* OpaqueJSString.cpp */; };
</span><del>-                E178636D0D9BEEC300D74E75 /* InitializeThreading.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E178636C0D9BEEC300D74E75 /* InitializeThreading.cpp */; };
</del><span class="cx">                 E18E3A590DF9278C00D90B34 /* VM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E18E3A570DF9278C00D90B34 /* VM.cpp */; };
</span><span class="cx">                 E49DC16B12EF293E00184A1F /* SourceProviderCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E49DC15512EF277200184A1F /* SourceProviderCache.cpp */; };
</span><span class="cx">                 E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E49DC15112EF272200184A1F /* SourceProviderCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -2296,7 +2339,6 @@
</span><span class="cx">                 0FCEFAA91804C13E00472CE4 /* FTLSaveRestore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FTLSaveRestore.cpp; path = ftl/FTLSaveRestore.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FCEFAAA1804C13E00472CE4 /* FTLSaveRestore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLSaveRestore.h; path = ftl/FTLSaveRestore.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FCEFAAE1805CA6D00472CE4 /* InitializeLLVM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InitializeLLVM.h; path = llvm/InitializeLLVM.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                0FCEFAAF1805CA6D00472CE4 /* InitializeLLVMMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InitializeLLVMMac.mm; path = llvm/InitializeLLVMMac.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 0FCEFAB61805D61600472CE4 /* libllvmForJSC.dylib */ = {isa = PBXFileReference; explicitFileType = &quot;compiled.mach-o.dylib&quot;; includeInIndex = 0; path = libllvmForJSC.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
</span><span class="cx">                 0FCEFABE1805D86900472CE4 /* LLVMForJSC.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = LLVMForJSC.xcconfig; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FCEFAC01805D94100472CE4 /* LLVMOverrides.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LLVMOverrides.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -2831,6 +2873,9 @@
</span><span class="cx">                 99E45A2118A1B2590026D88F /* EncodedValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EncodedValue.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 99E45A2218A1B2590026D88F /* InputCursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputCursor.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 99E45A2318A1B2590026D88F /* NondeterministicInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NondeterministicInput.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                9E729409190F0306001A91B5 /* BundlePath.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BundlePath.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
+                9E72940A190F0514001A91B5 /* BundlePath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BundlePath.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                9EA5C7A0190F05D200508EBE /* InitializeLLVMMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InitializeLLVMMac.cpp; path = llvm/InitializeLLVMMac.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 A1712B3A11C7B212007A5315 /* RegExpCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegExpCache.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A1712B3E11C7B228007A5315 /* RegExpCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegExpCache.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A1712B4011C7B235007A5315 /* RegExpKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegExpKey.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -3535,10 +3580,10 @@
</span><span class="cx">                 0FCEFAAD1805CA4400472CE4 /* llvm */ = {
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><ins>+                                9EA5C7A0190F05D200508EBE /* InitializeLLVMMac.cpp */,
</ins><span class="cx">                                 0FCEFABF1805D94100472CE4 /* library */,
</span><span class="cx">                                 0FCEFAC41805E75500472CE4 /* InitializeLLVM.cpp */,
</span><span class="cx">                                 0FCEFAAE1805CA6D00472CE4 /* InitializeLLVM.h */,
</span><del>-                                0FCEFAAF1805CA6D00472CE4 /* InitializeLLVMMac.mm */,
</del><span class="cx">                                 0FCEFAC51805E75500472CE4 /* InitializeLLVMPOSIX.cpp */,
</span><span class="cx">                                 0FCEFAC61805E75500472CE4 /* InitializeLLVMPOSIX.h */,
</span><span class="cx">                                 0FCEFAC71805E75500472CE4 /* LLVMAPI.cpp */,
</span><span class="lines">@@ -4167,6 +4212,8 @@
</span><span class="cx">                 7EF6E0BB0EB7A1EC0079AFAF /* runtime */ = {
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><ins>+                                9E72940A190F0514001A91B5 /* BundlePath.h */,
+                                9E729409190F0306001A91B5 /* BundlePath.mm */,
</ins><span class="cx">                                 BCF605110E203EF800B9A64D /* ArgList.cpp */,
</span><span class="cx">                                 BCF605120E203EF800B9A64D /* ArgList.h */,
</span><span class="cx">                                 BC257DE50E1F51C50016B6C9 /* Arguments.cpp */,
</span><span class="lines">@@ -5804,6 +5851,7 @@
</span><span class="cx">                                 0F235BDE17178E1C00690C7F /* FTLOSRExitCompilationInfo.h in Headers */,
</span><span class="cx">                                 0F235BE017178E1C00690C7F /* FTLOSRExitCompiler.h in Headers */,
</span><span class="cx">                                 0FEA0A11170513DB00BB722C /* FTLOutput.h in Headers */,
</span><ins>+                                9E72940B190F0514001A91B5 /* BundlePath.h in Headers */,
</ins><span class="cx">                                 0F48532A187DFDEC0083B687 /* FTLRecoveryOpcode.h in Headers */,
</span><span class="cx">                                 0F6B1CC41862C47800845D97 /* FTLRegisterAtOffset.h in Headers */,
</span><span class="cx">                                 0FCEFAAC1804C13E00472CE4 /* FTLSaveRestore.h in Headers */,
</span><span class="lines">@@ -6809,6 +6857,47 @@
</span><span class="cx">                         isa = PBXSourcesBuildPhase;
</span><span class="cx">                         buildActionMask = 2147483647;
</span><span class="cx">                         files = (
</span><ins>+                                552EA70C1908704800A66F2F /* JSDataViewPrototype.cpp in Sources */,
+                                55A04E211908653D0024E40C /* StringPrototype.cpp in Sources */,
+                                556A35EE190844C000B56747 /* WeakMapPrototype.cpp in Sources */,
+                                556A35ED190844B500B56747 /* WeakMapConstructor.cpp in Sources */,
+                                556A35EC190844AA00B56747 /* StringConstructor.cpp in Sources */,
+                                556A35EA190844A000B56747 /* SetIteratorPrototype.cpp in Sources */,
+                                556A35EB190844A000B56747 /* SetPrototype.cpp in Sources */,
+                                556A35E81908448000B56747 /* RegExpConstructor.cpp in Sources */,
+                                556A35E91908448000B56747 /* RegExpPrototype.cpp in Sources */,
+                                556A35E61908444900B56747 /* ObjectConstructor.cpp in Sources */,
+                                556A35E71908444900B56747 /* ObjectPrototype.cpp in Sources */,
+                                556A35E41908443700B56747 /* NameConstructor.cpp in Sources */,
+                                556A35E51908443700B56747 /* NamePrototype.cpp in Sources */,
+                                556A35E31908442A00B56747 /* MathObject.cpp in Sources */,
+                                556A35E01908441D00B56747 /* MapConstructor.cpp in Sources */,
+                                556A35E11908441D00B56747 /* MapIteratorPrototype.cpp in Sources */,
+                                556A35E21908441D00B56747 /* MapPrototype.cpp in Sources */,
+                                556A35DF190843F300B56747 /* ConsolePrototype.cpp in Sources */,
+                                556A35DC190843E700B56747 /* JSPromiseConstructor.cpp in Sources */,
+                                556A35DD190843E700B56747 /* JSPromiseFunctions.cpp in Sources */,
+                                556A35DE190843E700B56747 /* JSPromisePrototype.cpp in Sources */,
+                                556A35DB190843CF00B56747 /* JSONObject.cpp in Sources */,
+                                556A35DA190843C200B56747 /* JSGlobalObjectFunctions.cpp in Sources */,
+                                556A35D9190843B100B56747 /* JSFunction.cpp in Sources */,
+                                556A35D81908439D00B56747 /* JSBoundFunction.cpp in Sources */,
+                                556A35D71908438A00B56747 /* JSArrayIterator.cpp in Sources */,
+                                556A35D61908437500B56747 /* JSArrayBufferPrototype.cpp in Sources */,
+                                556A35D51908436800B56747 /* JSArrayBufferConstructor.cpp in Sources */,
+                                556A35D41908434D00B56747 /* FunctionPrototype.cpp in Sources */,
+                                556A35D31908434300B56747 /* FunctionConstructor.cpp in Sources */,
+                                556A35D21908433300B56747 /* ErrorPrototype.cpp in Sources */,
+                                556A35D11908432900B56747 /* ErrorConstructor.cpp in Sources */,
+                                556A35D01908432000B56747 /* DatePrototype.cpp in Sources */,
+                                556A35CF1908431600B56747 /* DateConstructor.cpp in Sources */,
+                                556A35CE1908430B00B56747 /* BooleanPrototype.cpp in Sources */,
+                                556A35CD190842FD00B56747 /* BooleanConstructor.cpp in Sources */,
+                                556A35CC190842F300B56747 /* ArrayIteratorPrototype.cpp in Sources */,
+                                556A35CB190842E800B56747 /* ArgumentsIteratorPrototype.cpp in Sources */,
+                                556A35CA190842DD00B56747 /* Arguments.cpp in Sources */,
+                                556A35C9190842D500B56747 /* NativeErrorConstructor.cpp in Sources */,
+                                556A35C8190842BC00B56747 /* SetConstructor.cpp in Sources */,
</ins><span class="cx">                                 554078AB18DA58AD00EFF7F2 /* ArrayConstructor.cpp in Sources */,
</span><span class="cx">                                 554078AF18DA58AD00EFF7F2 /* ArrayPrototype.cpp in Sources */,
</span><span class="cx">                                 55407A3818DA58AD00EFF7F2 /* NumberConstructor.cpp in Sources */,
</span><span class="lines">@@ -6828,6 +6917,10 @@
</span><span class="cx">                         isa = PBXSourcesBuildPhase;
</span><span class="cx">                         buildActionMask = 2147483647;
</span><span class="cx">                         files = (
</span><ins>+                                9EA5C7A2190F088700508EBE /* InitializeLLVMMac.cpp in Sources */,
+                                9EA5C7A1190F084200508EBE /* BundlePath.mm in Sources */,
+                                9E729408190F021E001A91B5 /* InitializeLLVMPOSIX.cpp in Sources */,
+                                9E729407190F01A5001A91B5 /* InitializeThreading.cpp in Sources */,
</ins><span class="cx">                                 0FFA549716B8835000B3A982 /* A64DOpcode.cpp in Sources */,
</span><span class="cx">                                 0F55F0F414D1063900AC7649 /* AbstractPC.cpp in Sources */,
</span><span class="cx">                                 147F39BD107EC37600427A48 /* ArgList.cpp in Sources */,
</span><span class="lines">@@ -7079,9 +7172,6 @@
</span><span class="cx">                                 C25F8BCD157544A900245B71 /* IncrementalSweeper.cpp in Sources */,
</span><span class="cx">                                 0F13E04E16164A1F00DC8DE7 /* IndexingType.cpp in Sources */,
</span><span class="cx">                                 0FCEFACA1805E75500472CE4 /* InitializeLLVM.cpp in Sources */,
</span><del>-                                0FCEFAB11805CA6D00472CE4 /* InitializeLLVMMac.mm in Sources */,
-                                0FCEFACB1805E75500472CE4 /* InitializeLLVMPOSIX.cpp in Sources */,
-                                E178636D0D9BEEC300D74E75 /* InitializeThreading.cpp in Sources */,
</del><span class="cx">                                 A513E5B7185B8BD3007E95AD /* InjectedScript.cpp in Sources */,
</span><span class="cx">                                 A514B2C2185A684400F3C7CB /* InjectedScriptBase.cpp in Sources */,
</span><span class="cx">                                 A58E35911860DECF001F24FE /* InjectedScriptHost.cpp in Sources */,
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCorebuildsymboltableindexpy"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/build-symbol-table-index.py (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/build-symbol-table-index.py        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/build-symbol-table-index.py        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -4,6 +4,7 @@
</span><span class="cx"> import os
</span><span class="cx"> import subprocess
</span><span class="cx"> import sys
</span><ins>+from sets import Set
</ins><span class="cx"> from operator import itemgetter
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -33,9 +34,19 @@
</span><span class="cx"> if os.path.isfile(symbol_table_location):
</span><span class="cx">     symbol_table_modification_time = os.path.getmtime(symbol_table_location)
</span><span class="cx"> 
</span><del>-file_suffix = &quot;bc.gz&quot;
</del><ins>+file_suffix = &quot;bc&quot;
</ins><span class="cx"> file_suffix_length = len(file_suffix)
</span><span class="cx"> 
</span><ins>+tested_symbols_location = &quot;./tested-symbols.symlst&quot;
+include_symbol_table_location = &quot;./InlineRuntimeSymbolTable.h&quot;
+tested_symbols = Set([])
+
+if os.path.isfile(tested_symbols_location):
+    with open(tested_symbols_location, 'r') as file:
+        print(&quot;Loading tested symbols&quot;)
+        for line in file:
+            tested_symbols.add(line[:-1])
+
</ins><span class="cx"> for bitcode_file in glob.iglob(os.path.join(framework_directory, &quot;*.&quot; + file_suffix)):
</span><span class="cx">     bitcode_basename = os.path.basename(bitcode_file)
</span><span class="cx">     binary_file = os.path.join(binary_file_directory, bitcode_basename[:-file_suffix_length] + &quot;o&quot;)
</span><span class="lines">@@ -48,8 +59,8 @@
</span><span class="cx">     lines = subprocess.check_output([&quot;nm&quot;, &quot;-U&quot;, &quot;-j&quot;, binary_file]).splitlines()
</span><span class="cx"> 
</span><span class="cx">     for symbol in lines:
</span><del>-        if symbol[:2] == &quot;__&quot; and symbol[-3:] != &quot;.eh&quot;:
-            symbol_table[symbol] = bitcode_basename[1:]
</del><ins>+        if symbol[:2] == &quot;__&quot; and symbol[-3:] != &quot;.eh&quot; and symbol in tested_symbols:
+            symbol_table[symbol[1:]] = bitcode_basename
</ins><span class="cx"> 
</span><span class="cx"> if not symbol_table_is_out_of_date:
</span><span class="cx">     sys.exit()
</span><span class="lines">@@ -67,8 +78,11 @@
</span><span class="cx"> 
</span><span class="cx"> print(&quot;Writing symbol table&quot;)
</span><span class="cx"> 
</span><del>-with open(symbol_table_location, &quot;w&quot;) as file:
-    for symbol, location in symbol_list:
-        file.write(&quot;{} {}\n&quot;.format(symbol, location))
-
</del><ins>+with open(symbol_table_location, &quot;w&quot;) as symbol_file:
+    with open(include_symbol_table_location, &quot;w&quot;) as include_file:
+        include_file.write(&quot;#define FOR_EACH_LIBRARY_SYMBOL(macro)&quot;)
+        for symbol, location in symbol_list:
+            symbol_file.write(&quot;{} {}\n&quot;.format(symbol, location))
+            include_file.write(&quot; \\\nmacro(\&quot;{}\&quot;, \&quot;{}\&quot;)&quot;.format(symbol, location))
+        include_file.write(&quot;\n&quot;)
</ins><span class="cx"> print(&quot;Done&quot;)
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCorebuildsymboltableindexsh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/build-symbol-table-index.sh (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/build-symbol-table-index.sh        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/build-symbol-table-index.sh        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -8,7 +8,7 @@
</span><span class="cx">     if [ -d &quot;$RUNTIME_DERIVED_SOURCES_DIR/$arch&quot; ];
</span><span class="cx">     then
</span><span class="cx">         mkdir -p &quot;$RUNTIME_INSTALL_DIR/$arch&quot;
</span><del>-        cp &quot;$RUNTIME_DERIVED_SOURCES_DIR/$arch&quot;/*.bc.gz &quot;$RUNTIME_INSTALL_DIR/$arch&quot;/.
</del><ins>+        cp &quot;$RUNTIME_DERIVED_SOURCES_DIR/$arch&quot;/*.bc &quot;$RUNTIME_INSTALL_DIR/$arch&quot;/.
</ins><span class="cx">         ${SRCROOT}/build-symbol-table-index.py $arch
</span><span class="cx">     fi
</span><span class="cx"> done
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCorecopyllvmirtoderivedsourcessh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/copy-llvm-ir-to-derived-sources.sh (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/copy-llvm-ir-to-derived-sources.sh        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/copy-llvm-ir-to-derived-sources.sh        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -11,7 +11,7 @@
</span><span class="cx">         for file in &quot;$OBJ_DIR/$arch&quot;/*.o;
</span><span class="cx">         do
</span><span class="cx">             file_name=${file##*/}
</span><del>-            gzip -9 -c &quot;$file&quot; &gt; &quot;$RUNTIME_DERIVED_SOURCES_DIR/$arch/${file_name%.o}.bc.gz&quot;
</del><ins>+            cp &quot;$file&quot; &quot;$RUNTIME_DERIVED_SOURCES_DIR/$arch/${file_name%.o}.bc&quot;
</ins><span class="cx">         done
</span><span class="cx">     fi
</span><span class="cx"> done
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoredfgDFGByteCodeParsercpp"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -1253,6 +1253,8 @@
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="cx">     Intrinsic intrinsic = callLinkStatus.intrinsicFor(specializationKind);
</span><ins>+
+    JSFunction* knownFunction = nullptr;
</ins><span class="cx">     if (intrinsic != NoIntrinsic) {
</span><span class="cx">         emitFunctionChecks(callLinkStatus, callTarget, registerOffset, specializationKind);
</span><span class="cx">             
</span><span class="lines">@@ -1269,9 +1271,13 @@
</span><span class="cx">         if (m_graph.compilation())
</span><span class="cx">             m_graph.compilation()-&gt;noticeInlinedCall();
</span><span class="cx">         return;
</span><del>-    }
</del><ins>+    } else if (JSFunction* function = callLinkStatus.function())
+        if (function-&gt;isHostFunction()) {
+            emitFunctionChecks(callLinkStatus, callTarget, registerOffset, specializationKind);
+            knownFunction = function;
+        }
</ins><span class="cx">     
</span><del>-    addCall(result, op, callTarget, argumentCountIncludingThis, registerOffset);
</del><ins>+    addCall(result, op, callTarget, argumentCountIncludingThis, registerOffset)-&gt;giveKnownFunction(knownFunction);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ByteCodeParser::emitFunctionChecks(const CallLinkStatus&amp; callLinkStatus, Node* callTarget, int registerOffset, CodeSpecializationKind kind)
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoredfgDFGNodeh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/dfg/DFGNode.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/dfg/DFGNode.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/dfg/DFGNode.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -1032,6 +1032,40 @@
</span><span class="cx">         return mergeSpeculation(m_opInfo2, prediction);
</span><span class="cx">     }
</span><span class="cx">     
</span><ins>+    bool canBeKnownFunction()
+    {
+        switch (op()) {
+        case Construct:
+        case Call:
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    bool hasKnownFunction()
+    {
+        switch (op()) {
+        case Construct:
+        case Call:
+            return (bool)m_opInfo;
+        default:
+            return false;
+        }
+    }
+    
+    JSFunction* knownFunction()
+    {
+        ASSERT(canBeKnownFunction());
+        return bitwise_cast&lt;JSFunction*&gt;(m_opInfo);
+    }
+
+    void giveKnownFunction(JSFunction* callData) 
+    {
+        ASSERT(canBeKnownFunction());
+        m_opInfo = bitwise_cast&lt;uintptr_t&gt;(callData);
+    }
+
</ins><span class="cx">     bool hasFunction()
</span><span class="cx">     {
</span><span class="cx">         switch (op()) {
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreftlFTLAbbreviatedTypesh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/ftl/FTLAbbreviatedTypes.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/ftl/FTLAbbreviatedTypes.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/ftl/FTLAbbreviatedTypes.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -43,6 +43,7 @@
</span><span class="cx"> typedef LLVMRealPredicate LRealPredicate;
</span><span class="cx"> typedef LLVMTypeRef LType;
</span><span class="cx"> typedef LLVMValueRef LValue;
</span><ins>+typedef LLVMMemoryBufferRef LMemoryBuffer;
</ins><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::FTL
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreftlFTLCompilecpp"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/ftl/FTLCompile.cpp (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/ftl/FTLCompile.cpp        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/ftl/FTLCompile.cpp        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -523,18 +523,32 @@
</span><span class="cx">         if (Options::llvmSimpleOpt()) {
</span><span class="cx">             modulePasses = llvm-&gt;CreatePassManager();
</span><span class="cx">             llvm-&gt;AddTargetData(llvm-&gt;GetExecutionEngineTargetData(engine), modulePasses);
</span><ins>+
+            LLVMTargetMachineRef targetMachine = llvm-&gt;GetExecutionEngineTargetMachine(engine);
+            
+            llvm-&gt;AddAnalysisPasses(targetMachine, modulePasses);
</ins><span class="cx">             llvm-&gt;AddPromoteMemoryToRegisterPass(modulePasses);
</span><ins>+
+            llvm-&gt;AddGlobalOptimizerPass(modulePasses);
+
+            llvm-&gt;AddFunctionInliningPass(modulePasses);
+            llvm-&gt;AddPruneEHPass(modulePasses);
+            llvm-&gt;AddGlobalDCEPass(modulePasses);
+            
</ins><span class="cx">             llvm-&gt;AddConstantPropagationPass(modulePasses);
</span><ins>+            llvm-&gt;AddAggressiveDCEPass(modulePasses);
</ins><span class="cx">             llvm-&gt;AddInstructionCombiningPass(modulePasses);
</span><span class="cx">             llvm-&gt;AddBasicAliasAnalysisPass(modulePasses);
</span><span class="cx">             llvm-&gt;AddTypeBasedAliasAnalysisPass(modulePasses);
</span><span class="cx">             llvm-&gt;AddGVNPass(modulePasses);
</span><span class="cx">             llvm-&gt;AddCFGSimplificationPass(modulePasses);
</span><span class="cx">             llvm-&gt;AddDeadStoreEliminationPass(modulePasses);
</span><ins>+
</ins><span class="cx">             llvm-&gt;RunPassManager(modulePasses, state.module);
</span><span class="cx">         } else {
</span><span class="cx">             LLVMPassManagerBuilderRef passBuilder = llvm-&gt;PassManagerBuilderCreate();
</span><span class="cx">             llvm-&gt;PassManagerBuilderSetOptLevel(passBuilder, Options::llvmOptimizationLevel());
</span><ins>+            llvm-&gt;PassManagerBuilderUseInlinerWithThreshold(passBuilder, 275);
</ins><span class="cx">             llvm-&gt;PassManagerBuilderSetSizeLevel(passBuilder, Options::llvmSizeLevel());
</span><span class="cx">         
</span><span class="cx">             functionPasses = llvm-&gt;CreateFunctionPassManagerForModule(state.module);
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(FTL_JIT)
</span><span class="cx"> 
</span><ins>+#include &quot;BundlePath.h&quot;
</ins><span class="cx"> #include &quot;CodeBlockWithJITType.h&quot;
</span><span class="cx"> #include &quot;DFGAbstractInterpreterInlines.h&quot;
</span><span class="cx"> #include &quot;DFGInPlaceAbstractState.h&quot;
</span><span class="lines">@@ -40,11 +41,13 @@
</span><span class="cx"> #include &quot;FTLOutput.h&quot;
</span><span class="cx"> #include &quot;FTLThunks.h&quot;
</span><span class="cx"> #include &quot;FTLWeightedTarget.h&quot;
</span><ins>+#include &quot;JSCInlines.h&quot;
</ins><span class="cx"> #include &quot;LinkBuffer.h&quot;
</span><span class="cx"> #include &quot;OperandsInlines.h&quot;
</span><del>-#include &quot;JSCInlines.h&quot;
</del><span class="cx"> #include &quot;VirtualRegister.h&quot;
</span><span class="cx"> #include &lt;atomic&gt;
</span><ins>+#include &lt;dlfcn.h&gt;
+#include &lt;llvm/InitializeLLVM.h&gt;
</ins><span class="cx"> #include &lt;wtf/ProcessID.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC { namespace FTL {
</span><span class="lines">@@ -75,6 +78,8 @@
</span><span class="cx">         , m_state(state.graph)
</span><span class="cx">         , m_interpreter(state.graph, m_state)
</span><span class="cx">         , m_stackmapIDs(0)
</span><ins>+        , m_tbaaKind(mdKindID(state.context, &quot;tbaa&quot;))
+        , m_tbaaStructKind(mdKindID(state.context, &quot;tbaa.struct&quot;))
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -120,7 +125,35 @@
</span><span class="cx">         
</span><span class="cx">         m_out.appendTo(m_prologue, stackOverflow);
</span><span class="cx">         createPhiVariables();
</span><ins>+
+        Vector&lt;BasicBlock*&gt; depthFirst;
+        m_graph.getBlocksInDepthFirstOrder(depthFirst);
+
+        int maxNumberOfArguments = -1;
+        for (unsigned blockIndex = depthFirst.size(); blockIndex--; ) {
+            BasicBlock* block = depthFirst[blockIndex];
+            for (unsigned nodeIndex = block-&gt;size(); nodeIndex--; ) {
+                Node* m_node = block-&gt;at(nodeIndex);
+                if (m_node-&gt;hasKnownFunction()) {
+                    int numArgs = m_node-&gt;numChildren();
+                    NativeFunction func = m_node-&gt;knownFunction()-&gt;nativeFunction();
+                    Dl_info info;
+                    if (dladdr((void*)func, &amp;info)) {
+                        LValue callee = getFunctionBySymbol(info.dli_sname);
+                        if (callee &amp;&amp; numArgs &gt; maxNumberOfArguments)
+                            maxNumberOfArguments = numArgs;
+                    }
+                }
+            }
+        }
+
</ins><span class="cx">         LValue capturedAlloca = m_out.alloca(arrayType(m_out.int64, m_graph.m_nextMachineLocal));
</span><ins>+
+        if (maxNumberOfArguments &gt;= 0) {
+            m_execState = m_out.alloca(arrayType(m_out.int64, JSStack::CallFrameHeaderSize + maxNumberOfArguments));
+            m_execStorage = m_out.ptrToInt(m_execState, m_out.intPtr);        
+        }
+
</ins><span class="cx">         m_captured = m_out.add(
</span><span class="cx">             m_out.ptrToInt(capturedAlloca, m_out.intPtr),
</span><span class="cx">             m_out.constIntPtr(m_graph.m_nextMachineLocal * sizeof(Register)));
</span><span class="lines">@@ -157,9 +190,8 @@
</span><span class="cx">             m_out.stackmapIntrinsic(), m_out.constInt64(m_ftlState.handleExceptionStackmapID),
</span><span class="cx">             m_out.constInt32(MacroAssembler::maxJumpReplacementSize()));
</span><span class="cx">         m_out.unreachable();
</span><del>-        
-        Vector&lt;BasicBlock*&gt; depthFirst;
-        m_graph.getBlocksInDepthFirstOrder(depthFirst);
</del><ins>+
+
</ins><span class="cx">         for (unsigned i = 0; i &lt; depthFirst.size(); ++i)
</span><span class="cx">             compileBlock(depthFirst[i]);
</span><span class="cx">         
</span><span class="lines">@@ -3528,15 +3560,19 @@
</span><span class="cx">     {
</span><span class="cx">         setBoolean(m_out.bitNot(boolify(m_node-&gt;child1())));
</span><span class="cx">     }
</span><del>-    
</del><ins>+
</ins><span class="cx">     void compileCallOrConstruct()
</span><span class="cx">     {
</span><span class="cx">         int dummyThisArgument = m_node-&gt;op() == Call ? 0 : 1;
</span><span class="cx">         int numPassedArgs = m_node-&gt;numChildren() - 1;
</span><span class="cx">         int numArgs = numPassedArgs + dummyThisArgument;
</span><del>-        
-        LValue callee = lowJSValue(m_graph.varArgChild(m_node, 0));
-        
</del><ins>+
+        if (m_node-&gt;hasKnownFunction()
+            &amp;&amp; possiblyCompileInlineableNativeCall(dummyThisArgument, numPassedArgs, numArgs))
+            return;
+
+        LValue jsCallee = lowJSValue(m_graph.varArgChild(m_node, 0));
+
</ins><span class="cx">         unsigned stackmapID = m_stackmapIDs++;
</span><span class="cx">         
</span><span class="cx">         Vector&lt;LValue&gt; arguments;
</span><span class="lines">@@ -3544,10 +3580,10 @@
</span><span class="cx">         arguments.append(m_out.constInt32(sizeOfCall()));
</span><span class="cx">         arguments.append(constNull(m_out.ref8));
</span><span class="cx">         arguments.append(m_out.constInt32(1 + JSStack::CallFrameHeaderSize - JSStack::CallerFrameAndPCSize + numArgs));
</span><del>-        arguments.append(callee); // callee -&gt; %rax
</del><ins>+        arguments.append(jsCallee); // callee -&gt; %rax
</ins><span class="cx">         arguments.append(getUndef(m_out.int64)); // code block
</span><span class="cx">         arguments.append(getUndef(m_out.int64)); // scope chain
</span><del>-        arguments.append(callee); // callee -&gt; stack
</del><ins>+        arguments.append(jsCallee); // callee -&gt; stack
</ins><span class="cx">         arguments.append(m_out.constInt64(numArgs)); // argument count and zeros for the tag
</span><span class="cx">         if (dummyThisArgument)
</span><span class="cx">             arguments.append(getUndef(m_out.int64));
</span><span class="lines">@@ -3563,7 +3599,165 @@
</span><span class="cx">         
</span><span class="cx">         setJSValue(call);
</span><span class="cx">     }
</span><del>-    
</del><ins>+
+    bool possiblyCompileInlineableNativeCall(int dummyThisArgument, int numPassedArgs, int numArgs)
+    {
+        JSFunction* knownFunction = m_node-&gt;knownFunction();
+        NativeFunction function = knownFunction-&gt;nativeFunction();
+        Dl_info info;
+        if (dladdr((void*)function, &amp;info)) {
+            LValue callee = getFunctionBySymbol(info.dli_sname);
+            LType typeCallee;
+            if (callee &amp;&amp; (typeCallee = llvm-&gt;TypeOf(callee)) &amp;&amp; (typeCallee = llvm-&gt;GetElementType(typeCallee))) {
+
+                JSScope* scope = knownFunction-&gt;scopeUnchecked();
+                m_out.storePtr(m_callFrame, m_execStorage, m_heaps.CallFrame_callerFrame);
+                m_out.storePtr(constNull(m_out.intPtr), addressFor(m_execStorage, JSStack::CodeBlock));
+                m_out.storePtr(weakPointer(scope), addressFor(m_execStorage, JSStack::ScopeChain));
+                m_out.storePtr(weakPointer(knownFunction), addressFor(m_execStorage, JSStack::Callee));
+
+                m_out.store64(m_out.constInt64(numArgs), addressFor(m_execStorage, JSStack::ArgumentCount));
+
+                if (dummyThisArgument) 
+                    m_out.storePtr(getUndef(m_out.int64), addressFor(m_execStorage, JSStack::ThisArgument));
+                
+                for (int i = 0; i &lt; numPassedArgs; ++i) {
+                    m_out.storePtr(lowJSValue(m_graph.varArgChild(m_node, 1 + i)),
+                        addressFor(m_execStorage, dummyThisArgument ? JSStack::FirstArgument : JSStack::ThisArgument, i * sizeof(Register)));
+                }
+
+                LType typeCalleeArg;
+                llvm-&gt;GetParamTypes(typeCallee, &amp;typeCalleeArg);
+                LValue calleeCallFrame = m_out.address(m_execState, m_heaps.CallFrame_callerFrame).value();
+                m_out.storePtr(m_out.ptrToInt(calleeCallFrame, m_out.intPtr), m_out.absolute(&amp;vm().topCallFrame));
+                
+                LValue call = vmCall(callee, 
+                    m_out.bitCast(calleeCallFrame, typeCalleeArg));
+
+                if (Options::verboseCompilation())
+                    dataLog(&quot;Inlining: &quot;, info.dli_sname, &quot;\n&quot;);
+
+                setJSValue(call);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    LValue getFunctionBySymbol(const CString symbol)
+    {
+        if (!m_ftlState.symbolTable.contains(symbol)) 
+            return nullptr;
+        if (!getModuleByPathForSymbol(m_ftlState.symbolTable.get(symbol), symbol))
+            return nullptr;
+        return llvm-&gt;GetNamedFunction(m_ftlState.module, symbol.data());
+    }
+
+    bool getModuleByPathForSymbol(const CString path, const CString symbol)
+    {
+        if (m_ftlState.nativeLoadedLibraries.contains(path)) {
+            LValue function = llvm-&gt;GetNamedFunction(m_ftlState.module, symbol.data());
+            if (!isInlinableSize(function)) {
+                // We had no choice but to compile this function, but don't try to inline it ever again.
+                m_ftlState.symbolTable.remove(symbol);
+                return false;
+            }
+            return true;
+        }
+
+        LMemoryBuffer memBuf;
+        
+        const CString actualPath = toCString(bundlePath().data(), 
+#if CPU(X86_64)
+            &quot;/Resources/Runtime/x86_64/&quot;,
+#elif CPU(ARM64) 
+            &quot;/Resources/Runtime/arm64/&quot;,
+#else
+#error &quot;Unrecognized Architecture&quot;
+#endif
+            path.data());
+
+        if (llvm-&gt;CreateMemoryBufferWithContentsOfFile(actualPath.data(), &amp;memBuf, nullptr)) {
+            if (Options::verboseCompilation()) 
+                dataLog(&quot;Failed to load module at &quot;, actualPath.data(), &quot;\n for symbol &quot;, symbol.data());
+            return false;
+        }
+
+        LModule module;
+
+        if (llvm-&gt;ParseBitcodeInContext(m_ftlState.context, memBuf, &amp;module, nullptr)) {
+            llvm-&gt;DisposeMemoryBuffer(memBuf);
+            return false;
+        }
+
+        llvm-&gt;DisposeMemoryBuffer(memBuf);
+        
+        if (LValue function = llvm-&gt;GetNamedFunction(m_ftlState.module, symbol.data())) {
+            if (!isInlinableSize(function)) {
+                m_ftlState.symbolTable.remove(symbol);
+                llvm-&gt;DisposeModule(module);
+                return false;
+            }
+        }
+
+        Vector&lt;CString&gt; namedFunctions;
+        for (LValue function = llvm-&gt;GetFirstFunction(module); function; function = llvm-&gt;GetNextFunction(function)) {
+            CString functionName(llvm-&gt;GetValueName(function));
+            namedFunctions.append(functionName);
+            
+            for (LBasicBlock basicBlock = llvm-&gt;GetFirstBasicBlock(function); basicBlock; basicBlock = llvm-&gt;GetNextBasicBlock(basicBlock)) {
+                for (LValue instruction = llvm-&gt;GetFirstInstruction(basicBlock); instruction; instruction = llvm-&gt;GetNextInstruction(instruction)) {
+                    llvm-&gt;SetMetadata(instruction, m_tbaaKind, nullptr);
+                    llvm-&gt;SetMetadata(instruction, m_tbaaStructKind, nullptr);
+                }
+            }
+        }
+
+        Vector&lt;CString&gt; namedGlobals;
+        for (LValue global = llvm-&gt;GetFirstGlobal(module); global; global = llvm-&gt;GetNextGlobal(global)) {
+            CString globalName(llvm-&gt;GetValueName(global));
+            namedGlobals.append(globalName);
+        }
+
+        if (llvm-&gt;LinkModules(m_ftlState.module, module, LLVMLinkerDestroySource, nullptr))
+            return false;
+        
+        for (CString* symbol = namedFunctions.begin(); symbol != namedFunctions.end(); ++symbol) {
+            LValue function = llvm-&gt;GetNamedFunction(m_ftlState.module, symbol-&gt;data());
+            llvm-&gt;SetVisibility(function, LLVMHiddenVisibility);
+            if (!llvm-&gt;IsDeclaration(function)) {
+                llvm-&gt;SetLinkage(function, LLVMPrivateLinkage);
+
+#if ASSERT_DISABLED
+                llvm-&gt;RemoveFunctionAttr(function, LLVMStackProtectAttribute);
+#endif // ASSERT_DISABLED
+            }
+        }
+
+        for (CString* symbol = namedGlobals.begin(); symbol != namedGlobals.end(); ++symbol) {
+            LValue global = llvm-&gt;GetNamedGlobal(m_ftlState.module, symbol-&gt;data());
+            llvm-&gt;SetVisibility(global, LLVMHiddenVisibility);
+            if (!llvm-&gt;IsDeclaration(global))
+                llvm-&gt;SetLinkage(global, LLVMPrivateLinkage);
+        }
+
+        m_ftlState.nativeLoadedLibraries.add(path);
+        return true;
+    }
+
+    bool isInlinableSize(LValue function)
+    {
+        size_t instructionCount = 0;
+        size_t maxSize = Options::maximumLLVMInstructionCountForNativeInlining();
+        for (LBasicBlock basicBlock = llvm-&gt;GetFirstBasicBlock(function); basicBlock; basicBlock = llvm-&gt;GetNextBasicBlock(basicBlock)) {
+            for (LValue instruction = llvm-&gt;GetFirstInstruction(basicBlock); instruction; instruction = llvm-&gt;GetNextInstruction(instruction)) {
+                if (++instructionCount &gt;= maxSize)
+                    return false;
+            }
+        }
+        return true;
+    }
+
</ins><span class="cx">     void compileJump()
</span><span class="cx">     {
</span><span class="cx">         m_out.jump(lowBlock(m_node-&gt;targetBlock()));
</span><span class="lines">@@ -6082,6 +6276,8 @@
</span><span class="cx">     LBasicBlock m_handleExceptions;
</span><span class="cx">     HashMap&lt;BasicBlock*, LBasicBlock&gt; m_blocks;
</span><span class="cx">     
</span><ins>+    LValue m_execState;
+    LValue m_execStorage;
</ins><span class="cx">     LValue m_callFrame;
</span><span class="cx">     LValue m_captured;
</span><span class="cx">     LValue m_tagTypeNumber;
</span><span class="lines">@@ -6113,6 +6309,8 @@
</span><span class="cx">     Node* m_node;
</span><span class="cx">     
</span><span class="cx">     uint32_t m_stackmapIDs;
</span><ins>+    unsigned m_tbaaKind;
+    unsigned m_tbaaStructKind;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> void lowerDFGToLLVM(State&amp; state)
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreftlFTLStatecpp"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/ftl/FTLState.cpp (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/ftl/FTLState.cpp        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/ftl/FTLState.cpp        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -32,11 +32,15 @@
</span><span class="cx"> #include &quot;FTLForOSREntryJITCode.h&quot;
</span><span class="cx"> #include &quot;FTLJITCode.h&quot;
</span><span class="cx"> #include &quot;FTLJITFinalizer.h&quot;
</span><ins>+#include &quot;InlineRuntimeSymbolTable.h&quot;
+#include &lt;llvm/InitializeLLVM.h&gt;
+#include &lt;stdio.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> namespace JSC { namespace FTL {
</span><span class="cx"> 
</span><span class="cx"> using namespace DFG;
</span><span class="cx"> 
</span><ins>+#define LINE_SIZE 500
</ins><span class="cx"> State::State(Graph&amp; graph)
</span><span class="cx">     : graph(graph)
</span><span class="cx">     , context(llvm-&gt;ContextCreate())
</span><span class="lines">@@ -46,6 +50,12 @@
</span><span class="cx">     , compactUnwind(0)
</span><span class="cx">     , compactUnwindSize(0)
</span><span class="cx"> {
</span><ins>+
+#define SYMBOL_TABLE_ADD(symbol, file) \
+    symbolTable.fastAdd(symbol, file);
+    FOR_EACH_LIBRARY_SYMBOL(SYMBOL_TABLE_ADD)
+#undef SYMBOL_TABLE_ADD
+    
</ins><span class="cx">     switch (graph.m_plan.mode) {
</span><span class="cx">     case FTLMode: {
</span><span class="cx">         jitCode = adoptRef(new JITCode());
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreftlFTLStateh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/ftl/FTLState.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/ftl/FTLState.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/ftl/FTLState.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -81,6 +81,9 @@
</span><span class="cx">     RefPtr&lt;DataSection&gt; stackmapsSection;
</span><span class="cx">     
</span><span class="cx">     void dumpState(const char* when);
</span><ins>+
+    HashSet&lt;CString&gt; nativeLoadedLibraries;
+    HashMap&lt;CString, CString&gt; symbolTable;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::FTL
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreheapHandleStackh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/heap/HandleStack.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/heap/HandleStack.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/heap/HandleStack.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -53,7 +53,7 @@
</span><span class="cx">     void visit(HeapRootVisitor&amp;);
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void grow();
</del><ins>+    JS_EXPORT_PRIVATE void grow();
</ins><span class="cx">     void zapTo(Frame&amp;);
</span><span class="cx">     HandleSlot findFirstAfter(HandleSlot);
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCorellvmInitializeLLVMh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVM.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVM.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVM.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -28,10 +28,15 @@
</span><span class="cx"> 
</span><span class="cx"> #if HAVE(LLVM)
</span><span class="cx"> 
</span><ins>+#include &lt;string&gt;
+#include &lt;wtf/text/CString.h&gt;
+
</ins><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><span class="cx"> void initializeLLVMImpl();
</span><span class="cx"> 
</span><ins>+extern const CString* llvmBitcodeLibraryForInliningPath;
+
</ins><span class="cx"> // You msut call this before using JSC::llvm. It's safe to call this multiple times.
</span><span class="cx"> // Returns true if we successfully loaded LLVM. Returns false if we didn't.
</span><span class="cx"> bool initializeLLVM();
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCorellvmInitializeLLVMMaccpp"></a>
<div class="addfile"><h4>Added: branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVMMac.cpp (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVMMac.cpp                                (rev 0)
+++ branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVMMac.cpp        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include &quot;config.h&quot;
+#include &quot;InitializeLLVM.h&quot;
+
+#if HAVE(LLVM)
+
+#include &quot;BundlePath.h&quot;
+#include &quot;InitializeLLVMPOSIX.h&quot;
+#include &lt;wtf/StringPrintStream.h&gt;
+
+// Use the &quot;JS&quot; prefix to make check-for-inappropriate-objc-class-names happy. I
+// think this is better than hacking that script.
+
+namespace JSC {
+
+void initializeLLVMImpl()
+{
+    initializeLLVMPOSIX(toCString(bundlePath().data(), &quot;/Libraries/libllvmForJSC.dylib&quot;).data());
+}
+
+} // namespace JSC
+
+#endif // HAVE(LLVM)
</ins></span></pre></div>
<a id="branchesftloptSourceJavaScriptCorellvmInitializeLLVMMacmm"></a>
<div class="delfile"><h4>Deleted: branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVMMac.mm (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVMMac.mm        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/llvm/InitializeLLVMMac.mm        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -1,57 +0,0 @@
</span><del>-/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#import &quot;config.h&quot;
-#import &quot;InitializeLLVM.h&quot;
-
-#if HAVE(LLVM)
-
-#import &quot;InitializeLLVMPOSIX.h&quot;
-#import &lt;Foundation/Foundation.h&gt;
-
-// Use the &quot;JS&quot; prefix to make check-for-inappropriate-objc-class-names happy. I
-// think this is better than hacking that script.
-
-@interface JSJavaScriptCoreBundleFinder : NSObject
-@end
-
-@implementation JSJavaScriptCoreBundleFinder
-@end
-
-namespace JSC {
-
-void initializeLLVMImpl()
-{
-    @autoreleasepool {
-        NSBundle *myBundle = [NSBundle bundleForClass:[JSJavaScriptCoreBundleFinder class]];
-        NSString *path = [[myBundle bundlePath] stringByAppendingPathComponent:@&quot;Libraries/libllvmForJSC.dylib&quot;];
-        
-        initializeLLVMPOSIX([path UTF8String]);
-    }
-}
-
-} // namespace JSC
-
-#endif // HAVE(LLVM)
</del></span></pre></div>
<a id="branchesftloptSourceJavaScriptCorellvmLLVMAPIFunctionsh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/llvm/LLVMAPIFunctions.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/llvm/LLVMAPIFunctions.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/llvm/LLVMAPIFunctions.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -29,6 +29,13 @@
</span><span class="cx"> #include &quot;LLVMHeaders.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_LLVM_API_FUNCTION(macro) \
</span><ins>+    macro(LLVMBool, ParseBitcode, (LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule, char **OutMessage)) \
+    macro(LLVMBool, ParseBitcodeInContext, (LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule, char **OutMessage)) \
+    macro(LLVMBool, GetBitcodeModuleInContext, (LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, char **OutMessage)) \
+    macro(LLVMBool, GetBitcodeModule, (LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, char **OutMessage)) \
+    macro(LLVMBool, GetBitcodeModuleProviderInContext, (LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef *OutMP, char **OutMessage)) \
+    macro(LLVMBool, GetBitcodeModuleProvider, (LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef *OutMP, char **OutMessage)) \
+    macro(LLVMBool, LinkModules, (LLVMModuleRef Dest, LLVMModuleRef Str, LLVMLinkerMode Mode, char **OutMessage)) \
</ins><span class="cx">     macro(void, InitializeCore, (LLVMPassRegistryRef R)) \
</span><span class="cx">     macro(void, Shutdown, ()) \
</span><span class="cx">     macro(char *, CreateMessage, (const char *Message)) \
</span><span class="lines">@@ -51,6 +58,7 @@
</span><span class="cx">     macro(void, SetModuleInlineAsm, (LLVMModuleRef M, const char *Asm)) \
</span><span class="cx">     macro(LLVMContextRef, GetModuleContext, (LLVMModuleRef M)) \
</span><span class="cx">     macro(LLVMTypeRef, GetTypeByName, (LLVMModuleRef M, const char *Name)) \
</span><ins>+    macro(void, DumpType, (LLVMTypeRef Val)) \
</ins><span class="cx">     macro(unsigned, GetNamedMetadataNumOperands, (LLVMModuleRef M, const char* name)) \
</span><span class="cx">     macro(void, GetNamedMetadataOperands, (LLVMModuleRef M, const char* name, LLVMValueRef *Dest)) \
</span><span class="cx">     macro(void, AddNamedMetadataOperand, (LLVMModuleRef M, const char* name, LLVMValueRef Val)) \
</span><span class="lines">@@ -575,6 +583,7 @@
</span><span class="cx">     macro(LLVMBool, FindFunction, (LLVMExecutionEngineRef EE, const char *Name, LLVMValueRef *OutFn)) \
</span><span class="cx">     macro(void *, RecompileAndRelinkFunction, (LLVMExecutionEngineRef EE, LLVMValueRef Fn)) \
</span><span class="cx">     macro(LLVMTargetDataRef, GetExecutionEngineTargetData, (LLVMExecutionEngineRef EE)) \
</span><ins>+    macro(LLVMTargetMachineRef, GetExecutionEngineTargetMachine, (LLVMExecutionEngineRef EE)) \
</ins><span class="cx">     macro(void, AddGlobalMapping, (LLVMExecutionEngineRef EE, LLVMValueRef Global, void* Addr)) \
</span><span class="cx">     macro(void *, GetPointerToGlobal, (LLVMExecutionEngineRef EE, LLVMValueRef Global)) \
</span><span class="cx">     macro(LLVMMCJITMemoryManagerRef, CreateSimpleMCJITMemoryManager, (void *Opaque, LLVMMemoryManagerAllocateCodeSectionCallback AllocateCodeSection, LLVMMemoryManagerAllocateDataSectionCallback AllocateDataSection, LLVMMemoryManagerFinalizeMemoryCallback FinalizeMemory, LLVMMemoryManagerDestroyCallback Destory)) \
</span><span class="lines">@@ -601,9 +610,18 @@
</span><span class="cx">     macro(void, PassManagerBuilderPopulateFunctionPassManager, (LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM)) \
</span><span class="cx">     macro(void, PassManagerBuilderPopulateModulePassManager, (LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM)) \
</span><span class="cx">     macro(void, PassManagerBuilderPopulateLTOPassManager, (LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM, LLVMBool Internalize, LLVMBool RunInliner)) \
</span><ins>+    macro(void, AddAnalysisPasses, (LLVMTargetMachineRef T, LLVMPassManagerRef PM)) \
+    macro(void, AddInternalizePass, (LLVMPassManagerRef PM, unsigned AllButMain)) \
</ins><span class="cx">     macro(void, AddAggressiveDCEPass, (LLVMPassManagerRef PM)) \
</span><span class="cx">     macro(void, AddCFGSimplificationPass, (LLVMPassManagerRef PM)) \
</span><span class="cx">     macro(void, AddDeadStoreEliminationPass, (LLVMPassManagerRef PM)) \
</span><ins>+    macro(void, AddFunctionInliningPass, (LLVMPassManagerRef PM)) \
+    macro(void, AddGlobalDCEPass, (LLVMPassManagerRef PM)) \
+    macro(void, AddPruneEHPass, (LLVMPassManagerRef PM)) \
+    macro(void, AddIPSCCPPass, (LLVMPassManagerRef PM)) \
+    macro(void, AddDeadArgEliminationPass, (LLVMPassManagerRef PM)) \
+    macro(void, AddConstantMergePass, (LLVMPassManagerRef PM)) \
+    macro(void, AddGlobalOptimizerPass, (LLVMPassManagerRef PM)) \
</ins><span class="cx">     macro(void, AddGVNPass, (LLVMPassManagerRef PM)) \
</span><span class="cx">     macro(void, AddIndVarSimplifyPass, (LLVMPassManagerRef PM)) \
</span><span class="cx">     macro(void, AddInstructionCombiningPass, (LLVMPassManagerRef PM)) \
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCorellvmLLVMHeadersh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/llvm/LLVMHeaders.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/llvm/LLVMHeaders.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/llvm/LLVMHeaders.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -43,10 +43,15 @@
</span><span class="cx"> #endif // COMPILER(CLANG)
</span><span class="cx"> 
</span><span class="cx"> #include &lt;llvm-c/Analysis.h&gt;
</span><ins>+#include &lt;llvm-c/BitReader.h&gt;
</ins><span class="cx"> #include &lt;llvm-c/Core.h&gt;
</span><span class="cx"> #include &lt;llvm-c/Disassembler.h&gt;
</span><span class="cx"> #include &lt;llvm-c/ExecutionEngine.h&gt;
</span><ins>+#include &lt;llvm-c/Initialization.h&gt;
+#include &lt;llvm-c/Linker.h&gt;
</ins><span class="cx"> #include &lt;llvm-c/Target.h&gt;
</span><ins>+#include &lt;llvm-c/TargetMachine.h&gt;
+#include &lt;llvm-c/Transforms/IPO.h&gt;
</ins><span class="cx"> #include &lt;llvm-c/Transforms/PassManagerBuilder.h&gt;
</span><span class="cx"> #include &lt;llvm-c/Transforms/Scalar.h&gt;
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeBundlePathh"></a>
<div class="addfile"><h4>Added: branches/ftlopt/Source/JavaScriptCore/runtime/BundlePath.h (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/BundlePath.h                                (rev 0)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/BundlePath.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+/*
+ * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef BundlePath_h
+#define BundlePath_h
+
+#include &lt;string&gt;
+#include &lt;wtf/text/CString.h&gt;
+
+namespace JSC {
+
+const CString&amp; bundlePath();
+
+} // namespace JSC
+
+#endif // BundlePath_h
+
</ins></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeBundlePathmm"></a>
<div class="addfile"><h4>Added: branches/ftlopt/Source/JavaScriptCore/runtime/BundlePath.mm (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/BundlePath.mm                                (rev 0)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/BundlePath.mm        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,56 @@
</span><ins>+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#import &quot;config.h&quot;
+#import &quot;BundlePath.h&quot;
+
+#import &lt;Foundation/Foundation.h&gt;
+#import &lt;string&gt;
+
+@interface JSJavaScriptCoreFinder : NSObject
+@end
+
+@implementation JSJavaScriptCoreFinder
+@end
+
+
+namespace JSC {
+
+const CString* constantBundlePath = nullptr;
+
+const CString&amp; bundlePath()
+{
+    if (!constantBundlePath) {
+        @autoreleasepool {
+            NSBundle* myBundle = [NSBundle bundleForClass:[JSJavaScriptCoreFinder class]];
+
+            constantBundlePath = new CString([[myBundle bundlePath] UTF8String]);
+        }
+    }
+
+    return *constantBundlePath;
+}
+
+} // namespace JSC
</ins></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeDateConversionh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/DateConversion.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/DateConversion.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/DateConversion.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx">     DateTimeFormatDateAndTime = DateTimeFormatDate | DateTimeFormatTime
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-WTF::String formatDateTime(const GregorianDateTime&amp;, DateTimeFormat, bool asUTCVariant);
</del><ins>+JS_EXPORT_PRIVATE WTF::String formatDateTime(const GregorianDateTime&amp;, DateTimeFormat, bool asUTCVariant);
</ins><span class="cx"> 
</span><span class="cx"> } // namespace JSC
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeDateInstanceh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/DateInstance.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/DateInstance.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/DateInstance.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx">         void finishCreation(VM&amp;);
</span><span class="cx">         JS_EXPORT_PRIVATE void finishCreation(VM&amp;, double);
</span><span class="cx"> 
</span><del>-        static void destroy(JSCell*);
</del><ins>+        JS_EXPORT_PRIVATE static void destroy(JSCell*);
</ins><span class="cx">  
</span><span class="cx">     public:
</span><span class="cx">         typedef JSWrapperObject Base;
</span><span class="lines">@@ -74,8 +74,8 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">     private:
</span><del>-        const GregorianDateTime* calculateGregorianDateTime(ExecState*) const;
-        const GregorianDateTime* calculateGregorianDateTimeUTC(ExecState*) const;
</del><ins>+        JS_EXPORT_PRIVATE const GregorianDateTime* calculateGregorianDateTime(ExecState*) const;
+        JS_EXPORT_PRIVATE const GregorianDateTime* calculateGregorianDateTimeUTC(ExecState*) const;
</ins><span class="cx"> 
</span><span class="cx">         mutable RefPtr&lt;DateInstanceData&gt; m_data;
</span><span class="cx">     };
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeExceptionHelpersh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/ExceptionHelpers.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/ExceptionHelpers.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/ExceptionHelpers.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -50,9 +50,9 @@
</span><span class="cx"> JSObject* createErrorForInvalidGlobalAssignment(ExecState*, const String&amp;);
</span><span class="cx"> JSString* errorDescriptionForValue(ExecState*, JSValue);
</span><span class="cx"> 
</span><del>-JSObject* throwOutOfMemoryError(ExecState*);
-JSObject* throwStackOverflowError(ExecState*);
-JSObject* throwTerminatedExecutionException(ExecState*);
</del><ins>+JS_EXPORT_PRIVATE JSObject* throwOutOfMemoryError(ExecState*);
+JS_EXPORT_PRIVATE JSObject* throwStackOverflowError(ExecState*);
+JS_EXPORT_PRIVATE JSObject* throwTerminatedExecutionException(ExecState*);
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> class TerminatedExecutionError : public JSNonFinalObject {
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeJSArrayh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/JSArray.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/JSArray.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/JSArray.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -61,20 +61,20 @@
</span><span class="cx"> 
</span><span class="cx">     JS_EXPORT_PRIVATE static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&amp;, bool throwException);
</span><span class="cx"> 
</span><del>-    static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&amp;);
</del><ins>+    JS_EXPORT_PRIVATE static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&amp;);
</ins><span class="cx"> 
</span><span class="cx">     DECLARE_EXPORT_INFO;
</span><span class="cx">         
</span><span class="cx">     unsigned length() const { return getArrayLength(); }
</span><span class="cx">     // OK to use on new arrays, but not if it might be a RegExpMatchArray.
</span><del>-    bool setLength(ExecState*, unsigned, bool throwException = false);
</del><ins>+    JS_EXPORT_PRIVATE bool setLength(ExecState*, unsigned, bool throwException = false);
</ins><span class="cx"> 
</span><del>-    void sort(ExecState*);
-    void sort(ExecState*, JSValue compareFunction, CallType, const CallData&amp;);
-    void sortNumeric(ExecState*, JSValue compareFunction, CallType, const CallData&amp;);
</del><ins>+    JS_EXPORT_PRIVATE void sort(ExecState*);
+    JS_EXPORT_PRIVATE void sort(ExecState*, JSValue compareFunction, CallType, const CallData&amp;);
+    JS_EXPORT_PRIVATE void sortNumeric(ExecState*, JSValue compareFunction, CallType, const CallData&amp;);
</ins><span class="cx"> 
</span><del>-    void push(ExecState*, JSValue);
-    JSValue pop(ExecState*);
</del><ins>+    JS_EXPORT_PRIVATE void push(ExecState*, JSValue);
+    JS_EXPORT_PRIVATE JSValue pop(ExecState*);
</ins><span class="cx"> 
</span><span class="cx">     enum ShiftCountMode {
</span><span class="cx">         // This form of shift hints that we're doing queueing. With this assumption in hand,
</span><span class="lines">@@ -131,8 +131,8 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void fillArgList(ExecState*, MarkedArgumentBuffer&amp;);
-    void copyToArguments(ExecState*, CallFrame*, uint32_t length, int32_t firstVarArgOffset);
</del><ins>+    JS_EXPORT_PRIVATE void fillArgList(ExecState*, MarkedArgumentBuffer&amp;);
+    JS_EXPORT_PRIVATE void copyToArguments(ExecState*, CallFrame*, uint32_t length, int32_t firstVarArgOffset);
</ins><span class="cx"> 
</span><span class="cx">     static Structure* createStructure(VM&amp; vm, JSGlobalObject* globalObject, JSValue prototype, IndexingType indexingType)
</span><span class="cx">     {
</span><span class="lines">@@ -157,7 +157,7 @@
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="cx">     bool shiftCountWithAnyIndexingType(ExecState*, unsigned startIndex, unsigned count);
</span><del>-    bool shiftCountWithArrayStorage(unsigned startIndex, unsigned count, ArrayStorage*);
</del><ins>+    JS_EXPORT_PRIVATE bool shiftCountWithArrayStorage(unsigned startIndex, unsigned count, ArrayStorage*);
</ins><span class="cx"> 
</span><span class="cx">     bool unshiftCountWithAnyIndexingType(ExecState*, unsigned startIndex, unsigned count);
</span><span class="cx">     bool unshiftCountWithArrayStorage(ExecState*, unsigned startIndex, unsigned count, ArrayStorage*);
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeJSCJSValueh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/JSCJSValue.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/JSCJSValue.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/JSCJSValue.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -240,14 +240,14 @@
</span><span class="cx">     JSObject* toObject(ExecState*, JSGlobalObject*) const;
</span><span class="cx"> 
</span><span class="cx">     // Integer conversions.
</span><del>-    JS_EXPORT_PRIVATE double toInteger(ExecState*) const;
-    double toIntegerPreserveNaN(ExecState*) const;
</del><ins>+    double toInteger(ExecState*) const;
+    JS_EXPORT_PRIVATE double toIntegerPreserveNaN(ExecState*) const;
</ins><span class="cx">     int32_t toInt32(ExecState*) const;
</span><span class="cx">     uint32_t toUInt32(ExecState*) const;
</span><span class="cx"> 
</span><span class="cx">     // Floating point conversions (this is a convenience method for webcore;
</span><span class="cx">     // signle precision float is not a representation used in JS or JSC).
</span><del>-    float toFloat(ExecState* exec) const { return static_cast&lt;float&gt;(toNumber(exec)); }
</del><ins>+    JS_EXPORT_PRIVATE float toFloat(ExecState* exec) const { return static_cast&lt;float&gt;(toNumber(exec)); }
</ins><span class="cx"> 
</span><span class="cx">     // Object operations, with the toObject operation included.
</span><span class="cx">     JSValue get(ExecState*, PropertyName) const;
</span><span class="lines">@@ -255,8 +255,8 @@
</span><span class="cx">     JSValue get(ExecState*, unsigned propertyName) const;
</span><span class="cx">     JSValue get(ExecState*, unsigned propertyName, PropertySlot&amp;) const;
</span><span class="cx">     void put(ExecState*, PropertyName, JSValue, PutPropertySlot&amp;);
</span><del>-    void putToPrimitive(ExecState*, PropertyName, JSValue, PutPropertySlot&amp;);
-    void putToPrimitiveByIndex(ExecState*, unsigned propertyName, JSValue, bool shouldThrow);
</del><ins>+    JS_EXPORT_PRIVATE void putToPrimitive(ExecState*, PropertyName, JSValue, PutPropertySlot&amp;);
+    JS_EXPORT_PRIVATE void putToPrimitiveByIndex(ExecState*, unsigned propertyName, JSValue, bool shouldThrow);
</ins><span class="cx">     void putByIndex(ExecState*, unsigned propertyName, JSValue, bool shouldThrow);
</span><span class="cx"> 
</span><span class="cx">     JSValue toThis(ExecState*, ECMAMode) const;
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeJSDateMathh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/JSDateMath.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/JSDateMath.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/JSDateMath.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -50,10 +50,10 @@
</span><span class="cx"> 
</span><span class="cx"> class VM;
</span><span class="cx"> 
</span><del>-void msToGregorianDateTime(VM&amp;, double, bool outputIsUTC, GregorianDateTime&amp;);
-double gregorianDateTimeToMS(VM&amp;, const GregorianDateTime&amp;, double, bool inputIsUTC);
-double getUTCOffset(VM&amp;);
-double parseDate(VM&amp;, const WTF::String&amp;);
</del><ins>+JS_EXPORT_PRIVATE void msToGregorianDateTime(VM&amp;, double, bool outputIsUTC, GregorianDateTime&amp;);
+JS_EXPORT_PRIVATE double gregorianDateTimeToMS(VM&amp;, const GregorianDateTime&amp;, double, bool inputIsUTC);
+JS_EXPORT_PRIVATE double getUTCOffset(VM&amp;);
+JS_EXPORT_PRIVATE double parseDate(VM&amp;, const WTF::String&amp;);
</ins><span class="cx"> 
</span><span class="cx"> } // namespace JSC
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeJSObjecth"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/JSObject.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/JSObject.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/JSObject.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -110,8 +110,8 @@
</span><span class="cx">     JS_EXPORT_PRIVATE static String className(const JSObject*);
</span><span class="cx"> 
</span><span class="cx">     JSValue prototype() const;
</span><del>-    void setPrototype(VM&amp;, JSValue prototype);
-    bool setPrototypeWithCycleCheck(ExecState*, JSValue prototype);
</del><ins>+    JS_EXPORT_PRIVATE void setPrototype(VM&amp;, JSValue prototype);
+    JS_EXPORT_PRIVATE bool setPrototypeWithCycleCheck(ExecState*, JSValue prototype);
</ins><span class="cx">         
</span><span class="cx">     bool mayInterceptIndexedAccesses()
</span><span class="cx">     {
</span><span class="lines">@@ -131,9 +131,9 @@
</span><span class="cx">     // The key difference between this and getOwnPropertySlot is that getOwnPropertySlot
</span><span class="cx">     // currently returns incorrect results for the DOM window (with non-own properties)
</span><span class="cx">     // being returned. Once this is fixed we should migrate code &amp; remove this method.
</span><del>-    bool getOwnPropertyDescriptor(ExecState*, PropertyName, PropertyDescriptor&amp;);
</del><ins>+    JS_EXPORT_PRIVATE bool getOwnPropertyDescriptor(ExecState*, PropertyName, PropertyDescriptor&amp;);
</ins><span class="cx"> 
</span><del>-    bool allowsAccessFrom(ExecState*);
</del><ins>+    JS_EXPORT_PRIVATE bool allowsAccessFrom(ExecState*);
</ins><span class="cx"> 
</span><span class="cx">     unsigned getArrayLength() const
</span><span class="cx">     {
</span><span class="lines">@@ -589,7 +589,7 @@
</span><span class="cx">     JS_EXPORT_PRIVATE void putDirectNativeFunction(VM&amp;, JSGlobalObject*, const PropertyName&amp;, unsigned functionLength, NativeFunction, Intrinsic, unsigned attributes);
</span><span class="cx">     JSFunction* putDirectBuiltinFunction(VM&amp;, JSGlobalObject*, const PropertyName&amp;, FunctionExecutable*, unsigned attributes);
</span><span class="cx">     JSFunction* putDirectBuiltinFunctionWithoutTransition(VM&amp;, JSGlobalObject*, const PropertyName&amp;, FunctionExecutable*, unsigned attributes);
</span><del>-    void putDirectNativeFunctionWithoutTransition(VM&amp;, JSGlobalObject*, const PropertyName&amp;, unsigned functionLength, NativeFunction, Intrinsic, unsigned attributes);
</del><ins>+    JS_EXPORT_PRIVATE void putDirectNativeFunctionWithoutTransition(VM&amp;, JSGlobalObject*, const PropertyName&amp;, unsigned functionLength, NativeFunction, Intrinsic, unsigned attributes);
</ins><span class="cx"> 
</span><span class="cx">     JS_EXPORT_PRIVATE static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&amp;, bool shouldThrow);
</span><span class="cx"> 
</span><span class="lines">@@ -600,8 +600,8 @@
</span><span class="cx">     bool isActivationObject() const;
</span><span class="cx">     bool isErrorInstance() const;
</span><span class="cx"> 
</span><del>-    void seal(VM&amp;);
-    void freeze(VM&amp;);
</del><ins>+    JS_EXPORT_PRIVATE void seal(VM&amp;);
+    JS_EXPORT_PRIVATE void freeze(VM&amp;);
</ins><span class="cx">     JS_EXPORT_PRIVATE void preventExtensions(VM&amp;);
</span><span class="cx">     bool isSealed(VM&amp; vm) { return structure(vm)-&gt;isSealed(vm); }
</span><span class="cx">     bool isFrozen(VM&amp; vm) { return structure(vm)-&gt;isFrozen(vm); }
</span><span class="lines">@@ -978,7 +978,7 @@
</span><span class="cx">     ContiguousDoubles ensureDoubleSlow(VM&amp;);
</span><span class="cx">     ContiguousJSValues ensureContiguousSlow(VM&amp;);
</span><span class="cx">     ContiguousJSValues rageEnsureContiguousSlow(VM&amp;);
</span><del>-    ArrayStorage* ensureArrayStorageSlow(VM&amp;);
</del><ins>+    JS_EXPORT_PRIVATE ArrayStorage* ensureArrayStorageSlow(VM&amp;);
</ins><span class="cx">     
</span><span class="cx">     enum DoubleToContiguousMode { EncodeValueAsDouble, RageConvertDoubleToValue };
</span><span class="cx">     template&lt;DoubleToContiguousMode mode&gt;
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeJSWrapperObjecth"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/JSWrapperObject.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/JSWrapperObject.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/JSWrapperObject.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">         explicit JSWrapperObject(VM&amp;, Structure*);
</span><span class="cx">         static const unsigned StructureFlags = OverridesVisitChildren | Base::StructureFlags;
</span><span class="cx"> 
</span><del>-        static void visitChildren(JSCell*, SlotVisitor&amp;);
</del><ins>+        JS_EXPORT_PRIVATE static void visitChildren(JSCell*, SlotVisitor&amp;);
</ins><span class="cx"> 
</span><span class="cx">     private:
</span><span class="cx">         WriteBarrier&lt;Unknown&gt; m_internalValue;
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeOptionsh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/Options.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/Options.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/Options.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -196,6 +196,8 @@
</span><span class="cx">     v(unsigned, maximumInliningDepthForMustInline, 7) \
</span><span class="cx">     v(unsigned, maximumInliningRecursionForMustInline, 3) \
</span><span class="cx">     \
</span><ins>+    v(unsigned, maximumLLVMInstructionCountForNativeInlining, 80) \
+    \
</ins><span class="cx">     /* Maximum size of a caller for enabling inlining. This is purely to protect us */\
</span><span class="cx">     /* from super long compiles that take a lot of memory. */\
</span><span class="cx">     v(unsigned, maximumInliningCallerSize, 10000) \
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeRegExph"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/RegExp.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/RegExp.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/RegExp.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx">         const char* errorMessage() const { return m_constructionError; }
</span><span class="cx"> 
</span><span class="cx">         JS_EXPORT_PRIVATE int match(VM&amp;, const String&amp;, unsigned startOffset, Vector&lt;int, 32&gt;&amp; ovector);
</span><del>-        MatchResult match(VM&amp;, const String&amp;, unsigned startOffset);
</del><ins>+        JS_EXPORT_PRIVATE MatchResult match(VM&amp;, const String&amp;, unsigned startOffset);
</ins><span class="cx">         unsigned numSubpatterns() const { return m_numSubpatterns; }
</span><span class="cx"> 
</span><span class="cx">         bool hasCode()
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeStringObjecth"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/StringObject.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/StringObject.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/StringObject.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -45,16 +45,16 @@
</span><span class="cx">         }
</span><span class="cx">         static StringObject* create(VM&amp;, JSGlobalObject*, JSString*);
</span><span class="cx"> 
</span><del>-        static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&amp;);
-        static bool getOwnPropertySlotByIndex(JSObject*, ExecState*, unsigned propertyName, PropertySlot&amp;);
</del><ins>+        JS_EXPORT_PRIVATE static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&amp;);
+        JS_EXPORT_PRIVATE static bool getOwnPropertySlotByIndex(JSObject*, ExecState*, unsigned propertyName, PropertySlot&amp;);
</ins><span class="cx"> 
</span><del>-        static void put(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&amp;);
-        static void putByIndex(JSCell*, ExecState*, unsigned propertyName, JSValue, bool shouldThrow);
</del><ins>+        JS_EXPORT_PRIVATE static void put(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&amp;);
+        JS_EXPORT_PRIVATE static void putByIndex(JSCell*, ExecState*, unsigned propertyName, JSValue, bool shouldThrow);
</ins><span class="cx"> 
</span><del>-        static bool deleteProperty(JSCell*, ExecState*, PropertyName);
-        static bool deletePropertyByIndex(JSCell*, ExecState*, unsigned propertyName);
-        static void getOwnPropertyNames(JSObject*, ExecState*, PropertyNameArray&amp;, EnumerationMode);
-        static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&amp;, bool shouldThrow);
</del><ins>+        JS_EXPORT_PRIVATE static bool deleteProperty(JSCell*, ExecState*, PropertyName);
+        JS_EXPORT_PRIVATE static bool deletePropertyByIndex(JSCell*, ExecState*, unsigned propertyName);
+        JS_EXPORT_PRIVATE static void getOwnPropertyNames(JSObject*, ExecState*, PropertyNameArray&amp;, EnumerationMode);
+        JS_EXPORT_PRIVATE static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&amp;, bool shouldThrow);
</ins><span class="cx"> 
</span><span class="cx">         DECLARE_EXPORT_INFO;
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoreruntimeStructureh"></a>
<div class="modfile"><h4>Modified: branches/ftlopt/Source/JavaScriptCore/runtime/Structure.h (169577 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/runtime/Structure.h        2014-06-04 02:08:36 UTC (rev 169577)
+++ branches/ftlopt/Source/JavaScriptCore/runtime/Structure.h        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -120,13 +120,13 @@
</span><span class="cx">     static Structure* attributeChangeTransition(VM&amp;, Structure*, PropertyName, unsigned attributes);
</span><span class="cx">     static Structure* toCacheableDictionaryTransition(VM&amp;, Structure*);
</span><span class="cx">     static Structure* toUncacheableDictionaryTransition(VM&amp;, Structure*);
</span><del>-    static Structure* sealTransition(VM&amp;, Structure*);
-    static Structure* freezeTransition(VM&amp;, Structure*);
</del><ins>+    JS_EXPORT_PRIVATE static Structure* sealTransition(VM&amp;, Structure*);
+    JS_EXPORT_PRIVATE static Structure* freezeTransition(VM&amp;, Structure*);
</ins><span class="cx">     static Structure* preventExtensionsTransition(VM&amp;, Structure*);
</span><del>-    static Structure* nonPropertyTransition(VM&amp;, Structure*, NonPropertyTransition);
</del><ins>+    JS_EXPORT_PRIVATE static Structure* nonPropertyTransition(VM&amp;, Structure*, NonPropertyTransition);
</ins><span class="cx"> 
</span><del>-    bool isSealed(VM&amp;);
-    bool isFrozen(VM&amp;);
</del><ins>+    JS_EXPORT_PRIVATE bool isSealed(VM&amp;);
+    JS_EXPORT_PRIVATE bool isFrozen(VM&amp;);
</ins><span class="cx">     bool isExtensible() const { return !m_preventExtensions; }
</span><span class="cx">     bool didTransition() const { return m_didTransition; }
</span><span class="cx">     bool putWillGrowOutOfLineStorage();
</span><span class="lines">@@ -478,7 +478,7 @@
</span><span class="cx">         
</span><span class="cx">     bool checkOffsetConsistency() const;
</span><span class="cx"> 
</span><del>-    void allocateRareData(VM&amp;);
</del><ins>+    JS_EXPORT_PRIVATE void allocateRareData(VM&amp;);
</ins><span class="cx">     void cloneRareDataFrom(VM&amp;, const Structure*);
</span><span class="cx"> 
</span><span class="cx">     static const int s_maxTransitionLength = 64;
</span></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoretestedsymbolssymlst"></a>
<div class="addfile"><h4>Added: branches/ftlopt/Source/JavaScriptCore/tested-symbols.symlst (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/tested-symbols.symlst                                (rev 0)
+++ branches/ftlopt/Source/JavaScriptCore/tested-symbols.symlst        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+__ZN3JSC15globalFuncIsNaNEPNS_9ExecStateE
+__ZN3JSC23objectProtoFuncToStringEPNS_9ExecStateE
+__ZN3JSCL16mathProtoFuncCosEPNS_9ExecStateE
+__ZN3JSCL16mathProtoFuncSinEPNS_9ExecStateE
+__ZN3JSCL16mathProtoFuncTanEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncACosEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncASinEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncATanEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncCbrtEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncCoshEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncLog2EPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncSinhEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncTanhEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncACoshEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncASinhEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncATan2EPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncATanhEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncExpm1EPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncExpm1EPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncHypotEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncLog10EPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncLog1pEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncTruncEPNS_9ExecStateE
+__ZN3JSCL19arrayProtoFuncShiftEPNS_9ExecStateE
+__ZN3JSCL19dateProtoFuncGetDayEPNS_9ExecStateE
+__ZN3JSCL19mathProtoFuncRandomEPNS_9ExecStateE
+__ZN3JSCL20dateProtoFuncGetDateEPNS_9ExecStateE
+__ZN3JSCL20dateProtoFuncGetTimeEPNS_9ExecStateE
+__ZN3JSCL20dateProtoFuncGetYearEPNS_9ExecStateE
+__ZN3JSCL20dateProtoFuncSetDateEPNS_9ExecStateE
+__ZN3JSCL20stringProtoFuncSliceEPNS_9ExecStateE
+__ZN3JSCL21dateProtoFuncGetHoursEPNS_9ExecStateE
+__ZN3JSCL21dateProtoFuncGetMonthEPNS_9ExecStateE
+__ZN3JSCL21dateProtoFuncToStringEPNS_9ExecStateE
+__ZN3JSCL22JSONProtoFuncStringifyEPNS_9ExecStateE
+__ZN3JSCL22dateProtoFuncGetUTCDayEPNS_9ExecStateE
+__ZN3JSCL23dateProtoFuncGetMinutesEPNS_9ExecStateE
+__ZN3JSCL23dateProtoFuncGetSecondsEPNS_9ExecStateE
+__ZN3JSCL23dateProtoFuncGetUTCDateEPNS_9ExecStateE
+__ZN3JSCL23objectConstructorFreezeEPNS_9ExecStateE
+__ZN3JSCL24dateProtoFuncGetFullYearEPNS_9ExecStateE
+__ZN3JSCL24dateProtoFuncGetUTCHoursEPNS_9ExecStateE
+__ZN3JSCL24dateProtoFuncGetUTCMonthEPNS_9ExecStateE
+__ZN3JSCL24dateProtoFuncToUTCStringEPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncGetUint8EPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncSetUint8EPNS_9ExecStateE
+__ZN3JSCL25dateProtoFuncToDateStringEPNS_9ExecStateE
+__ZN3JSCL25dateProtoFuncToTimeStringEPNS_9ExecStateE
+__ZN3JSCL25objectConstructorIsFrozenEPNS_9ExecStateE
+__ZN3JSCL26dateProtoFuncGetUTCMinutesEPNS_9ExecStateE
+__ZN3JSCL26dateProtoFuncGetUTCSecondsEPNS_9ExecStateE
+__ZN3JSCL26stringProtoFuncToLowerCaseEPNS_9ExecStateE
+__ZN3JSCL26stringProtoFuncToUpperCaseEPNS_9ExecStateE
+__ZN3JSCL27dateProtoFuncGetUTCFullYearEPNS_9ExecStateE
+__ZN3JSCL28dateProtoFuncGetMilliSecondsEPNS_9ExecStateE
+__ZN3JSCL30dateProtoFuncGetTimezoneOffsetEPNS_9ExecStateE
+__ZN3JSCL31dateProtoFuncGetUTCMillisecondsEPNS_9ExecStateE
+__ZN3JSCL31dateProtoFuncToLocaleDateStringEPNS_9ExecStateE
+__ZN3JSCL34objectConstructorPreventExtensionsEPNS_9ExecStateE
+__ZN3JSCL36objectConstructorGetOwnPropertyNamesEPNS_9ExecStateE
+__ZN3JSCL9dateParseEPNS_9ExecStateE
+__ZN3JSC9ExecState13dataViewTableERNS_2VME
+__ZN3JSC13dataViewTableE
+__ZN3JSC19JSDataViewPrototype15createStructureERNS_2VMEPNS_14JSGlobalObjectENS_7JSValueE
+__ZN3JSC1teENS_12PropertyNameERNS_12PropertySlotE
+__ZN3JSC19JSDataViewPrototype6createERNS_2VMEPNS_9StructureE
+__ZN3JSC19JSDataViewPrototype6s_infoE
+__ZN3JSC19JSDataViewPrototypeC1ERNS_2VMEPNS_9Structu1getStaticFunctionSlotINS_8JSObjectEEEbPNS_9ExecStateERKNS_9HashTableEPS1_NS_12PropertyNameERNS_12PropertyS_9ExecStateE
+__ZN3JSC7getDataINS_12Uint8AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7getDataI64AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_11Int8AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_12Int16AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_12Int32AdaptorEEExPNS_9ExecStateE
+__ZNS_13Uint16AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_13Uint32AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_14Float32AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_14Float64AdaptorEEExPNStaViewTableIndexE
+__ZN3JSCL19dataViewTableValuesE
+__ZN3JSCL24dataViewProtoFuncGetInt8EPNS_9ExecStateE
+__ZN3JSCL24dataViewProtoFuncSetInt8EPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncGetInt16EPNZN3JSCL25dataViewProtoFuncGetUint8EPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncSetInt16EPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncSetInt32EPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncSetUintteE
+__ZN3JSCL27dataViewProtoFuncSetFloat32EPNS_9ExecStateE
+__ZN3JSCL27dataViewProtoFuncSetFloat64EPNS_9ExecStateE
+__ZN3JSCL18dataViewTableIndexE
</ins></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoretestsstressftllibraryexceptionjs"></a>
<div class="addfile"><h4>Added: branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-exception.js (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-exception.js                                (rev 0)
+++ branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-exception.js        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+function foo(d){
+    return Date.prototype.getTimezoneOffset.call(d);
+}
+
+noInline(foo);
+
+var x;
+var count = 1000000;
+var z = 0;
+for (var i = 0 ; i &lt; count; i++){
+    try { 
+        var q = foo(i &lt; count - 10 ? new Date() : &quot;a&quot;);
+        x = false;
+        z = q;
+    } catch (e) {
+        x = true;
+    }
+}
+
+if (!x)
+    throw &quot;bad result: &quot;+ x;
</ins></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoretestsstressftllibraryinliningrandomjs"></a>
<div class="addfile"><h4>Added: branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-inlining-random.js (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-inlining-random.js                                (rev 0)
+++ branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-inlining-random.js        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+function foo(x){
+    return Math.random(x);
+}
+
+noInline(foo);
+
+var x = 0;
+
+for (var i = 0 ; i &lt; 10000000; i++){
+    x = foo(i);
+}
</ins></span></pre></div>
<a id="branchesftloptSourceJavaScriptCoretestsstressftllibrarysubstringjs"></a>
<div class="addfile"><h4>Added: branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-substring.js (0 => 169578)</h4>
<pre class="diff"><span>
<span class="info">--- branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-substring.js                                (rev 0)
+++ branches/ftlopt/Source/JavaScriptCore/tests/stress/ftl-library-substring.js        2014-06-04 02:50:58 UTC (rev 169578)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+function foo(i, x){
+    return x.substring( 2 , 5);
+}
+
+noInline(foo);
+
+var x = &quot;&quot;;
+
+for (var i = 0 ; i &lt; 1000000; i++){
+    x = foo(i, &quot;lkajsx&quot;);
+}
+
+if (x != &quot;ajs&quot;)
+    throw &quot;Error: bad substring: &quot;+ x;
+
</ins></span></pre>
</div>
</div>

</body>
</html>