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

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

<h3>Log Message</h3>
<pre>LLInt interpreter code should be generated as part of one function
https://bugs.webkit.org/show_bug.cgi?id=131205

Reviewed by Mark Lam.

Source/JavaScriptCore: 

Changed the generation of llint opcodes so that they are all part of the same
global function, llint_entry.  That function is used to fill in an entry point
table that includes each of the opcodes and helpers.

* CMakeLists.txt:
* JavaScriptCore.vcxproj/LLInt/LLIntAssembly/build-LLIntAssembly.sh:
* JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/build-LLIntDesiredOffsets.sh:
* JavaScriptCore.xcodeproj/project.pbxproj:
Added appropriate use of new -I option to offline assembler and offset
generator scripts.

* llint/LowLevelInterpreter.asm:
* llint/LowLevelInterpreter.cpp:
* llint/LowLevelInterpreter.h:
* offlineasm/arm.rb:
* offlineasm/arm64.rb:
* offlineasm/asm.rb:
* offlineasm/ast.rb:
* offlineasm/backends.rb:
* offlineasm/cloop.rb:
* offlineasm/generate_offset_extractor.rb:
* offlineasm/instructions.rb:
* offlineasm/parser.rb:
* offlineasm/registers.rb:
* offlineasm/self_hash.rb:
* offlineasm/settings.rb:
* offlineasm/transform.rb:
* offlineasm/x86.rb:
Added a new &quot;global&quot; keyword to the offline assembler that denotes a label that
should be exported.  Added opcode and operand support to get the absolute
address of a local label using position independent calculations.  Updated the
offline assembler to handle included files, both when generating the checksum
as well as including files from other than the local directory via a newly
added -I option.  The offline assembler now automatically determines external
functions by keeping track of referenced functions that are defined within the
assembly source.  This is used both for choosing the correct macro for external
references as well as generating the needed EXTERN directives for masm.
Updated the generation of the masm only .sym file to be written once at the end
of the offline assembler.

* assembler/MacroAssemblerCodeRef.h:
(JSC::MacroAssemblerCodePtr::createLLIntCodePtr):
(JSC::MacroAssemblerCodeRef::createLLIntCodeRef):
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::dumpBytecode):
(JSC::CodeBlock::CodeBlock):
* bytecode/GetByIdStatus.cpp:
(JSC::GetByIdStatus::computeFromLLInt):
* bytecode/Opcode.h:
(JSC::padOpcodeName):
* bytecode/PutByIdStatus.cpp:
(JSC::PutByIdStatus::computeFromLLInt):
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
* jit/JITStubs.h:
* llint/LLIntCLoop.cpp:
(JSC::LLInt::initialize):
* llint/LLIntData.h:
(JSC::LLInt::getCodeFunctionPtr):
(JSC::LLInt::getOpcode): Deleted.
(JSC::LLInt::getCodePtr): Deleted.
* llint/LLIntOpcode.h:
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::LLINT_SLOW_PATH_DECL):
* llint/LLIntThunks.cpp:
(JSC::LLInt::functionForCallEntryThunkGenerator):
(JSC::LLInt::functionForConstructEntryThunkGenerator):
(JSC::LLInt::functionForCallArityCheckThunkGenerator):
(JSC::LLInt::functionForConstructArityCheckThunkGenerator):
(JSC::LLInt::evalEntryThunkGenerator):
(JSC::LLInt::programEntryThunkGenerator):
* llint/LLIntThunks.h:
Changed references to llint helpers to go through the entry point table populated
by llint_entry.  Added helpers to OpcodeID enum for all builds.

* bytecode/BytecodeList.json:
* generate-bytecode-files:
* llint/LLIntCLoop.cpp:
(JSC::LLInt::CLoop::initialize):
Reordered sections to match the order that the functions are added to the entry point
table.  Added new &quot;asmPrefix&quot; property for symbols that have one name but are generated
with a prefix, e.g. op_enter -&gt; llint_op_enter.  Eliminated the &quot;emitDefineID&quot; property
as we are using enums for all bytecode references.  Changed the C Loop only
llint_c_loop_init to llint_entry.

Source/WebKit: 

Updated VS dependencies for JavaScriptCore changes.

