<!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>[208148] trunk</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/208148">208148</a></dd>
<dt>Author</dt> <dd>keith_miller@apple.com</dd>
<dt>Date</dt> <dd>2016-10-31 09:24:59 -0700 (Mon, 31 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>autogenerated files from wasm.json should be in derived sources.
https://bugs.webkit.org/show_bug.cgi?id=164152

Reviewed by Filip Pizlo.

JSTests:

Delete generation script since it is no longer used.

* wasm/generate-wasmops-header.js: Removed.

Source/JavaScriptCore:

Add two new python scripts to the build. These scripts do what the
old js script in JSTests did. Previously, changes to wasm.json needed
to be manually reflected in WasmOps.h. This patch will auto-build from
the json file. That system was unsustainable, especially as future patches
will likely add more autogenerated files. The generated header files are
identical other than the comment at the top and the order of the opcodes.
I believe ordering difference just has to do with the iteration order for
sets.

* DerivedSources.make:
* wasm/WasmOps.h: Removed.
* wasm/generateWasm.py: Added.
(Wasm):
(Wasm.__init__):
(opcodeIterator):
(toCpp):
(isNormal):
(isUnary):
(isBinary):
* wasm/generateWasmOpsHeader.py: Added.
(cppMacro):
(opcodeMacroizer):
(ceilDiv):
(bitSet):
(BinaryOpType):
(UnaryOpType):
(LoadOpType):
(StoreOpType):
* wasm/wasm.json: Added.

Tools:

Add message to make sure that people keep the wasm.jsons up to date.

* Scripts/webkitpy/common/config/watchlist:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkJSTestsChangeLog">trunk/JSTests/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreDerivedSourcesmake">trunk/Source/JavaScriptCore/DerivedSources.make</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptswebkitpycommonconfigwatchlist">trunk/Tools/Scripts/webkitpy/common/config/watchlist</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCorewasmgenerateWasmpy">trunk/Source/JavaScriptCore/wasm/generateWasm.py</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmgenerateWasmOpsHeaderpy">trunk/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmwasmjson">trunk/Source/JavaScriptCore/wasm/wasm.json</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkJSTestswasmgeneratewasmopsheaderjs">trunk/JSTests/wasm/generate-wasmops-header.js</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmOpsh">trunk/Source/JavaScriptCore/wasm/WasmOps.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkJSTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/JSTests/ChangeLog (208147 => 208148)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/ChangeLog        2016-10-31 16:17:48 UTC (rev 208147)
+++ trunk/JSTests/ChangeLog        2016-10-31 16:24:59 UTC (rev 208148)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-10-31  Keith Miller  &lt;keith_miller@apple.com&gt;
+
+        autogenerated files from wasm.json should be in derived sources.
+        https://bugs.webkit.org/show_bug.cgi?id=164152
+
+        Reviewed by Filip Pizlo.
+
+        Delete generation script since it is no longer used.
+
+        * wasm/generate-wasmops-header.js: Removed.
+
</ins><span class="cx"> 2016-10-29  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [JSC] JSON.stringify should handle Proxy which is non JSArray but isArray is true
</span></span></pre></div>
<a id="trunkJSTestswasmgeneratewasmopsheaderjs"></a>
<div class="delfile"><h4>Deleted: trunk/JSTests/wasm/generate-wasmops-header.js (208147 => 208148)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/wasm/generate-wasmops-header.js        2016-10-31 16:17:48 UTC (rev 208147)
+++ trunk/JSTests/wasm/generate-wasmops-header.js        2016-10-31 16:24:59 UTC (rev 208148)
</span><span class="lines">@@ -1,189 +0,0 @@
</span><del>-// Use the JSON description of WebAssembly to generate the JavaScriptCore's WasmOps.h.
-
-const jsonFile = 'wasm.json';
-const wasm = JSON.parse(read(jsonFile));
-const opcodes = wasm.opcode;
-
-// Iterate through opcodes which match filter, and on each iteration yield ret.
-const opcodeIterator = (filter, ret = op =&gt; { return {name: op, opcode: opcodes[op]}; }) =&gt; {
-    return function*() {
-        for (let op in opcodes)
-            if (filter(opcodes[op]))
-                yield ret(op);
-    };
-};
-
-// WebAssembly opcode name to C++ name suitable for JSC.
-const toCpp = name =&gt; {
-    const camelCase = name.replace(/([^a-z0-9].)/g, c =&gt; c[1].toUpperCase());
-    const CamelCase = camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
-    return CamelCase;
-};
-
-const cppMacro = (wasmOpcode, value, b3Opcode) =&gt; &quot; \\\n    macro(&quot; + toCpp(wasmOpcode) + &quot;, 0x&quot; + parseInt(value).toString(16) + &quot;, &quot; + b3Opcode + &quot;)&quot;;
-
-function* opcodeMacroizer(filter) {
-    for (let op of opcodeIterator(filter)())
-        yield cppMacro(op.name, op.opcode.value, op.opcode.b3op || &quot;Oops&quot;);
-}
-
-const isNormalOp = op =&gt; op.category === &quot;arithmetic&quot; || op.category === &quot;conversion&quot; || op.category === &quot;comparison&quot;;
-const isUnaryOp = op =&gt; isNormalOp(op) &amp;&amp; op.parameter.length === 1;
-const isBinaryOp = op =&gt; isNormalOp(op) &amp;&amp; op.parameter.length === 2;
-
-const defines = [
-    &quot;#define FOR_EACH_WASM_SPECIAL_OP(macro)&quot;,
-    ...opcodeMacroizer(op =&gt; op.category === &quot;special&quot; || op.category === &quot;call&quot;),
-    &quot;\n\n#define FOR_EACH_WASM_CONTROL_FLOW_OP(macro)&quot;,
-    ...opcodeMacroizer(op =&gt; op.category === &quot;control&quot;),
-    &quot;\n\n#define FOR_EACH_WASM_SIMPLE_UNARY_OP(macro)&quot;,
-    ...opcodeMacroizer(op =&gt; isUnaryOp(op) &amp;&amp; op.b3op),
-    &quot;\n\n#define FOR_EACH_WASM_UNARY_OP(macro) \\\n    FOR_EACH_WASM_SIMPLE_UNARY_OP(macro)&quot;,
-    ...opcodeMacroizer(op =&gt; isUnaryOp(op) &amp;&amp; !op.b3op),
-    &quot;\n\n#define FOR_EACH_WASM_SIMPLE_BINARY_OP(macro)&quot;,
-    ...opcodeMacroizer(op =&gt; isBinaryOp(op) &amp;&amp; op.b3op),
-    &quot;\n\n#define FOR_EACH_WASM_BINARY_OP(macro) \\\n    FOR_EACH_WASM_SIMPLE_BINARY_OP(macro)&quot;,
-    ...opcodeMacroizer(op =&gt; isBinaryOp(op) &amp;&amp; !op.b3op),
-    &quot;\n\n#define FOR_EACH_WASM_MEMORY_LOAD_OP(macro)&quot;,
-    ...opcodeMacroizer(op =&gt; (op.category === &quot;memory&quot; &amp;&amp; op.return.length === 1)),
-    &quot;\n\n#define FOR_EACH_WASM_MEMORY_STORE_OP(macro)&quot;,
-    ...opcodeMacroizer(op =&gt; (op.category === &quot;memory&quot; &amp;&amp; op.return.length === 0)),
-    &quot;\n\n&quot;].join(&quot;&quot;);
-
-const opValueSet = new Set(opcodeIterator(op =&gt; true, op =&gt; opcodes[op].value)());
-const maxOpValue = Math.max(...opValueSet);
-const validOps = (() =&gt; {
-    // Create a bitset of valid ops.
-    let v = &quot;&quot;;
-    for (let i = 0; i &lt; maxOpValue / 8; ++i) {
-        let entry = 0;
-        for (let j = 0; j &lt; 8; ++j)
-            if (opValueSet.has(i * 8 + j))
-                entry |= 1 &lt;&lt; j;
-        v += (i ? &quot;, &quot; : &quot;&quot;) + &quot;0x&quot; + entry.toString(16);
-    }
-    return v;
-})();
-
-const template = `/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. \`\`AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// This file is auto-generated using ${jsonFile}.
-
-#pragma once
-
-#if ENABLE(WEBASSEMBLY)
-
-#include &lt;cstdint&gt;
-
-namespace JSC { namespace Wasm {
-
-${defines}
-
-#define FOR_EACH_WASM_OP(macro) \\
-    FOR_EACH_WASM_SPECIAL_OP(macro) \\
-    FOR_EACH_WASM_CONTROL_FLOW_OP(macro) \\
-    FOR_EACH_WASM_UNARY_OP(macro) \\
-    FOR_EACH_WASM_BINARY_OP(macro) \\
-    FOR_EACH_WASM_MEMORY_LOAD_OP(macro) \\
-    FOR_EACH_WASM_MEMORY_STORE_OP(macro)
-
-#define CREATE_ENUM_VALUE(name, id, b3op) name = id,
-
-enum OpType : uint8_t {
-    FOR_EACH_WASM_OP(CREATE_ENUM_VALUE)
-};
-
-template&lt;typename Int&gt;
-inline bool isValidOpType(Int i)
-{
-    // Bitset of valid ops.
-    static const uint8_t valid[] = { ${validOps} };
-    return 0 &lt;= i &amp;&amp; i &lt;= ${maxOpValue} &amp;&amp; (valid[i / 8] &amp; (1 &lt;&lt; (i % 8)));
-}
-
-enum class BinaryOpType : uint8_t {
-    FOR_EACH_WASM_BINARY_OP(CREATE_ENUM_VALUE)
-};
-
-enum class UnaryOpType : uint8_t {
-    FOR_EACH_WASM_UNARY_OP(CREATE_ENUM_VALUE)
-};
-
-enum class LoadOpType : uint8_t {
-    FOR_EACH_WASM_MEMORY_LOAD_OP(CREATE_ENUM_VALUE)
-};
-
-enum class StoreOpType : uint8_t {
-    FOR_EACH_WASM_MEMORY_STORE_OP(CREATE_ENUM_VALUE)
-};
-
-#undef CREATE_ENUM_VALUE
-
-inline bool isControlOp(OpType op)
-{
-    switch (op) {
-#define CREATE_CASE(name, id, b3op) case OpType::name:
-    FOR_EACH_WASM_CONTROL_FLOW_OP(CREATE_CASE)
-        return true;
-#undef CREATE_CASE
-    default:
-        break;
-    }
-    return false;
-}
-
-inline bool isSimple(UnaryOpType op)
-{
-    switch (op) {
-#define CREATE_CASE(name, id, b3op) case UnaryOpType::name:
-    FOR_EACH_WASM_SIMPLE_UNARY_OP(CREATE_CASE)
-        return true;
-#undef CREATE_CASE
-    default:
-        break;
-    }
-    return false;
-}
-
-inline bool isSimple(BinaryOpType op)
-{
-    switch (op) {
-#define CREATE_CASE(name, id, b3op) case BinaryOpType::name:
-    FOR_EACH_WASM_SIMPLE_BINARY_OP(CREATE_CASE)
-        return true;
-#undef CREATE_CASE
-    default:
-        break;
-    }
-    return false;
-}
-
-} } // namespace JSC::Wasm
-
-#endif // ENABLE(WEBASSEMBLY)
-`;
-
-print(template);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (208147 => 208148)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-10-31 16:17:48 UTC (rev 208147)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-10-31 16:24:59 UTC (rev 208148)
</span><span class="lines">@@ -1,3 +1,40 @@
</span><ins>+2016-10-31  Keith Miller  &lt;keith_miller@apple.com&gt;
+
+        autogenerated files from wasm.json should be in derived sources.
+        https://bugs.webkit.org/show_bug.cgi?id=164152
+
+        Reviewed by Filip Pizlo.
+
+        Add two new python scripts to the build. These scripts do what the
+        old js script in JSTests did. Previously, changes to wasm.json needed
+        to be manually reflected in WasmOps.h. This patch will auto-build from
+        the json file. That system was unsustainable, especially as future patches
+        will likely add more autogenerated files. The generated header files are
+        identical other than the comment at the top and the order of the opcodes.
+        I believe ordering difference just has to do with the iteration order for
+        sets.
+
+        * DerivedSources.make:
+        * wasm/WasmOps.h: Removed.
+        * wasm/generateWasm.py: Added.
+        (Wasm):
+        (Wasm.__init__):
+        (opcodeIterator):
+        (toCpp):
+        (isNormal):
+        (isUnary):
+        (isBinary):
+        * wasm/generateWasmOpsHeader.py: Added.
+        (cppMacro):
+        (opcodeMacroizer):
+        (ceilDiv):
+        (bitSet):
+        (BinaryOpType):
+        (UnaryOpType):
+        (LoadOpType):
+        (StoreOpType):
+        * wasm/wasm.json: Added.
+
</ins><span class="cx"> 2016-10-29  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [JSC] JSON.stringify should handle Proxy which is non JSArray but isArray is true
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreDerivedSourcesmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/DerivedSources.make (208147 => 208148)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/DerivedSources.make        2016-10-31 16:17:48 UTC (rev 208147)
+++ trunk/Source/JavaScriptCore/DerivedSources.make        2016-10-31 16:24:59 UTC (rev 208148)
</span><span class="lines">@@ -63,6 +63,7 @@
</span><span class="cx">     RegExpJitTables.h \
</span><span class="cx">     AirOpcode.h \
</span><span class="cx">     YarrCanonicalizeUnicode.cpp \
</span><ins>+    WasmOps.h \
</ins><span class="cx"> #
</span><span class="cx"> 
</span><span class="cx"> # JavaScript builtins.
</span><span class="lines">@@ -297,6 +298,9 @@
</span><span class="cx"> YarrCanonicalizeUnicode.cpp: $(JavaScriptCore)/generateYarrCanonicalizeUnicode $(JavaScriptCore)/ucd/CaseFolding.txt
</span><span class="cx">         $(PYTHON) $(JavaScriptCore)/generateYarrCanonicalizeUnicode $(JavaScriptCore)/ucd/CaseFolding.txt ./YarrCanonicalizeUnicode.cpp
</span><span class="cx"> 
</span><ins>+WasmOps.h: $(JavaScriptCore)/wasm/generateWasmOpsHeader.py $(JavaScriptCore)/wasm/generateWasm.py $(JavaScriptCore)/wasm/wasm.json
+        $(PYTHON) $(JavaScriptCore)/wasm/generateWasmOpsHeader.py $(JavaScriptCore)/wasm/wasm.json ./WasmOps.h
+
</ins><span class="cx"> # Dynamically-defined targets are listed below. Static targets belong up top.
</span><span class="cx"> 
</span><span class="cx"> all : \
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmOpsh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/wasm/WasmOps.h (208147 => 208148)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmOps.h        2016-10-31 16:17:48 UTC (rev 208147)
+++ trunk/Source/JavaScriptCore/wasm/WasmOps.h        2016-10-31 16:24:59 UTC (rev 208148)
</span><span class="lines">@@ -1,308 +0,0 @@
</span><del>-/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// This file is auto-generated using wasm.json.
-
-#pragma once
-
-#if ENABLE(WEBASSEMBLY)
-
-#include &lt;cstdint&gt;
-
-namespace JSC { namespace Wasm {
-
-#define FOR_EACH_WASM_SPECIAL_OP(macro) \
-    macro(I32Const, 0x10, Oops) \
-    macro(I64Const, 0x11, Oops) \
-    macro(F64Const, 0x12, Oops) \
-    macro(F32Const, 0x13, Oops) \
-    macro(GetLocal, 0x14, Oops) \
-    macro(SetLocal, 0x15, Oops) \
-    macro(TeeLocal, 0x19, Oops) \
-    macro(GetGlobal, 0xbb, Oops) \
-    macro(SetGlobal, 0xbc, Oops) \
-    macro(Call, 0x16, Oops) \
-    macro(CallIndirect, 0x17, Oops)
-
-#define FOR_EACH_WASM_CONTROL_FLOW_OP(macro) \
-    macro(Unreachable, 0x0, Oops) \
-    macro(Block, 0x1, Oops) \
-    macro(Loop, 0x2, Oops) \
-    macro(If, 0x3, Oops) \
-    macro(Else, 0x4, Oops) \
-    macro(Select, 0x5, Oops) \
-    macro(Br, 0x6, Oops) \
-    macro(BrIf, 0x7, Oops) \
-    macro(BrTable, 0x8, Oops) \
-    macro(Return, 0x9, Oops) \
-    macro(Drop, 0xb, Oops) \
-    macro(Nop, 0xa, Oops) \
-    macro(End, 0xf, Oops)
-
-#define FOR_EACH_WASM_SIMPLE_UNARY_OP(macro) \
-    macro(I32Clz, 0x57, Clz) \
-    macro(I64Clz, 0x72, Clz) \
-    macro(F32Abs, 0x7b, Abs) \
-    macro(F32Ceil, 0x7e, Ceil) \
-    macro(F32Floor, 0x7f, Floor) \
-    macro(F64Abs, 0x8f, Abs) \
-    macro(F64Ceil, 0x92, Ceil) \
-    macro(F64Floor, 0x93, Floor) \
-    macro(I64ExtendSI32, 0xa6, SExt32) \
-    macro(I64ExtendUI32, 0xa7, ZExt32) \
-    macro(F32DemoteF64, 0xac, DoubleToFloat) \
-    macro(F32ReinterpretI32, 0xad, BitwiseCast) \
-    macro(F64PromoteF32, 0xb2, FloatToDouble) \
-    macro(F64ReinterpretI64, 0xb3, BitwiseCast) \
-    macro(I32ReinterpretF32, 0xb4, BitwiseCast) \
-    macro(I64ReinterpretF64, 0xb5, BitwiseCast)
-
-#define FOR_EACH_WASM_UNARY_OP(macro) \
-    FOR_EACH_WASM_SIMPLE_UNARY_OP(macro) \
-    macro(I32Ctz, 0x58, Oops) \
-    macro(I32Popcnt, 0x59, Oops) \
-    macro(I32Eqz, 0x5a, Oops) \
-    macro(I64Ctz, 0x73, Oops) \
-    macro(I64Popcnt, 0x74, Oops) \
-    macro(I64Eqz, 0xba, Oops) \
-    macro(F32Neg, 0x7c, Oops) \
-    macro(F32Copysign, 0x7d, Oops) \
-    macro(F32Trunc, 0x80, Oops) \
-    macro(F32Nearest, 0x81, Oops) \
-    macro(F32Sqrt, 0x82, Oops) \
-    macro(F64Neg, 0x90, Oops) \
-    macro(F64Copysign, 0x91, Oops) \
-    macro(F64Trunc, 0x94, Oops) \
-    macro(F64Nearest, 0x95, Oops) \
-    macro(F64Sqrt, 0x96, Oops) \
-    macro(I32TruncSF32, 0x9d, Oops) \
-    macro(I32TruncSF64, 0x9e, Oops) \
-    macro(I32TruncUF32, 0x9f, Oops) \
-    macro(I32TruncUF64, 0xa0, Oops) \
-    macro(I32WrapI64, 0xa1, Oops) \
-    macro(I64TruncSF32, 0xa2, Oops) \
-    macro(I64TruncSF64, 0xa3, Oops) \
-    macro(I64TruncUF32, 0xa4, Oops) \
-    macro(I64TruncUF64, 0xa5, Oops) \
-    macro(F32ConvertSI32, 0xa8, Oops) \
-    macro(F32ConvertUI32, 0xa9, Oops) \
-    macro(F32ConvertSI64, 0xaa, Oops) \
-    macro(F32ConvertUI64, 0xab, Oops) \
-    macro(F64ConvertSI32, 0xae, Oops) \
-    macro(F64ConvertUI32, 0xaf, Oops) \
-    macro(F64ConvertSI64, 0xb0, Oops) \
-    macro(F64ConvertUI64, 0xb1, Oops)
-
-#define FOR_EACH_WASM_SIMPLE_BINARY_OP(macro) \
-    macro(I32Add, 0x40, Add) \
-    macro(I32Sub, 0x41, Sub) \
-    macro(I32Mul, 0x42, Mul) \
-    macro(I32DivS, 0x43, Div) \
-    macro(I32RemS, 0x45, Mod) \
-    macro(I32And, 0x47, BitAnd) \
-    macro(I32Or, 0x48, BitOr) \
-    macro(I32Xor, 0x49, BitXor) \
-    macro(I32Shl, 0x4a, Shl) \
-    macro(I32ShrU, 0x4b, SShr) \
-    macro(I32ShrS, 0x4c, ZShr) \
-    macro(I32Eq, 0x4d, Equal) \
-    macro(I32Ne, 0x4e, NotEqual) \
-    macro(I32LtS, 0x4f, LessThan) \
-    macro(I32LeS, 0x50, LessEqual) \
-    macro(I32LtU, 0x51, Below) \
-    macro(I32LeU, 0x52, BelowEqual) \
-    macro(I32GtS, 0x53, GreaterThan) \
-    macro(I32GeS, 0x54, GreaterEqual) \
-    macro(I32GtU, 0x55, Above) \
-    macro(I32GeU, 0x56, AboveEqual) \
-    macro(I64Add, 0x5b, Add) \
-    macro(I64Sub, 0x5c, Sub) \
-    macro(I64Mul, 0x5d, Mul) \
-    macro(I64DivS, 0x5e, Div) \
-    macro(I64RemS, 0x60, Mod) \
-    macro(I64And, 0x62, BitAnd) \
-    macro(I64Or, 0x63, BitOr) \
-    macro(I64Xor, 0x64, BitXor) \
-    macro(I64Shl, 0x65, Shl) \
-    macro(I64ShrU, 0x66, SShr) \
-    macro(I64ShrS, 0x67, ZShr) \
-    macro(I64Eq, 0x68, Equal) \
-    macro(I64Ne, 0x69, NotEqual) \
-    macro(I64LtS, 0x6a, LessThan) \
-    macro(I64LeS, 0x6b, LessEqual) \
-    macro(I64LtU, 0x6c, Below) \
-    macro(I64LeU, 0x6d, BelowEqual) \
-    macro(I64GtS, 0x6e, GreaterThan) \
-    macro(I64GeS, 0x6f, GreaterEqual) \
-    macro(I64GtU, 0x70, Above) \
-    macro(I64GeU, 0x71, AboveEqual) \
-    macro(F32Add, 0x75, Add) \
-    macro(F32Sub, 0x76, Sub) \
-    macro(F32Mul, 0x77, Mul) \
-    macro(F32Div, 0x78, Div) \
-    macro(F32Eq, 0x83, Equal) \
-    macro(F32Ne, 0x84, NotEqual) \
-    macro(F32Lt, 0x85, LessThan) \
-    macro(F32Le, 0x86, LessEqual) \
-    macro(F32Gt, 0x87, GreaterThan) \
-    macro(F32Ge, 0x88, GreaterEqual) \
-    macro(F64Add, 0x89, Add) \
-    macro(F64Sub, 0x8a, Sub) \
-    macro(F64Mul, 0x8b, Mul) \
-    macro(F64Div, 0x8c, Div) \
-    macro(F64Eq, 0x97, Equal) \
-    macro(F64Ne, 0x98, NotEqual) \
-    macro(F64Lt, 0x99, LessThan) \
-    macro(F64Le, 0x9a, LessEqual) \
-    macro(F64Gt, 0x9b, GreaterThan) \
-    macro(F64Ge, 0x9c, GreaterEqual)
-
-#define FOR_EACH_WASM_BINARY_OP(macro) \
-    FOR_EACH_WASM_SIMPLE_BINARY_OP(macro) \
-    macro(I32DivU, 0x44, Oops) \
-    macro(I32RemU, 0x46, Oops) \
-    macro(I32Rotr, 0xb6, Oops) \
-    macro(I32Rotl, 0xb7, Oops) \
-    macro(I64DivU, 0x5f, Oops) \
-    macro(I64RemU, 0x61, Oops) \
-    macro(I64Rotr, 0xb8, Oops) \
-    macro(I64Rotl, 0xb9, Oops) \
-    macro(F32Min, 0x79, Oops) \
-    macro(F32Max, 0x7a, Oops) \
-    macro(F64Min, 0x8d, Oops) \
-    macro(F64Max, 0x8e, Oops)
-
-#define FOR_EACH_WASM_MEMORY_LOAD_OP(macro) \
-    macro(I32Load8S, 0x20, Oops) \
-    macro(I32Load8U, 0x21, Oops) \
-    macro(I32Load16S, 0x22, Oops) \
-    macro(I32Load16U, 0x23, Oops) \
-    macro(I64Load8S, 0x24, Oops) \
-    macro(I64Load8U, 0x25, Oops) \
-    macro(I64Load16S, 0x26, Oops) \
-    macro(I64Load16U, 0x27, Oops) \
-    macro(I64Load32S, 0x28, Oops) \
-    macro(I64Load32U, 0x29, Oops) \
-    macro(I32Load, 0x2a, Oops) \
-    macro(I64Load, 0x2b, Oops) \
-    macro(F32Load, 0x2c, Oops) \
-    macro(F64Load, 0x2d, Oops)
-
-#define FOR_EACH_WASM_MEMORY_STORE_OP(macro) \
-    macro(I32Store8, 0x2e, Oops) \
-    macro(I32Store16, 0x2f, Oops) \
-    macro(I64Store8, 0x30, Oops) \
-    macro(I64Store16, 0x31, Oops) \
-    macro(I64Store32, 0x32, Oops) \
-    macro(I32Store, 0x33, Oops) \
-    macro(I64Store, 0x34, Oops) \
-    macro(F32Store, 0x35, Oops) \
-    macro(F64Store, 0x36, Oops)
-
-
-
-#define FOR_EACH_WASM_OP(macro) \
-    FOR_EACH_WASM_SPECIAL_OP(macro) \
-    FOR_EACH_WASM_CONTROL_FLOW_OP(macro) \
-    FOR_EACH_WASM_UNARY_OP(macro) \
-    FOR_EACH_WASM_BINARY_OP(macro) \
-    FOR_EACH_WASM_MEMORY_LOAD_OP(macro) \
-    FOR_EACH_WASM_MEMORY_STORE_OP(macro)
-
-#define CREATE_ENUM_VALUE(name, id, b3op) name = id,
-
-enum OpType : uint8_t {
-    FOR_EACH_WASM_OP(CREATE_ENUM_VALUE)
-};
-
-template&lt;typename Int&gt;
-inline bool isValidOpType(Int i)
-{
-    // Bitset of valid ops.
-    static const uint8_t valid[] = { 0xff, 0x8f, 0xff, 0x2, 0xff, 0xff, 0x7f, 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f };
-    return 0 &lt;= i &amp;&amp; i &lt;= 188 &amp;&amp; (valid[i / 8] &amp; (1 &lt;&lt; (i % 8)));
-}
-
-enum class BinaryOpType : uint8_t {
-    FOR_EACH_WASM_BINARY_OP(CREATE_ENUM_VALUE)
-};
-
-enum class UnaryOpType : uint8_t {
-    FOR_EACH_WASM_UNARY_OP(CREATE_ENUM_VALUE)
-};
-
-enum class LoadOpType : uint8_t {
-    FOR_EACH_WASM_MEMORY_LOAD_OP(CREATE_ENUM_VALUE)
-};
-
-enum class StoreOpType : uint8_t {
-    FOR_EACH_WASM_MEMORY_STORE_OP(CREATE_ENUM_VALUE)
-};
-
-#undef CREATE_ENUM_VALUE
-
-inline bool isControlOp(OpType op)
-{
-    switch (op) {
-#define CREATE_CASE(name, id, b3op) case OpType::name:
-    FOR_EACH_WASM_CONTROL_FLOW_OP(CREATE_CASE)
-        return true;
-#undef CREATE_CASE
-    default:
-        break;
-    }
-    return false;
-}
-
-inline bool isSimple(UnaryOpType op)
-{
-    switch (op) {
-#define CREATE_CASE(name, id, b3op) case UnaryOpType::name:
-    FOR_EACH_WASM_SIMPLE_UNARY_OP(CREATE_CASE)
-        return true;
-#undef CREATE_CASE
-    default:
-        break;
-    }
-    return false;
-}
-
-inline bool isSimple(BinaryOpType op)
-{
-    switch (op) {
-#define CREATE_CASE(name, id, b3op) case BinaryOpType::name:
-    FOR_EACH_WASM_SIMPLE_BINARY_OP(CREATE_CASE)
-        return true;
-#undef CREATE_CASE
-    default:
-        break;
-    }
-    return false;
-}
-
-} } // namespace JSC::Wasm
-
-#endif // ENABLE(WEBASSEMBLY)
-
</del></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmgenerateWasmpy"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/wasm/generateWasm.py (0 => 208148)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/generateWasm.py                                (rev 0)
+++ trunk/Source/JavaScriptCore/wasm/generateWasm.py        2016-10-31 16:24:59 UTC (rev 208148)
</span><span class="lines">@@ -0,0 +1,88 @@
</span><ins>+#! /usr/bin/python
+
+# Copyright (C) 2016 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# This tool has a couple of helpful macros to process Wasm files from the wasm.json.
+
+import json
+import re
+
+
+class Wasm:
+    def __init__(self, scriptName, jsonPath):
+        wasmFile = open(jsonPath, &quot;r&quot;)
+        wasm = json.load(open(jsonPath, &quot;r&quot;))
+        wasmFile.close()
+        self.opcodes = wasm[&quot;opcode&quot;]
+        self.header = &quot;&quot;&quot;/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// DO NO EDIT! - This file was generated by &quot;&quot;&quot; + scriptName
+
+    def opcodeIterator(self, filter, ret=None):
+        # We need to do this because python is dumb and won't let me use self in the lambda, which is ridiculous.
+        if ret == None:
+            ret = lambda op: {&quot;name&quot;: op, &quot;opcode&quot;: self.opcodes[op]}
+        for op in self.opcodes.iterkeys():
+            if filter(self.opcodes[op]):
+                yield ret(op)
+
+    def toCpp(self, name):
+        camelCase = re.sub(r'([^a-z0-9].)', lambda c: c.group(0)[1].upper(), name)
+        CamelCase = camelCase[:1].upper() + camelCase[1:]
+        return CamelCase
+
+
+def isNormal(op):
+    return op[&quot;category&quot;] == &quot;arithmetic&quot; or op[&quot;category&quot;] == &quot;comparison&quot; or op[&quot;category&quot;] == &quot;conversion&quot;
+
+
+def isUnary(op):
+    return isNormal(op) and len(op[&quot;parameter&quot;]) == 1
+
+
+def isBinary(op):
+    return isNormal(op) and len(op[&quot;parameter&quot;]) == 2
</ins><span class="cx">Property changes on: trunk/Source/JavaScriptCore/wasm/generateWasm.py
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4>Added: svn:executable</h4></div>
<ins>+*
</ins><span class="cx">\ No newline at end of property
</span><a id="trunkSourceJavaScriptCorewasmgenerateWasmOpsHeaderpy"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py (0 => 208148)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py                                (rev 0)
+++ trunk/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py        2016-10-31 16:24:59 UTC (rev 208148)
</span><span class="lines">@@ -0,0 +1,191 @@
</span><ins>+#! /usr/bin/python
+
+# Copyright (C) 2016 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# This tool has a couple of helpful macros to process Wasm files from the wasm.json.
+
+from generateWasm import *
+import optparse
+import sys
+
+parser = optparse.OptionParser(usage=&quot;usage: %prog &lt;wasm.json&gt; &lt;WasmOps.h&gt;&quot;)
+(options, args) = parser.parse_args(sys.argv[0:])
+if len(args) != 3:
+    parser.error(parser.usage)
+
+wasm = Wasm(args[0], args[1])
+opcodes = wasm.opcodes
+wasmOpsHFile = open(args[2], &quot;w&quot;)
+
+
+def cppMacro(wasmOpcode, value, b3Opcode):
+    return &quot; \\\n    macro(&quot; + wasm.toCpp(wasmOpcode) + &quot;, &quot; + hex(int(value)) + &quot;, &quot; + b3Opcode + &quot;)&quot;
+
+
+def opcodeMacroizer(filter):
+    for op in wasm.opcodeIterator(filter):
+        b3op = &quot;Oops&quot;
+        if &quot;b3op&quot; in op[&quot;opcode&quot;]:
+            b3op = op[&quot;opcode&quot;][&quot;b3op&quot;]
+        yield cppMacro(op[&quot;name&quot;], op[&quot;opcode&quot;][&quot;value&quot;], b3op)
+
+defines = [&quot;#define FOR_EACH_WASM_SPECIAL_OP(macro)&quot;]
+defines.extend([op for op in opcodeMacroizer(lambda op: op[&quot;category&quot;] == &quot;special&quot; or op[&quot;category&quot;] == &quot;call&quot;)])
+defines.append(&quot;\n\n#define FOR_EACH_WASM_CONTROL_FLOW_OP(macro)&quot;)
+defines.extend([op for op in opcodeMacroizer(lambda op: op[&quot;category&quot;] == &quot;control&quot;)])
+defines.append(&quot;\n\n#define FOR_EACH_WASM_SIMPLE_UNARY_OP(macro)&quot;)
+defines.extend([op for op in opcodeMacroizer(lambda op: isUnary(op) and &quot;b3op&quot; in op)])
+defines.append(&quot;\n\n#define FOR_EACH_WASM_UNARY_OP(macro) \\\n    FOR_EACH_WASM_SIMPLE_UNARY_OP(macro)&quot;)
+defines.extend([op for op in opcodeMacroizer(lambda op: isUnary(op) and not (&quot;b3op&quot; in op))])
+defines.append(&quot;\n\n#define FOR_EACH_WASM_SIMPLE_BINARY_OP(macro)&quot;)
+defines.extend([op for op in opcodeMacroizer(lambda op: isBinary(op) and &quot;b3op&quot; in op)])
+defines.append(&quot;\n\n#define FOR_EACH_WASM_BINARY_OP(macro) \\\n    FOR_EACH_WASM_SIMPLE_BINARY_OP(macro)&quot;)
+defines.extend([op for op in opcodeMacroizer(lambda op: isBinary(op) and not (&quot;b3op&quot; in op))])
+defines.append(&quot;\n\n#define FOR_EACH_WASM_MEMORY_LOAD_OP(macro)&quot;)
+defines.extend([op for op in opcodeMacroizer(lambda op: (op[&quot;category&quot;] == &quot;memory&quot; and len(op[&quot;return&quot;]) == 1))])
+defines.append(&quot;\n\n#define FOR_EACH_WASM_MEMORY_STORE_OP(macro)&quot;)
+defines.extend([op for op in opcodeMacroizer(lambda op: (op[&quot;category&quot;] == &quot;memory&quot; and len(op[&quot;return&quot;]) == 0))])
+defines.append(&quot;\n\n&quot;)
+
+defines = &quot;&quot;.join(defines)
+
+opValueSet = set([op for op in wasm.opcodeIterator(lambda op: True, lambda op: opcodes[op][&quot;value&quot;])])
+maxOpValue = max(opValueSet)
+
+
+# Luckily, python does floor division rather than trunc division so this works.
+def ceilDiv(a, b):
+    return -(-a // b)
+
+
+def bitSet():
+    v = &quot;&quot;
+    for i in range(ceilDiv(maxOpValue, 8)):
+        entry = 0
+        for j in range(8):
+            if i * 8 + j in opValueSet:
+                entry |= 1 &lt;&lt; j
+        v += (&quot;, &quot; if i else &quot;&quot;) + hex(entry)
+    return v
+
+validOps = bitSet()
+
+contents = wasm.header + &quot;&quot;&quot;
+
+#pragma once
+
+#if ENABLE(WEBASSEMBLY)
+
+#include &lt;cstdint&gt;
+
+namespace JSC { namespace Wasm {
+
+&quot;&quot;&quot; + defines + &quot;&quot;&quot;
+#define FOR_EACH_WASM_OP(macro) \\
+    FOR_EACH_WASM_SPECIAL_OP(macro) \\
+    FOR_EACH_WASM_CONTROL_FLOW_OP(macro) \\
+    FOR_EACH_WASM_UNARY_OP(macro) \\
+    FOR_EACH_WASM_BINARY_OP(macro) \\
+    FOR_EACH_WASM_MEMORY_LOAD_OP(macro) \\
+    FOR_EACH_WASM_MEMORY_STORE_OP(macro)
+
+#define CREATE_ENUM_VALUE(name, id, b3op) name = id,
+
+enum OpType : uint8_t {
+    FOR_EACH_WASM_OP(CREATE_ENUM_VALUE)
+};
+
+template&lt;typename Int&gt;
+inline bool isValidOpType(Int i)
+{
+    // Bitset of valid ops.
+    static const uint8_t valid[] = { &quot;&quot;&quot; + validOps + &quot;&quot;&quot; };
+    return 0 &lt;= i &amp;&amp; i &lt;= &quot;&quot;&quot; + str(maxOpValue) + &quot;&quot;&quot; &amp;&amp; (valid[i / 8] &amp; (1 &lt;&lt; (i % 8)));
+}
+
+enum class BinaryOpType : uint8_t {
+    FOR_EACH_WASM_BINARY_OP(CREATE_ENUM_VALUE)
+};
+
+enum class UnaryOpType : uint8_t {
+    FOR_EACH_WASM_UNARY_OP(CREATE_ENUM_VALUE)
+};
+
+enum class LoadOpType : uint8_t {
+    FOR_EACH_WASM_MEMORY_LOAD_OP(CREATE_ENUM_VALUE)
+};
+
+enum class StoreOpType : uint8_t {
+    FOR_EACH_WASM_MEMORY_STORE_OP(CREATE_ENUM_VALUE)
+};
+
+#undef CREATE_ENUM_VALUE
+
+inline bool isControlOp(OpType op)
+{
+    switch (op) {
+#define CREATE_CASE(name, id, b3op) case OpType::name:
+    FOR_EACH_WASM_CONTROL_FLOW_OP(CREATE_CASE)
+        return true;
+#undef CREATE_CASE
+    default:
+        break;
+    }
+    return false;
+}
+
+inline bool isSimple(UnaryOpType op)
+{
+    switch (op) {
+#define CREATE_CASE(name, id, b3op) case UnaryOpType::name:
+    FOR_EACH_WASM_SIMPLE_UNARY_OP(CREATE_CASE)
+        return true;
+#undef CREATE_CASE
+    default:
+        break;
+    }
+    return false;
+}
+
+inline bool isSimple(BinaryOpType op)
+{
+    switch (op) {
+#define CREATE_CASE(name, id, b3op) case BinaryOpType::name:
+    FOR_EACH_WASM_SIMPLE_BINARY_OP(CREATE_CASE)
+        return true;
+#undef CREATE_CASE
+    default:
+        break;
+    }
+    return false;
+}
+
+} } // namespace JSC::Wasm
+
+#endif // ENABLE(WEBASSEMBLY)
+
+&quot;&quot;&quot;
+
+wasmOpsHFile.write(contents)
+wasmOpsHFile.close()
</ins><span class="cx">Property changes on: trunk/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4>Added: svn:executable</h4></div>
<ins>+*
</ins><span class="cx">\ No newline at end of property
</span><a id="trunkSourceJavaScriptCorewasmwasmjson"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/wasm/wasm.json (0 => 208148)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/wasm.json                                (rev 0)
+++ trunk/Source/JavaScriptCore/wasm/wasm.json        2016-10-31 16:24:59 UTC (rev 208148)
</span><span class="lines">@@ -0,0 +1,219 @@
</span><ins>+{
+    &quot;comments&quot;: [&quot;This file describes the WebAssembly ISA.&quot;,
+                 &quot;Scripts in this folder auto-generate C++ code for JavaScriptCore as well as the testing DSL which WebKit's WebAssembly tests use.&quot;,
+                 &quot;When you update this file you need to re-generate the C++ code: jsc ./JSTests/stress/wasm/generate-wasmops-header.js &gt; ./Source/JavaScriptCore/wasm/WASMOps.h&quot;
+                ],
+    &quot;preamble&quot;: [
+        { &quot;name&quot;: &quot;magic number&quot;, &quot;type&quot;: &quot;uint32&quot;, &quot;value&quot;: 1836278016, &quot;description&quot;: &quot;NULL character followed by 'asm'&quot; },
+        { &quot;name&quot;: &quot;version&quot;,      &quot;type&quot;: &quot;uint32&quot;, &quot;value&quot;:         12, &quot;description&quot;: &quot;Version number, will be reset to 1 for MVP&quot; }
+    ],
+    &quot;value_type&quot; : {
+        &quot;i32&quot;: { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 1 },
+        &quot;i64&quot;: { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 2 },
+        &quot;f32&quot;: { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 3 },
+        &quot;f64&quot;: { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 4 }
+    },
+    &quot;inline_signature_type&quot; : {
+        &quot;void&quot;: { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 0 },
+        &quot;i32&quot;:  { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 1 },
+        &quot;i64&quot;:  { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 2 },
+        &quot;f32&quot;:  { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 3 },
+        &quot;f64&quot;:  { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 4 }
+    },
+    &quot;external_kind&quot;: {
+        &quot;Function&quot;: { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 0 },
+        &quot;Table&quot;:    { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 1 },
+        &quot;Memory&quot;:   { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 2 },
+        &quot;Global&quot;:   { &quot;type&quot;: &quot;uint8&quot;, &quot;value&quot;: 3 }
+    },
+    &quot;section&quot; : {
+        &quot;Type&quot;:     { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;:  1, &quot;description&quot;: &quot;Function signature declarations&quot; },
+        &quot;Import&quot;:   { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;:  2, &quot;description&quot;: &quot;Import declarations&quot; },
+        &quot;Function&quot;: { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;:  3, &quot;description&quot;: &quot;Function declarations&quot; },
+        &quot;Table&quot;:    { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;:  4, &quot;description&quot;: &quot;Indirect function table and other tables&quot; },
+        &quot;Memory&quot;:   { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;:  5, &quot;description&quot;: &quot;Memory attributes&quot; },
+        &quot;Global&quot;:   { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;:  6, &quot;description&quot;: &quot;Global declarations&quot; },
+        &quot;Export&quot;:   { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;:  7, &quot;description&quot;: &quot;Exports&quot; },
+        &quot;Start&quot;:    { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;:  8, &quot;description&quot;: &quot;Start function declaration&quot; },
+        &quot;Element&quot;:  { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;:  9, &quot;description&quot;: &quot;Elements section&quot; },
+        &quot;Code&quot;:     { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;: 10, &quot;description&quot;: &quot;Function bodies (code)&quot; },
+        &quot;Data&quot;:     { &quot;type&quot;: &quot;varuint7&quot;, &quot;value&quot;: 11, &quot;description&quot;: &quot;Data segments&quot; }
+    },
+    &quot;opcode&quot;: {
+        &quot;unreachable&quot;:         { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:   0, &quot;return&quot;: [],           &quot;parameter&quot;: [],                      &quot;immediate&quot;: [],                                                                                         &quot;description&quot;: &quot;trap immediately&quot; },
+        &quot;block&quot;:               { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:   1, &quot;return&quot;: [&quot;control&quot;],  &quot;parameter&quot;: [],                      &quot;immediate&quot;: [{&quot;name&quot;: &quot;sig&quot;, &quot;type&quot;: &quot;inline_signature_type&quot;}],                                         &quot;description&quot;: &quot;begin a sequence of expressions, yielding 0 or 1 values&quot; },
+        &quot;loop&quot;:                { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:   2, &quot;return&quot;: [&quot;control&quot;],  &quot;parameter&quot;: [],                      &quot;immediate&quot;: [{&quot;name&quot;: &quot;sig&quot;, &quot;type&quot;: &quot;inline_signature_type&quot;}],                                         &quot;description&quot;: &quot;begin a block which can also form control flow loops&quot; },
+        &quot;if&quot;:                  { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:   3, &quot;return&quot;: [&quot;control&quot;],  &quot;parameter&quot;: [&quot;bool&quot;],                &quot;immediate&quot;: [{&quot;name&quot;: &quot;sig&quot;, &quot;type&quot;: &quot;inline_signature_type&quot;}],                                         &quot;description&quot;: &quot;begin if expression&quot; },
+        &quot;else&quot;:                { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:   4, &quot;return&quot;: [&quot;control&quot;],  &quot;parameter&quot;: [],                      &quot;immediate&quot;: [],                                                                                         &quot;description&quot;: &quot;begin else expression of if&quot; },
+        &quot;select&quot;:              { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:   5, &quot;return&quot;: [&quot;prev&quot;],     &quot;parameter&quot;: [&quot;any&quot;, &quot;prev&quot;, &quot;bool&quot;], &quot;immediate&quot;: [],                                                                                         &quot;description&quot;: &quot;select one of two values based on condition&quot; },
+        &quot;br&quot;:                  { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:   6, &quot;return&quot;: [],           &quot;parameter&quot;: [],                      &quot;immediate&quot;: [{&quot;name&quot;: &quot;relative_depth&quot;, &quot;type&quot;: &quot;varuint32&quot;}],                                          &quot;description&quot;: &quot;break that targets an outer nested block&quot; },
+        &quot;br_if&quot;:               { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:   7, &quot;return&quot;: [],           &quot;parameter&quot;: [],                      &quot;immediate&quot;: [{&quot;name&quot;: &quot;relative_depth&quot;, &quot;type&quot;: &quot;varuint32&quot;}],                                          &quot;description&quot;: &quot;conditional break that targets an outer nested block&quot; },
+        &quot;br_table&quot;:            { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:   8, &quot;return&quot;: [],           &quot;parameter&quot;: [],                      &quot;immediate&quot;: [{&quot;name&quot;: &quot;target_count&quot;,   &quot;type&quot;: &quot;varuint32&quot;,                                            &quot;description&quot;: &quot;number of entries in the target_table&quot;},
+                                                                                                                                                     {&quot;name&quot;: &quot;target_table&quot;,   &quot;type&quot;: &quot;varuint32*&quot;,                                           &quot;description&quot;: &quot;target entries that indicate an outer block or loop to which to break&quot;},
+                                                                                                                                                     {&quot;name&quot;: &quot;default_target&quot;, &quot;type&quot;: &quot;varuint32&quot;,                                            &quot;description&quot;: &quot;an outer block or loop to which to break in the default case&quot;}],
+                                                                                                                                                                                                                                                &quot;description&quot;: &quot;branch table control flow construct&quot; },
+        &quot;return&quot;:              { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:   9, &quot;return&quot;: [],           &quot;parameter&quot;: [],                       &quot;immediate&quot;: [],                                                                                         &quot;description&quot;: &quot;return zero or one value from this function&quot; },
+        &quot;drop&quot;:                { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:  11, &quot;return&quot;: [],           &quot;parameter&quot;: [&quot;any&quot;],                  &quot;immediate&quot;: [],                                                                                         &quot;description&quot;: &quot;ignore value&quot; },
+        &quot;nop&quot;:                 { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:  10, &quot;return&quot;: [],           &quot;parameter&quot;: [],                       &quot;immediate&quot;: [],                                                                                         &quot;description&quot;: &quot;no operation&quot; },
+        &quot;end&quot;:                 { &quot;category&quot;: &quot;control&quot;,    &quot;value&quot;:  15, &quot;return&quot;: [],           &quot;parameter&quot;: [],                       &quot;immediate&quot;: [],                                                                                         &quot;description&quot;: &quot;end a block, loop, or if&quot; },
+        &quot;i32.const&quot;:           { &quot;category&quot;: &quot;special&quot;,    &quot;value&quot;:  16, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [],                       &quot;immediate&quot;: [{&quot;name&quot;: &quot;value&quot;,          &quot;type&quot;: &quot;varint32&quot;}],                                           &quot;description&quot;: &quot;a constant value interpreted as i32&quot; },
+        &quot;i64.const&quot;:           { &quot;category&quot;: &quot;special&quot;,    &quot;value&quot;:  17, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [],                       &quot;immediate&quot;: [{&quot;name&quot;: &quot;value&quot;,          &quot;type&quot;: &quot;varint64&quot;}],                                           &quot;description&quot;: &quot;a constant value interpreted as i64&quot; },
+        &quot;f64.const&quot;:           { &quot;category&quot;: &quot;special&quot;,    &quot;value&quot;:  18, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [],                       &quot;immediate&quot;: [{&quot;name&quot;: &quot;value&quot;,          &quot;type&quot;: &quot;uint64&quot;}],                                             &quot;description&quot;: &quot;a constant value interpreted as f64&quot; },
+        &quot;f32.const&quot;:           { &quot;category&quot;: &quot;special&quot;,    &quot;value&quot;:  19, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [],                       &quot;immediate&quot;: [{&quot;name&quot;: &quot;value&quot;,          &quot;type&quot;: &quot;uint32&quot;}],                                             &quot;description&quot;: &quot;a constant value interpreted as f32&quot; },
+        &quot;get_local&quot;:           { &quot;category&quot;: &quot;special&quot;,    &quot;value&quot;:  20, &quot;return&quot;: [&quot;local&quot;],    &quot;parameter&quot;: [],                       &quot;immediate&quot;: [{&quot;name&quot;: &quot;local_index&quot;,    &quot;type&quot;: &quot;varuint32&quot;}],                                          &quot;description&quot;: &quot;read a local variable or parameter&quot; },
+        &quot;set_local&quot;:           { &quot;category&quot;: &quot;special&quot;,    &quot;value&quot;:  21, &quot;return&quot;: [],           &quot;parameter&quot;: [&quot;local&quot;],                &quot;immediate&quot;: [{&quot;name&quot;: &quot;local_index&quot;,    &quot;type&quot;: &quot;varuint32&quot;}],                                          &quot;description&quot;: &quot;write a local variable or parameter&quot; },
+        &quot;tee_local&quot;:           { &quot;category&quot;: &quot;special&quot;,    &quot;value&quot;:  25, &quot;return&quot;: [&quot;prev&quot;],     &quot;parameter&quot;: [&quot;any&quot;],                  &quot;immediate&quot;: [{&quot;name&quot;: &quot;local_index&quot;,    &quot;type&quot;: &quot;varuint32&quot;}],                                          &quot;description&quot;: &quot;write a local variable or parameter and return the same value&quot; },
+        &quot;get_global&quot;:          { &quot;category&quot;: &quot;special&quot;,    &quot;value&quot;: 187, &quot;return&quot;: [&quot;global&quot;],   &quot;parameter&quot;: [],                       &quot;immediate&quot;: [{&quot;name&quot;: &quot;global_index&quot;,   &quot;type&quot;: &quot;varuint32&quot;}],                                          &quot;description&quot;: &quot;read a global variable&quot; },
+        &quot;set_global&quot;:          { &quot;category&quot;: &quot;special&quot;,    &quot;value&quot;: 188, &quot;return&quot;: [&quot;&quot;],         &quot;parameter&quot;: [&quot;global&quot;],               &quot;immediate&quot;: [{&quot;name&quot;: &quot;global_index&quot;,   &quot;type&quot;: &quot;varuint32&quot;}],                                          &quot;description&quot;: &quot;write a global variable&quot; },
+        &quot;call&quot;:                { &quot;category&quot;: &quot;call&quot;,       &quot;value&quot;:  22, &quot;return&quot;: [&quot;call&quot;],     &quot;parameter&quot;: [&quot;call&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;function_index&quot;, &quot;type&quot;: &quot;varuint32&quot;}],                                          &quot;description&quot;: &quot;call a function by its index&quot; },
+        &quot;call_indirect&quot;:       { &quot;category&quot;: &quot;call&quot;,       &quot;value&quot;:  23, &quot;return&quot;: [&quot;call&quot;],     &quot;parameter&quot;: [&quot;call&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;type_index&quot;,     &quot;type&quot;: &quot;varuint32&quot;}],                                          &quot;description&quot;: &quot;call a function indirect with an expected signature&quot; },
+        &quot;i32.load8_s&quot;:         { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  32, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i32.load8_u&quot;:         { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  33, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i32.load16_s&quot;:        { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  34, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i32.load16_u&quot;:        { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  35, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i64.load8_s&quot;:         { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  36, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i64.load8_u&quot;:         { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  37, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i64.load16_s&quot;:        { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  38, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i64.load16_u&quot;:        { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  39, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i64.load32_s&quot;:        { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  40, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i64.load32_u&quot;:        { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  41, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i32.load&quot;:            { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  42, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i64.load&quot;:            { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  43, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;f32.load&quot;:            { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  44, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;f64.load&quot;:            { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  45, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;addr&quot;],                 &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;load from memory&quot; },
+        &quot;i32.store8&quot;:          { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  46, &quot;return&quot;: [],           &quot;parameter&quot;: [&quot;addr&quot;, &quot;i32&quot;],          &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;store to memory&quot; },
+        &quot;i32.store16&quot;:         { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  47, &quot;return&quot;: [],           &quot;parameter&quot;: [&quot;addr&quot;, &quot;i32&quot;],          &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;store to memory&quot; },
+        &quot;i64.store8&quot;:          { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  48, &quot;return&quot;: [],           &quot;parameter&quot;: [&quot;addr&quot;, &quot;i64&quot;],          &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;store to memory&quot; },
+        &quot;i64.store16&quot;:         { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  49, &quot;return&quot;: [],           &quot;parameter&quot;: [&quot;addr&quot;, &quot;i64&quot;],          &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;store to memory&quot; },
+        &quot;i64.store32&quot;:         { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  50, &quot;return&quot;: [],           &quot;parameter&quot;: [&quot;addr&quot;, &quot;i64&quot;],          &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;store to memory&quot; },
+        &quot;i32.store&quot;:           { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  51, &quot;return&quot;: [],           &quot;parameter&quot;: [&quot;addr&quot;, &quot;i32&quot;],          &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;store to memory&quot; },
+        &quot;i64.store&quot;:           { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  52, &quot;return&quot;: [],           &quot;parameter&quot;: [&quot;addr&quot;, &quot;i64&quot;],          &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;store to memory&quot; },
+        &quot;f32.store&quot;:           { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  53, &quot;return&quot;: [],           &quot;parameter&quot;: [&quot;addr&quot;, &quot;f32&quot;],          &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;store to memory&quot; },
+        &quot;f64.store&quot;:           { &quot;category&quot;: &quot;memory&quot;,     &quot;value&quot;:  54, &quot;return&quot;: [],           &quot;parameter&quot;: [&quot;addr&quot;, &quot;f64&quot;],          &quot;immediate&quot;: [{&quot;name&quot;: &quot;flags&quot;,          &quot;type&quot;: &quot;varuint32&quot;}, {&quot;name&quot;: &quot;offset&quot;, &quot;type&quot;: &quot;varuint32&quot;}], &quot;description&quot;: &quot;store to memory&quot; },
+        &quot;current_memory&quot;:      { &quot;category&quot;: &quot;operation&quot;,  &quot;value&quot;:  59, &quot;return&quot;: [&quot;size&quot;],     &quot;parameter&quot;: [],                       &quot;immediate&quot;: [],                                                                                         &quot;description&quot;: &quot;query the size of memory&quot; },
+        &quot;grow_memory&quot;:         { &quot;category&quot;: &quot;operation&quot;,  &quot;value&quot;:  57, &quot;return&quot;: [&quot;size&quot;],     &quot;parameter&quot;: [&quot;size&quot;],                 &quot;immediate&quot;: [],                                                                                         &quot;description&quot;: &quot;grow the size of memory&quot; },
+        &quot;i32.add&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  64, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Add&quot;          },
+        &quot;i32.sub&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  65, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Sub&quot;          },
+        &quot;i32.mul&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  66, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Mul&quot;          },
+        &quot;i32.div_s&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  67, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Div&quot;          },
+        &quot;i32.div_u&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  68, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: []                         },
+        &quot;i32.rem_s&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  69, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Mod&quot;          },
+        &quot;i32.rem_u&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  70, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: []                         },
+        &quot;i32.and&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  71, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BitAnd&quot;       },
+        &quot;i32.or&quot;:              { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  72, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BitOr&quot;        },
+        &quot;i32.xor&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  73, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BitXor&quot;       },
+        &quot;i32.shl&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  74, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Shl&quot;          },
+        &quot;i32.shr_u&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  75, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;SShr&quot;         },
+        &quot;i32.shr_s&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  76, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;ZShr&quot;         },
+        &quot;i32.rotr&quot;:            { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 182, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: []                         },
+        &quot;i32.rotl&quot;:            { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 183, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: []                         },
+        &quot;i32.eq&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;:  77, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Equal&quot;        },
+        &quot;i32.ne&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;:  78, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;NotEqual&quot;     },
+        &quot;i32.lt_s&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;:  79, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;LessThan&quot;     },
+        &quot;i32.le_s&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;:  80, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;LessEqual&quot;    },
+        &quot;i32.lt_u&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;:  81, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Below&quot;        },
+        &quot;i32.le_u&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;:  82, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BelowEqual&quot;   },
+        &quot;i32.gt_s&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;:  83, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;GreaterThan&quot;  },
+        &quot;i32.ge_s&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;:  84, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;GreaterEqual&quot; },
+        &quot;i32.gt_u&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;:  85, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Above&quot;        },
+        &quot;i32.ge_u&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;:  86, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i32&quot;, &quot;i32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;AboveEqual&quot;   },
+        &quot;i32.clz&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  87, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Clz&quot;          },
+        &quot;i32.ctz&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  88, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i32.popcnt&quot;:          { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  89, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i32.eqz&quot;:             { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;:  90, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i64.add&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  91, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Add&quot;          },
+        &quot;i64.sub&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  92, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Sub&quot;          },
+        &quot;i64.mul&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  93, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Mul&quot;          },
+        &quot;i64.div_s&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  94, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Div&quot;          },
+        &quot;i64.div_u&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  95, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: []                         },
+        &quot;i64.rem_s&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  96, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Mod&quot;          },
+        &quot;i64.rem_u&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  97, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: []                         },
+        &quot;i64.and&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  98, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BitAnd&quot;       },
+        &quot;i64.or&quot;:              { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;:  99, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BitOr&quot;        },
+        &quot;i64.xor&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 100, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BitXor&quot;       },
+        &quot;i64.shl&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 101, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Shl&quot;          },
+        &quot;i64.shr_u&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 102, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;SShr&quot;         },
+        &quot;i64.shr_s&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 103, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;ZShr&quot;         },
+        &quot;i64.rotr&quot;:            { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 184, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: []                         },
+        &quot;i64.rotl&quot;:            { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 185, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: []                         },
+        &quot;i64.eq&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 104, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Equal&quot;        },
+        &quot;i64.ne&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 105, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;NotEqual&quot;     },
+        &quot;i64.lt_s&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 106, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;LessThan&quot;     },
+        &quot;i64.le_s&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 107, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;LessEqual&quot;    },
+        &quot;i64.lt_u&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 108, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Below&quot;        },
+        &quot;i64.le_u&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 109, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BelowEqual&quot;   },
+        &quot;i64.gt_s&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 110, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;GreaterThan&quot;  },
+        &quot;i64.ge_s&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 111, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;GreaterEqual&quot; },
+        &quot;i64.gt_u&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 112, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Above&quot;        },
+        &quot;i64.ge_u&quot;:            { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 113, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i64&quot;, &quot;i64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;AboveEqual&quot;   },
+        &quot;i64.clz&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 114, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Clz&quot;          },
+        &quot;i64.ctz&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 115, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i64.popcnt&quot;:          { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 116, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i64.eqz&quot;:             { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 186, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;i64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f32.add&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 117, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Add&quot;          },
+        &quot;f32.sub&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 118, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Sub&quot;          },
+        &quot;f32.mul&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 119, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Mul&quot;          },
+        &quot;f32.div&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 120, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Div&quot;          },
+        &quot;f32.min&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 121, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: []                         },
+        &quot;f32.max&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 122, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: []                         },
+        &quot;f32.abs&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 123, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Abs&quot;          },
+        &quot;f32.neg&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 124, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f32.copysign&quot;:        { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 125, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f32.ceil&quot;:            { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 126, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Ceil&quot;         },
+        &quot;f32.floor&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 127, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Floor&quot;        },
+        &quot;f32.trunc&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 128, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f32.nearest&quot;:         { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 129, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f32.sqrt&quot;:            { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 130, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f32.eq&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 131, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Equal&quot;        },
+        &quot;f32.ne&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 132, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;NotEqual&quot;     },
+        &quot;f32.lt&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 133, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;LessThan&quot;     },
+        &quot;f32.le&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 134, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;LessEqual&quot;    },
+        &quot;f32.gt&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 135, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;GreaterThan&quot;  },
+        &quot;f32.ge&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 136, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f32&quot;, &quot;f32&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;GreaterEqual&quot; },
+        &quot;f64.add&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 137, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Add&quot;          },
+        &quot;f64.sub&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 138, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Sub&quot;          },
+        &quot;f64.mul&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 139, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Mul&quot;          },
+        &quot;f64.div&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 140, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Div&quot;          },
+        &quot;f64.min&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 141, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: []                         },
+        &quot;f64.max&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 142, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: []                         },
+        &quot;f64.abs&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 143, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Abs&quot;          },
+        &quot;f64.neg&quot;:             { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 144, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f64.copysign&quot;:        { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 145, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f64.ceil&quot;:            { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 146, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Ceil&quot;         },
+        &quot;f64.floor&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 147, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Floor&quot;        },
+        &quot;f64.trunc&quot;:           { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 148, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f64.nearest&quot;:         { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 149, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f64.sqrt&quot;:            { &quot;category&quot;: &quot;arithmetic&quot;, &quot;value&quot;: 150, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f64.eq&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 151, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;Equal&quot;        },
+        &quot;f64.ne&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 152, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;NotEqual&quot;     },
+        &quot;f64.lt&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 153, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;LessThan&quot;     },
+        &quot;f64.le&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 154, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;LessEqual&quot;    },
+        &quot;f64.gt&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 155, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;GreaterThan&quot;  },
+        &quot;f64.ge&quot;:              { &quot;category&quot;: &quot;comparison&quot;, &quot;value&quot;: 156, &quot;return&quot;: [&quot;bool&quot;],     &quot;parameter&quot;: [&quot;f64&quot;, &quot;f64&quot;],           &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;GreaterEqual&quot; },
+        &quot;i32.trunc_s/f32&quot;:     { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 157, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i32.trunc_s/f64&quot;:     { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 158, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i32.trunc_u/f32&quot;:     { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 159, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i32.trunc_u/f64&quot;:     { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 160, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i32.wrap/i64&quot;:        { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 161, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;i64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i64.trunc_s/f32&quot;:     { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 162, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i64.trunc_s/f64&quot;:     { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 163, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i64.trunc_u/f32&quot;:     { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 164, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i64.trunc_u/f64&quot;:     { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 165, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;i64.extend_s/i32&quot;:    { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 166, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i32&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;SExt32&quot;       },
+        &quot;i64.extend_u/i32&quot;:    { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 167, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;i32&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;ZExt32&quot;       },
+        &quot;f32.convert_s/i32&quot;:   { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 168, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f32.convert_u/i32&quot;:   { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 169, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f32.convert_s/i64&quot;:   { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 170, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;i64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f32.convert_u/i64&quot;:   { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 171, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;i64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f32.demote/f64&quot;:      { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 172, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;DoubleToFloat&quot;},
+        &quot;f32.reinterpret/i32&quot;: { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 173, &quot;return&quot;: [&quot;f32&quot;],      &quot;parameter&quot;: [&quot;i32&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BitwiseCast&quot;  },
+        &quot;f64.convert_s/i32&quot;:   { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 174, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;i32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f64.convert_u/i32&quot;:   { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 175, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;i32&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f64.convert_s/i64&quot;:   { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 176, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f64.convert_u/i64&quot;:   { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 177, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;],                  &quot;immediate&quot;: []                         },
+        &quot;f64.promote/f32&quot;:     { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 178, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;FloatToDouble&quot;},
+        &quot;f64.reinterpret/i64&quot;: { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 179, &quot;return&quot;: [&quot;f64&quot;],      &quot;parameter&quot;: [&quot;i64&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BitwiseCast&quot;  },
+        &quot;i32.reinterpret/f32&quot;: { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 180, &quot;return&quot;: [&quot;i32&quot;],      &quot;parameter&quot;: [&quot;f32&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BitwiseCast&quot;  },
+        &quot;i64.reinterpret/f64&quot;: { &quot;category&quot;: &quot;conversion&quot;, &quot;value&quot;: 181, &quot;return&quot;: [&quot;i64&quot;],      &quot;parameter&quot;: [&quot;f64&quot;],                  &quot;immediate&quot;: [], &quot;b3op&quot;: &quot;BitwiseCast&quot;  }
+    }
+}
</ins></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (208147 => 208148)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-10-31 16:17:48 UTC (rev 208147)
+++ trunk/Tools/ChangeLog        2016-10-31 16:24:59 UTC (rev 208148)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-10-31  Keith Miller  &lt;keith_miller@apple.com&gt;
+
+        autogenerated files from wasm.json should be in derived sources.
+        https://bugs.webkit.org/show_bug.cgi?id=164152
+
+        Reviewed by Filip Pizlo.
+
+        Add message to make sure that people keep the wasm.jsons up to date.
+
+        * Scripts/webkitpy/common/config/watchlist:
+
</ins><span class="cx"> 2016-10-31  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Holding down a key to choose an accented character should fire &quot;insertReplacementText&quot; input events
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpycommonconfigwatchlist"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/common/config/watchlist (208147 => 208148)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/common/config/watchlist        2016-10-31 16:17:48 UTC (rev 208147)
+++ trunk/Tools/Scripts/webkitpy/common/config/watchlist        2016-10-31 16:24:59 UTC (rev 208148)
</span><span class="lines">@@ -223,6 +223,10 @@
</span><span class="cx">             &quot;filename&quot;: r&quot;Source/JavaScriptCore/Scripts/builtins&quot;
</span><span class="cx">                         r&quot;|Source/JavaScriptCore/Scripts/generate-js-builtins\.py&quot;,
</span><span class="cx">         },
</span><ins>+        &quot;WasmJSON&quot;: {
+            &quot;filename&quot;: r&quot;|Source/JavaScriptCore/wasm/wasm\.json&quot;
+                        r&quot;|JSTests/wasm/wasm\.json&quot;,
+        },
</ins><span class="cx">         &quot;MediaStream&quot;: {
</span><span class="cx">             &quot;filename&quot;: r&quot;Source/WebCore/Modules/mediastream&quot;
</span><span class="cx">                         r&quot;|Source/WebCore/platform/mediastream&quot;
</span><span class="lines">@@ -429,5 +433,6 @@
</span><span class="cx">         &quot;WebInspectorGenerator&quot;: [ &quot;This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)&quot; ],
</span><span class="cx">         &quot;WebReplayGenerator&quot;: [ &quot;This patch modifies the WEB_REPLAY inputs generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-input-generator-tests --reset-results`)&quot; ],
</span><span class="cx">         &quot;JSBuiltinsGenerator&quot;: [ &quot;This patch modifies the JS builtins code generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-builtins-generator-tests --reset-results`)&quot; ],
</span><ins>+        &quot;WasmJSON&quot;: [ &quot;This patch modifies one of the wasm.json files. Please ensure that any changes in one have been mirrored to the other. You can find the wasm.json files at \&quot;Source/JavaScriptCore/wasm/wasm.json\&quot; and \&quot;JSTests/wasm/wasm.json\&quot;.&quot; ],
</ins><span class="cx">     },
</span><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>