<!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>[206756] 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/206756">206756</a></dd>
<dt>Author</dt> <dd>jfbastien@apple.com</dd>
<dt>Date</dt> <dd>2016-10-03 15:43:37 -0700 (Mon, 03 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Auto-generate WASMOps.h, share with testing JSON file
https://bugs.webkit.org/show_bug.cgi?id=162870

Reviewed by Keith Miller.

JSTests:

* stress/wasm/to-c++.js: Added. Generates WASMOps.h, siilar to the current one but with more data.
(const.opcode_iterator):
(opcode_macroizer):
* stress/wasm/wasm.json: Added. Data from 0xC binary format version.

Source/JavaScriptCore:

Add a few new opcodes, but keep this mostly as-is for now. I want
to generate smarter code but will do so in a later update to
reduce disruption.

* wasm/WASMOps.h: auto-generated from ./JSTests/stress/wasm/to-c++.js</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="#trunkSourceJavaScriptCorewasmWASMFunctionParserh">trunk/Source/JavaScriptCore/wasm/WASMFunctionParser.h</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWASMOpsh">trunk/Source/JavaScriptCore/wasm/WASMOps.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/JSTests/stress/wasm/</li>
<li><a href="#trunkJSTestsstresswasmgeneratewasmopsheaderjs">trunk/JSTests/stress/wasm/generate-wasmops-header.js</a></li>
<li><a href="#trunkJSTestsstresswasmwasmjson">trunk/JSTests/stress/wasm/wasm.json</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkJSTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/JSTests/ChangeLog (206755 => 206756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/ChangeLog        2016-10-03 22:32:11 UTC (rev 206755)
+++ trunk/JSTests/ChangeLog        2016-10-03 22:43:37 UTC (rev 206756)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2016-10-03  JF Bastien  &lt;jfbastien@apple.com&gt;
+
+        Auto-generate WASMOps.h, share with testing JSON file
+        https://bugs.webkit.org/show_bug.cgi?id=162870
+
+        Reviewed by Keith Miller.
+
+        * stress/wasm/to-c++.js: Added. Generates WASMOps.h, siilar to the current one but with more data.
+        (const.opcode_iterator):
+        (opcode_macroizer):
+        * stress/wasm/wasm.json: Added. Data from 0xC binary format version.
+
</ins><span class="cx"> 2016-10-03  Saam Barati  &lt;sbarati@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         MapHash should speculate on the type of its child node
</span></span></pre></div>
<a id="trunkJSTestsstresswasmgeneratewasmopsheaderjs"></a>
<div class="addfile"><h4>Added: trunk/JSTests/stress/wasm/generate-wasmops-header.js (0 => 206756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/stress/wasm/generate-wasmops-header.js                                (rev 0)
+++ trunk/JSTests/stress/wasm/generate-wasmops-header.js        2016-10-03 22:43:37 UTC (rev 206756)
</span><span class="lines">@@ -0,0 +1,116 @@
</span><ins>+// 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.
+const opcodeIterator = (filter) =&gt; {
+    return function*() {
+        for (let op in opcodes)
+            if (filter(opcodes[op]))
+                yield {name: op, opcode: opcodes[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 defines = [
+    &quot;#define FOR_EACH_WASM_SPECIAL_OP(macro)&quot;,
+    ...opcodeMacroizer(op =&gt; op.category === &quot;special&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_UNARY_OP(macro)&quot;,
+    ...opcodeMacroizer(op =&gt; op.category === &quot;arithmetic&quot; &amp;&amp; op.parameter.length === 1),
+    &quot;\n\n#define FOR_EACH_WASM_BINARY_OP(macro)&quot;,
+    ...opcodeMacroizer(op =&gt; (op.category === &quot;arithmetic&quot; || op.category === &quot;comparison&quot;) &amp;&amp; op.parameter.length === 2),
+    &quot;\n\n&quot;].join(&quot;&quot;);
+
+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)
+
+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)
+
+#define CREATE_ENUM_VALUE(name, id, b3op) name = id,
+
+enum OpType : uint8_t {
+    FOR_EACH_WASM_OP(CREATE_ENUM_VALUE)
+};
+
+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)
+};
+
+#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;
+}
+
+} } // namespace JSC::WASM
+
+#endif // ENABLE(WEBASSEMBLY)
+`;
+
+print(template);
</ins></span></pre></div>
<a id="trunkJSTestsstresswasmwasmjson"></a>
<div class="addfile"><h4>Added: trunk/JSTests/stress/wasm/wasm.json (0 => 206756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/stress/wasm/wasm.json                                (rev 0)
+++ trunk/JSTests/stress/wasm/wasm.json        2016-10-03 22:43:37 UTC (rev 206756)
</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;magic number&quot;: { &quot;type&quot;: &quot;uint32&quot;, &quot;value&quot;: 1836278016, &quot;description&quot;: &quot;NULL character followed by 'asm'&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;any*&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;any*&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;any*&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;any*&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;any&quot;],   &quot;parameter&quot;: [&quot;any&quot;, &quot;any&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;f32&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;f64&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;any&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;any&quot;],  &quot;parameter&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;any&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;any&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;any&quot;],  &quot;parameter&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;any&quot;],  &quot;parameter&quot;: [&quot;any*&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;any&quot;],  &quot;parameter&quot;: [&quot;any*&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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;]        }
+    }
+}
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (206755 => 206756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-10-03 22:32:11 UTC (rev 206755)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-10-03 22:43:37 UTC (rev 206756)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-10-03  JF Bastien  &lt;jfbastien@apple.com&gt;
+
+        Auto-generate WASMOps.h, share with testing JSON file
+        https://bugs.webkit.org/show_bug.cgi?id=162870
+
+        Reviewed by Keith Miller.
+
+        Add a few new opcodes, but keep this mostly as-is for now. I want
+        to generate smarter code but will do so in a later update to
+        reduce disruption.
+
+        * wasm/WASMOps.h: auto-generated from ./JSTests/stress/wasm/to-c++.js
+
</ins><span class="cx"> 2016-10-03  Michael Saboff  &lt;msaboff@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Creating pcToOriginMap in FTL shouldn't insert unnecessary NOPs
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWASMFunctionParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WASMFunctionParser.h (206755 => 206756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WASMFunctionParser.h        2016-10-03 22:32:11 UTC (rev 206755)
+++ trunk/Source/JavaScriptCore/wasm/WASMFunctionParser.h        2016-10-03 22:43:37 UTC (rev 206756)
</span><span class="lines">@@ -214,14 +214,14 @@
</span><span class="cx">         return m_context.addElse(m_controlStack.last());
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    case OpType::Branch:
-    case OpType::BranchIf: {
</del><ins>+    case OpType::Br:
+    case OpType::BrIf: {
</ins><span class="cx">         uint32_t target;
</span><span class="cx">         if (!parseVarUInt32(target) || target &gt;= m_controlStack.size())
</span><span class="cx">             return false;
</span><span class="cx"> 
</span><span class="cx">         ExpressionType condition = Context::emptyExpression;
</span><del>-        if (op == OpType::BranchIf)
</del><ins>+        if (op == OpType::BrIf)
</ins><span class="cx">             condition = m_expressionStack.takeLast();
</span><span class="cx">         else
</span><span class="cx">             m_unreachableBlocks = 1;
</span><span class="lines">@@ -245,6 +245,19 @@
</span><span class="cx">         return m_context.endBlock(data, m_expressionStack);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    case OpType::Unreachable:
+    case OpType::Select:
+    case OpType::BrTable:
+    case OpType::Nop:
+    case OpType::Drop:
+    case OpType::I64Const:
+    case OpType::F32Const:
+    case OpType::F64Const:
+    case OpType::TeeLocal:
+    case OpType::GetGlobal:
+    case OpType::SetGlobal:
+        // FIXME: Not yet implemented.
+        return false;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Unknown opcode.
</span><span class="lines">@@ -284,8 +297,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // two immediate cases
</span><del>-    case OpType::Branch:
-    case OpType::BranchIf: {
</del><ins>+    case OpType::Br:
+    case OpType::BrIf: {
</ins><span class="cx">         uint32_t unused;
</span><span class="cx">         if (!parseVarUInt32(unused))
</span><span class="cx">             return false;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWASMOpsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WASMOps.h (206755 => 206756)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WASMOps.h        2016-10-03 22:32:11 UTC (rev 206755)
+++ trunk/Source/JavaScriptCore/wasm/WASMOps.h        2016-10-03 22:43:37 UTC (rev 206756)
</span><span class="lines">@@ -23,6 +23,8 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><ins>+// This file is auto-generated using wasm.json.
+
</ins><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEBASSEMBLY)
</span><span class="lines">@@ -30,29 +32,54 @@
</span><span class="cx"> namespace JSC { namespace WASM {
</span><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WASM_SPECIAL_OP(macro) \
</span><del>-    macro(I32Const, 0x10, NA) \
-    macro(GetLocal, 0x14, NA) \
-    macro(SetLocal, 0x15, NA)
</del><ins>+    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)
</ins><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WASM_CONTROL_FLOW_OP(macro) \
</span><del>-    macro(Block, 0x01, NA) \
-    macro(Loop, 0x02, NA) \
-    macro(If, 0x03, NA) \
-    macro(Else, 0x04, NA) \
-    macro(Branch, 0x06, NA) \
-    macro(BranchIf, 0x07, NA) \
-    macro(Return, 0x09, NA) \
-    macro(End, 0x0f, NA)
</del><ins>+    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)
</ins><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WASM_UNARY_OP(macro) \
</span><span class="cx">     macro(I32Clz, 0x57, Clz) \
</span><del>-    /* macro(I32Ctz, 0x58) */ \
-    /* macro(I32PopCnt, 0x59) */ \
-    /* macro(I32Eqz, 0x5a) */ \
</del><ins>+    macro(I32Ctz, 0x58, Oops) \
+    macro(I32Popcnt, 0x59, Oops) \
</ins><span class="cx">     macro(I64Clz, 0x72, Clz) \
</span><del>-    /* macro(I64Ctz, 0x73) */ \
-    /* macro(I64PopCnt, 0x74) */ \
-    /* macro(I64Eqz, 0xba) */
</del><ins>+    macro(I64Ctz, 0x73, Oops) \
+    macro(I64Popcnt, 0x74, Oops) \
+    macro(F32Abs, 0x7b, Oops) \
+    macro(F32Neg, 0x7c, Oops) \
+    macro(F32Copysign, 0x7d, Oops) \
+    macro(F32Ceil, 0x7e, Oops) \
+    macro(F32Floor, 0x7f, Oops) \
+    macro(F32Trunc, 0x80, Oops) \
+    macro(F32Nearest, 0x81, Oops) \
+    macro(F32Sqrt, 0x82, Oops) \
+    macro(F64Abs, 0x8f, Oops) \
+    macro(F64Neg, 0x90, Oops) \
+    macro(F64Copysign, 0x91, Oops) \
+    macro(F64Ceil, 0x92, Oops) \
+    macro(F64Floor, 0x93, Oops) \
+    macro(F64Trunc, 0x94, Oops) \
+    macro(F64Nearest, 0x95, Oops) \
+    macro(F64Sqrt, 0x96, Oops)
</ins><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WASM_BINARY_OP(macro) \
</span><span class="cx">     macro(I32Add, 0x40, Add) \
</span><span class="lines">@@ -59,9 +86,9 @@
</span><span class="cx">     macro(I32Sub, 0x41, Sub) \
</span><span class="cx">     macro(I32Mul, 0x42, Mul) \
</span><span class="cx">     macro(I32DivS, 0x43, Div) \
</span><del>-    /* macro(I32DivU, 0x44) */ \
</del><ins>+    macro(I32DivU, 0x44, Oops) \
</ins><span class="cx">     macro(I32RemS, 0x45, Mod) \
</span><del>-    /* macro(I32RemU, 0x46, Mod) */ \
</del><ins>+    macro(I32RemU, 0x46, Oops) \
</ins><span class="cx">     macro(I32And, 0x47, BitAnd) \
</span><span class="cx">     macro(I32Or, 0x48, BitOr) \
</span><span class="cx">     macro(I32Xor, 0x49, BitXor) \
</span><span class="lines">@@ -68,8 +95,8 @@
</span><span class="cx">     macro(I32Shl, 0x4a, Shl) \
</span><span class="cx">     macro(I32ShrU, 0x4b, SShr) \
</span><span class="cx">     macro(I32ShrS, 0x4c, ZShr) \
</span><del>-    /* macro(I32RotR, 0xb6) */ \
-    /* macro(I32RotL, 0xb7) */ \
</del><ins>+    macro(I32Rotr, 0xb6, Oops) \
+    macro(I32Rotl, 0xb7, Oops) \
</ins><span class="cx">     macro(I32Eq, 0x4d, Equal) \
</span><span class="cx">     macro(I32Ne, 0x4e, NotEqual) \
</span><span class="cx">     macro(I32LtS, 0x4f, LessThan) \
</span><span class="lines">@@ -84,9 +111,9 @@
</span><span class="cx">     macro(I64Sub, 0x5c, Sub) \
</span><span class="cx">     macro(I64Mul, 0x5d, Mul) \
</span><span class="cx">     macro(I64DivS, 0x5e, Div) \
</span><del>-    /* macro(I64DivU, 0x5f) */ \
</del><ins>+    macro(I64DivU, 0x5f, Oops) \
</ins><span class="cx">     macro(I64RemS, 0x60, Mod) \
</span><del>-    /* macro(I64RemU, 0x61) */ \
</del><ins>+    macro(I64RemU, 0x61, Oops) \
</ins><span class="cx">     macro(I64And, 0x62, BitAnd) \
</span><span class="cx">     macro(I64Or, 0x63, BitOr) \
</span><span class="cx">     macro(I64Xor, 0x64, BitXor) \
</span><span class="lines">@@ -93,8 +120,8 @@
</span><span class="cx">     macro(I64Shl, 0x65, Shl) \
</span><span class="cx">     macro(I64ShrU, 0x66, SShr) \
</span><span class="cx">     macro(I64ShrS, 0x67, ZShr) \
</span><del>-    /* macro(I64RotR, 0xb8) */ \
-    /* macro(I64RotL, 0xb9) */ \
</del><ins>+    macro(I64Rotr, 0xb8, Oops) \
+    macro(I64Rotl, 0xb9, Oops) \
</ins><span class="cx">     macro(I64Eq, 0x68, Equal) \
</span><span class="cx">     macro(I64Ne, 0x69, NotEqual) \
</span><span class="cx">     macro(I64LtS, 0x6a, LessThan) \
</span><span class="lines">@@ -101,8 +128,37 @@
</span><span class="cx">     macro(I64LeS, 0x6b, LessEqual) \
</span><span class="cx">     macro(I64LtU, 0x6c, Below) \
</span><span class="cx">     macro(I64LeU, 0x6d, BelowEqual) \
</span><ins>+    macro(I64GtS, 0x6e, GreaterThan) \
+    macro(I64GeS, 0x6f, GreaterEqual) \
+    macro(I64GtU, 0x70, Above) \
+    macro(I64GeU, 0x71, AboveEqual) \
+    macro(F32Add, 0x75, Oops) \
+    macro(F32Sub, 0x76, Oops) \
+    macro(F32Mul, 0x77, Oops) \
+    macro(F32Div, 0x78, Oops) \
+    macro(F32Min, 0x79, Oops) \
+    macro(F32Max, 0x7a, Oops) \
+    macro(F32Eq, 0x83, Oops) \
+    macro(F32Ne, 0x84, Oops) \
+    macro(F32Lt, 0x85, Oops) \
+    macro(F32Le, 0x86, Oops) \
+    macro(F32Gt, 0x87, Oops) \
+    macro(F32Ge, 0x88, Oops) \
+    macro(F64Add, 0x89, Oops) \
+    macro(F64Sub, 0x8a, Oops) \
+    macro(F64Mul, 0x8b, Oops) \
+    macro(F64Div, 0x8c, Oops) \
+    macro(F64Min, 0x8d, Oops) \
+    macro(F64Max, 0x8e, Oops) \
+    macro(F64Eq, 0x97, Oops) \
+    macro(F64Ne, 0x98, Oops) \
+    macro(F64Lt, 0x99, Oops) \
+    macro(F64Le, 0x9a, Oops) \
+    macro(F64Gt, 0x9b, Oops) \
+    macro(F64Ge, 0x9c, Oops)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> #define FOR_EACH_WASM_OP(macro) \
</span><span class="cx">     FOR_EACH_WASM_SPECIAL_OP(macro) \
</span><span class="cx">     FOR_EACH_WASM_CONTROL_FLOW_OP(macro) \
</span><span class="lines">@@ -141,3 +197,4 @@
</span><span class="cx"> } } // namespace JSC::WASM
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(WEBASSEMBLY)
</span><ins>+
</ins></span></pre>
</div>
</div>

</body>
</html>