* WebKit.vcxproj/WebKit.sln:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreCMakeListstxt">trunk/Source/JavaScriptCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorevcxprojLLIntLLIntAssemblybuildLLIntAssemblysh">trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/LLInt/LLIntAssembly/build-LLIntAssembly.sh</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorevcxprojLLIntLLIntDesiredOffsetsbuildLLIntDesiredOffsetssh">trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/build-LLIntDesiredOffsets.sh</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerMacroAssemblerCodeRefh">trunk/Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeBytecodeListjson">trunk/Source/JavaScriptCore/bytecode/BytecodeList.json</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeCodeBlockcpp">trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeGetByIdStatuscpp">trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeOpcodeh">trunk/Source/JavaScriptCore/bytecode/Opcode.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodePutByIdStatuscpp">trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoregeneratebytecodefiles">trunk/Source/JavaScriptCore/generate-bytecode-files</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITcpp">trunk/Source/JavaScriptCore/jit/JIT.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITStubsh">trunk/Source/JavaScriptCore/jit/JITStubs.h</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntCLoopcpp">trunk/Source/JavaScriptCore/llint/LLIntCLoop.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntDatacpp">trunk/Source/JavaScriptCore/llint/LLIntData.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntDatah">trunk/Source/JavaScriptCore/llint/LLIntData.h</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntOpcodeh">trunk/Source/JavaScriptCore/llint/LLIntOpcode.h</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntSlowPathscpp">trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntThunkscpp">trunk/Source/JavaScriptCore/llint/LLIntThunks.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntThunksh">trunk/Source/JavaScriptCore/llint/LLIntThunks.h</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreterasm">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpretercpp">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreterh">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmarmrb">trunk/Source/JavaScriptCore/offlineasm/arm.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmarm64rb">trunk/Source/JavaScriptCore/offlineasm/arm64.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmasmrb">trunk/Source/JavaScriptCore/offlineasm/asm.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmastrb">trunk/Source/JavaScriptCore/offlineasm/ast.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmbackendsrb">trunk/Source/JavaScriptCore/offlineasm/backends.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmclooprb">trunk/Source/JavaScriptCore/offlineasm/cloop.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmgenerate_offset_extractorrb">trunk/Source/JavaScriptCore/offlineasm/generate_offset_extractor.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasminstructionsrb">trunk/Source/JavaScriptCore/offlineasm/instructions.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmparserrb">trunk/Source/JavaScriptCore/offlineasm/parser.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmregistersrb">trunk/Source/JavaScriptCore/offlineasm/registers.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmself_hashrb">trunk/Source/JavaScriptCore/offlineasm/self_hash.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmsettingsrb">trunk/Source/JavaScriptCore/offlineasm/settings.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmtransformrb">trunk/Source/JavaScriptCore/offlineasm/transform.rb</a></li>
<li><a href="#trunkSourceJavaScriptCoreofflineasmx86rb">trunk/Source/JavaScriptCore/offlineasm/x86.rb</a></li>
<li><a href="#trunkSourceWebKitChangeLog">trunk/Source/WebKit/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitWebKitvcxprojWebKitsln">trunk/Source/WebKit/WebKit.vcxproj/WebKit.sln</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/CMakeLists.txt (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/CMakeLists.txt        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/CMakeLists.txt        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -604,8 +604,8 @@
</span><span class="cx">     add_custom_command(
</span><span class="cx">         OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
</span><span class="cx">         MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb
</span><del>-        DEPENDS ${LLINT_ASM} ${OFFLINE_ASM}
-        COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
</del><ins>+        DEPENDS ${LLINT_ASM} ${OFFLINE_ASM} ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/InitBytecodes.asm
+        COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb -I${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/ ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
</ins><span class="cx">         VERBATIM)
</span><span class="cx"> 
</span><span class="cx">     # We add the header files directly to the ADD_EXECUTABLE call instead of setting the
</span><span class="lines">@@ -633,7 +633,7 @@
</span><span class="cx">         OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
</span><span class="cx">         MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/offlineasm/asm.rb
</span><span class="cx">         DEPENDS LLIntOffsetsExtractor ${LLINT_ASM} ${OFFLINE_ASM} ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/InitBytecodes.asm
</span><del>-        COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/asm.rb ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm $&lt;TARGET_FILE:LLIntOffsetsExtractor&gt; ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
</del><ins>+        COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/asm.rb -I${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/ ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm $&lt;TARGET_FILE:LLIntOffsetsExtractor&gt; ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
</ins><span class="cx">         COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
</span><span class="cx">         VERBATIM)
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -1,3 +1,95 @@
</span><ins>+2014-04-10  Michael Saboff  &lt;msaboff@apple.com&gt;
+
+        LLInt interpreter code should be generated as part of one function
+        https://bugs.webkit.org/show_bug.cgi?id=131205
+
+        Reviewed by Mark Lam.
+
+        Changed the generation of llint opcodes so that they are all part of the same
+        global function, llint_entry.  That function is used to fill in an entry point
+        table that includes each of the opcodes and helpers.
+
+        * CMakeLists.txt:
+        * JavaScriptCore.vcxproj/LLInt/LLIntAssembly/build-LLIntAssembly.sh:
+        * JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/build-LLIntDesiredOffsets.sh:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        Added appropriate use of new -I option to offline assembler and offset
+        generator scripts.
+
+        * llint/LowLevelInterpreter.asm:
+        * llint/LowLevelInterpreter.cpp:
+        * llint/LowLevelInterpreter.h:
+        * offlineasm/arm.rb:
+        * offlineasm/arm64.rb:
+        * offlineasm/asm.rb:
+        * offlineasm/ast.rb:
+        * offlineasm/backends.rb:
+        * offlineasm/cloop.rb:
+        * offlineasm/generate_offset_extractor.rb:
+        * offlineasm/instructions.rb:
+        * offlineasm/parser.rb:
+        * offlineasm/registers.rb:
+        * offlineasm/self_hash.rb:
+        * offlineasm/settings.rb:
+        * offlineasm/transform.rb:
+        * offlineasm/x86.rb:
+        Added a new &quot;global&quot; keyword to the offline assembler that denotes a label that
+        should be exported.  Added opcode and operand support to get the absolute
+        address of a local label using position independent calculations.  Updated the
+        offline assembler to handle included files, both when generating the checksum
+        as well as including files from other than the local directory via a newly
+        added -I option.  The offline assembler now automatically determines external
+        functions by keeping track of referenced functions that are defined within the
+        assembly source.  This is used both for choosing the correct macro for external
+        references as well as generating the needed EXTERN directives for masm.
+        Updated the generation of the masm only .sym file to be written once at the end
+        of the offline assembler.
+
+        * assembler/MacroAssemblerCodeRef.h:
+        (JSC::MacroAssemblerCodePtr::createLLIntCodePtr):
+        (JSC::MacroAssemblerCodeRef::createLLIntCodeRef):
+        * bytecode/CodeBlock.cpp:
+        (JSC::CodeBlock::dumpBytecode):
+        (JSC::CodeBlock::CodeBlock):
+        * bytecode/GetByIdStatus.cpp:
+        (JSC::GetByIdStatus::computeFromLLInt):
+        * bytecode/Opcode.h:
+        (JSC::padOpcodeName):
+        * bytecode/PutByIdStatus.cpp:
+        (JSC::PutByIdStatus::computeFromLLInt):
+        * jit/JIT.cpp:
+        (JSC::JIT::privateCompileMainPass):
+        * jit/JITStubs.h:
+        * llint/LLIntCLoop.cpp:
+        (JSC::LLInt::initialize):
+        * llint/LLIntData.h:
+        (JSC::LLInt::getCodeFunctionPtr):
+        (JSC::LLInt::getOpcode): Deleted.
+        (JSC::LLInt::getCodePtr): Deleted.
+        * llint/LLIntOpcode.h:
+        * llint/LLIntSlowPaths.cpp:
+        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+        * llint/LLIntThunks.cpp:
+        (JSC::LLInt::functionForCallEntryThunkGenerator):
+        (JSC::LLInt::functionForConstructEntryThunkGenerator):
+        (JSC::LLInt::functionForCallArityCheckThunkGenerator):
+        (JSC::LLInt::functionForConstructArityCheckThunkGenerator):
+        (JSC::LLInt::evalEntryThunkGenerator):
+        (JSC::LLInt::programEntryThunkGenerator):
+        * llint/LLIntThunks.h:
+        Changed references to llint helpers to go through the entry point table populated
+        by llint_entry.  Added helpers to OpcodeID enum for all builds.
+
+        * bytecode/BytecodeList.json:
+        * generate-bytecode-files:
+        * llint/LLIntCLoop.cpp:
+        (JSC::LLInt::CLoop::initialize):
+        Reordered sections to match the order that the functions are added to the entry point
+        table.  Added new &quot;asmPrefix&quot; property for symbols that have one name but are generated
+        with a prefix, e.g. op_enter -&gt; llint_op_enter.  Eliminated the &quot;emitDefineID&quot; property
+        as we are using enums for all bytecode references.  Changed the C Loop only
+        llint_c_loop_init to llint_entry.
+
</ins><span class="cx"> 2014-04-10  Matthew Mirman  &lt;mmirman@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         WIP for inlining C++.  Added a build target to produce LLVM IR.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojLLIntLLIntAssemblybuildLLIntAssemblysh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/LLInt/LLIntAssembly/build-LLIntAssembly.sh (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/LLInt/LLIntAssembly/build-LLIntAssembly.sh        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/LLInt/LLIntAssembly/build-LLIntAssembly.sh        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -34,4 +34,4 @@
</span><span class="cx">     OUTPUTFILENAME=&quot;LLIntAssembly.h&quot;
</span><span class="cx"> fi
</span><span class="cx"> 
</span><del>-/usr/bin/env ruby &quot;${SRCROOT}/offlineasm/asm.rb&quot; &quot;${SRCROOT}/llint/LowLevelInterpreter.asm&quot; &quot;${BUILT_PRODUCTS_DIR}/LLIntOffsetsExtractor/LLIntOffsetsExtractor${3}.exe&quot; &quot;${OUTPUTFILENAME}&quot; || exit 1
</del><ins>+/usr/bin/env ruby &quot;${SRCROOT}/offlineasm/asm.rb&quot; &quot;-I.&quot; &quot;${SRCROOT}/llint/LowLevelInterpreter.asm&quot; &quot;${BUILT_PRODUCTS_DIR}/LLIntOffsetsExtractor/LLIntOffsetsExtractor${3}.exe&quot; &quot;${OUTPUTFILENAME}&quot; || exit 1
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojLLIntLLIntDesiredOffsetsbuildLLIntDesiredOffsetssh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/build-LLIntDesiredOffsets.sh (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/build-LLIntDesiredOffsets.sh        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/build-LLIntDesiredOffsets.sh        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -22,4 +22,4 @@
</span><span class="cx"> # Step 1: Generate LLIntDesiredOffsets.h
</span><span class="cx"> mkdir -p &quot;${BUILT_PRODUCTS_DIR}&quot;
</span><span class="cx"> 
</span><del>-/usr/bin/env ruby &quot;${SRCROOT}/offlineasm/generate_offset_extractor.rb&quot; &quot;${SRCROOT}/llint/LowLevelInterpreter.asm&quot; &quot;${BUILT_PRODUCTS_DIR}/LLIntDesiredOffsets.h&quot;
</del><ins>+/usr/bin/env ruby &quot;${SRCROOT}/offlineasm/generate_offset_extractor.rb&quot; &quot;-I${BUILT_PRODUCTS_DIR}&quot; &quot;${SRCROOT}/llint/LowLevelInterpreter.asm&quot; &quot;${BUILT_PRODUCTS_DIR}/LLIntDesiredOffsets.h&quot;
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -13,6 +13,9 @@
</span><span class="cx">                         buildPhases = (
</span><span class="cx">                                 0F4680AA14BA7FD900BFE272 /* Generate Derived Sources */,
</span><span class="cx">                         );
</span><ins>+                        dependencies = (
+                                65442D5018EBB744007AF92F /* PBXTargetDependency */,
+                        );
</ins><span class="cx">                         name = &quot;LLInt Offsets&quot;;
</span><span class="cx">                         productName = &quot;Derived Sources&quot;;
</span><span class="cx">                 };
</span><span class="lines">@@ -36,6 +39,7 @@
</span><span class="cx">                                 65788AA018B409EB00C189FF /* Offline Assemble */,
</span><span class="cx">                         );
</span><span class="cx">                         dependencies = (
</span><ins>+                                65244BD318ECB5000010B708 /* PBXTargetDependency */,
</ins><span class="cx">                                 65788A9E18B409EB00C189FF /* PBXTargetDependency */,
</span><span class="cx">                         );
</span><span class="cx">                         name = &quot;Offline Assembler&quot;;
</span><span class="lines">@@ -49,7 +53,6 @@
</span><span class="cx">                                 5D35DEE10C7C140B008648B2 /* Generate DTrace header */,
</span><span class="cx">                         );
</span><span class="cx">                         dependencies = (
</span><del>-                                65788AA918B40A3300C189FF /* PBXTargetDependency */,
</del><span class="cx">                         );
</span><span class="cx">                         name = &quot;Derived Sources&quot;;
</span><span class="cx">                         productName = &quot;Derived Sources&quot;;
</span><span class="lines">@@ -1831,20 +1834,27 @@
</span><span class="cx">                         remoteGlobalIDString = 5D6B2A47152B9E17005231DE;
</span><span class="cx">                         remoteInfo = &quot;Test Tools&quot;;
</span><span class="cx">                 };
</span><del>-                65788A9F18B409EB00C189FF /* PBXContainerItemProxy */ = {
</del><ins>+                65244BD218ECB5000010B708 /* PBXContainerItemProxy */ = {
</ins><span class="cx">                         isa = PBXContainerItemProxy;
</span><span class="cx">                         containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
</span><span class="cx">                         proxyType = 1;
</span><del>-                        remoteGlobalIDString = 0FF922C314F46B130041A24E;
-                        remoteInfo = JSCLLIntOffsetsExtractor;
</del><ins>+                        remoteGlobalIDString = 65FB3F6609D11E9100F49DEB;
+                        remoteInfo = &quot;Derived Sources&quot;;
</ins><span class="cx">                 };
</span><del>-                65788AA818B40A3300C189FF /* PBXContainerItemProxy */ = {
</del><ins>+                65442D4F18EBB744007AF92F /* PBXContainerItemProxy */ = {
</ins><span class="cx">                         isa = PBXContainerItemProxy;
</span><span class="cx">                         containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
</span><span class="cx">                         proxyType = 1;
</span><del>-                        remoteGlobalIDString = 0F4680A914BA7FD900BFE272;
-                        remoteInfo = &quot;LLInt Offsets&quot;;
</del><ins>+                        remoteGlobalIDString = 65FB3F6609D11E9100F49DEB;
+                        remoteInfo = &quot;Derived Sources&quot;;
</ins><span class="cx">                 };
</span><ins>+                65788A9F18B409EB00C189FF /* PBXContainerItemProxy */ = {
+                        isa = PBXContainerItemProxy;
+                        containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+                        proxyType = 1;
+                        remoteGlobalIDString = 0FF922C314F46B130041A24E;
+                        remoteInfo = JSCLLIntOffsetsExtractor;
+                };
</ins><span class="cx">                 65788AAA18B40A3B00C189FF /* PBXContainerItemProxy */ = {
</span><span class="cx">                         isa = PBXContainerItemProxy;
</span><span class="cx">                         containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
</span><span class="lines">@@ -6527,7 +6537,7 @@
</span><span class="cx">                         );
</span><span class="cx">                         runOnlyForDeploymentPostprocessing = 0;
</span><span class="cx">                         shellPath = /bin/sh;
</span><del>-                        shellScript = &quot;set -e\n\nmkdir -p \&quot;${BUILT_PRODUCTS_DIR}/LLIntOffsets/\&quot;\n\n/usr/bin/env ruby \&quot;${SRCROOT}/offlineasm/generate_offset_extractor.rb\&quot; \&quot;${SRCROOT}/llint/LowLevelInterpreter.asm\&quot; \&quot;${BUILT_PRODUCTS_DIR}/LLIntOffsets/LLIntDesiredOffsets.h\&quot;\n&quot;;
</del><ins>+                        shellScript = &quot;set -e\n\nmkdir -p \&quot;${BUILT_PRODUCTS_DIR}/LLIntOffsets/\&quot;\n\n/usr/bin/env ruby \&quot;${SRCROOT}/offlineasm/generate_offset_extractor.rb\&quot; \&quot;-I${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore\&quot; \&quot;${SRCROOT}/llint/LowLevelInterpreter.asm\&quot; \&quot;${BUILT_PRODUCTS_DIR}/LLIntOffsets/LLIntDesiredOffsets.h\&quot;\n&quot;;
</ins><span class="cx">                 };
</span><span class="cx">                 0FCEFAD91806191800472CE4 /* Copy LLVM Library Into Framework */ = {
</span><span class="cx">                         isa = PBXShellScriptBuildPhase;
</span><span class="lines">@@ -6715,7 +6725,7 @@
</span><span class="cx">                         );
</span><span class="cx">                         runOnlyForDeploymentPostprocessing = 0;
</span><span class="cx">                         shellPath = /bin/sh;
</span><del>-                        shellScript = &quot;if [[ \&quot;${ACTION}\&quot; == \&quot;installhdrs\&quot; ]]; then\n    exit 0\nfi\n\ncd \&quot;${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore\&quot;\n\n/usr/bin/env ruby JavaScriptCore/offlineasm/asm.rb JavaScriptCore/llint/LowLevelInterpreter.asm ${BUILT_PRODUCTS_DIR}/JSCLLIntOffsetsExtractor LLIntAssembly.h || exit 1&quot;;
</del><ins>+                        shellScript = &quot;if [[ \&quot;${ACTION}\&quot; == \&quot;installhdrs\&quot; ]]; then\n    exit 0\nfi\n\ncd \&quot;${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore\&quot;\n\n/usr/bin/env ruby JavaScriptCore/offlineasm/asm.rb -I${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore JavaScriptCore/llint/LowLevelInterpreter.asm ${BUILT_PRODUCTS_DIR}/JSCLLIntOffsetsExtractor LLIntAssembly.h || exit 1&quot;;
</ins><span class="cx">                 };
</span><span class="cx">                 65FB3F6509D11E9100F49DEB /* Generate Derived Sources */ = {
</span><span class="cx">                         isa = PBXShellScriptBuildPhase;
</span><span class="lines">@@ -7428,16 +7438,21 @@
</span><span class="cx">                         target = 5D6B2A47152B9E17005231DE /* Test Tools */;
</span><span class="cx">                         targetProxy = 5D6B2A56152B9E2E005231DE /* PBXContainerItemProxy */;
</span><span class="cx">                 };
</span><ins>+                65244BD318ECB5000010B708 /* PBXTargetDependency */ = {
+                        isa = PBXTargetDependency;
+                        target = 65FB3F6609D11E9100F49DEB /* Derived Sources */;
+                        targetProxy = 65244BD218ECB5000010B708 /* PBXContainerItemProxy */;
+                };
+                65442D5018EBB744007AF92F /* PBXTargetDependency */ = {
+                        isa = PBXTargetDependency;
+                        target = 65FB3F6609D11E9100F49DEB /* Derived Sources */;
+                        targetProxy = 65442D4F18EBB744007AF92F /* PBXContainerItemProxy */;
+                };
</ins><span class="cx">                 65788A9E18B409EB00C189FF /* PBXTargetDependency */ = {
</span><span class="cx">                         isa = PBXTargetDependency;
</span><span class="cx">                         target = 0FF922C314F46B130041A24E /* JSCLLIntOffsetsExtractor */;
</span><span class="cx">                         targetProxy = 65788A9F18B409EB00C189FF /* PBXContainerItemProxy */;
</span><span class="cx">                 };
</span><del>-                65788AA918B40A3300C189FF /* PBXTargetDependency */ = {
-                        isa = PBXTargetDependency;
-                        target = 0F4680A914BA7FD900BFE272 /* LLInt Offsets */;
-                        targetProxy = 65788AA818B40A3300C189FF /* PBXContainerItemProxy */;
-                };
</del><span class="cx">                 65788AAB18B40A3B00C189FF /* PBXTargetDependency */ = {
</span><span class="cx">                         isa = PBXTargetDependency;
</span><span class="cx">                         target = 65FB3F6609D11E9100F49DEB /* Derived Sources */;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerMacroAssemblerCodeRefh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -294,7 +294,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(LLINT)
</span><del>-    static MacroAssemblerCodePtr createLLIntCodePtr(LLIntCode codeId)
</del><ins>+    static MacroAssemblerCodePtr createLLIntCodePtr(OpcodeID codeId)
</ins><span class="cx">     {
</span><span class="cx">         return createFromExecutableAddress(LLInt::getCodePtr(codeId));
</span><span class="cx">     }
</span><span class="lines">@@ -412,7 +412,7 @@
</span><span class="cx">     
</span><span class="cx"> #if ENABLE(LLINT)
</span><span class="cx">     // Helper for creating self-managed code refs from LLInt.
</span><del>-    static MacroAssemblerCodeRef createLLIntCodeRef(LLIntCode codeId)
</del><ins>+    static MacroAssemblerCodeRef createLLIntCodeRef(OpcodeID codeId)
</ins><span class="cx">     {
</span><span class="cx">         return createSelfManagedCodeRef(MacroAssemblerCodePtr::createFromExecutableAddress(LLInt::getCodePtr(codeId)));
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeBytecodeListjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/BytecodeList.json (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/BytecodeList.json        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/bytecode/BytecodeList.json        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -1,6 +1,7 @@
</span><span class="cx"> [
</span><span class="cx">     {
</span><del>-        &quot;section&quot; : &quot;Bytecodes&quot;, &quot;emitInHFile&quot; : true, &quot;emitInASMFile&quot; : true, &quot;macroNameComponent&quot; : &quot;BYTECODE&quot;,
</del><ins>+        &quot;section&quot; : &quot;Bytecodes&quot;, &quot;emitInHFile&quot; : true, &quot;emitInASMFile&quot; : true, 
+        &quot;macroNameComponent&quot; : &quot;BYTECODE&quot;, &quot;asmPrefix&quot; : &quot;llint_&quot;, 
</ins><span class="cx">         &quot;bytecodes&quot; : [
</span><span class="cx">             { &quot;name&quot; : &quot;op_enter&quot;, &quot;length&quot; : 1 },
</span><span class="cx">             { &quot;name&quot; : &quot;op_create_activation&quot;, &quot;length&quot; : 2 },
</span><span class="lines">@@ -125,32 +126,14 @@
</span><span class="cx">         ]
</span><span class="cx">     },
</span><span class="cx">     {
</span><del>-        &quot;section&quot; : &quot;NativeHelpers&quot;, &quot;emitInHFile&quot; : true, &quot;emitInASMFile&quot; : true, &quot;defaultLength&quot; : 1,
-        &quot;macroNameComponent&quot; : &quot;BYTECODE_HELPER&quot;, &quot;emitDefineID&quot; : true,
-        &quot;bytecodes&quot; : [
-            { &quot;name&quot; : &quot;llint_program_prologue&quot; },
-            { &quot;name&quot; : &quot;llint_eval_prologue&quot; },
-            { &quot;name&quot; : &quot;llint_function_for_call_prologue&quot; },
-            { &quot;name&quot; : &quot;llint_function_for_construct_prologue&quot; },
-            { &quot;name&quot; : &quot;llint_function_for_call_arity_check&quot; },
-            { &quot;name&quot; : &quot;llint_function_for_construct_arity_check&quot; },
-            { &quot;name&quot; : &quot;llint_generic_return_point&quot; },
-            { &quot;name&quot; : &quot;llint_throw_from_slow_path_trampoline&quot; },
-            { &quot;name&quot; : &quot;llint_throw_during_call_trampoline&quot; },
-            { &quot;name&quot; : &quot;llint_native_call_trampoline&quot; },
-            { &quot;name&quot; : &quot;llint_native_construct_trampoline&quot; }
-        ]
-    },
-    {
</del><span class="cx">         &quot;section&quot; : &quot;CLoopHelpers&quot;, &quot;emitInHFile&quot; : true, &quot;emitInASMFile&quot; : false, &quot;defaultLength&quot; : 1,
</span><span class="cx">         &quot;macroNameComponent&quot; : &quot;CLOOP_BYTECODE_HELPER&quot;,
</span><span class="cx">         &quot;bytecodes&quot; : [
</span><del>-            { &quot;name&quot; : &quot;llint_c_loop_init&quot; },
</del><ins>+            { &quot;name&quot; : &quot;llint_entry&quot; },
</ins><span class="cx">             { &quot;name&quot; : &quot;getHostCallReturnValue&quot; },
</span><span class="cx">             { &quot;name&quot; : &quot;llint_return_to_host&quot; },
</span><span class="cx">             { &quot;name&quot; : &quot;llint_call_to_javascript&quot; },
</span><span class="cx">             { &quot;name&quot; : &quot;llint_call_to_native_function&quot; },
</span><del>-            { &quot;name&quot; : &quot;handleUncaughtException&quot; },
</del><span class="cx">             { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_1&quot; },
</span><span class="cx">             { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_2&quot; },
</span><span class="cx">             { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_3&quot; },
</span><span class="lines">@@ -160,5 +143,23 @@
</span><span class="cx">             { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_7&quot; },
</span><span class="cx">             { &quot;name&quot; : &quot;llint_cloop_did_return_from_js_8&quot; }
</span><span class="cx">         ]
</span><ins>+    },
+    {
+        &quot;section&quot; : &quot;NativeHelpers&quot;, &quot;emitInHFile&quot; : true, &quot;emitInASMFile&quot; : true, &quot;defaultLength&quot; : 1,
+        &quot;macroNameComponent&quot; : &quot;BYTECODE_HELPER&quot;,
+        &quot;bytecodes&quot; : [
+            { &quot;name&quot; : &quot;llint_program_prologue&quot; },
+            { &quot;name&quot; : &quot;llint_eval_prologue&quot; },
+            { &quot;name&quot; : &quot;llint_function_for_call_prologue&quot; },
+            { &quot;name&quot; : &quot;llint_function_for_construct_prologue&quot; },
+            { &quot;name&quot; : &quot;llint_function_for_call_arity_check&quot; },
+            { &quot;name&quot; : &quot;llint_function_for_construct_arity_check&quot; },
+            { &quot;name&quot; : &quot;llint_generic_return_point&quot; },
+            { &quot;name&quot; : &quot;llint_throw_from_slow_path_trampoline&quot; },
+            { &quot;name&quot; : &quot;llint_throw_during_call_trampoline&quot; },
+            { &quot;name&quot; : &quot;llint_native_call_trampoline&quot; },
+            { &quot;name&quot; : &quot;llint_native_construct_trampoline&quot; },
+            { &quot;name&quot; : &quot;handleUncaughtException&quot; }
+        ]
</ins><span class="cx">     }
</span><span class="cx"> ]
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeCodeBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -1368,10 +1368,8 @@
</span><span class="cx">                 operand);
</span><span class="cx">             break;
</span><span class="cx">         }
</span><del>-#if ENABLE(LLINT_C_LOOP)
</del><span class="cx">         default:
</span><span class="cx">             RELEASE_ASSERT_NOT_REACHED();
</span><del>-#endif
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     dumpRareCaseProfile(out, &quot;rare case: &quot;, rareCaseProfileForBytecodeOffset(location), hasPrintedProfiling);
</span><span class="lines">@@ -1587,7 +1585,7 @@
</span><span class="cx">                 m_rareData-&gt;m_exceptionHandlers[i].target = handler.target;
</span><span class="cx">                 m_rareData-&gt;m_exceptionHandlers[i].scopeDepth = nonLocalScopeDepth + handler.scopeDepth;
</span><span class="cx"> #if ENABLE(JIT) &amp;&amp; ENABLE(LLINT)
</span><del>-                m_rareData-&gt;m_exceptionHandlers[i].nativeCode = CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(LLInt::getCodePtr(llint_op_catch)));
</del><ins>+                m_rareData-&gt;m_exceptionHandlers[i].nativeCode = CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(LLInt::getCodePtr(op_catch)));
</ins><span class="cx"> #endif
</span><span class="cx">             }
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeGetByIdStatuscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx"> #if ENABLE(LLINT)
</span><span class="cx">     Instruction* instruction = profiledBlock-&gt;instructions().begin() + bytecodeIndex;
</span><span class="cx">     
</span><del>-    if (instruction[0].u.opcode == LLInt::getOpcode(llint_op_get_array_length))
</del><ins>+    if (instruction[0].u.opcode == LLInt::getOpcode(op_get_array_length))
</ins><span class="cx">         return GetByIdStatus(NoInformation, false);
</span><span class="cx"> 
</span><span class="cx">     Structure* structure = instruction[4].u.structure.get();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeOpcodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/Opcode.h (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/Opcode.h        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/bytecode/Opcode.h        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -60,9 +60,9 @@
</span><span class="cx"> 
</span><span class="cx"> const int maxOpcodeLength = 9;
</span><span class="cx"> #if ENABLE(LLINT_C_LOOP)
</span><del>-const int numOpcodeIDs = NUMBER_OF_BYTECODE_IDS + NUMBER_OF_BYTECODE_HELPER_IDS + NUMBER_OF_CLOOP_BYTECODE_HELPER_IDS;
</del><ins>+const int numOpcodeIDs = NUMBER_OF_BYTECODE_IDS + NUMBER_OF_CLOOP_BYTECODE_HELPER_IDS + NUMBER_OF_BYTECODE_HELPER_IDS;
</ins><span class="cx"> #else
</span><del>-const int numOpcodeIDs = NUMBER_OF_BYTECODE_IDS;
</del><ins>+const int numOpcodeIDs = NUMBER_OF_BYTECODE_IDS + NUMBER_OF_BYTECODE_HELPER_IDS;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #define OPCODE_ID_LENGTHS(id, length) const int id##_length = length;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodePutByIdStatuscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -70,8 +70,8 @@
</span><span class="cx">     if (!structure)
</span><span class="cx">         return PutByIdStatus(NoInformation);
</span><span class="cx">     
</span><del>-    if (instruction[0].u.opcode == LLInt::getOpcode(llint_op_put_by_id)
-        || instruction[0].u.opcode == LLInt::getOpcode(llint_op_put_by_id_out_of_line)) {
</del><ins>+    if (instruction[0].u.opcode == LLInt::getOpcode(op_put_by_id)
+        || instruction[0].u.opcode == LLInt::getOpcode(op_put_by_id_out_of_line)) {
</ins><span class="cx">         PropertyOffset offset = structure-&gt;getConcurrently(*profiledBlock-&gt;vm(), uid);
</span><span class="cx">         if (!isValidOffset(offset))
</span><span class="cx">             return PutByIdStatus(NoInformation);
</span><span class="lines">@@ -81,10 +81,10 @@
</span><span class="cx">     
</span><span class="cx">     ASSERT(structure-&gt;transitionWatchpointSetHasBeenInvalidated());
</span><span class="cx">     
</span><del>-    ASSERT(instruction[0].u.opcode == LLInt::getOpcode(llint_op_put_by_id_transition_direct)
-           || instruction[0].u.opcode == LLInt::getOpcode(llint_op_put_by_id_transition_normal)
-           || instruction[0].u.opcode == LLInt::getOpcode(llint_op_put_by_id_transition_direct_out_of_line)
-           || instruction[0].u.opcode == LLInt::getOpcode(llint_op_put_by_id_transition_normal_out_of_line));
</del><ins>+    ASSERT(instruction[0].u.opcode == LLInt::getOpcode(op_put_by_id_transition_direct)
+        || instruction[0].u.opcode == LLInt::getOpcode(op_put_by_id_transition_normal)
+        || instruction[0].u.opcode == LLInt::getOpcode(op_put_by_id_transition_direct_out_of_line)
+        || instruction[0].u.opcode == LLInt::getOpcode(op_put_by_id_transition_normal_out_of_line));
</ins><span class="cx">     
</span><span class="cx">     Structure* newStructure = instruction[6].u.structure.get();
</span><span class="cx">     StructureChain* chain = instruction[7].u.structureChain.get();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoregeneratebytecodefiles"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/generate-bytecode-files (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/generate-bytecode-files        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/generate-bytecode-files        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -212,17 +212,12 @@
</span><span class="cx">             bytecodeHFile.write(&quot;\n\n&quot;)
</span><span class="cx">             bytecodeHFile.write(&quot;#define NUMBER_OF_{0}_IDS {1}\n\n&quot;.format(section[&quot;macroNameComponent&quot;], bytecodeNum))
</span><span class="cx"> 
</span><del>-            if &quot;emitDefineID&quot; in section:
-                bytecodeNum = 0
-                for bytecode in section[&quot;bytecodes&quot;]:
-                    bytecodeHFile.write(&quot;#define %s_ID %s\n&quot; % (bytecode[&quot;name&quot;].upper(), bytecodeNum))
-                    bytecodeNum = bytecodeNum + 1
-
-                bytecodeHFile.write(&quot;\n\n&quot;)
-
</del><span class="cx">         if initASMFileName and section['emitInASMFile']:
</span><ins>+            prefix = &quot;&quot;
+            if &quot;asmPrefix&quot; in section:
+                prefix = section[&quot;asmPrefix&quot;]
</ins><span class="cx">             for bytecode in section[&quot;bytecodes&quot;]:
</span><del>-                initBytecodesFile.write(&quot;setEntryAddress({0}, _{1})\n&quot;.format(initASMBytecodeNum, bytecode[&quot;name&quot;]))
</del><ins>+                initBytecodesFile.write(&quot;setEntryAddress({0}, _{1}{2})\n&quot;.format(initASMBytecodeNum, prefix, bytecode[&quot;name&quot;]))
</ins><span class="cx">                 initASMBytecodeNum = initASMBytecodeNum + 1
</span><span class="cx"> 
</span><span class="cx">     if bytecodeHFilename:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JIT.cpp (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JIT.cpp        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/jit/JIT.cpp        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -292,6 +292,8 @@
</span><span class="cx">         DEFINE_OP(op_resolve_scope)
</span><span class="cx">         DEFINE_OP(op_get_from_scope)
</span><span class="cx">         DEFINE_OP(op_put_to_scope)
</span><ins>+        default:
+            RELEASE_ASSERT_NOT_REACHED();
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITStubsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITStubs.h (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITStubs.h        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/jit/JITStubs.h        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx"> extern &quot;C&quot; {
</span><span class="cx">     EncodedJSValue callToJavaScript(void*, VM*, ProtoCallFrame*);
</span><span class="cx">     EncodedJSValue callToNativeFunction(void*, VM*, ProtoCallFrame*);
</span><del>-    void handleUncaughtException();
</del><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntCLoopcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntCLoop.cpp (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntCLoop.cpp        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/llint/LLIntCLoop.cpp        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -35,7 +35,7 @@
</span><span class="cx"> 
</span><span class="cx"> void CLoop::initialize()
</span><span class="cx"> {
</span><del>-    execute(llint_c_loop_init, 0, 0, 0, true);
</del><ins>+    execute(llint_entry, 0, 0, 0, true);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace LLInt
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntData.cpp (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntData.cpp        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/llint/LLIntData.cpp        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -40,25 +40,26 @@
</span><span class="cx"> namespace JSC { namespace LLInt {
</span><span class="cx"> 
</span><span class="cx"> Instruction* Data::s_exceptionInstructions = 0;
</span><del>-Opcode* Data::s_opcodeMap = 0;
</del><ins>+Opcode Data::s_opcodeMap[numOpcodeIDs] = {0};
</ins><span class="cx"> 
</span><ins>+#if !ENABLE(LLINT_C_LOOP)
+extern &quot;C&quot; void llint_entry(void*);
+#endif
+
</ins><span class="cx"> void initialize()
</span><span class="cx"> {
</span><span class="cx">     Data::s_exceptionInstructions = new Instruction[maxOpcodeLength + 1];
</span><del>-    Data::s_opcodeMap = new Opcode[numOpcodeIDs];
</del><span class="cx"> 
</span><del>-    #if ENABLE(LLINT_C_LOOP)
</del><ins>+#if ENABLE(LLINT_C_LOOP)
</ins><span class="cx">     CLoop::initialize();
</span><span class="cx"> 
</span><del>-    #else // !ENABLE(LLINT_C_LOOP)
</del><ins>+#else // !ENABLE(LLINT_C_LOOP)
+    llint_entry(&amp;Data::s_opcodeMap);
+
</ins><span class="cx">     for (int i = 0; i &lt; maxOpcodeLength + 1; ++i)
</span><span class="cx">         Data::s_exceptionInstructions[i].u.pointer =
</span><span class="cx">             LLInt::getCodePtr(llint_throw_from_slow_path_trampoline);
</span><del>-    #define OPCODE_ENTRY(opcode, length) \
-        Data::s_opcodeMap[opcode] = static_cast&lt;Opcode&gt;(LLInt::getCodePtr(llint_##opcode));
-    FOR_EACH_CORE_OPCODE_ID(OPCODE_ENTRY);
-    #undef OPCODE_ENTRY
-    #endif // !ENABLE(LLINT_C_LOOP)
</del><ins>+#endif // !ENABLE(LLINT_C_LOOP)
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if COMPILER(CLANG)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntData.h (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntData.h        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/llint/LLIntData.h        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     static Instruction* s_exceptionInstructions;
</span><del>-    static Opcode* s_opcodeMap;
</del><ins>+    static Opcode s_opcodeMap[numOpcodeIDs];
</ins><span class="cx"> 
</span><span class="cx">     friend void initialize();
</span><span class="cx"> 
</span><span class="lines">@@ -86,6 +86,13 @@
</span><span class="cx">     return reinterpret_cast&lt;void*&gt;(getOpcode(id));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(JIT)
+ALWAYS_INLINE LLIntCode getCodeFunctionPtr(OpcodeID codeId)
+{
+    return reinterpret_cast&lt;LLIntCode&gt;(getCodePtr(codeId));
+}
+#endif
+
</ins><span class="cx"> #else // !ENABLE(LLINT)
</span><span class="cx"> 
</span><span class="cx"> #if COMPILER(CLANG)
</span><span class="lines">@@ -104,16 +111,6 @@
</span><span class="cx"> 
</span><span class="cx"> #endif // !ENABLE(LLINT)
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE void* getOpcode(void llintOpcode())
-{
-    return bitwise_cast&lt;void*&gt;(llintOpcode);
-}
-
-ALWAYS_INLINE void* getCodePtr(void glueHelper())
-{
-    return bitwise_cast&lt;void*&gt;(glueHelper);
-}
-
</del><span class="cx"> ALWAYS_INLINE void* getCodePtr(JSC::EncodedJSValue glueHelper())
</span><span class="cx"> {
</span><span class="cx">     return bitwise_cast&lt;void*&gt;(glueHelper);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntOpcodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntOpcode.h (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntOpcode.h        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/llint/LLIntOpcode.h        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -48,11 +48,7 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-#if ENABLE(LLINT_C_LOOP)
</del><span class="cx"> #define FOR_EACH_LLINT_OPCODE_EXTENSION(macro) FOR_EACH_LLINT_NATIVE_HELPER(macro)
</span><del>-#else
-#define FOR_EACH_LLINT_OPCODE_EXTENSION(macro) // Nothing to add.
-#endif
</del><span class="cx"> 
</span><span class="cx"> #else // !ENABLE(LLINT)
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntSlowPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -588,10 +588,10 @@
</span><span class="cx">             pc[4].u.structure.set(
</span><span class="cx">                 vm, codeBlock-&gt;ownerExecutable(), structure);
</span><span class="cx">             if (isInlineOffset(slot.cachedOffset())) {
</span><del>-                pc[0].u.opcode = LLInt::getOpcode(llint_op_get_by_id);
</del><ins>+                pc[0].u.opcode = LLInt::getOpcode(op_get_by_id);
</ins><span class="cx">                 pc[5].u.operand = offsetInInlineStorage(slot.cachedOffset()) * sizeof(JSValue) + JSObject::offsetOfInlineStorage();
</span><span class="cx">             } else {
</span><del>-                pc[0].u.opcode = LLInt::getOpcode(llint_op_get_by_id_out_of_line);
</del><ins>+                pc[0].u.opcode = LLInt::getOpcode(op_get_by_id_out_of_line);
</ins><span class="cx">                 pc[5].u.operand = offsetInButterfly(slot.cachedOffset()) * sizeof(JSValue);
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -600,7 +600,7 @@
</span><span class="cx">     if (!LLINT_ALWAYS_ACCESS_SLOW
</span><span class="cx">         &amp;&amp; isJSArray(baseValue)
</span><span class="cx">         &amp;&amp; ident == exec-&gt;propertyNames().length) {
</span><del>-        pc[0].u.opcode = LLInt::getOpcode(llint_op_get_array_length);
</del><ins>+        pc[0].u.opcode = LLInt::getOpcode(op_get_array_length);
</ins><span class="cx">         ArrayProfile* arrayProfile = codeBlock-&gt;getOrAddArrayProfile(pc - codeBlock-&gt;instructions().begin());
</span><span class="cx">         arrayProfile-&gt;observeStructure(baseValue.asCell()-&gt;structure());
</span><span class="cx">         pc[4].u.arrayProfile = arrayProfile;
</span><span class="lines">@@ -653,7 +653,7 @@
</span><span class="cx">                     
</span><span class="cx">                     // This is needed because some of the methods we call
</span><span class="cx">                     // below may GC.
</span><del>-                    pc[0].u.opcode = LLInt::getOpcode(llint_op_put_by_id);
</del><ins>+                    pc[0].u.opcode = LLInt::getOpcode(op_put_by_id);
</ins><span class="cx"> 
</span><span class="cx">                     if (normalizePrototypeChain(exec, baseCell) != InvalidPrototypeChain) {
</span><span class="cx">                         ASSERT(structure-&gt;previousID()-&gt;isObject());
</span><span class="lines">@@ -672,14 +672,14 @@
</span><span class="cx">                     
</span><span class="cx">                         if (pc[8].u.operand) {
</span><span class="cx">                             if (isInlineOffset(slot.cachedOffset()))
</span><del>-                                pc[0].u.opcode = LLInt::getOpcode(llint_op_put_by_id_transition_direct);
</del><ins>+                                pc[0].u.opcode = LLInt::getOpcode(op_put_by_id_transition_direct);
</ins><span class="cx">                             else
</span><del>-                                pc[0].u.opcode = LLInt::getOpcode(llint_op_put_by_id_transition_direct_out_of_line);
</del><ins>+                                pc[0].u.opcode = LLInt::getOpcode(op_put_by_id_transition_direct_out_of_line);
</ins><span class="cx">                         } else {
</span><span class="cx">                             if (isInlineOffset(slot.cachedOffset()))
</span><del>-                                pc[0].u.opcode = LLInt::getOpcode(llint_op_put_by_id_transition_normal);
</del><ins>+                                pc[0].u.opcode = LLInt::getOpcode(op_put_by_id_transition_normal);
</ins><span class="cx">                             else
</span><del>-                                pc[0].u.opcode = LLInt::getOpcode(llint_op_put_by_id_transition_normal_out_of_line);
</del><ins>+                                pc[0].u.opcode = LLInt::getOpcode(op_put_by_id_transition_normal_out_of_line);
</ins><span class="cx">                         }
</span><span class="cx">                     }
</span><span class="cx">                 }
</span><span class="lines">@@ -687,10 +687,10 @@
</span><span class="cx">                 pc[4].u.structure.set(
</span><span class="cx">                     vm, codeBlock-&gt;ownerExecutable(), structure);
</span><span class="cx">                 if (isInlineOffset(slot.cachedOffset())) {
</span><del>-                    pc[0].u.opcode = LLInt::getOpcode(llint_op_put_by_id);
</del><ins>+                    pc[0].u.opcode = LLInt::getOpcode(op_put_by_id);
</ins><span class="cx">                     pc[5].u.operand = offsetInInlineStorage(slot.cachedOffset()) * sizeof(JSValue) + JSObject::offsetOfInlineStorage();
</span><span class="cx">                 } else {
</span><del>-                    pc[0].u.opcode = LLInt::getOpcode(llint_op_put_by_id_out_of_line);
</del><ins>+                    pc[0].u.opcode = LLInt::getOpcode(op_put_by_id_out_of_line);
</ins><span class="cx">                     pc[5].u.operand = offsetInButterfly(slot.cachedOffset()) * sizeof(JSValue);
</span><span class="cx">                 }
</span><span class="cx">             }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntThunkscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntThunks.cpp (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntThunks.cpp        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/llint/LLIntThunks.cpp        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -60,32 +60,32 @@
</span><span class="cx"> 
</span><span class="cx"> MacroAssemblerCodeRef functionForCallEntryThunkGenerator(VM* vm)
</span><span class="cx"> {
</span><del>-    return generateThunkWithJumpTo(vm, llint_function_for_call_prologue, &quot;function for call&quot;);
</del><ins>+    return generateThunkWithJumpTo(vm, LLInt::getCodeFunctionPtr(llint_function_for_call_prologue), &quot;function for call&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> MacroAssemblerCodeRef functionForConstructEntryThunkGenerator(VM* vm)
</span><span class="cx"> {
</span><del>-    return generateThunkWithJumpTo(vm, llint_function_for_construct_prologue, &quot;function for construct&quot;);
</del><ins>+    return generateThunkWithJumpTo(vm, LLInt::getCodeFunctionPtr(llint_function_for_construct_prologue), &quot;function for construct&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> MacroAssemblerCodeRef functionForCallArityCheckThunkGenerator(VM* vm)
</span><span class="cx"> {
</span><del>-    return generateThunkWithJumpTo(vm, llint_function_for_call_arity_check, &quot;function for call with arity check&quot;);
</del><ins>+    return generateThunkWithJumpTo(vm, LLInt::getCodeFunctionPtr(llint_function_for_call_arity_check), &quot;function for call with arity check&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> MacroAssemblerCodeRef functionForConstructArityCheckThunkGenerator(VM* vm)
</span><span class="cx"> {
</span><del>-    return generateThunkWithJumpTo(vm, llint_function_for_construct_arity_check, &quot;function for construct with arity check&quot;);
</del><ins>+    return generateThunkWithJumpTo(vm, LLInt::getCodeFunctionPtr(llint_function_for_construct_arity_check), &quot;function for construct with arity check&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> MacroAssemblerCodeRef evalEntryThunkGenerator(VM* vm)
</span><span class="cx"> {
</span><del>-    return generateThunkWithJumpTo(vm, llint_eval_prologue, &quot;eval&quot;);
</del><ins>+    return generateThunkWithJumpTo(vm, LLInt::getCodeFunctionPtr(llint_eval_prologue), &quot;eval&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> MacroAssemblerCodeRef programEntryThunkGenerator(VM* vm)
</span><span class="cx"> {
</span><del>-    return generateThunkWithJumpTo(vm, llint_program_prologue, &quot;program&quot;);
</del><ins>+    return generateThunkWithJumpTo(vm, LLInt::getCodeFunctionPtr(llint_program_prologue), &quot;program&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace LLInt
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntThunksh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntThunks.h (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntThunks.h        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/llint/LLIntThunks.h        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -38,9 +38,6 @@
</span><span class="cx"> extern &quot;C&quot; {
</span><span class="cx">     EncodedJSValue callToJavaScript(void*, VM*, ProtoCallFrame*);
</span><span class="cx">     EncodedJSValue callToNativeFunction(void*, VM*, ProtoCallFrame*);
</span><del>-#if ENABLE(JIT)
-    void handleUncaughtException();
-#endif
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> namespace LLInt {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreterasm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -628,12 +628,6 @@
</span><span class="cx">     ret
</span><span class="cx"> end
</span><span class="cx"> 
</span><del>-# Dummy entry point the C Loop uses to initialize.
-if C_LOOP
-_llint_c_loop_init:
-    crash()
-end
-
</del><span class="cx"> # stub to call into JavaScript or Native functions
</span><span class="cx"> # EncodedJSValue callToJavaScript(void* code, ExecState** vmTopCallFrame, ProtoCallFrame* protoFrame)
</span><span class="cx"> # EncodedJSValue callToNativeFunction(void* code, ExecState** vmTopCallFrame, ProtoCallFrame* protoFrame)
</span><span class="lines">@@ -641,6 +635,7 @@
</span><span class="cx"> if C_LOOP
</span><span class="cx"> _llint_call_to_javascript:
</span><span class="cx"> else
</span><ins>+global _callToJavaScript
</ins><span class="cx"> _callToJavaScript:
</span><span class="cx"> end
</span><span class="cx">     doCallToJavaScript(makeJavaScriptCall)
</span><span class="lines">@@ -649,6 +644,7 @@
</span><span class="cx"> if C_LOOP
</span><span class="cx"> _llint_call_to_native_function:
</span><span class="cx"> else
</span><ins>+global _callToNativeFunction
</ins><span class="cx"> _callToNativeFunction:
</span><span class="cx"> end
</span><span class="cx">     doCallToJavaScript(makeHostFunctionCall)
</span><span class="lines">@@ -657,6 +653,7 @@
</span><span class="cx"> if C_LOOP
</span><span class="cx"> else
</span><span class="cx"> # void sanitizeStackForVMImpl(VM* vm)
</span><ins>+global _sanitizeStackForVMImpl
</ins><span class="cx"> _sanitizeStackForVMImpl:
</span><span class="cx">     if X86_64
</span><span class="cx">         const vm = t4
</span><span class="lines">@@ -692,6 +689,77 @@
</span><span class="cx"> end
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+if C_LOOP
+# Dummy entry point the C Loop uses to initialize.
+_llint_entry:
+    crash()
+else
+macro initPCRelative(pcBase)
+    if X86_64
+        call _relativePCBase
+    _relativePCBase:
+        pop pcBase
+    elsif X86 or X86_WIN
+        call _relativePCBase
+    _relativePCBase:
+        pop pcBase
+        loadp 20[sp], t4
+    elsif ARM64
+    elsif ARMv7
+    _relativePCBase:
+        move pc, pcBase
+        subp 3, pcBase   # Need to back up the PC and set the Thumb2 bit
+    elsif ARM or ARMv7_TRADITIONAL
+    _relativePCBase:
+        move pc, pcBase
+        subp 2, pcBase
+    elsif MIPS
+        crash()  # Need to replace with any initialization steps needed to step up PC relative address calculation
+    elsif SH4
+        crash()  # Need to replace with any initialization steps needed to step up PC relative address calculation
+    end
+end
+
+macro setEntryAddress(index, label)
+    if X86_64
+        leap (label - _relativePCBase)[t1], t0
+        move index, t2
+        storep t0, [t4, t2, 8]
+    elsif X86 or X86_WIN
+        leap (label - _relativePCBase)[t1], t0
+        move index, t2
+        storep t0, [t4, t2, 4]
+    elsif ARM64
+        pcrtoaddr label, t1
+        move index, t2
+        storep t1, [a0, t2, 8]
+    elsif ARM or ARMv7 or ARMv7_TRADITIONAL
+        move (label - _relativePCBase), t2
+        addp t2, t1, t2
+        move index, t3
+        storep t2, [a0, t3, 4]
+    elsif MIPS
+        crash()  # Need to replace with code to turn label into and absolute address and save at index
+    elsif SH4
+        crash()  # Need to replace with code to turn label into and absolute address and save at index
+    end
+end
+
+global _llint_entry
+# Entry point for the llint to initialize.
+_llint_entry:
+    functionPrologue()
+    pushCalleeSaves
+    initPCRelative(t1)
+
+    # Include generated bytecode initialization file.
+    include InitBytecodes
+
+    popCalleeSaves
+    functionEpilogue()
+    ret
+end
+
</ins><span class="cx"> _llint_program_prologue:
</span><span class="cx">     prologue(notFunctionCodeBlockGetter, notFunctionCodeBlockSetter, _llint_entry_osr, _llint_trace_prologue)
</span><span class="cx">     dispatch(0)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpretercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -105,6 +105,8 @@
</span><span class="cx"> 
</span><span class="cx"> #define OFFLINE_ASM_OPCODE_LABEL(opcode) DEFINE_OPCODE(opcode) USE_LABEL(opcode); TRACE_OPCODE(opcode);
</span><span class="cx"> 
</span><ins>+#define OFFLINE_ASM_GLOBAL_LABEL(label)  OFFLINE_ASM_GLUE_LABEL(label)
+
</ins><span class="cx"> #if ENABLE(COMPUTED_GOTO_OPCODES)
</span><span class="cx"> #define OFFLINE_ASM_GLUE_LABEL(label)  label: USE_LABEL(label);
</span><span class="cx"> #else
</span><span class="lines">@@ -495,8 +497,8 @@
</span><span class="cx"> #define OFFLINE_ASM_BEGIN   asm (
</span><span class="cx"> #define OFFLINE_ASM_END     );
</span><span class="cx"> 
</span><del>-#define OFFLINE_ASM_OPCODE_LABEL(__opcode) OFFLINE_ASM_GLOBAL_LABEL(llint_##__opcode)
-#define OFFLINE_ASM_GLUE_LABEL(__opcode)   OFFLINE_ASM_GLOBAL_LABEL(__opcode)
</del><ins>+#define OFFLINE_ASM_OPCODE_LABEL(__opcode) OFFLINE_ASM_LOCAL_LABEL(llint_##__opcode)
+#define OFFLINE_ASM_GLUE_LABEL(__opcode)   OFFLINE_ASM_LOCAL_LABEL(__opcode)
</ins><span class="cx"> 
</span><span class="cx"> #if CPU(ARM_THUMB2)
</span><span class="cx"> #define OFFLINE_ASM_GLOBAL_LABEL(label)          \
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.h (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.h        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.h        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -47,18 +47,8 @@
</span><span class="cx"> 
</span><span class="cx"> } // namespace JSC
</span><span class="cx"> 
</span><del>-#else // !ENABLE(LLINT_C_LOOP)
</del><ins>+#endif // ENABLE(LLINT_C_LOOP)
</ins><span class="cx"> 
</span><del>-#define LLINT_INSTRUCTION_DECL(opcode, length) extern &quot;C&quot; void llint_##opcode();
-    FOR_EACH_OPCODE_ID(LLINT_INSTRUCTION_DECL);
-#undef LLINT_INSTRUCTION_DECL
-
-#define DECLARE_LLINT_NATIVE_HELPER(name, length) extern &quot;C&quot; void name();
-    FOR_EACH_LLINT_NATIVE_HELPER(DECLARE_LLINT_NATIVE_HELPER)
-#undef DECLARE_LLINT_NATIVE_HELPER
-
-#endif // !ENABLE(LLINT_C_LOOP)
-
</del><span class="cx"> #endif // ENABLE(LLINT)
</span><span class="cx"> 
</span><span class="cx"> #endif // LowLevelInterpreter_h
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmarmrb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/arm.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/arm.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/arm.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -69,7 +69,9 @@
</span><span class="cx"> 
</span><span class="cx"> def armMoveImmediate(value, register)
</span><span class="cx">     # Currently we only handle the simple cases, and fall back to mov/movt for the complex ones.
</span><del>-    if value &gt;= 0 &amp;&amp; value &lt; 256
</del><ins>+    if value.is_a? String
+      $asm.puts &quot;mov #{register.armOperand}, (#{value})&quot;
+    elsif value &gt;= 0 &amp;&amp; value &lt; 256
</ins><span class="cx">         $asm.puts &quot;mov #{register.armOperand}, \##{value}&quot;
</span><span class="cx">     elsif (~value) &gt;= 0 &amp;&amp; (~value) &lt; 256
</span><span class="cx">         $asm.puts &quot;mvn #{register.armOperand}, \##{~value}&quot;
</span><span class="lines">@@ -106,6 +108,8 @@
</span><span class="cx">             &quot;lr&quot;
</span><span class="cx">         when &quot;sp&quot;
</span><span class="cx">             &quot;sp&quot;
</span><ins>+        when &quot;pc&quot;
+            &quot;pc&quot;
</ins><span class="cx">         else
</span><span class="cx">             raise &quot;Bad register #{name} for ARM at #{codeOriginString}&quot;
</span><span class="cx">         end
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmarm64rb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/arm64.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/arm64.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/arm64.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -820,6 +820,8 @@
</span><span class="cx">             $asm.puts &quot;smaddl #{operands[2].arm64Operand(:ptr)}, #{operands[0].arm64Operand(:int)}, #{operands[1].arm64Operand(:int)}, xzr&quot;
</span><span class="cx">         when &quot;memfence&quot;
</span><span class="cx">             $asm.puts &quot;dmb sy&quot;
</span><ins>+        when &quot;pcrtoaddr&quot;
+          $asm.puts &quot;adr #{operands[1].arm64Operand(:ptr)}, #{operands[0].value}&quot;
</ins><span class="cx">         else
</span><span class="cx">             lowerDefault
</span><span class="cx">         end
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmasmrb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/asm.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/asm.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/asm.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -172,24 +172,30 @@
</span><span class="cx">         @lastlabel = &quot;&quot;
</span><span class="cx">     end
</span><span class="cx"> 
</span><del>-    def putsLabel(labelName)
</del><ins>+    def putsLabel(labelName, isGlobal)
</ins><span class="cx">         raise unless @state == :asm
</span><span class="cx">         @numGlobalLabels += 1
</span><del>-        putsProcEndIfNeeded if $emitWinAsm
</del><ins>+        putsProcEndIfNeeded if $emitWinAsm and isGlobal
</ins><span class="cx">         putsNewlineSpacerIfAppropriate(:global)
</span><span class="cx">         @internalComment = $enableLabelCountComments ? &quot;Global Label #{@numGlobalLabels}&quot; : nil
</span><del>-        if /\Allint_op_/.match(labelName)
</del><ins>+        if isGlobal
</ins><span class="cx">             if !$emitWinAsm
</span><ins>+                @outp.puts(formatDump(&quot;OFFLINE_ASM_GLOBAL_LABEL(#{labelName})&quot;, lastComment))
+            else
+                putsProc(labelName, lastComment)
+            end            
+        elsif /\Allint_op_/.match(labelName)
+            if !$emitWinAsm
</ins><span class="cx">                 @outp.puts(formatDump(&quot;OFFLINE_ASM_OPCODE_LABEL(op_#{$~.post_match})&quot;, lastComment))
</span><span class="cx">             else
</span><span class="cx">                 label = &quot;llint_&quot; + &quot;op_#{$~.post_match}&quot;
</span><del>-                putsProc(label, lastComment)
-            end
</del><ins>+                @outp.puts(formatDump(&quot;  _#{label}:&quot;, lastComment))
+            end            
</ins><span class="cx">         else
</span><span class="cx">             if !$emitWinAsm
</span><span class="cx">                 @outp.puts(formatDump(&quot;OFFLINE_ASM_GLUE_LABEL(#{labelName})&quot;, lastComment))
</span><span class="cx">             else
</span><del>-                putsProc(labelName, lastComment)
</del><ins>+                @outp.puts(formatDump(&quot;  _#{labelName}:&quot;, lastComment))
</ins><span class="cx">             end
</span><span class="cx">         end
</span><span class="cx">         @newlineSpacerState = :none # After a global label, we can use another spacer.
</span><span class="lines">@@ -206,14 +212,22 @@
</span><span class="cx">             @outp.puts(formatDump(&quot;  #{labelName}:&quot;, lastComment))
</span><span class="cx">         end
</span><span class="cx">     end
</span><del>-    
-    def self.labelReference(labelName)
</del><ins>+
+    def self.externLabelReference(labelName)
</ins><span class="cx">         if !$emitWinAsm
</span><span class="cx">             &quot;\&quot; LOCAL_REFERENCE(#{labelName}) \&quot;&quot;
</span><span class="cx">         else
</span><span class="cx">             &quot;#{labelName}&quot;
</span><span class="cx">         end
</span><span class="cx">     end
</span><ins>+
+    def self.labelReference(labelName)
+        if !$emitWinAsm
+            &quot;\&quot; LOCAL_LABEL_STRING(#{labelName}) \&quot;&quot;
+        else
+            &quot;_#{labelName}&quot;
+        end
+    end
</ins><span class="cx">     
</span><span class="cx">     def self.localLabelReference(labelName)
</span><span class="cx">         if !$emitWinAsm
</span><span class="lines">@@ -262,6 +276,8 @@
</span><span class="cx">     end
</span><span class="cx"> end
</span><span class="cx"> 
</span><ins>+IncludeFile.processIncludeOptions()
+
</ins><span class="cx"> asmFile = ARGV.shift
</span><span class="cx"> offsetsFile = ARGV.shift
</span><span class="cx"> outputFlnm = ARGV.shift
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmastrb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/ast.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/ast.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/ast.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -229,6 +229,10 @@
</span><span class="cx">         true
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        true
+    end
+        
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -255,6 +259,10 @@
</span><span class="cx">         &quot;(#{left.dump} + #{right.dump})&quot;
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def value
+        &quot;#{left.value} + #{right.value}&quot;
+    end
+    
</ins><span class="cx">     def address?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -267,6 +275,10 @@
</span><span class="cx">         true
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        true
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -293,6 +305,10 @@
</span><span class="cx">         &quot;(#{left.dump} - #{right.dump})&quot;
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def value
+        &quot;#{left.value} - #{right.value}&quot;
+    end
+    
</ins><span class="cx">     def address?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -305,6 +321,10 @@
</span><span class="cx">         true
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        true
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -343,6 +363,10 @@
</span><span class="cx">         true
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        false
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -380,6 +404,10 @@
</span><span class="cx">         true
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        false
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -418,6 +446,10 @@
</span><span class="cx">         true
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        false
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -456,6 +488,10 @@
</span><span class="cx">         true
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        false
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -494,6 +530,10 @@
</span><span class="cx">         true
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        false
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -531,6 +571,10 @@
</span><span class="cx">         true
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        false
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -607,6 +651,10 @@
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        false
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         true
</span><span class="cx">     end
</span><span class="lines">@@ -629,6 +677,10 @@
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        false
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         true
</span><span class="cx">     end
</span><span class="lines">@@ -699,6 +751,10 @@
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        true
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -759,6 +815,10 @@
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        false
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -792,6 +852,10 @@
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def immediateOperand?
+        true
+    end
+    
</ins><span class="cx">     def register?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -864,6 +928,7 @@
</span><span class="cx"> end
</span><span class="cx"> 
</span><span class="cx"> $labelMapping = {}
</span><ins>+$referencedExternLabels = Array.new
</ins><span class="cx"> 
</span><span class="cx"> class Label &lt; NoChildren
</span><span class="cx">     attr_reader :name
</span><span class="lines">@@ -871,17 +936,61 @@
</span><span class="cx">     def initialize(codeOrigin, name)
</span><span class="cx">         super(codeOrigin)
</span><span class="cx">         @name = name
</span><ins>+        @extern = true
+        @global = false
</ins><span class="cx">     end
</span><span class="cx">     
</span><del>-    def self.forName(codeOrigin, name)
</del><ins>+    def self.forName(codeOrigin, name, definedInFile = false)
</ins><span class="cx">         if $labelMapping[name]
</span><span class="cx">             raise &quot;Label name collision: #{name}&quot; unless $labelMapping[name].is_a? Label
</span><span class="cx">         else
</span><span class="cx">             $labelMapping[name] = Label.new(codeOrigin, name)
</span><span class="cx">         end
</span><ins>+        if definedInFile
+            $labelMapping[name].clearExtern()
+        end
</ins><span class="cx">         $labelMapping[name]
</span><span class="cx">     end
</span><del>-    
</del><ins>+
+    def self.setAsGlobal(codeOrigin, name)
+        if $labelMapping[name]
+            label = $labelMapping[name]
+            raise &quot;Label: #{name} declared global multiple times&quot; unless not label.global?
+            label.setGlobal()
+        else
+            newLabel = Label.new(codeOrigin, name)
+            newLabel.setGlobal()
+            $labelMapping[name] = newLabel
+        end
+    end
+
+    def self.resetReferenced
+        $referencedExternLabels = Array.new
+    end
+
+    def self.forReferencedExtern()
+        $referencedExternLabels.each {
+            | label |
+            yield &quot;#{label.name}&quot;
+        }
+    end
+
+    def clearExtern
+        @extern = false
+    end
+
+    def extern?
+        @extern
+    end
+
+    def setGlobal
+        @global = true
+    end
+
+    def global?
+        @global
+    end
+
</ins><span class="cx">     def dump
</span><span class="cx">         &quot;#{name}:&quot;
</span><span class="cx">     end
</span><span class="lines">@@ -949,10 +1058,24 @@
</span><span class="cx">         label.name
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def extern?
+        $labelMapping[name].is_a? Label and $labelMapping[name].extern?
+    end
+
+    def used
+        if !$referencedExternLabels.include?(@label) and extern?
+            $referencedExternLabels.push(@label)
+        end
+    end
+
</ins><span class="cx">     def dump
</span><span class="cx">         label.name
</span><span class="cx">     end
</span><span class="cx">     
</span><ins>+    def value
+        asmLabel()
+    end
+
</ins><span class="cx">     def address?
</span><span class="cx">         false
</span><span class="cx">     end
</span><span class="lines">@@ -964,6 +1087,10 @@
</span><span class="cx">     def immediate?
</span><span class="cx">         false
</span><span class="cx">     end
</span><ins>+    
+    def immediateOperand?
+        true
+    end
</ins><span class="cx"> end
</span><span class="cx"> 
</span><span class="cx"> class LocalLabelReference &lt; NoChildren
</span><span class="lines">@@ -989,6 +1116,10 @@
</span><span class="cx">     def dump
</span><span class="cx">         label.name
</span><span class="cx">     end
</span><ins>+
+    def value
+        asmLabel()
+    end
</ins><span class="cx">     
</span><span class="cx">     def address?
</span><span class="cx">         false
</span><span class="lines">@@ -1001,6 +1132,10 @@
</span><span class="cx">     def immediate?
</span><span class="cx">         false
</span><span class="cx">     end
</span><ins>+    
+    def immediateOperand?
+        true
+    end
</ins><span class="cx"> end
</span><span class="cx"> 
</span><span class="cx"> class Sequence &lt; Node
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmbackendsrb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/backends.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/backends.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/backends.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -81,7 +81,7 @@
</span><span class="cx"> 
</span><span class="cx"> class Label
</span><span class="cx">     def lower(name)
</span><del>-        $asm.putsLabel(self.name[1..-1])
</del><ins>+        $asm.putsLabel(self.name[1..-1], @global)
</ins><span class="cx">     end
</span><span class="cx"> end
</span><span class="cx"> 
</span><span class="lines">@@ -93,8 +93,13 @@
</span><span class="cx"> 
</span><span class="cx"> class LabelReference
</span><span class="cx">     def asmLabel
</span><del>-        Assembler.labelReference(name[1..-1])
</del><ins>+        if extern?
+            Assembler.externLabelReference(name[1..-1])
+        else
+            Assembler.labelReference(name[1..-1])
+        end
</ins><span class="cx">     end
</span><ins>+
</ins><span class="cx">     def cLabel
</span><span class="cx">         Assembler.cLabelReference(name[1..-1])
</span><span class="cx">     end
</span><span class="lines">@@ -104,6 +109,7 @@
</span><span class="cx">     def asmLabel
</span><span class="cx">         Assembler.localLabelReference(&quot;_offlineasm_&quot;+name[1..-1])
</span><span class="cx">     end
</span><ins>+
</ins><span class="cx">     def cLabel
</span><span class="cx">         Assembler.cLocalLabelReference(&quot;_offlineasm_&quot;+name[1..-1])
</span><span class="cx">     end
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmclooprb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/cloop.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/cloop.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/cloop.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -1124,7 +1124,7 @@
</span><span class="cx">             $asm.putc &quot;lr.opcode = getOpcode(llint_cloop_did_return_from_js_#{@@didReturnFromJSLabelCounter});&quot;
</span><span class="cx">             $asm.putc &quot;opcode = #{operands[0].clValue(:opcode)};&quot;
</span><span class="cx">             $asm.putc &quot;DISPATCH_OPCODE();&quot;
</span><del>-            $asm.putsLabel(&quot;llint_cloop_did_return_from_js_#{@@didReturnFromJSLabelCounter}&quot;)
</del><ins>+            $asm.putsLabel(&quot;llint_cloop_did_return_from_js_#{@@didReturnFromJSLabelCounter}&quot;, false)
</ins><span class="cx"> 
</span><span class="cx">         # We can't do generic function calls with an arbitrary set of args, but
</span><span class="cx">         # fortunately we don't have to here. All native function calls always
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmgenerate_offset_extractorrb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/generate_offset_extractor.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/generate_offset_extractor.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/generate_offset_extractor.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -34,6 +34,8 @@
</span><span class="cx"> require &quot;settings&quot;
</span><span class="cx"> require &quot;transform&quot;
</span><span class="cx"> 
</span><ins>+IncludeFile.processIncludeOptions()
+
</ins><span class="cx"> inputFlnm = ARGV.shift
</span><span class="cx"> outputFlnm = ARGV.shift
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasminstructionsrb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/instructions.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/instructions.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/instructions.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -266,6 +266,7 @@
</span><span class="cx"> 
</span><span class="cx"> ARM64_INSTRUCTIONS =
</span><span class="cx">     [
</span><ins>+     &quot;pcrtoaddr&quot;,    # Address from PC relative offset - adr instruction
</ins><span class="cx">      &quot;popLRAndFP&quot;,   # ARM64 requires registers to be pushed and popped in pairs,
</span><span class="cx">      &quot;pushLRAndFP&quot;   # therefore we do LR (link register) and FP (frame pointer) together.
</span><span class="cx">     ]
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmparserrb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/parser.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/parser.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/parser.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -41,6 +41,36 @@
</span><span class="cx">     end
</span><span class="cx"> end
</span><span class="cx"> 
</span><ins>+class IncludeFile
+    @@includeDirs = []
+
+    attr_reader :fileName
+
+    def initialize(moduleName, defaultDir)
+        directory = nil
+        @@includeDirs.each {
+            | includePath |
+            fileName = includePath + (moduleName + &quot;.asm&quot;)
+            directory = includePath unless not File.file?(fileName)
+        }
+        if not directory
+            directory = defaultDir
+        end
+
+        @fileName = directory + (moduleName + &quot;.asm&quot;)
+    end
+
+    def self.processIncludeOptions()
+        while ARGV[0][/-I/]
+            path = ARGV.shift[2..-1]
+            if not path
+                path = ARGV.shift
+            end
+            @@includeDirs &lt;&lt; (path + &quot;/&quot;)
+        end
+    end
+end
+
</ins><span class="cx"> class Token
</span><span class="cx">     attr_reader :codeOrigin, :string
</span><span class="cx">     
</span><span class="lines">@@ -157,7 +187,7 @@
</span><span class="cx"> end
</span><span class="cx"> 
</span><span class="cx"> def isKeyword(token)
</span><del>-    token =~ /\A((true)|(false)|(if)|(then)|(else)|(elsif)|(end)|(and)|(or)|(not)|(macro)|(const)|(sizeof)|(error)|(include))\Z/ or
</del><ins>+    token =~ /\A((true)|(false)|(if)|(then)|(else)|(elsif)|(end)|(and)|(or)|(not)|(global)|(macro)|(const)|(sizeof)|(error)|(include))\Z/ or
</ins><span class="cx">         token =~ REGISTER_PATTERN or
</span><span class="cx">         isInstruction(token)
</span><span class="cx"> end
</span><span class="lines">@@ -380,6 +410,14 @@
</span><span class="cx">             @idx += 1
</span><span class="cx">             codeOrigin, names = parseColonColon
</span><span class="cx">             Sizeof.forName(codeOrigin, names.join('::'))
</span><ins>+        elsif isLabel @tokens[@idx]
+            result = LabelReference.new(@tokens[@idx].codeOrigin, Label.forName(@tokens[@idx].codeOrigin, @tokens[@idx].string))
+            @idx += 1
+            result
+        elsif isLocalLabel @tokens[@idx]
+            result = LocalLabelReference.new(@tokens[@idx].codeOrigin, LocalLabel.forName(@tokens[@idx].codeOrigin, @tokens[@idx].string))
+            @idx += 1
+            result
</ins><span class="cx">         else
</span><span class="cx">             parseError
</span><span class="cx">         end
</span><span class="lines">@@ -573,6 +611,14 @@
</span><span class="cx">                 body = parseSequence(/\Aend\Z/, &quot;while inside of macro #{name}&quot;)
</span><span class="cx">                 @idx += 1
</span><span class="cx">                 list &lt;&lt; Macro.new(codeOrigin, name, variables, body)
</span><ins>+            elsif @tokens[@idx] == &quot;global&quot;
+                codeOrigin = @tokens[@idx].codeOrigin
+                @idx += 1
+                skipNewLine
+                parseError unless isLabel(@tokens[@idx])
+                name = @tokens[@idx].string
+                @idx += 1
+                Label.setAsGlobal(codeOrigin, name)
</ins><span class="cx">             elsif isInstruction @tokens[@idx]
</span><span class="cx">                 codeOrigin = @tokens[@idx].codeOrigin
</span><span class="cx">                 name = @tokens[@idx].string
</span><span class="lines">@@ -677,7 +723,7 @@
</span><span class="cx">                 parseError unless @tokens[@idx] == &quot;:&quot;
</span><span class="cx">                 # It's a label.
</span><span class="cx">                 if isLabel name
</span><del>-                    list &lt;&lt; Label.forName(codeOrigin, name)
</del><ins>+                    list &lt;&lt; Label.forName(codeOrigin, name, true)
</ins><span class="cx">                 else
</span><span class="cx">                     list &lt;&lt; LocalLabel.forName(codeOrigin, name)
</span><span class="cx">                 end
</span><span class="lines">@@ -686,7 +732,7 @@
</span><span class="cx">                 @idx += 1
</span><span class="cx">                 parseError unless isIdentifier(@tokens[@idx])
</span><span class="cx">                 moduleName = @tokens[@idx].string
</span><del>-                fileName = @tokens[@idx].codeOrigin.fileName.dirname + (moduleName + &quot;.asm&quot;)
</del><ins>+                fileName = IncludeFile.new(moduleName, @tokens[@idx].codeOrigin.fileName.dirname).fileName
</ins><span class="cx">                 @idx += 1
</span><span class="cx">                 $stderr.puts &quot;offlineasm: Including file #{fileName}&quot;
</span><span class="cx">                 list &lt;&lt; parse(fileName)
</span><span class="lines">@@ -696,6 +742,29 @@
</span><span class="cx">         }
</span><span class="cx">         Sequence.new(firstCodeOrigin, list)
</span><span class="cx">     end
</span><ins>+
+    def parseIncludes(final, comment)
+        firstCodeOrigin = @tokens[@idx].codeOrigin
+        fileList = []
+        fileList &lt;&lt; @tokens[@idx].codeOrigin.fileName
+        loop {
+            if (@idx == @tokens.length and not final) or (final and @tokens[@idx] =~ final)
+                break
+            elsif @tokens[@idx] == &quot;include&quot;
+                @idx += 1
+                parseError unless isIdentifier(@tokens[@idx])
+                moduleName = @tokens[@idx].string
+                fileName = IncludeFile.new(moduleName, @tokens[@idx].codeOrigin.fileName.dirname).fileName
+                @idx += 1
+                
+                fileList &lt;&lt; fileName
+            else
+                @idx += 1
+            end
+        }
+
+        return fileList
+    end
</ins><span class="cx"> end
</span><span class="cx"> 
</span><span class="cx"> def parseData(data, fileName)
</span><span class="lines">@@ -708,6 +777,8 @@
</span><span class="cx"> end
</span><span class="cx"> 
</span><span class="cx"> def parseHash(fileName)
</span><del>-    dirHash(Pathname.new(fileName).dirname, /\.asm$/)
</del><ins>+    parser = Parser.new(IO::read(fileName), fileName)
+    fileList = parser.parseIncludes(nil, &quot;&quot;)
+    fileListHash(fileList)
</ins><span class="cx"> end
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmregistersrb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/registers.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/registers.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/registers.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx">      &quot;r1&quot;,
</span><span class="cx">      &quot;sp&quot;,
</span><span class="cx">      &quot;lr&quot;,
</span><del>-     
</del><ins>+     &quot;pc&quot;,
</ins><span class="cx">      # 64-bit only registers:
</span><span class="cx">      &quot;csr1&quot;,  # tag type number register
</span><span class="cx">      &quot;csr2&quot;   # tag mask register
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmself_hashrb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/self_hash.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/self_hash.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/self_hash.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -45,6 +45,21 @@
</span><span class="cx"> end
</span><span class="cx"> 
</span><span class="cx"> #
</span><ins>+# fileListHash(fileList) -&gt; SHA1 hexdigest
+#
+# Returns a hash of all files in the list.
+#
+
+def fileListHash(fileList)
+    contents = &quot;&quot;
+    fileList.each {
+        | fileName |
+        contents += IO::read(fileName)
+    }
+    return Digest::SHA1.hexdigest(contents)
+end
+
+#
</ins><span class="cx"> # selfHash -&gt; SHA1 hexdigest
</span><span class="cx"> #
</span><span class="cx"> # Returns a hash of the offlineasm source code. This allows dependency
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmsettingsrb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/settings.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/settings.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/settings.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -172,6 +172,8 @@
</span><span class="cx"> #
</span><span class="cx"> 
</span><span class="cx"> def emitCodeInConfiguration(concreteSettings, ast, backend)
</span><ins>+    Label.resetReferenced
+
</ins><span class="cx">     if !$emitWinAsm
</span><span class="cx">         $output.puts cppSettingsTest(concreteSettings)
</span><span class="cx">     else
</span><span class="lines">@@ -193,6 +195,15 @@
</span><span class="cx">     else
</span><span class="cx">         $output.puts &quot;_TEXT ENDS&quot;
</span><span class="cx">         $output.puts &quot;END&quot;
</span><ins>+
+        # Write symbols needed by MASM
+        File.open(&quot;#{File.basename($output.path)}.sym&quot;, &quot;w&quot;) {
+            | outp |
+            Label.forReferencedExtern {
+                | name |
+                outp.puts &quot;EXTERN #{name[1..-1]} : near&quot;
+            }
+        }
</ins><span class="cx">     end
</span><span class="cx"> end
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmtransformrb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/transform.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/transform.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/transform.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -457,6 +457,13 @@
</span><span class="cx">     end
</span><span class="cx"> end
</span><span class="cx"> 
</span><ins>+class SubImmediates
+    def validate
+      raise &quot;Invalid operand #{left.dump} to immediate subtraction&quot; unless left.immediateOperand?
+      raise &quot;Invalid operand #{right.dump} to immediate subtraction&quot; unless right.immediateOperand?
+    end
+end
+
</ins><span class="cx"> class Error
</span><span class="cx">     def validate
</span><span class="cx">     end
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreofflineasmx86rb"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/offlineasm/x86.rb (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/offlineasm/x86.rb        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/JavaScriptCore/offlineasm/x86.rb        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -463,6 +463,9 @@
</span><span class="cx"> end
</span><span class="cx"> 
</span><span class="cx"> class LocalLabelReference
</span><ins>+    def x86Operand(kind)
+        asmLabel
+    end
</ins><span class="cx">     def x86CallOperand(kind)
</span><span class="cx">         asmLabel
</span><span class="cx">     end
</span><span class="lines">@@ -511,7 +514,6 @@
</span><span class="cx"> 
</span><span class="cx"> class Instruction
</span><span class="cx">     @@floatingPointCompareImplicitOperand = isIntelSyntax ? &quot;st(0), &quot; : &quot;&quot;
</span><del>-    @@exportedSymbols = Array.new
</del><span class="cx">     
</span><span class="cx">     def x86Operands(*kinds)
</span><span class="cx">         raise unless kinds.size == operands.size
</span><span class="lines">@@ -846,22 +848,6 @@
</span><span class="cx">         lowerX86Common
</span><span class="cx">     end
</span><span class="cx"> 
</span><del>-    def writeSymbolToFile(symbol)
-        raise unless isMSVC
-
-        alreadyExported = @@exportedSymbols.include?(symbol)
-
-        if !alreadyExported
-            @@exportedSymbols.push(symbol)
-
-            # Write symbols needed by MASM
-            File.open(&quot;#{File.basename($output.path)}.sym&quot;, &quot;a&quot;) {
-                | outp |
-                outp.puts &quot;EXTERN #{symbol} : near&quot;
-            }
-        end
-    end
-    
</del><span class="cx">     def lowerX86Common
</span><span class="cx">         $asm.codeOrigin codeOriginString if $enableCodeOriginComments
</span><span class="cx">         $asm.annotation annotation if $enableInstrAnnotations
</span><span class="lines">@@ -1338,8 +1324,8 @@
</span><span class="cx">                 }
</span><span class="cx">             end
</span><span class="cx">             op = operands[0].x86CallOperand(:ptr)
</span><del>-            if isMSVC &amp;&amp; (operands[0].is_a? LabelReference)
-                writeSymbolToFile(op)
</del><ins>+            if operands[0].is_a? LabelReference
+                operands[0].used
</ins><span class="cx">             end
</span><span class="cx">             $asm.puts &quot;call #{op}&quot;
</span><span class="cx">         when &quot;ret&quot;
</span></span></pre></div>
<a id="trunkSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/ChangeLog (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/ChangeLog        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/WebKit/ChangeLog        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2014-04-10  Michael Saboff  &lt;msaboff@apple.com&gt;
+
+        LLInt interpreter code should be generated as part of one function
+        https://bugs.webkit.org/show_bug.cgi?id=131205
+
+        Reviewed by Mark Lam.
+
+        Updated VS dependencies for JavaScriptCore changes.
+
+        * WebKit.vcxproj/WebKit.sln:
+
</ins><span class="cx"> 2014-04-10  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Win] Unreviewed 64-bit Build Fix.
</span></span></pre></div>
<a id="trunkSourceWebKitWebKitvcxprojWebKitsln"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/WebKit.vcxproj/WebKit.sln (167093 => 167094)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/WebKit.vcxproj/WebKit.sln        2014-04-10 22:23:50 UTC (rev 167093)
+++ trunk/Source/WebKit/WebKit.vcxproj/WebKit.sln        2014-04-10 22:33:59 UTC (rev 167094)
</span><span class="lines">@@ -68,6 +68,7 @@
</span><span class="cx"> EndProject
</span><span class="cx"> Project(&quot;{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}&quot;) = &quot;LLIntOffsetsExtractor&quot;, &quot;..\..\JavaScriptCore\JavaScriptCore.vcxproj\LLInt\LLIntOffsetsExtractor\LLIntOffsetsExtractor.vcxproj&quot;, &quot;{D595E3F6-24F2-4C60-935C-95D50C6B3E96}&quot;
</span><span class="cx">         ProjectSection(ProjectDependencies) = postProject
</span><ins>+                {3670D01F-95F3-45A8-B878-947EB6CF214E} = {3670D01F-95F3-45A8-B878-947EB6CF214E}
</ins><span class="cx">                 {877150A0-41B3-4730-9D98-1B8298098B14} = {877150A0-41B3-4730-9D98-1B8298098B14}
</span><span class="cx">         EndProjectSection
</span><span class="cx"> EndProject
</span><span class="lines">@@ -78,6 +79,7 @@
</span><span class="cx"> EndProject
</span><span class="cx"> Project(&quot;{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}&quot;) = &quot;LLIntAssembly&quot;, &quot;..\..\JavaScriptCore\JavaScriptCore.vcxproj\LLInt\LLIntAssembly\LLIntAssembly.vcxproj&quot;, &quot;{9221744B-5715-4F56-9590-42F7AB23DD8B}&quot;
</span><span class="cx">         ProjectSection(ProjectDependencies) = postProject
</span><ins>+                {3670D01F-95F3-45A8-B878-947EB6CF214E} = {3670D01F-95F3-45A8-B878-947EB6CF214E}
</ins><span class="cx">                 {D595E3F6-24F2-4C60-935C-95D50C6B3E96} = {D595E3F6-24F2-4C60-935C-95D50C6B3E96}
</span><span class="cx">         EndProjectSection
</span><span class="cx"> EndProject
</span></span></pre>
</div>
</div>

</body>
</html>