Changeset 209242 in webkit
- Timestamp:
- Dec 2, 2016 9:55:32 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JSTests/ChangeLog
r209219 r209242 1 2016-12-01 Ryan Haddad <ryanhaddad@apple.com> 2 3 Skip flaky test ChakraCore/test/fieldopts/objtypespec-newobj-invalidation.1.js 4 https://bugs.webkit.org/show_bug.cgi?id=162567 5 6 Reviewed by Saam Barati. 7 8 * ChakraCore.yaml: 9 10 2016-12-01 Keith Miller <keith_miller@apple.com> 11 12 Add wasm int to floating point opcodes 13 https://bugs.webkit.org/show_bug.cgi?id=165252 14 15 Reviewed by Geoffrey Garen. 16 17 Add tests for Wasm integral to floating point conversion opcodes. 18 19 * wasm/function-tests/int-to-floating-point.js: Added. 20 * wasm/wasm.json: 21 22 2016-12-01 Geoffrey Garen <ggaren@apple.com> 23 24 Land a test case for <rdar://problem/27889416> 25 https://bugs.webkit.org/show_bug.cgi?id=165272 26 27 Reviewed by Saam Barati. 28 29 * stress/marked-argument-buffer.js: Added. 30 (allocate): 31 (test.o.toString): 32 (test): 33 34 2016-11-29 Per Arne Vollan <pvollan@apple.com> 35 36 [Win] Skip failing JSC tests. 37 https://bugs.webkit.org/show_bug.cgi?id=165140 38 39 Reviewed by Mark Lam. 40 41 * ChakraCore.yaml: 42 * microbenchmarks/tan.js: 43 44 2016-11-30 JF Bastien <jfbastien@apple.com> 45 46 WebAssembly: update binary format to 0xD version 47 https://bugs.webkit.org/show_bug.cgi?id=164724 48 49 Reviewed by Saam Barati. 50 51 As described in the following PR: https://github.com/WebAssembly/design/pull/836 1 2016-12-02 JF Bastien <jfbastien@apple.com> 2 3 WebAssembly: revert patch causing odd breakage 4 https://bugs.webkit.org/show_bug.cgi?id=165308 5 6 Unreviewed. 7 8 Bug #164724 seems to cause build issues which I haven't tracked down yet. WasmOps.h can't be found: 9 ./Source/JavaScriptCore/wasm/WasmFormat.h:34:10: fatal error: 'WasmOps.h' file not found 10 11 It's weird since the file is auto-generated and has been for a while. #164724 merely includes it in WasmFormat.h. 52 12 53 13 * wasm/Builder.js: … … 57 17 (const.emitters.Code): 58 18 * wasm/LowLevelBinary.js: 59 (export.default.LowLevelBinary.prototype. block_type):60 (export.default.LowLevelBinary.prototype. inline_signature_type): Deleted.19 (export.default.LowLevelBinary.prototype.inline_signature_type): 20 (export.default.LowLevelBinary.prototype.block_type): Deleted. 61 21 * wasm/WASM.js: 62 22 * wasm/js-api/test_basic_api.js: … … 66 26 * wasm/self-test/test_WASM.js: 67 27 * wasm/wasm.json: 28 29 2016-12-01 Ryan Haddad <ryanhaddad@apple.com> 30 31 Skip flaky test ChakraCore/test/fieldopts/objtypespec-newobj-invalidation.1.js 32 https://bugs.webkit.org/show_bug.cgi?id=162567 33 34 Reviewed by Saam Barati. 35 36 * ChakraCore.yaml: 37 38 2016-12-01 Keith Miller <keith_miller@apple.com> 39 40 Add wasm int to floating point opcodes 41 https://bugs.webkit.org/show_bug.cgi?id=165252 42 43 Reviewed by Geoffrey Garen. 44 45 Add tests for Wasm integral to floating point conversion opcodes. 46 47 * wasm/function-tests/int-to-floating-point.js: Added. 48 * wasm/wasm.json: 49 50 2016-12-01 Geoffrey Garen <ggaren@apple.com> 51 52 Land a test case for <rdar://problem/27889416> 53 https://bugs.webkit.org/show_bug.cgi?id=165272 54 55 Reviewed by Saam Barati. 56 57 * stress/marked-argument-buffer.js: Added. 58 (allocate): 59 (test.o.toString): 60 (test): 61 62 2016-11-29 Per Arne Vollan <pvollan@apple.com> 63 64 [Win] Skip failing JSC tests. 65 https://bugs.webkit.org/show_bug.cgi?id=165140 66 67 Reviewed by Mark Lam. 68 69 * ChakraCore.yaml: 70 * microbenchmarks/tan.js: 68 71 69 72 2016-11-30 JF Bastien <jfbastien@apple.com> -
trunk/JSTests/wasm/Builder.js
r209175 r209242 52 52 ret = "void"; 53 53 assert.isNotArray(ret, `Multiple return values not supported by WebAssembly yet`); 54 assert. truthy(WASM.isValidBlockType(ret), `Type return ${ret} must be valid blocktype`);54 assert.falsy(ret !== "void" && !WASM.isValidValueType(ret), `Type return ${ret} must be valid value type`); 55 55 return [params, ret]; 56 56 }; … … 157 157 const _checkStackArgs = (op, param) => { 158 158 for (let expect of param) { 159 if (WASM.isValid Type(expect)) {159 if (WASM.isValidValueType(expect)) { 160 160 // FIXME implement stack checks for arguments. https://bugs.webkit.org/show_bug.cgi?id=163421 161 161 } else { … … 178 178 const _checkStackReturn = (op, ret) => { 179 179 for (let expect of ret) { 180 if (WASM.isValid Type(expect)) {180 if (WASM.isValidValueType(expect)) { 181 181 // FIXME implement stack checks for return. https://bugs.webkit.org/show_bug.cgi?id=163421 182 182 } else { … … 222 222 case "relative_depth": break; // improve checking https://bugs.webkit.org/show_bug.cgi?id=163421 223 223 case "sig": 224 assert.truthy(WASM.isValidBlockType(imms[idx]), `Invalid block type on ${op}: "${imms[idx]}"`); 224 // FIXME this should be isValidBlockType https://bugs.webkit.org/show_bug.cgi?id=164724 225 assert.truthy(imms[idx] === "void" || WASM.isValidValueType(imms[idx]), `Invalid block type on ${op}: "${imms[idx]}"`); 225 226 break; 226 227 case "target_count": break; // improve checking https://bugs.webkit.org/show_bug.cgi?id=163421 -
trunk/JSTests/wasm/Builder_WebAssemblyBinary.js
r209175 r209242 34 34 put(bin, "varuint32", section.data.length); 35 35 for (const entry of section.data) { 36 put(bin, "varint7", WASM.typeValue["func"]); 36 const funcTypeConstructor = -0x20; // FIXME Move this to wasm.json. 37 put(bin, "varint7", funcTypeConstructor); 37 38 put(bin, "varuint32", entry.params.length); 38 39 for (const param of entry.params) 39 put(bin, " varint7", WASM.typeValue[param]);40 put(bin, "uint8", WASM.valueTypeValue[param]); 40 41 if (entry.ret === "void") 41 42 put(bin, "varuint1", 0); 42 43 else { 43 44 put(bin, "varuint1", 1); 44 put(bin, " varint7", WASM.typeValue[entry.ret]);45 put(bin, "uint8", WASM.valueTypeValue[entry.ret]); 45 46 } 46 47 } … … 107 108 for (let i = func.parameterCount; i < func.locals.length; ++i) { 108 109 put(funcBin, "varuint32", 1); 109 put(funcBin, " varint7", WASM.typeValue[func.locals[i]]);110 put(funcBin, "uint8", WASM.valueTypeValue[func.locals[i]]); 110 111 } 111 112 -
trunk/JSTests/wasm/LowLevelBinary.js
r209175 r209242 160 160 this.varuint32(v); 161 161 } 162 block_type(v) { 163 if (!WASM.isValidBlockType(v)) 164 throw new Error(`Invalid block type ${v}`); 165 this.varint7(WASM.typeValue[v]); 162 inline_signature_type(v) { 163 this.varint7(WASM.valueTypeValue[v]); 166 164 } 167 165 string(str) { -
trunk/JSTests/wasm/WASM.js
r209175 r209242 34 34 35 35 export const description = utilities.json("wasm.json"); 36 export const type = Object.keys(description.type); 37 const _typeSet = new Set(type); 38 export const isValidType = v => _typeSet.has(v); 39 export const typeValue = _mapValues(description.type); 40 const _valueTypeSet = new Set(description.value_type); 36 export const valueType = Object.keys(description.value_type); 37 const _valueTypeSet = new Set(valueType); 41 38 export const isValidValueType = v => _valueTypeSet.has(v); 42 const _blockTypeSet = new Set(description.block_type); 43 export const isValidBlockType = v => _blockTypeSet.has(v); 39 export const valueTypeValue = _mapValues(description.value_type); 44 40 export const externalKindValue = _mapValues(description.external_kind); 45 41 export const sections = Object.keys(description.section); -
trunk/JSTests/wasm/js-api/test_basic_api.js
r209175 r209242 2 2 import * as utilities from '../utilities.js'; 3 3 4 const version = 0x 0D;4 const version = 0xC; 5 5 const emptyModuleArray = Uint8Array.of(0x0, 0x61, 0x73, 0x6d, version, 0x00, 0x00, 0x00); 6 6 const invalidConstructorInputs = [undefined, null, "", 1, {}, []]; -
trunk/JSTests/wasm/self-test/test_BuilderWebAssembly.js
r209175 r209242 7 7 // Note: this will change as we update version number. 8 8 assert.eq(bin.hexdump().trim(), 9 "00000000 00 61 73 6d 0 d00 00 00 |·asm···· |");9 "00000000 00 61 73 6d 0c 00 00 00 |·asm···· |"); 10 10 })(); 11 11 … … 28 28 .WebAssembly(); 29 29 assert.eq(bin.hexdump().trim(), 30 ["00000000 00 61 73 6d 0 d00 00 00 00 0a 05 4f 48 48 41 49 |·asm·······OHHAI|",30 ["00000000 00 61 73 6d 0c 00 00 00 00 0a 05 4f 48 48 41 49 |·asm·······OHHAI|", 31 31 "00000010 de ad c0 fe |···· |"].join("\n")); 32 32 })(); -
trunk/JSTests/wasm/self-test/test_WASM.js
r209175 r209242 3 3 4 4 assert.isNotUndef(WASM.description); 5 assert.isNotUndef(WASM. type);6 assert.ge(WASM. type.length, 7);5 assert.isNotUndef(WASM.valueType); 6 assert.ge(WASM.valueType.length, 4); 7 7 8 for (const v of WASM. type)9 if (!WASM.isValid Type(v))10 throw new Error(`Expected value ${v} to be a valid type`);8 for (const v of WASM.valueType) 9 if (!WASM.isValidValueType(v)) 10 throw new Error(`Expected value ${v} to be a valid value type`); 11 11 12 12 const expectedFields = [ 13 13 "preamble", 14 "type", 14 "value_type", 15 "inline_signature_type", 15 16 "external_kind", 16 17 "section", -
trunk/JSTests/wasm/wasm.json
r209204 r209242 1 1 { 2 2 "comments": ["This file describes the WebAssembly ISA.", 3 "Scripts in this folder auto-generate C++ code for JavaScriptCore as well as the testing DSL which WebKit's WebAssembly tests use." 3 "Scripts in this folder auto-generate C++ code for JavaScriptCore as well as the testing DSL which WebKit's WebAssembly tests use.", 4 "When you update this file you need to re-generate the C++ code: jsc ./JSTests/stress/wasm/generate-wasmops-header.js > ./Source/JavaScriptCore/wasm/WASMOps.h" 4 5 ], 5 6 "preamble": [ 6 7 { "name": "magic number", "type": "uint32", "value": 1836278016, "description": "NULL character followed by 'asm'" }, 7 { "name": "version", "type": "uint32", "value": 1 3, "description": "Version number, will be reset to 1 for MVP" }8 { "name": "version", "type": "uint32", "value": 12, "description": "Version number, will be reset to 1 for MVP" } 8 9 ], 9 "type" : { 10 "i32": { "type": "varint7", "value": -1, "b3type": "B3::Int32" }, 11 "i64": { "type": "varint7", "value": -2, "b3type": "B3::Int64" }, 12 "f32": { "type": "varint7", "value": -3, "b3type": "B3::Float" }, 13 "f64": { "type": "varint7", "value": -4, "b3type": "B3::Double" }, 14 "anyfunc": { "type": "varint7", "value": -16, "b3type": "B3::Void" }, 15 "func": { "type": "varint7", "value": -32, "b3type": "B3::Void" }, 16 "void": { "type": "varint7", "value": -64, "b3type": "B3::Void" } 17 }, 18 "value_type": ["i32", "i64", "f32", "f64"], 19 "block_type": ["i32", "i64", "f32", "f64", "void"], 20 "elem_type": ["anyfunc"], 10 "value_type" : { 11 "i32": { "type": "uint8", "value": 1 }, 12 "i64": { "type": "uint8", "value": 2 }, 13 "f32": { "type": "uint8", "value": 3 }, 14 "f64": { "type": "uint8", "value": 4 } 15 }, 16 "inline_signature_type" : { 17 "void": { "type": "uint8", "value": 0 }, 18 "i32": { "type": "uint8", "value": 1 }, 19 "i64": { "type": "uint8", "value": 2 }, 20 "f32": { "type": "uint8", "value": 3 }, 21 "f64": { "type": "uint8", "value": 4 } 22 }, 21 23 "external_kind": { 22 24 "Function": { "type": "uint8", "value": 0 }, … … 40 42 "opcode": { 41 43 "unreachable": { "category": "control", "value": 0, "return": [], "parameter": [], "immediate": [], "description": "trap immediately" }, 42 "block": { "category": "control", "value": 2, "return": ["control"], "parameter": [], "immediate": [{"name": "sig", "type": "block_type"}],"description": "begin a sequence of expressions, yielding 0 or 1 values" },43 "loop": { "category": "control", "value": 3, "return": ["control"], "parameter": [], "immediate": [{"name": "sig", "type": "block_type"}],"description": "begin a block which can also form control flow loops" },44 "if": { "category": "control", "value": 4, "return": ["control"], "parameter": ["bool"], "immediate": [{"name": "sig", "type": "block_type"}],"description": "begin if expression" },45 "else": { "category": "control", "value": 5, "return": ["control"], "parameter": [], "immediate": [], "description": "begin else expression of if" },46 "select": { "category": "control", "value": 27, "return": ["prev"], "parameter": ["any", "prev", "bool"], "immediate": [], "description": "select one of two values based on condition" },47 "br": { "category": "control", "value": 12, "return": [], "parameter": [], "immediate": [{"name": "relative_depth", "type": "varuint32"}], "description": "break that targets an outer nested block" },48 "br_if": { "category": "control", "value": 13, "return": [], "parameter": [], "immediate": [{"name": "relative_depth", "type": "varuint32"}], "description": "conditional break that targets an outer nested block" },49 "br_table": { "category": "control", "value": 14, "return": [], "parameter": [], "immediate": [{"name": "target_count", "type": "varuint32", "description": "number of entries in the target_table"},44 "block": { "category": "control", "value": 1, "return": ["control"], "parameter": [], "immediate": [{"name": "sig", "type": "inline_signature_type"}], "description": "begin a sequence of expressions, yielding 0 or 1 values" }, 45 "loop": { "category": "control", "value": 2, "return": ["control"], "parameter": [], "immediate": [{"name": "sig", "type": "inline_signature_type"}], "description": "begin a block which can also form control flow loops" }, 46 "if": { "category": "control", "value": 3, "return": ["control"], "parameter": ["bool"], "immediate": [{"name": "sig", "type": "inline_signature_type"}], "description": "begin if expression" }, 47 "else": { "category": "control", "value": 4, "return": ["control"], "parameter": [], "immediate": [], "description": "begin else expression of if" }, 48 "select": { "category": "control", "value": 5, "return": ["prev"], "parameter": ["any", "prev", "bool"], "immediate": [], "description": "select one of two values based on condition" }, 49 "br": { "category": "control", "value": 6, "return": [], "parameter": [], "immediate": [{"name": "relative_depth", "type": "varuint32"}], "description": "break that targets an outer nested block" }, 50 "br_if": { "category": "control", "value": 7, "return": [], "parameter": [], "immediate": [{"name": "relative_depth", "type": "varuint32"}], "description": "conditional break that targets an outer nested block" }, 51 "br_table": { "category": "control", "value": 8, "return": [], "parameter": [], "immediate": [{"name": "target_count", "type": "varuint32", "description": "number of entries in the target_table"}, 50 52 {"name": "target_table", "type": "varuint32*", "description": "target entries that indicate an outer block or loop to which to break"}, 51 53 {"name": "default_target", "type": "varuint32", "description": "an outer block or loop to which to break in the default case"}], 52 54 "description": "branch table control flow construct" }, 53 "return": { "category": "control", "value": 15, "return": [], "parameter": [], "immediate": [], "description": "return zero or one value from this function" },54 "drop": { "category": "control", "value": 26, "return": [], "parameter": ["any"], "immediate": [], "description": "ignore value" },55 "nop": { "category": "control", "value": 1, "return": [], "parameter": [], "immediate": [], "description": "no operation" },56 "end": { "category": "control", "value": 1 1, "return": [], "parameter": [], "immediate": [], "description": "end a block, loop, or if" },57 "i32.const": { "category": "special", "value": 65, "return": ["i32"], "parameter": [], "immediate": [{"name": "value", "type": "varint32"}], "description": "a constant value interpreted as i32" },58 "i64.const": { "category": "special", "value": 66, "return": ["i64"], "parameter": [], "immediate": [{"name": "value", "type": "varint64"}], "description": "a constant value interpreted as i64" },59 "f64.const": { "category": "special", "value": 68, "return": ["f64"], "parameter": [], "immediate": [{"name": "value", "type": "uint64"}], "description": "a constant value interpreted as f64" },60 "f32.const": { "category": "special", "value": 67, "return": ["f32"], "parameter": [], "immediate": [{"name": "value", "type": "uint32"}], "description": "a constant value interpreted as f32" },61 "get_local": { "category": "special", "value": 32, "return": ["local"], "parameter": [], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "read a local variable or parameter" },62 "set_local": { "category": "special", "value": 33, "return": [], "parameter": ["local"], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "write a local variable or parameter" },63 "tee_local": { "category": "special", "value": 34, "return": ["prev"], "parameter": ["any"], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "write a local variable or parameter and return the same value" },64 "get_global": { "category": "special", "value": 35, "return": ["global"], "parameter": [], "immediate": [{"name": "global_index", "type": "varuint32"}], "description": "read a global variable" },65 "set_global": { "category": "special", "value": 36, "return": [""], "parameter": ["global"], "immediate": [{"name": "global_index", "type": "varuint32"}], "description": "write a global variable" },66 "call": { "category": "call", "value": 16, "return": ["call"], "parameter": ["call"], "immediate": [{"name": "function_index", "type": "varuint32"}], "description": "call a function by its index" },67 "call_indirect": { "category": "call", "value": 17, "return": ["call"], "parameter": ["call"], "immediate": [{"name": "type_index", "type": "varuint32"}], "description": "call a function indirect with an expected signature" },68 "i32.load8_s": { "category": "memory", "value": 44, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },69 "i32.load8_u": { "category": "memory", "value": 45, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },70 "i32.load16_s": { "category": "memory", "value": 46, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },71 "i32.load16_u": { "category": "memory", "value": 47, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },72 "i64.load8_s": { "category": "memory", "value": 48, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },73 "i64.load8_u": { "category": "memory", "value": 49, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },74 "i64.load16_s": { "category": "memory", "value": 50, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },75 "i64.load16_u": { "category": "memory", "value": 51, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },76 "i64.load32_s": { "category": "memory", "value": 52, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },77 "i64.load32_u": { "category": "memory", "value": 53, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },78 "i32.load": { "category": "memory", "value": 4 0, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },79 "i64.load": { "category": "memory", "value": 4 1, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },80 "f32.load": { "category": "memory", "value": 4 2, "return": ["f32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },81 "f64.load": { "category": "memory", "value": 4 3, "return": ["f64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },82 "i32.store8": { "category": "memory", "value": 58, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },83 "i32.store16": { "category": "memory", "value": 59, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },84 "i64.store8": { "category": "memory", "value": 60, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },85 "i64.store16": { "category": "memory", "value": 61, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },86 "i64.store32": { "category": "memory", "value": 62, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },87 "i32.store": { "category": "memory", "value": 5 4, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },88 "i64.store": { "category": "memory", "value": 5 5, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },89 "f32.store": { "category": "memory", "value": 5 6, "return": [], "parameter": ["addr", "f32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },90 "f64.store": { "category": "memory", "value": 5 7, "return": [], "parameter": ["addr", "f64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },91 "current_memory": { "category": "operation", "value": 63, "return": ["size"], "parameter": [], "immediate": [], "description": "query the size of memory" },92 "grow_memory": { "category": "operation", "value": 64, "return": ["size"], "parameter": ["size"], "immediate": [], "description": "grow the size of memory" },93 "i32.add": { "category": "arithmetic", "value": 106, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Add" },94 "i32.sub": { "category": "arithmetic", "value": 107, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Sub" },95 "i32.mul": { "category": "arithmetic", "value": 108, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Mul" },96 "i32.div_s": { "category": "arithmetic", "value": 109, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Div" },97 "i32.div_u": { "category": "arithmetic", "value": 110, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "UDiv" },98 "i32.rem_s": { "category": "arithmetic", "value": 111, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Mod" },99 "i32.rem_u": { "category": "arithmetic", "value": 112, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "UMod" },100 "i32.and": { "category": "arithmetic", "value": 113, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitAnd" },101 "i32.or": { "category": "arithmetic", "value": 114, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitOr" },102 "i32.xor": { "category": "arithmetic", "value": 115, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitXor" },103 "i32.shl": { "category": "arithmetic", "value": 116, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Shl" },104 "i32.shr_u": { "category": "arithmetic", "value": 118, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "SShr" },105 "i32.shr_s": { "category": "arithmetic", "value": 117, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "ZShr" },106 "i32.rotr": { "category": "arithmetic", "value": 1 20, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "RotR" },107 "i32.rotl": { "category": "arithmetic", "value": 1 19, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "RotL" },108 "i32.eq": { "category": "comparison", "value": 7 0, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Equal" },109 "i32.ne": { "category": "comparison", "value": 7 1, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "NotEqual" },110 "i32.lt_s": { "category": "comparison", "value": 7 2, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "LessThan" },111 "i32.le_s": { "category": "comparison", "value": 76, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "LessEqual" },112 "i32.lt_u": { "category": "comparison", "value": 73, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Below" },113 "i32.le_u": { "category": "comparison", "value": 77, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BelowEqual" },114 "i32.gt_s": { "category": "comparison", "value": 74, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "GreaterThan" },115 "i32.ge_s": { "category": "comparison", "value": 78, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "GreaterEqual" },116 "i32.gt_u": { "category": "comparison", "value": 75, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Above" },117 "i32.ge_u": { "category": "comparison", "value": 79, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "AboveEqual" },118 "i32.clz": { "category": "arithmetic", "value": 103, "return": ["i32"], "parameter": ["i32"], "immediate": [], "b3op": "Clz" },119 "i32.ctz": { "category": "arithmetic", "value": 104, "return": ["i32"], "parameter": ["i32"], "immediate": [] },120 "i32.popcnt": { "category": "arithmetic", "value": 105, "return": ["i32"], "parameter": ["i32"], "immediate": [] },121 "i32.eqz": { "category": "comparison", "value": 69, "return": ["bool"], "parameter": ["i32"], "immediate": [], "b3op": "Equal(i32(0), @0)" },122 "i64.add": { "category": "arithmetic", "value": 124, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Add" },123 "i64.sub": { "category": "arithmetic", "value": 125, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Sub" },124 "i64.mul": { "category": "arithmetic", "value": 126, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Mul" },125 "i64.div_s": { "category": "arithmetic", "value": 127, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Div" },126 "i64.div_u": { "category": "arithmetic", "value": 128, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "UDiv" },127 "i64.rem_s": { "category": "arithmetic", "value": 129, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Mod" },128 "i64.rem_u": { "category": "arithmetic", "value": 130, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "UDiv" },129 "i64.and": { "category": "arithmetic", "value": 131, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitAnd" },130 "i64.or": { "category": "arithmetic", "value": 132, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitOr" },131 "i64.xor": { "category": "arithmetic", "value": 1 33, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitXor" },132 "i64.shl": { "category": "arithmetic", "value": 1 34, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Shl" },133 "i64.shr_u": { "category": "arithmetic", "value": 1 36, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "SShr" },134 "i64.shr_s": { "category": "arithmetic", "value": 1 35, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "ZShr" },135 "i64.rotr": { "category": "arithmetic", "value": 1 38, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "RotR" },136 "i64.rotl": { "category": "arithmetic", "value": 1 37, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "RotL" },137 "i64.eq": { "category": "comparison", "value": 81, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Equal" },138 "i64.ne": { "category": "comparison", "value": 82, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "NotEqual" },139 "i64.lt_s": { "category": "comparison", "value": 83, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "LessThan" },140 "i64.le_s": { "category": "comparison", "value": 87, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "LessEqual" },141 "i64.lt_u": { "category": "comparison", "value": 84, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Below" },142 "i64.le_u": { "category": "comparison", "value": 88, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BelowEqual" },143 "i64.gt_s": { "category": "comparison", "value": 85, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "GreaterThan" },144 "i64.ge_s": { "category": "comparison", "value": 89, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "GreaterEqual" },145 "i64.gt_u": { "category": "comparison", "value": 86, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Above" },146 "i64.ge_u": { "category": "comparison", "value": 90, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "AboveEqual" },147 "i64.clz": { "category": "arithmetic", "value": 1 21, "return": ["i64"], "parameter": ["i64"], "immediate": [], "b3op": "Clz" },148 "i64.ctz": { "category": "arithmetic", "value": 1 22, "return": ["i64"], "parameter": ["i64"], "immediate": [] },149 "i64.popcnt": { "category": "arithmetic", "value": 1 23, "return": ["i64"], "parameter": ["i64"], "immediate": [] },150 "i64.eqz": { "category": "comparison", "value": 80, "return": ["bool"], "parameter": ["i64"], "immediate": [], "b3op": "Equal(i32(0), @0)" },151 "f32.add": { "category": "arithmetic", "value": 1 46, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Add" },152 "f32.sub": { "category": "arithmetic", "value": 1 47, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Sub" },153 "f32.mul": { "category": "arithmetic", "value": 1 48, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Mul" },154 "f32.div": { "category": "arithmetic", "value": 1 49, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Div" },155 "f32.min": { "category": "arithmetic", "value": 1 50, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @0, @1)" },156 "f32.max": { "category": "arithmetic", "value": 1 51, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @1, @0)" },157 "f32.abs": { "category": "arithmetic", "value": 1 39, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Abs" },158 "f32.neg": { "category": "arithmetic", "value": 1 40, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Neg" },159 "f32.copysign": { "category": "arithmetic", "value": 1 52, "return": ["f32"], "parameter": ["f32"], "immediate": [] },160 "f32.ceil": { "category": "arithmetic", "value": 1 41, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Ceil" },161 "f32.floor": { "category": "arithmetic", "value": 1 42, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Floor" },162 "f32.trunc": { "category": "arithmetic", "value": 1 43, "return": ["f32"], "parameter": ["f32"], "immediate": [] },163 "f32.nearest": { "category": "arithmetic", "value": 1 44, "return": ["f32"], "parameter": ["f32"], "immediate": [] },164 "f32.sqrt": { "category": "arithmetic", "value": 1 45, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Sqrt" },165 "f32.eq": { "category": "comparison", "value": 91, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Equal" },166 "f32.ne": { "category": "comparison", "value": 92, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "NotEqual" },167 "f32.lt": { "category": "comparison", "value": 93, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "LessThan" },168 "f32.le": { "category": "comparison", "value": 95, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "LessEqual" },169 "f32.gt": { "category": "comparison", "value": 94, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "GreaterThan" },170 "f32.ge": { "category": "comparison", "value": 96, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "GreaterEqual" },171 "f64.add": { "category": "arithmetic", "value": 1 60, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Add" },172 "f64.sub": { "category": "arithmetic", "value": 1 61, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Sub" },173 "f64.mul": { "category": "arithmetic", "value": 1 62, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Mul" },174 "f64.div": { "category": "arithmetic", "value": 1 63, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Div" },175 "f64.min": { "category": "arithmetic", "value": 1 64, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @0, @1)" },176 "f64.max": { "category": "arithmetic", "value": 1 65, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @1, @0)" },177 "f64.abs": { "category": "arithmetic", "value": 1 53, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Abs" },178 "f64.neg": { "category": "arithmetic", "value": 1 54, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Neg" },179 "f64.copysign": { "category": "arithmetic", "value": 1 66, "return": ["f64"], "parameter": ["f64"], "immediate": [] },180 "f64.ceil": { "category": "arithmetic", "value": 1 55, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Ceil" },181 "f64.floor": { "category": "arithmetic", "value": 1 56, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Floor" },182 "f64.trunc": { "category": "arithmetic", "value": 1 57, "return": ["f64"], "parameter": ["f64"], "immediate": [] },183 "f64.nearest": { "category": "arithmetic", "value": 1 58, "return": ["f64"], "parameter": ["f64"], "immediate": [] },184 "f64.sqrt": { "category": "arithmetic", "value": 15 9, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Sqrt" },185 "f64.eq": { "category": "comparison", "value": 97, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Equal" },186 "f64.ne": { "category": "comparison", "value": 98, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "NotEqual" },187 "f64.lt": { "category": "comparison", "value": 99, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "LessThan" },188 "f64.le": { "category": "comparison", "value": 1 01, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "LessEqual" },189 "f64.gt": { "category": "comparison", "value": 1 00, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "GreaterThan" },190 "f64.ge": { "category": "comparison", "value": 1 02, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "GreaterEqual" },191 "i32.trunc_s/f32": { "category": "conversion", "value": 1 68, "return": ["i32"], "parameter": ["f32"], "immediate": [] },192 "i32.trunc_s/f64": { "category": "conversion", "value": 1 70, "return": ["i32"], "parameter": ["f64"], "immediate": [] },193 "i32.trunc_u/f32": { "category": "conversion", "value": 1 69, "return": ["i32"], "parameter": ["f32"], "immediate": [] },194 "i32.trunc_u/f64": { "category": "conversion", "value": 1 71, "return": ["i32"], "parameter": ["f64"], "immediate": [] },195 "i32.wrap/i64": { "category": "conversion", "value": 16 7, "return": ["i32"], "parameter": ["i64"], "immediate": [] },196 "i64.trunc_s/f32": { "category": "conversion", "value": 1 74, "return": ["i64"], "parameter": ["f32"], "immediate": [] },197 "i64.trunc_s/f64": { "category": "conversion", "value": 1 76, "return": ["i64"], "parameter": ["f64"], "immediate": [] },198 "i64.trunc_u/f32": { "category": "conversion", "value": 1 75, "return": ["i64"], "parameter": ["f32"], "immediate": [] },199 "i64.trunc_u/f64": { "category": "conversion", "value": 1 77, "return": ["i64"], "parameter": ["f64"], "immediate": [] },200 "i64.extend_s/i32": { "category": "conversion", "value": 1 72, "return": ["i64"], "parameter": ["i32"], "immediate": [], "b3op": "SExt32" },201 "i64.extend_u/i32": { "category": "conversion", "value": 1 73, "return": ["i64"], "parameter": ["i32"], "immediate": [], "b3op": "ZExt32" },202 "f32.convert_s/i32": { "category": "conversion", "value": 1 78, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "IToF" },203 "f32.convert_u/i32": { "category": "conversion", "value": 1 79, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "IToF(ZExt32(@0))" },204 "f32.convert_s/i64": { "category": "conversion", "value": 1 80, "return": ["f32"], "parameter": ["i64"], "immediate": [], "b3op": "IToF" },205 "f32.convert_u/i64": { "category": "conversion", "value": 1 81, "return": ["f32"], "parameter": ["i64"], "immediate": [] },206 "f32.demote/f64": { "category": "conversion", "value": 1 82, "return": ["f32"], "parameter": ["f64"], "immediate": [], "b3op": "DoubleToFloat"},207 "f32.reinterpret/i32": { "category": "conversion", "value": 1 90, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "BitwiseCast" },208 "f64.convert_s/i32": { "category": "conversion", "value": 1 83, "return": ["f64"], "parameter": ["i32"], "immediate": [], "b3op": "IToD" },209 "f64.convert_u/i32": { "category": "conversion", "value": 1 84, "return": ["f64"], "parameter": ["i32"], "immediate": [], "b3op": "IToD(ZExt32(@0))" },210 "f64.convert_s/i64": { "category": "conversion", "value": 1 85, "return": ["f64"], "parameter": ["i64"], "immediate": [], "b3op": "IToD" },211 "f64.convert_u/i64": { "category": "conversion", "value": 1 86, "return": ["f64"], "parameter": ["i64"], "immediate": [] },212 "f64.promote/f32": { "category": "conversion", "value": 1 87, "return": ["f64"], "parameter": ["f32"], "immediate": [], "b3op": "FloatToDouble"},213 "f64.reinterpret/i64": { "category": "conversion", "value": 1 91, "return": ["f64"], "parameter": ["i64"], "immediate": [], "b3op": "BitwiseCast" },214 "i32.reinterpret/f32": { "category": "conversion", "value": 18 8, "return": ["i32"], "parameter": ["f32"], "immediate": [], "b3op": "BitwiseCast" },215 "i64.reinterpret/f64": { "category": "conversion", "value": 18 9, "return": ["i64"], "parameter": ["f64"], "immediate": [], "b3op": "BitwiseCast" }55 "return": { "category": "control", "value": 9, "return": [], "parameter": [], "immediate": [], "description": "return zero or one value from this function" }, 56 "drop": { "category": "control", "value": 11, "return": [], "parameter": ["any"], "immediate": [], "description": "ignore value" }, 57 "nop": { "category": "control", "value": 10, "return": [], "parameter": [], "immediate": [], "description": "no operation" }, 58 "end": { "category": "control", "value": 15, "return": [], "parameter": [], "immediate": [], "description": "end a block, loop, or if" }, 59 "i32.const": { "category": "special", "value": 16, "return": ["i32"], "parameter": [], "immediate": [{"name": "value", "type": "varint32"}], "description": "a constant value interpreted as i32" }, 60 "i64.const": { "category": "special", "value": 17, "return": ["i64"], "parameter": [], "immediate": [{"name": "value", "type": "varint64"}], "description": "a constant value interpreted as i64" }, 61 "f64.const": { "category": "special", "value": 18, "return": ["f64"], "parameter": [], "immediate": [{"name": "value", "type": "uint64"}], "description": "a constant value interpreted as f64" }, 62 "f32.const": { "category": "special", "value": 19, "return": ["f32"], "parameter": [], "immediate": [{"name": "value", "type": "uint32"}], "description": "a constant value interpreted as f32" }, 63 "get_local": { "category": "special", "value": 20, "return": ["local"], "parameter": [], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "read a local variable or parameter" }, 64 "set_local": { "category": "special", "value": 21, "return": [], "parameter": ["local"], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "write a local variable or parameter" }, 65 "tee_local": { "category": "special", "value": 25, "return": ["prev"], "parameter": ["any"], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "write a local variable or parameter and return the same value" }, 66 "get_global": { "category": "special", "value": 187, "return": ["global"], "parameter": [], "immediate": [{"name": "global_index", "type": "varuint32"}], "description": "read a global variable" }, 67 "set_global": { "category": "special", "value": 188, "return": [""], "parameter": ["global"], "immediate": [{"name": "global_index", "type": "varuint32"}], "description": "write a global variable" }, 68 "call": { "category": "call", "value": 22, "return": ["call"], "parameter": ["call"], "immediate": [{"name": "function_index", "type": "varuint32"}], "description": "call a function by its index" }, 69 "call_indirect": { "category": "call", "value": 23, "return": ["call"], "parameter": ["call"], "immediate": [{"name": "type_index", "type": "varuint32"}], "description": "call a function indirect with an expected signature" }, 70 "i32.load8_s": { "category": "memory", "value": 32, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 71 "i32.load8_u": { "category": "memory", "value": 33, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 72 "i32.load16_s": { "category": "memory", "value": 34, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 73 "i32.load16_u": { "category": "memory", "value": 35, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 74 "i64.load8_s": { "category": "memory", "value": 36, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 75 "i64.load8_u": { "category": "memory", "value": 37, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 76 "i64.load16_s": { "category": "memory", "value": 38, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 77 "i64.load16_u": { "category": "memory", "value": 39, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 78 "i64.load32_s": { "category": "memory", "value": 40, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 79 "i64.load32_u": { "category": "memory", "value": 41, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 80 "i32.load": { "category": "memory", "value": 42, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 81 "i64.load": { "category": "memory", "value": 43, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 82 "f32.load": { "category": "memory", "value": 44, "return": ["f32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 83 "f64.load": { "category": "memory", "value": 45, "return": ["f64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 84 "i32.store8": { "category": "memory", "value": 46, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 85 "i32.store16": { "category": "memory", "value": 47, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 86 "i64.store8": { "category": "memory", "value": 48, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 87 "i64.store16": { "category": "memory", "value": 49, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 88 "i64.store32": { "category": "memory", "value": 50, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 89 "i32.store": { "category": "memory", "value": 51, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 90 "i64.store": { "category": "memory", "value": 52, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 91 "f32.store": { "category": "memory", "value": 53, "return": [], "parameter": ["addr", "f32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 92 "f64.store": { "category": "memory", "value": 54, "return": [], "parameter": ["addr", "f64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 93 "current_memory": { "category": "operation", "value": 59, "return": ["size"], "parameter": [], "immediate": [], "description": "query the size of memory" }, 94 "grow_memory": { "category": "operation", "value": 57, "return": ["size"], "parameter": ["size"], "immediate": [], "description": "grow the size of memory" }, 95 "i32.add": { "category": "arithmetic", "value": 64, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Add" }, 96 "i32.sub": { "category": "arithmetic", "value": 65, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Sub" }, 97 "i32.mul": { "category": "arithmetic", "value": 66, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Mul" }, 98 "i32.div_s": { "category": "arithmetic", "value": 67, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Div" }, 99 "i32.div_u": { "category": "arithmetic", "value": 68, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "UDiv" }, 100 "i32.rem_s": { "category": "arithmetic", "value": 69, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Mod" }, 101 "i32.rem_u": { "category": "arithmetic", "value": 70, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "UMod" }, 102 "i32.and": { "category": "arithmetic", "value": 71, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitAnd" }, 103 "i32.or": { "category": "arithmetic", "value": 72, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitOr" }, 104 "i32.xor": { "category": "arithmetic", "value": 73, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitXor" }, 105 "i32.shl": { "category": "arithmetic", "value": 74, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Shl" }, 106 "i32.shr_u": { "category": "arithmetic", "value": 75, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "SShr" }, 107 "i32.shr_s": { "category": "arithmetic", "value": 76, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "ZShr" }, 108 "i32.rotr": { "category": "arithmetic", "value": 182, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "RotR" }, 109 "i32.rotl": { "category": "arithmetic", "value": 183, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "RotL" }, 110 "i32.eq": { "category": "comparison", "value": 77, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Equal" }, 111 "i32.ne": { "category": "comparison", "value": 78, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "NotEqual" }, 112 "i32.lt_s": { "category": "comparison", "value": 79, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "LessThan" }, 113 "i32.le_s": { "category": "comparison", "value": 80, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "LessEqual" }, 114 "i32.lt_u": { "category": "comparison", "value": 81, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Below" }, 115 "i32.le_u": { "category": "comparison", "value": 82, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BelowEqual" }, 116 "i32.gt_s": { "category": "comparison", "value": 83, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "GreaterThan" }, 117 "i32.ge_s": { "category": "comparison", "value": 84, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "GreaterEqual" }, 118 "i32.gt_u": { "category": "comparison", "value": 85, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Above" }, 119 "i32.ge_u": { "category": "comparison", "value": 86, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "AboveEqual" }, 120 "i32.clz": { "category": "arithmetic", "value": 87, "return": ["i32"], "parameter": ["i32"], "immediate": [], "b3op": "Clz" }, 121 "i32.ctz": { "category": "arithmetic", "value": 88, "return": ["i32"], "parameter": ["i32"], "immediate": [] }, 122 "i32.popcnt": { "category": "arithmetic", "value": 89, "return": ["i32"], "parameter": ["i32"], "immediate": [] }, 123 "i32.eqz": { "category": "comparison", "value": 90, "return": ["bool"], "parameter": ["i32"], "immediate": [], "b3op": "Equal(i32(0), @0)" }, 124 "i64.add": { "category": "arithmetic", "value": 91, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Add" }, 125 "i64.sub": { "category": "arithmetic", "value": 92, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Sub" }, 126 "i64.mul": { "category": "arithmetic", "value": 93, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Mul" }, 127 "i64.div_s": { "category": "arithmetic", "value": 94, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Div" }, 128 "i64.div_u": { "category": "arithmetic", "value": 95, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "UDiv" }, 129 "i64.rem_s": { "category": "arithmetic", "value": 96, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Mod" }, 130 "i64.rem_u": { "category": "arithmetic", "value": 97, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "UDiv" }, 131 "i64.and": { "category": "arithmetic", "value": 98, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitAnd" }, 132 "i64.or": { "category": "arithmetic", "value": 99, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitOr" }, 133 "i64.xor": { "category": "arithmetic", "value": 100, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitXor" }, 134 "i64.shl": { "category": "arithmetic", "value": 101, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Shl" }, 135 "i64.shr_u": { "category": "arithmetic", "value": 102, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "SShr" }, 136 "i64.shr_s": { "category": "arithmetic", "value": 103, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "ZShr" }, 137 "i64.rotr": { "category": "arithmetic", "value": 184, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "RotR" }, 138 "i64.rotl": { "category": "arithmetic", "value": 185, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "RotL" }, 139 "i64.eq": { "category": "comparison", "value": 104, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Equal" }, 140 "i64.ne": { "category": "comparison", "value": 105, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "NotEqual" }, 141 "i64.lt_s": { "category": "comparison", "value": 106, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "LessThan" }, 142 "i64.le_s": { "category": "comparison", "value": 107, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "LessEqual" }, 143 "i64.lt_u": { "category": "comparison", "value": 108, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Below" }, 144 "i64.le_u": { "category": "comparison", "value": 109, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BelowEqual" }, 145 "i64.gt_s": { "category": "comparison", "value": 110, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "GreaterThan" }, 146 "i64.ge_s": { "category": "comparison", "value": 111, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "GreaterEqual" }, 147 "i64.gt_u": { "category": "comparison", "value": 112, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Above" }, 148 "i64.ge_u": { "category": "comparison", "value": 113, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "AboveEqual" }, 149 "i64.clz": { "category": "arithmetic", "value": 114, "return": ["i64"], "parameter": ["i64"], "immediate": [], "b3op": "Clz" }, 150 "i64.ctz": { "category": "arithmetic", "value": 115, "return": ["i64"], "parameter": ["i64"], "immediate": [] }, 151 "i64.popcnt": { "category": "arithmetic", "value": 116, "return": ["i64"], "parameter": ["i64"], "immediate": [] }, 152 "i64.eqz": { "category": "comparison", "value": 186, "return": ["bool"], "parameter": ["i64"], "immediate": [], "b3op": "Equal(i32(0), @0)" }, 153 "f32.add": { "category": "arithmetic", "value": 117, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Add" }, 154 "f32.sub": { "category": "arithmetic", "value": 118, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Sub" }, 155 "f32.mul": { "category": "arithmetic", "value": 119, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Mul" }, 156 "f32.div": { "category": "arithmetic", "value": 120, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Div" }, 157 "f32.min": { "category": "arithmetic", "value": 121, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @0, @1)" }, 158 "f32.max": { "category": "arithmetic", "value": 122, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @1, @0)" }, 159 "f32.abs": { "category": "arithmetic", "value": 123, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Abs" }, 160 "f32.neg": { "category": "arithmetic", "value": 124, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Neg" }, 161 "f32.copysign": { "category": "arithmetic", "value": 125, "return": ["f32"], "parameter": ["f32"], "immediate": [] }, 162 "f32.ceil": { "category": "arithmetic", "value": 126, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Ceil" }, 163 "f32.floor": { "category": "arithmetic", "value": 127, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Floor" }, 164 "f32.trunc": { "category": "arithmetic", "value": 128, "return": ["f32"], "parameter": ["f32"], "immediate": [] }, 165 "f32.nearest": { "category": "arithmetic", "value": 129, "return": ["f32"], "parameter": ["f32"], "immediate": [] }, 166 "f32.sqrt": { "category": "arithmetic", "value": 130, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Sqrt" }, 167 "f32.eq": { "category": "comparison", "value": 131, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Equal" }, 168 "f32.ne": { "category": "comparison", "value": 132, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "NotEqual" }, 169 "f32.lt": { "category": "comparison", "value": 133, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "LessThan" }, 170 "f32.le": { "category": "comparison", "value": 134, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "LessEqual" }, 171 "f32.gt": { "category": "comparison", "value": 135, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "GreaterThan" }, 172 "f32.ge": { "category": "comparison", "value": 136, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "GreaterEqual" }, 173 "f64.add": { "category": "arithmetic", "value": 137, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Add" }, 174 "f64.sub": { "category": "arithmetic", "value": 138, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Sub" }, 175 "f64.mul": { "category": "arithmetic", "value": 139, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Mul" }, 176 "f64.div": { "category": "arithmetic", "value": 140, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Div" }, 177 "f64.min": { "category": "arithmetic", "value": 141, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @0, @1)" }, 178 "f64.max": { "category": "arithmetic", "value": 142, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @1, @0)" }, 179 "f64.abs": { "category": "arithmetic", "value": 143, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Abs" }, 180 "f64.neg": { "category": "arithmetic", "value": 144, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Neg" }, 181 "f64.copysign": { "category": "arithmetic", "value": 145, "return": ["f64"], "parameter": ["f64"], "immediate": [] }, 182 "f64.ceil": { "category": "arithmetic", "value": 146, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Ceil" }, 183 "f64.floor": { "category": "arithmetic", "value": 147, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Floor" }, 184 "f64.trunc": { "category": "arithmetic", "value": 148, "return": ["f64"], "parameter": ["f64"], "immediate": [] }, 185 "f64.nearest": { "category": "arithmetic", "value": 149, "return": ["f64"], "parameter": ["f64"], "immediate": [] }, 186 "f64.sqrt": { "category": "arithmetic", "value": 150, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Sqrt" }, 187 "f64.eq": { "category": "comparison", "value": 151, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Equal" }, 188 "f64.ne": { "category": "comparison", "value": 152, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "NotEqual" }, 189 "f64.lt": { "category": "comparison", "value": 153, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "LessThan" }, 190 "f64.le": { "category": "comparison", "value": 154, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "LessEqual" }, 191 "f64.gt": { "category": "comparison", "value": 155, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "GreaterThan" }, 192 "f64.ge": { "category": "comparison", "value": 156, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "GreaterEqual" }, 193 "i32.trunc_s/f32": { "category": "conversion", "value": 157, "return": ["i32"], "parameter": ["f32"], "immediate": [] }, 194 "i32.trunc_s/f64": { "category": "conversion", "value": 158, "return": ["i32"], "parameter": ["f64"], "immediate": [] }, 195 "i32.trunc_u/f32": { "category": "conversion", "value": 159, "return": ["i32"], "parameter": ["f32"], "immediate": [] }, 196 "i32.trunc_u/f64": { "category": "conversion", "value": 160, "return": ["i32"], "parameter": ["f64"], "immediate": [] }, 197 "i32.wrap/i64": { "category": "conversion", "value": 161, "return": ["i32"], "parameter": ["i64"], "immediate": [] }, 198 "i64.trunc_s/f32": { "category": "conversion", "value": 162, "return": ["i64"], "parameter": ["f32"], "immediate": [] }, 199 "i64.trunc_s/f64": { "category": "conversion", "value": 163, "return": ["i64"], "parameter": ["f64"], "immediate": [] }, 200 "i64.trunc_u/f32": { "category": "conversion", "value": 164, "return": ["i64"], "parameter": ["f32"], "immediate": [] }, 201 "i64.trunc_u/f64": { "category": "conversion", "value": 165, "return": ["i64"], "parameter": ["f64"], "immediate": [] }, 202 "i64.extend_s/i32": { "category": "conversion", "value": 166, "return": ["i64"], "parameter": ["i32"], "immediate": [], "b3op": "SExt32" }, 203 "i64.extend_u/i32": { "category": "conversion", "value": 167, "return": ["i64"], "parameter": ["i32"], "immediate": [], "b3op": "ZExt32" }, 204 "f32.convert_s/i32": { "category": "conversion", "value": 168, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "IToF" }, 205 "f32.convert_u/i32": { "category": "conversion", "value": 169, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "IToF(ZExt32(@0))" }, 206 "f32.convert_s/i64": { "category": "conversion", "value": 170, "return": ["f32"], "parameter": ["i64"], "immediate": [], "b3op": "IToF" }, 207 "f32.convert_u/i64": { "category": "conversion", "value": 171, "return": ["f32"], "parameter": ["i64"], "immediate": [] }, 208 "f32.demote/f64": { "category": "conversion", "value": 172, "return": ["f32"], "parameter": ["f64"], "immediate": [], "b3op": "DoubleToFloat"}, 209 "f32.reinterpret/i32": { "category": "conversion", "value": 173, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "BitwiseCast" }, 210 "f64.convert_s/i32": { "category": "conversion", "value": 174, "return": ["f64"], "parameter": ["i32"], "immediate": [], "b3op": "IToD" }, 211 "f64.convert_u/i32": { "category": "conversion", "value": 175, "return": ["f64"], "parameter": ["i32"], "immediate": [], "b3op": "IToD(ZExt32(@0))" }, 212 "f64.convert_s/i64": { "category": "conversion", "value": 176, "return": ["f64"], "parameter": ["i64"], "immediate": [], "b3op": "IToD" }, 213 "f64.convert_u/i64": { "category": "conversion", "value": 177, "return": ["f64"], "parameter": ["i64"], "immediate": [] }, 214 "f64.promote/f32": { "category": "conversion", "value": 178, "return": ["f64"], "parameter": ["f32"], "immediate": [], "b3op": "FloatToDouble"}, 215 "f64.reinterpret/i64": { "category": "conversion", "value": 179, "return": ["f64"], "parameter": ["i64"], "immediate": [], "b3op": "BitwiseCast" }, 216 "i32.reinterpret/f32": { "category": "conversion", "value": 180, "return": ["i32"], "parameter": ["f32"], "immediate": [], "b3op": "BitwiseCast" }, 217 "i64.reinterpret/f64": { "category": "conversion", "value": 181, "return": ["i64"], "parameter": ["f64"], "immediate": [], "b3op": "BitwiseCast" } 216 218 } 217 219 } -
trunk/Source/JavaScriptCore/ChangeLog
r209232 r209242 1 2016-12-02 JF Bastien <jfbastien@apple.com> 2 3 WebAssembly: revert patch causing odd breakage 4 https://bugs.webkit.org/show_bug.cgi?id=165308 5 6 Unreviewed. 7 8 Bug #164724 seems to cause build issues which I haven't tracked down yet. WasmOps.h can't be found: 9 ./Source/JavaScriptCore/wasm/WasmFormat.h:34:10: fatal error: 'WasmOps.h' file not found 10 11 It's weird since the file is auto-generated and has been for a while. #164724 merely includes it in WasmFormat.h. 12 13 * wasm/WasmB3IRGenerator.cpp: 14 (JSC::Wasm::B3IRGenerator::B3IRGenerator): 15 (JSC::Wasm::B3IRGenerator::zeroForType): 16 (JSC::Wasm::B3IRGenerator::addConstant): 17 (JSC::Wasm::createJSWrapper): 18 * wasm/WasmCallingConvention.h: 19 (JSC::Wasm::CallingConvention::marshallArgument): 20 * wasm/WasmFormat.cpp: 21 (JSC::Wasm::toString): 22 * wasm/WasmFormat.h: 23 (JSC::Wasm::toB3Type): 24 * wasm/WasmFunctionParser.h: 25 (JSC::Wasm::FunctionParser<Context>::parseExpression): 26 * wasm/WasmModuleParser.cpp: 27 (JSC::Wasm::ModuleParser::parse): 28 (JSC::Wasm::ModuleParser::parseType): 29 * wasm/WasmModuleParser.h: 30 * wasm/WasmParser.h: 31 (JSC::Wasm::Parser::parseResultType): 32 * wasm/generateWasm.py: 33 (Wasm.__init__): 34 * wasm/generateWasmOpsHeader.py: 35 (cppMacro): 36 (opcodeMacroizer): 37 (typeMacroizer): Deleted. 38 * wasm/js/WebAssemblyFunction.cpp: 39 (JSC::callWebAssemblyFunction): 40 * wasm/wasm.json: 41 1 42 2016-12-01 Brian Burg <bburg@apple.com> 2 43 … … 380 421 (JSC::ProgramExecutable::initializeGlobalProperties): 381 422 * runtime/ProgramExecutable.h: 382 383 2016-11-30 JF Bastien <jfbastien@apple.com>384 385 WebAssembly: update binary format to 0xD version386 https://bugs.webkit.org/show_bug.cgi?id=164724387 388 Reviewed by Saam Barati.389 390 As described in the following PR: https://github.com/WebAssembly/design/pull/836391 392 * wasm/WasmB3IRGenerator.cpp:393 (JSC::Wasm::B3IRGenerator::B3IRGenerator):394 (JSC::Wasm::B3IRGenerator::zeroForType):395 (JSC::Wasm::B3IRGenerator::addConstant):396 (JSC::Wasm::createJSWrapper):397 * wasm/WasmCallingConvention.h:398 (JSC::Wasm::CallingConvention::marshallArgument):399 * wasm/WasmFormat.cpp:400 (JSC::Wasm::toString): Deleted.401 * wasm/WasmFormat.h:402 (JSC::Wasm::isValueType):403 (JSC::Wasm::toB3Type): Deleted.404 * wasm/WasmFunctionParser.h:405 (JSC::Wasm::FunctionParser<Context>::parseExpression):406 * wasm/WasmModuleParser.cpp:407 (JSC::Wasm::ModuleParser::parse):408 (JSC::Wasm::ModuleParser::parseType):409 * wasm/WasmModuleParser.h:410 * wasm/WasmParser.h:411 (JSC::Wasm::Parser::parseResultType):412 * wasm/generateWasm.py:413 (Wasm.__init__):414 * wasm/generateWasmOpsHeader.py:415 (cppMacro):416 (typeMacroizer):417 (opcodeMacroizer):418 * wasm/wasm.json:419 423 420 424 2016-11-30 Darin Adler <darin@apple.com> -
trunk/Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp
r209204 r209242 187 187 GPRReg m_memoryBaseGPR; 188 188 GPRReg m_memorySizeGPR; 189 Value* m_zeroValues[ numTypes];189 Value* m_zeroValues[Type::LastValueType]; 190 190 }; 191 191 … … 197 197 m_currentBlock = m_proc.addBlock(); 198 198 199 for (unsigned i = 0; i < numTypes; ++i) { 200 switch (B3::Type b3Type = toB3Type(linearizedToType(i))) { 201 case B3::Int32: 202 case B3::Int64: 203 case B3::Float: 204 case B3::Double: 205 m_zeroValues[i] = m_currentBlock->appendIntConstant(m_proc, Origin(), b3Type, 0); 206 break; 207 case B3::Void: 208 m_zeroValues[i] = nullptr; 209 break; 210 } 211 } 199 for (unsigned i = 0; i < Type::LastValueType; ++i) 200 m_zeroValues[i] = m_currentBlock->appendIntConstant(m_proc, Origin(), toB3Type(static_cast<Type>(i + 1)), 0); 212 201 213 202 if (m_memory) { … … 230 219 { 231 220 ASSERT(type != Void); 232 Value* zeroValue = m_zeroValues[linearizeType(type)]; 233 ASSERT(zeroValue); 234 return zeroValue; 221 return m_zeroValues[type - 1]; 235 222 } 236 223 … … 455 442 { 456 443 switch (type) { 457 case Wasm::I32:444 case Int32: 458 445 return m_currentBlock->appendNew<Const32Value>(m_proc, Origin(), static_cast<int32_t>(value)); 459 case Wasm::I64:446 case Int64: 460 447 return m_currentBlock->appendNew<Const64Value>(m_proc, Origin(), value); 461 case Wasm::F32:448 case Float: 462 449 return m_currentBlock->appendNew<ConstFloatValue>(m_proc, Origin(), bitwise_cast<float>(static_cast<int32_t>(value))); 463 case Wasm::F64:450 case Double: 464 451 return m_currentBlock->appendNew<ConstDoubleValue>(m_proc, Origin(), bitwise_cast<double>(value)); 465 case Wasm::Void: 466 case Wasm::Func: 467 case Wasm::Anyfunc: 468 break; 469 } 470 RELEASE_ASSERT_NOT_REACHED(); 471 return nullptr; 452 default: 453 RELEASE_ASSERT_NOT_REACHED(); 454 return nullptr; 455 } 472 456 } 473 457 … … 718 702 // Return the result, if needed. 719 703 switch (signature->returnType) { 720 case Wasm::Void:704 case Void: 721 705 block->appendNewControlValue(proc, B3::Return, Origin()); 722 706 break; 723 case Wasm::F32:724 case Wasm::F64:707 case F32: 708 case F64: 725 709 result = block->appendNew<Value>(proc, BitwiseCast, Origin(), result); 726 710 FALLTHROUGH; 727 case Wasm::I32:728 case Wasm::I64:711 case I32: 712 case I64: 729 713 block->appendNewControlValue(proc, B3::Return, Origin(), result); 730 714 break; 731 case Wasm::Func:732 case Wasm::Anyfunc:733 RELEASE_ASSERT_NOT_REACHED();734 715 } 735 716 -
trunk/Source/JavaScriptCore/wasm/WasmCallingConvention.h
r209175 r209242 77 77 case B3::Double: 78 78 return marshallArgumentImpl(m_fprArgs, type, fpArgumentCount, stackOffset); 79 case B3::Void:79 case Void: 80 80 break; 81 81 } -
trunk/Source/JavaScriptCore/wasm/WasmFormat.cpp
r209175 r209242 32 32 #include "WasmMemory.h" 33 33 34 #if COMPILER(GCC) && ASSERT_DISABLED 35 #pragma GCC diagnostic push 36 #pragma GCC diagnostic ignored "-Wreturn-type" 37 #endif // COMPILER(GCC) && ASSERT_DISABLED 38 34 39 namespace JSC { namespace Wasm { 40 41 const char* toString(Type type) 42 { 43 switch (type) { 44 case Void: 45 return "void"; 46 case I32: 47 return "i32"; 48 case I64: 49 return "i64"; 50 case F32: 51 return "f32"; 52 case F64: 53 return "f64"; 54 } 55 } 35 56 36 57 ModuleInformation::~ModuleInformation() { } … … 38 59 } } // namespace JSC::Wasm 39 60 61 #if COMPILER(GCC) && ASSERT_DISABLED 62 #pragma GCC diagnostic pop 63 #endif // COMPILER(GCC) && ASSERT_DISABLED 64 40 65 #endif // ENABLE(WEBASSEMBLY) -
trunk/Source/JavaScriptCore/wasm/WasmFormat.h
r209175 r209242 32 32 #include "CodeLocation.h" 33 33 #include "Identifier.h" 34 #include "WasmOps.h"35 34 #include <wtf/Vector.h> 36 35 … … 40 39 41 40 namespace Wasm { 41 42 enum Type : uint8_t { 43 Void, 44 I32, 45 I64, 46 F32, 47 F64, 48 LastValueType = F64, 49 }; 50 51 static_assert(I32 == 1, "Wasm needs I32 to have the value 1"); 52 static_assert(I64 == 2, "Wasm needs I64 to have the value 2"); 53 static_assert(F32 == 3, "Wasm needs F32 to have the value 3"); 54 static_assert(F64 == 4, "Wasm needs F64 to have the value 4"); 55 56 inline B3::Type toB3Type(Type type) 57 { 58 switch (type) { 59 case I32: return B3::Int32; 60 case I64: return B3::Int64; 61 case F32: return B3::Float; 62 case F64: return B3::Double; 63 case Void: return B3::Void; 64 default: break; 65 } 66 RELEASE_ASSERT_NOT_REACHED(); 67 } 42 68 43 69 inline bool isValueType(Type type) … … 54 80 return false; 55 81 } 82 83 const char* toString(Type); 56 84 57 85 struct External { 58 86 enum Kind : uint8_t { 59 // FIXME auto-generate this. https://bugs.webkit.org/show_bug.cgi?id=16523160 87 Function = 0, 61 88 Table = 1, -
trunk/Source/JavaScriptCore/wasm/WasmFunctionParser.h
r209204 r209242 208 208 { 209 209 switch (op) { 210 #define CREATE_CASE(name, id, b3op , inc) case OpType::name: return binaryCase<OpType::name>();210 #define CREATE_CASE(name, id, b3op) case OpType::name: return binaryCase<OpType::name>(); 211 211 FOR_EACH_WASM_SIMPLE_BINARY_OP(CREATE_CASE) 212 212 #undef CREATE_CASE … … 214 214 case OpType::F32ConvertUI64: return unaryCase<OpType::F32ConvertUI64>(); 215 215 case OpType::F64ConvertUI64: return unaryCase<OpType::F64ConvertUI64>(); 216 #define CREATE_CASE(name, id, b3op , inc) case OpType::name: return unaryCase<OpType::name>();216 #define CREATE_CASE(name, id, b3op) case OpType::name: return unaryCase<OpType::name>(); 217 217 FOR_EACH_WASM_SIMPLE_UNARY_OP(CREATE_CASE) 218 218 #undef CREATE_CASE … … 239 239 } 240 240 241 #define CREATE_CASE(name, id, b3op , inc) case OpType::name:241 #define CREATE_CASE(name, id, b3op) case OpType::name: 242 242 FOR_EACH_WASM_MEMORY_LOAD_OP(CREATE_CASE) { 243 243 uint32_t alignment; -
trunk/Source/JavaScriptCore/wasm/WasmModuleParser.cpp
r209175 r209242 55 55 } 56 56 57 // Skip the version number for now since we don't do anything with it. 57 58 uint32_t versionNumber; 58 59 if (!parseUInt32(versionNumber)) { … … 62 63 } 63 64 64 if (versionNumber != expectedVersionNumber) {65 if (versionNumber != magicNumber) { 65 66 // FIXME improve error message https://bugs.webkit.org/show_bug.cgi?id=163919 66 67 m_errorMessage = "unexpected version number"; … … 169 170 if (!parseInt7(type)) 170 171 return false; 171 if (type != Func)172 if (type != -0x20) // Function type constant. FIXME auto-generate from JSON file. 172 173 return false; 173 174 -
trunk/Source/JavaScriptCore/wasm/WasmModuleParser.h
r209175 r209242 38 38 public: 39 39 40 static const unsigned magicNumber = 0xc; 41 40 42 ModuleParser(VM* vm, const uint8_t* sourceBuffer, size_t sourceLength) 41 43 : Parser(sourceBuffer, sourceLength) -
trunk/Source/JavaScriptCore/wasm/WasmParser.h
r209175 r209242 170 170 ALWAYS_INLINE bool Parser::parseResultType(Type& result) 171 171 { 172 int8_t value;173 if (!parse Int7(value))172 uint8_t value; 173 if (!parseUInt7(value)) 174 174 return false; 175 if ( !isValidType(value))175 if (value > static_cast<uint8_t>(Type::LastValueType)) 176 176 return false; 177 177 result = static_cast<Type>(value); -
trunk/Source/JavaScriptCore/wasm/generateWasm.py
r209175 r209242 34 34 wasm = json.load(open(jsonPath, "r")) 35 35 wasmFile.close() 36 for pre in wasm["preamble"]:37 if pre["name"] == "version":38 self.expectedVersionNumber = str(pre["value"])39 self.preamble = wasm["preamble"]40 self.types = wasm["type"]41 36 self.opcodes = wasm["opcode"] 42 37 self.header = """/* -
trunk/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py
r209175 r209242 36 36 37 37 wasm = Wasm(args[0], args[1]) 38 types = wasm.types39 38 opcodes = wasm.opcodes 40 39 wasmOpsHFile = open(args[2], "w") 41 40 42 41 43 def cppMacro(wasmOpcode, value, b3, inc): 44 return " \\\n macro(" + wasm.toCpp(wasmOpcode) + ", " + hex(int(value)) + ", " + b3 + ", " + str(inc) + ")" 45 46 47 def typeMacroizer(): 48 inc = 0 49 for ty in wasm.types: 50 yield cppMacro(ty, wasm.types[ty]["value"], wasm.types[ty]["b3type"], inc) 51 inc += 1 52 53 type_definitions = ["#define FOR_EACH_WASM_TYPE(macro)"] 54 type_definitions.extend([t for t in typeMacroizer()]) 55 type_definitions = "".join(type_definitions) 42 def cppMacro(wasmOpcode, value, b3Opcode): 43 return " \\\n macro(" + wasm.toCpp(wasmOpcode) + ", " + hex(int(value)) + ", " + b3Opcode + ")" 56 44 57 45 58 46 def opcodeMacroizer(filter): 59 inc = 060 47 for op in wasm.opcodeIterator(filter): 61 48 b3op = "Oops" 62 49 if isSimple(op["opcode"]): 63 50 b3op = op["opcode"]["b3op"] 64 yield cppMacro(op["name"], op["opcode"]["value"], b3op, inc) 65 inc += 1 51 yield cppMacro(op["name"], op["opcode"]["value"], b3op) 66 52 67 53 defines = ["#define FOR_EACH_WASM_SPECIAL_OP(macro)"] … … 116 102 namespace JSC { namespace Wasm { 117 103 118 static constexpr unsigned expectedVersionNumber = """ + wasm.expectedVersionNumber + """;119 120 static constexpr unsigned numTypes = """ + str(len(types)) + """;121 122 """ + type_definitions + """123 #define CREATE_ENUM_VALUE(name, id, b3type, inc) name = id,124 enum Type : int8_t {125 FOR_EACH_WASM_TYPE(CREATE_ENUM_VALUE)126 };127 #undef CREATE_ENUM_VALUE128 129 #define CREATE_CASE(name, id, b3type, inc) case id: return true;130 template <typename Int>131 inline bool isValidType(Int i)132 {133 switch (i) {134 default: return false;135 FOR_EACH_WASM_TYPE(CREATE_CASE)136 }137 RELEASE_ASSERT_NOT_REACHED();138 return false;139 }140 #undef CREATE_CASE141 142 #define CREATE_CASE(name, id, b3type, inc) case name: return b3type;143 inline B3::Type toB3Type(Type type)144 {145 switch (type) {146 FOR_EACH_WASM_TYPE(CREATE_CASE)147 }148 RELEASE_ASSERT_NOT_REACHED();149 return B3::Void;150 }151 #undef CREATE_CASE152 153 #define CREATE_CASE(name, id, b3type, inc) case name: return "name";154 inline const char* toString(Type type)155 {156 switch (type) {157 FOR_EACH_WASM_TYPE(CREATE_CASE)158 }159 RELEASE_ASSERT_NOT_REACHED();160 return nullptr;161 }162 #undef CREATE_CASE163 164 #define CREATE_CASE(name, id, b3type, inc) case id: return inc;165 inline int linearizeType(Type type)166 {167 switch (type) {168 FOR_EACH_WASM_TYPE(CREATE_CASE)169 }170 RELEASE_ASSERT_NOT_REACHED();171 return 0;172 }173 #undef CREATE_CASE174 175 #define CREATE_CASE(name, id, b3type, inc) case inc: return name;176 inline Type linearizedToType(int i)177 {178 switch (i) {179 FOR_EACH_WASM_TYPE(CREATE_CASE)180 }181 RELEASE_ASSERT_NOT_REACHED();182 return Void;183 }184 #undef CREATE_CASE185 186 187 104 """ + defines + """ 188 105 #define FOR_EACH_WASM_OP(macro) \\ … … 194 111 FOR_EACH_WASM_MEMORY_STORE_OP(macro) 195 112 196 #define CREATE_ENUM_VALUE(name, id, b3op , inc) name = id,113 #define CREATE_ENUM_VALUE(name, id, b3op) name = id, 197 114 198 115 enum OpType : uint8_t { … … 229 146 { 230 147 switch (op) { 231 #define CREATE_CASE(name, id, b3op , inc) case OpType::name:148 #define CREATE_CASE(name, id, b3op) case OpType::name: 232 149 FOR_EACH_WASM_CONTROL_FLOW_OP(CREATE_CASE) 233 150 return true; … … 242 159 { 243 160 switch (op) { 244 #define CREATE_CASE(name, id, b3op , inc) case UnaryOpType::name:161 #define CREATE_CASE(name, id, b3op) case UnaryOpType::name: 245 162 FOR_EACH_WASM_SIMPLE_UNARY_OP(CREATE_CASE) 246 163 return true; … … 255 172 { 256 173 switch (op) { 257 #define CREATE_CASE(name, id, b3op , inc) case BinaryOpType::name:174 #define CREATE_CASE(name, id, b3op) case BinaryOpType::name: 258 175 FOR_EACH_WASM_SIMPLE_BINARY_OP(CREATE_CASE) 259 176 return true; -
trunk/Source/JavaScriptCore/wasm/js/WebAssemblyFunction.cpp
r209229 r209242 64 64 JSValue arg = exec->uncheckedArgument(argIndex); 65 65 switch (signature->arguments[argIndex]) { 66 case Wasm::Void: 67 case Wasm::I64: 68 RELEASE_ASSERT_NOT_REACHED(); 69 break; 66 70 case Wasm::I32: 67 71 arg = JSValue::decode(arg.toInt32(exec)); … … 73 77 arg = JSValue::decode(bitwise_cast<uint64_t>(arg.toNumber(exec))); 74 78 break; 75 case Wasm::Void:76 case Wasm::I64:77 case Wasm::Func:78 case Wasm::Anyfunc:79 RELEASE_ASSERT_NOT_REACHED();80 79 } 81 80 RETURN_IF_EXCEPTION(scope, encodedJSValue()); … … 101 100 case Wasm::Void: 102 101 return JSValue::encode(jsUndefined()); 102 case Wasm::I64: 103 RELEASE_ASSERT_NOT_REACHED(); 103 104 case Wasm::I32: 104 105 return JSValue::encode(JSValue(static_cast<int32_t>(rawResult))); … … 107 108 case Wasm::F64: 108 109 return JSValue::encode(JSValue(bitwise_cast<double>(rawResult))); 109 case Wasm::I64:110 case Wasm::Func:111 case Wasm::Anyfunc:112 break;113 110 } 114 111 115 112 RELEASE_ASSERT_NOT_REACHED(); 116 return EncodedJSValue();117 113 } 118 114 -
trunk/Source/JavaScriptCore/wasm/wasm.json
r209204 r209242 1 1 { 2 2 "comments": ["This file describes the WebAssembly ISA.", 3 "Scripts in this folder auto-generate C++ code for JavaScriptCore as well as the testing DSL which WebKit's WebAssembly tests use." 3 "Scripts in this folder auto-generate C++ code for JavaScriptCore as well as the testing DSL which WebKit's WebAssembly tests use.", 4 "When you update this file you need to re-generate the C++ code: jsc ./JSTests/stress/wasm/generate-wasmops-header.js > ./Source/JavaScriptCore/wasm/WASMOps.h" 4 5 ], 5 6 "preamble": [ 6 7 { "name": "magic number", "type": "uint32", "value": 1836278016, "description": "NULL character followed by 'asm'" }, 7 { "name": "version", "type": "uint32", "value": 1 3, "description": "Version number, will be reset to 1 for MVP" }8 { "name": "version", "type": "uint32", "value": 12, "description": "Version number, will be reset to 1 for MVP" } 8 9 ], 9 "type" : { 10 "i32": { "type": "varint7", "value": -1, "b3type": "B3::Int32" }, 11 "i64": { "type": "varint7", "value": -2, "b3type": "B3::Int64" }, 12 "f32": { "type": "varint7", "value": -3, "b3type": "B3::Float" }, 13 "f64": { "type": "varint7", "value": -4, "b3type": "B3::Double" }, 14 "anyfunc": { "type": "varint7", "value": -16, "b3type": "B3::Void" }, 15 "func": { "type": "varint7", "value": -32, "b3type": "B3::Void" }, 16 "void": { "type": "varint7", "value": -64, "b3type": "B3::Void" } 17 }, 18 "value_type": ["i32", "i64", "f32", "f64"], 19 "block_type": ["i32", "i64", "f32", "f64", "void"], 20 "elem_type": ["anyfunc"], 10 "value_type" : { 11 "i32": { "type": "uint8", "value": 1 }, 12 "i64": { "type": "uint8", "value": 2 }, 13 "f32": { "type": "uint8", "value": 3 }, 14 "f64": { "type": "uint8", "value": 4 } 15 }, 16 "inline_signature_type" : { 17 "void": { "type": "uint8", "value": 0 }, 18 "i32": { "type": "uint8", "value": 1 }, 19 "i64": { "type": "uint8", "value": 2 }, 20 "f32": { "type": "uint8", "value": 3 }, 21 "f64": { "type": "uint8", "value": 4 } 22 }, 21 23 "external_kind": { 22 24 "Function": { "type": "uint8", "value": 0 }, … … 40 42 "opcode": { 41 43 "unreachable": { "category": "control", "value": 0, "return": [], "parameter": [], "immediate": [], "description": "trap immediately" }, 42 "block": { "category": "control", "value": 2, "return": ["control"], "parameter": [], "immediate": [{"name": "sig", "type": "block_type"}],"description": "begin a sequence of expressions, yielding 0 or 1 values" },43 "loop": { "category": "control", "value": 3, "return": ["control"], "parameter": [], "immediate": [{"name": "sig", "type": "block_type"}],"description": "begin a block which can also form control flow loops" },44 "if": { "category": "control", "value": 4, "return": ["control"], "parameter": ["bool"], "immediate": [{"name": "sig", "type": "block_type"}],"description": "begin if expression" },45 "else": { "category": "control", "value": 5, "return": ["control"], "parameter": [], "immediate": [], "description": "begin else expression of if" },46 "select": { "category": "control", "value": 27, "return": ["prev"], "parameter": ["any", "prev", "bool"], "immediate": [], "description": "select one of two values based on condition" },47 "br": { "category": "control", "value": 12, "return": [], "parameter": [], "immediate": [{"name": "relative_depth", "type": "varuint32"}], "description": "break that targets an outer nested block" },48 "br_if": { "category": "control", "value": 13, "return": [], "parameter": [], "immediate": [{"name": "relative_depth", "type": "varuint32"}], "description": "conditional break that targets an outer nested block" },49 "br_table": { "category": "control", "value": 14, "return": [], "parameter": [], "immediate": [{"name": "target_count", "type": "varuint32", "description": "number of entries in the target_table"},44 "block": { "category": "control", "value": 1, "return": ["control"], "parameter": [], "immediate": [{"name": "sig", "type": "inline_signature_type"}], "description": "begin a sequence of expressions, yielding 0 or 1 values" }, 45 "loop": { "category": "control", "value": 2, "return": ["control"], "parameter": [], "immediate": [{"name": "sig", "type": "inline_signature_type"}], "description": "begin a block which can also form control flow loops" }, 46 "if": { "category": "control", "value": 3, "return": ["control"], "parameter": ["bool"], "immediate": [{"name": "sig", "type": "inline_signature_type"}], "description": "begin if expression" }, 47 "else": { "category": "control", "value": 4, "return": ["control"], "parameter": [], "immediate": [], "description": "begin else expression of if" }, 48 "select": { "category": "control", "value": 5, "return": ["prev"], "parameter": ["any", "prev", "bool"], "immediate": [], "description": "select one of two values based on condition" }, 49 "br": { "category": "control", "value": 6, "return": [], "parameter": [], "immediate": [{"name": "relative_depth", "type": "varuint32"}], "description": "break that targets an outer nested block" }, 50 "br_if": { "category": "control", "value": 7, "return": [], "parameter": [], "immediate": [{"name": "relative_depth", "type": "varuint32"}], "description": "conditional break that targets an outer nested block" }, 51 "br_table": { "category": "control", "value": 8, "return": [], "parameter": [], "immediate": [{"name": "target_count", "type": "varuint32", "description": "number of entries in the target_table"}, 50 52 {"name": "target_table", "type": "varuint32*", "description": "target entries that indicate an outer block or loop to which to break"}, 51 53 {"name": "default_target", "type": "varuint32", "description": "an outer block or loop to which to break in the default case"}], 52 54 "description": "branch table control flow construct" }, 53 "return": { "category": "control", "value": 15, "return": [], "parameter": [], "immediate": [], "description": "return zero or one value from this function" },54 "drop": { "category": "control", "value": 26, "return": [], "parameter": ["any"], "immediate": [], "description": "ignore value" },55 "nop": { "category": "control", "value": 1, "return": [], "parameter": [], "immediate": [], "description": "no operation" },56 "end": { "category": "control", "value": 1 1, "return": [], "parameter": [], "immediate": [], "description": "end a block, loop, or if" },57 "i32.const": { "category": "special", "value": 65, "return": ["i32"], "parameter": [], "immediate": [{"name": "value", "type": "varint32"}], "description": "a constant value interpreted as i32" },58 "i64.const": { "category": "special", "value": 66, "return": ["i64"], "parameter": [], "immediate": [{"name": "value", "type": "varint64"}], "description": "a constant value interpreted as i64" },59 "f64.const": { "category": "special", "value": 68, "return": ["f64"], "parameter": [], "immediate": [{"name": "value", "type": "uint64"}], "description": "a constant value interpreted as f64" },60 "f32.const": { "category": "special", "value": 67, "return": ["f32"], "parameter": [], "immediate": [{"name": "value", "type": "uint32"}], "description": "a constant value interpreted as f32" },61 "get_local": { "category": "special", "value": 32, "return": ["local"], "parameter": [], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "read a local variable or parameter" },62 "set_local": { "category": "special", "value": 33, "return": [], "parameter": ["local"], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "write a local variable or parameter" },63 "tee_local": { "category": "special", "value": 34, "return": ["prev"], "parameter": ["any"], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "write a local variable or parameter and return the same value" },64 "get_global": { "category": "special", "value": 35, "return": ["global"], "parameter": [], "immediate": [{"name": "global_index", "type": "varuint32"}], "description": "read a global variable" },65 "set_global": { "category": "special", "value": 36, "return": [""], "parameter": ["global"], "immediate": [{"name": "global_index", "type": "varuint32"}], "description": "write a global variable" },66 "call": { "category": "call", "value": 16, "return": ["call"], "parameter": ["call"], "immediate": [{"name": "function_index", "type": "varuint32"}], "description": "call a function by its index" },67 "call_indirect": { "category": "call", "value": 17, "return": ["call"], "parameter": ["call"], "immediate": [{"name": "type_index", "type": "varuint32"}], "description": "call a function indirect with an expected signature" },68 "i32.load8_s": { "category": "memory", "value": 44, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },69 "i32.load8_u": { "category": "memory", "value": 45, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },70 "i32.load16_s": { "category": "memory", "value": 46, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },71 "i32.load16_u": { "category": "memory", "value": 47, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },72 "i64.load8_s": { "category": "memory", "value": 48, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },73 "i64.load8_u": { "category": "memory", "value": 49, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },74 "i64.load16_s": { "category": "memory", "value": 50, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },75 "i64.load16_u": { "category": "memory", "value": 51, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },76 "i64.load32_s": { "category": "memory", "value": 52, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },77 "i64.load32_u": { "category": "memory", "value": 53, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },78 "i32.load": { "category": "memory", "value": 4 0, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },79 "i64.load": { "category": "memory", "value": 4 1, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },80 "f32.load": { "category": "memory", "value": 4 2, "return": ["f32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },81 "f64.load": { "category": "memory", "value": 4 3, "return": ["f64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" },82 "i32.store8": { "category": "memory", "value": 58, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },83 "i32.store16": { "category": "memory", "value": 59, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },84 "i64.store8": { "category": "memory", "value": 60, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },85 "i64.store16": { "category": "memory", "value": 61, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },86 "i64.store32": { "category": "memory", "value": 62, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },87 "i32.store": { "category": "memory", "value": 5 4, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },88 "i64.store": { "category": "memory", "value": 5 5, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },89 "f32.store": { "category": "memory", "value": 5 6, "return": [], "parameter": ["addr", "f32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },90 "f64.store": { "category": "memory", "value": 5 7, "return": [], "parameter": ["addr", "f64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" },91 "current_memory": { "category": "operation", "value": 63, "return": ["size"], "parameter": [], "immediate": [], "description": "query the size of memory" },92 "grow_memory": { "category": "operation", "value": 64, "return": ["size"], "parameter": ["size"], "immediate": [], "description": "grow the size of memory" },93 "i32.add": { "category": "arithmetic", "value": 106, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Add" },94 "i32.sub": { "category": "arithmetic", "value": 107, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Sub" },95 "i32.mul": { "category": "arithmetic", "value": 108, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Mul" },96 "i32.div_s": { "category": "arithmetic", "value": 109, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Div" },97 "i32.div_u": { "category": "arithmetic", "value": 110, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "UDiv" },98 "i32.rem_s": { "category": "arithmetic", "value": 111, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Mod" },99 "i32.rem_u": { "category": "arithmetic", "value": 112, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "UMod" },100 "i32.and": { "category": "arithmetic", "value": 113, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitAnd" },101 "i32.or": { "category": "arithmetic", "value": 114, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitOr" },102 "i32.xor": { "category": "arithmetic", "value": 115, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitXor" },103 "i32.shl": { "category": "arithmetic", "value": 116, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Shl" },104 "i32.shr_u": { "category": "arithmetic", "value": 118, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "SShr" },105 "i32.shr_s": { "category": "arithmetic", "value": 117, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "ZShr" },106 "i32.rotr": { "category": "arithmetic", "value": 1 20, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "RotR" },107 "i32.rotl": { "category": "arithmetic", "value": 1 19, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "RotL" },108 "i32.eq": { "category": "comparison", "value": 7 0, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Equal" },109 "i32.ne": { "category": "comparison", "value": 7 1, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "NotEqual" },110 "i32.lt_s": { "category": "comparison", "value": 7 2, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "LessThan" },111 "i32.le_s": { "category": "comparison", "value": 76, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "LessEqual" },112 "i32.lt_u": { "category": "comparison", "value": 73, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Below" },113 "i32.le_u": { "category": "comparison", "value": 77, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BelowEqual" },114 "i32.gt_s": { "category": "comparison", "value": 74, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "GreaterThan" },115 "i32.ge_s": { "category": "comparison", "value": 78, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "GreaterEqual" },116 "i32.gt_u": { "category": "comparison", "value": 75, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Above" },117 "i32.ge_u": { "category": "comparison", "value": 79, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "AboveEqual" },118 "i32.clz": { "category": "arithmetic", "value": 103, "return": ["i32"], "parameter": ["i32"], "immediate": [], "b3op": "Clz" },119 "i32.ctz": { "category": "arithmetic", "value": 104, "return": ["i32"], "parameter": ["i32"], "immediate": [] },120 "i32.popcnt": { "category": "arithmetic", "value": 105, "return": ["i32"], "parameter": ["i32"], "immediate": [] },121 "i32.eqz": { "category": "comparison", "value": 69, "return": ["bool"], "parameter": ["i32"], "immediate": [], "b3op": "Equal(i32(0), @0)" },122 "i64.add": { "category": "arithmetic", "value": 124, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Add" },123 "i64.sub": { "category": "arithmetic", "value": 125, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Sub" },124 "i64.mul": { "category": "arithmetic", "value": 126, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Mul" },125 "i64.div_s": { "category": "arithmetic", "value": 127, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Div" },126 "i64.div_u": { "category": "arithmetic", "value": 128, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "UDiv" },127 "i64.rem_s": { "category": "arithmetic", "value": 129, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Mod" },128 "i64.rem_u": { "category": "arithmetic", "value": 130, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "UDiv" },129 "i64.and": { "category": "arithmetic", "value": 131, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitAnd" },130 "i64.or": { "category": "arithmetic", "value": 132, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitOr" },131 "i64.xor": { "category": "arithmetic", "value": 1 33, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitXor" },132 "i64.shl": { "category": "arithmetic", "value": 1 34, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Shl" },133 "i64.shr_u": { "category": "arithmetic", "value": 1 36, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "SShr" },134 "i64.shr_s": { "category": "arithmetic", "value": 1 35, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "ZShr" },135 "i64.rotr": { "category": "arithmetic", "value": 1 38, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "RotR" },136 "i64.rotl": { "category": "arithmetic", "value": 1 37, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "RotL" },137 "i64.eq": { "category": "comparison", "value": 81, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Equal" },138 "i64.ne": { "category": "comparison", "value": 82, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "NotEqual" },139 "i64.lt_s": { "category": "comparison", "value": 83, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "LessThan" },140 "i64.le_s": { "category": "comparison", "value": 87, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "LessEqual" },141 "i64.lt_u": { "category": "comparison", "value": 84, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Below" },142 "i64.le_u": { "category": "comparison", "value": 88, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BelowEqual" },143 "i64.gt_s": { "category": "comparison", "value": 85, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "GreaterThan" },144 "i64.ge_s": { "category": "comparison", "value": 89, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "GreaterEqual" },145 "i64.gt_u": { "category": "comparison", "value": 86, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Above" },146 "i64.ge_u": { "category": "comparison", "value": 90, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "AboveEqual" },147 "i64.clz": { "category": "arithmetic", "value": 1 21, "return": ["i64"], "parameter": ["i64"], "immediate": [], "b3op": "Clz" },148 "i64.ctz": { "category": "arithmetic", "value": 1 22, "return": ["i64"], "parameter": ["i64"], "immediate": [] },149 "i64.popcnt": { "category": "arithmetic", "value": 1 23, "return": ["i64"], "parameter": ["i64"], "immediate": [] },150 "i64.eqz": { "category": "comparison", "value": 80, "return": ["bool"], "parameter": ["i64"], "immediate": [], "b3op": "Equal(i32(0), @0)" },151 "f32.add": { "category": "arithmetic", "value": 1 46, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Add" },152 "f32.sub": { "category": "arithmetic", "value": 1 47, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Sub" },153 "f32.mul": { "category": "arithmetic", "value": 1 48, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Mul" },154 "f32.div": { "category": "arithmetic", "value": 1 49, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Div" },155 "f32.min": { "category": "arithmetic", "value": 1 50, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @0, @1)" },156 "f32.max": { "category": "arithmetic", "value": 1 51, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @1, @0)" },157 "f32.abs": { "category": "arithmetic", "value": 1 39, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Abs" },158 "f32.neg": { "category": "arithmetic", "value": 1 40, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Neg" },159 "f32.copysign": { "category": "arithmetic", "value": 1 52, "return": ["f32"], "parameter": ["f32"], "immediate": [] },160 "f32.ceil": { "category": "arithmetic", "value": 1 41, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Ceil" },161 "f32.floor": { "category": "arithmetic", "value": 1 42, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Floor" },162 "f32.trunc": { "category": "arithmetic", "value": 1 43, "return": ["f32"], "parameter": ["f32"], "immediate": [] },163 "f32.nearest": { "category": "arithmetic", "value": 1 44, "return": ["f32"], "parameter": ["f32"], "immediate": [] },164 "f32.sqrt": { "category": "arithmetic", "value": 1 45, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Sqrt" },165 "f32.eq": { "category": "comparison", "value": 91, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Equal" },166 "f32.ne": { "category": "comparison", "value": 92, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "NotEqual" },167 "f32.lt": { "category": "comparison", "value": 93, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "LessThan" },168 "f32.le": { "category": "comparison", "value": 95, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "LessEqual" },169 "f32.gt": { "category": "comparison", "value": 94, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "GreaterThan" },170 "f32.ge": { "category": "comparison", "value": 96, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "GreaterEqual" },171 "f64.add": { "category": "arithmetic", "value": 1 60, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Add" },172 "f64.sub": { "category": "arithmetic", "value": 1 61, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Sub" },173 "f64.mul": { "category": "arithmetic", "value": 1 62, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Mul" },174 "f64.div": { "category": "arithmetic", "value": 1 63, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Div" },175 "f64.min": { "category": "arithmetic", "value": 1 64, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @0, @1)" },176 "f64.max": { "category": "arithmetic", "value": 1 65, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @1, @0)" },177 "f64.abs": { "category": "arithmetic", "value": 1 53, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Abs" },178 "f64.neg": { "category": "arithmetic", "value": 1 54, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Neg" },179 "f64.copysign": { "category": "arithmetic", "value": 1 66, "return": ["f64"], "parameter": ["f64"], "immediate": [] },180 "f64.ceil": { "category": "arithmetic", "value": 1 55, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Ceil" },181 "f64.floor": { "category": "arithmetic", "value": 1 56, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Floor" },182 "f64.trunc": { "category": "arithmetic", "value": 1 57, "return": ["f64"], "parameter": ["f64"], "immediate": [] },183 "f64.nearest": { "category": "arithmetic", "value": 1 58, "return": ["f64"], "parameter": ["f64"], "immediate": [] },184 "f64.sqrt": { "category": "arithmetic", "value": 15 9, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Sqrt" },185 "f64.eq": { "category": "comparison", "value": 97, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Equal" },186 "f64.ne": { "category": "comparison", "value": 98, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "NotEqual" },187 "f64.lt": { "category": "comparison", "value": 99, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "LessThan" },188 "f64.le": { "category": "comparison", "value": 1 01, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "LessEqual" },189 "f64.gt": { "category": "comparison", "value": 1 00, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "GreaterThan" },190 "f64.ge": { "category": "comparison", "value": 1 02, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "GreaterEqual" },191 "i32.trunc_s/f32": { "category": "conversion", "value": 1 68, "return": ["i32"], "parameter": ["f32"], "immediate": [] },192 "i32.trunc_s/f64": { "category": "conversion", "value": 1 70, "return": ["i32"], "parameter": ["f64"], "immediate": [] },193 "i32.trunc_u/f32": { "category": "conversion", "value": 1 69, "return": ["i32"], "parameter": ["f32"], "immediate": [] },194 "i32.trunc_u/f64": { "category": "conversion", "value": 1 71, "return": ["i32"], "parameter": ["f64"], "immediate": [] },195 "i32.wrap/i64": { "category": "conversion", "value": 16 7, "return": ["i32"], "parameter": ["i64"], "immediate": [] },196 "i64.trunc_s/f32": { "category": "conversion", "value": 1 74, "return": ["i64"], "parameter": ["f32"], "immediate": [] },197 "i64.trunc_s/f64": { "category": "conversion", "value": 1 76, "return": ["i64"], "parameter": ["f64"], "immediate": [] },198 "i64.trunc_u/f32": { "category": "conversion", "value": 1 75, "return": ["i64"], "parameter": ["f32"], "immediate": [] },199 "i64.trunc_u/f64": { "category": "conversion", "value": 1 77, "return": ["i64"], "parameter": ["f64"], "immediate": [] },200 "i64.extend_s/i32": { "category": "conversion", "value": 1 72, "return": ["i64"], "parameter": ["i32"], "immediate": [], "b3op": "SExt32" },201 "i64.extend_u/i32": { "category": "conversion", "value": 1 73, "return": ["i64"], "parameter": ["i32"], "immediate": [], "b3op": "ZExt32" },202 "f32.convert_s/i32": { "category": "conversion", "value": 1 78, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "IToF" },203 "f32.convert_u/i32": { "category": "conversion", "value": 1 79, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "IToF(ZExt32(@0))" },204 "f32.convert_s/i64": { "category": "conversion", "value": 1 80, "return": ["f32"], "parameter": ["i64"], "immediate": [], "b3op": "IToF" },205 "f32.convert_u/i64": { "category": "conversion", "value": 1 81, "return": ["f32"], "parameter": ["i64"], "immediate": [] },206 "f32.demote/f64": { "category": "conversion", "value": 1 82, "return": ["f32"], "parameter": ["f64"], "immediate": [], "b3op": "DoubleToFloat"},207 "f32.reinterpret/i32": { "category": "conversion", "value": 1 90, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "BitwiseCast" },208 "f64.convert_s/i32": { "category": "conversion", "value": 1 83, "return": ["f64"], "parameter": ["i32"], "immediate": [], "b3op": "IToD" },209 "f64.convert_u/i32": { "category": "conversion", "value": 1 84, "return": ["f64"], "parameter": ["i32"], "immediate": [], "b3op": "IToD(ZExt32(@0))" },210 "f64.convert_s/i64": { "category": "conversion", "value": 1 85, "return": ["f64"], "parameter": ["i64"], "immediate": [], "b3op": "IToD" },211 "f64.convert_u/i64": { "category": "conversion", "value": 1 86, "return": ["f64"], "parameter": ["i64"], "immediate": [] },212 "f64.promote/f32": { "category": "conversion", "value": 1 87, "return": ["f64"], "parameter": ["f32"], "immediate": [], "b3op": "FloatToDouble"},213 "f64.reinterpret/i64": { "category": "conversion", "value": 1 91, "return": ["f64"], "parameter": ["i64"], "immediate": [], "b3op": "BitwiseCast" },214 "i32.reinterpret/f32": { "category": "conversion", "value": 18 8, "return": ["i32"], "parameter": ["f32"], "immediate": [], "b3op": "BitwiseCast" },215 "i64.reinterpret/f64": { "category": "conversion", "value": 18 9, "return": ["i64"], "parameter": ["f64"], "immediate": [], "b3op": "BitwiseCast" }55 "return": { "category": "control", "value": 9, "return": [], "parameter": [], "immediate": [], "description": "return zero or one value from this function" }, 56 "drop": { "category": "control", "value": 11, "return": [], "parameter": ["any"], "immediate": [], "description": "ignore value" }, 57 "nop": { "category": "control", "value": 10, "return": [], "parameter": [], "immediate": [], "description": "no operation" }, 58 "end": { "category": "control", "value": 15, "return": [], "parameter": [], "immediate": [], "description": "end a block, loop, or if" }, 59 "i32.const": { "category": "special", "value": 16, "return": ["i32"], "parameter": [], "immediate": [{"name": "value", "type": "varint32"}], "description": "a constant value interpreted as i32" }, 60 "i64.const": { "category": "special", "value": 17, "return": ["i64"], "parameter": [], "immediate": [{"name": "value", "type": "varint64"}], "description": "a constant value interpreted as i64" }, 61 "f64.const": { "category": "special", "value": 18, "return": ["f64"], "parameter": [], "immediate": [{"name": "value", "type": "uint64"}], "description": "a constant value interpreted as f64" }, 62 "f32.const": { "category": "special", "value": 19, "return": ["f32"], "parameter": [], "immediate": [{"name": "value", "type": "uint32"}], "description": "a constant value interpreted as f32" }, 63 "get_local": { "category": "special", "value": 20, "return": ["local"], "parameter": [], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "read a local variable or parameter" }, 64 "set_local": { "category": "special", "value": 21, "return": [], "parameter": ["local"], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "write a local variable or parameter" }, 65 "tee_local": { "category": "special", "value": 25, "return": ["prev"], "parameter": ["any"], "immediate": [{"name": "local_index", "type": "varuint32"}], "description": "write a local variable or parameter and return the same value" }, 66 "get_global": { "category": "special", "value": 187, "return": ["global"], "parameter": [], "immediate": [{"name": "global_index", "type": "varuint32"}], "description": "read a global variable" }, 67 "set_global": { "category": "special", "value": 188, "return": [""], "parameter": ["global"], "immediate": [{"name": "global_index", "type": "varuint32"}], "description": "write a global variable" }, 68 "call": { "category": "call", "value": 22, "return": ["call"], "parameter": ["call"], "immediate": [{"name": "function_index", "type": "varuint32"}], "description": "call a function by its index" }, 69 "call_indirect": { "category": "call", "value": 23, "return": ["call"], "parameter": ["call"], "immediate": [{"name": "type_index", "type": "varuint32"}], "description": "call a function indirect with an expected signature" }, 70 "i32.load8_s": { "category": "memory", "value": 32, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 71 "i32.load8_u": { "category": "memory", "value": 33, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 72 "i32.load16_s": { "category": "memory", "value": 34, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 73 "i32.load16_u": { "category": "memory", "value": 35, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 74 "i64.load8_s": { "category": "memory", "value": 36, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 75 "i64.load8_u": { "category": "memory", "value": 37, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 76 "i64.load16_s": { "category": "memory", "value": 38, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 77 "i64.load16_u": { "category": "memory", "value": 39, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 78 "i64.load32_s": { "category": "memory", "value": 40, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 79 "i64.load32_u": { "category": "memory", "value": 41, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 80 "i32.load": { "category": "memory", "value": 42, "return": ["i32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 81 "i64.load": { "category": "memory", "value": 43, "return": ["i64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 82 "f32.load": { "category": "memory", "value": 44, "return": ["f32"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 83 "f64.load": { "category": "memory", "value": 45, "return": ["f64"], "parameter": ["addr"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "load from memory" }, 84 "i32.store8": { "category": "memory", "value": 46, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 85 "i32.store16": { "category": "memory", "value": 47, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 86 "i64.store8": { "category": "memory", "value": 48, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 87 "i64.store16": { "category": "memory", "value": 49, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 88 "i64.store32": { "category": "memory", "value": 50, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 89 "i32.store": { "category": "memory", "value": 51, "return": [], "parameter": ["addr", "i32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 90 "i64.store": { "category": "memory", "value": 52, "return": [], "parameter": ["addr", "i64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 91 "f32.store": { "category": "memory", "value": 53, "return": [], "parameter": ["addr", "f32"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 92 "f64.store": { "category": "memory", "value": 54, "return": [], "parameter": ["addr", "f64"], "immediate": [{"name": "flags", "type": "varuint32"}, {"name": "offset", "type": "varuint32"}], "description": "store to memory" }, 93 "current_memory": { "category": "operation", "value": 59, "return": ["size"], "parameter": [], "immediate": [], "description": "query the size of memory" }, 94 "grow_memory": { "category": "operation", "value": 57, "return": ["size"], "parameter": ["size"], "immediate": [], "description": "grow the size of memory" }, 95 "i32.add": { "category": "arithmetic", "value": 64, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Add" }, 96 "i32.sub": { "category": "arithmetic", "value": 65, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Sub" }, 97 "i32.mul": { "category": "arithmetic", "value": 66, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Mul" }, 98 "i32.div_s": { "category": "arithmetic", "value": 67, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Div" }, 99 "i32.div_u": { "category": "arithmetic", "value": 68, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "UDiv" }, 100 "i32.rem_s": { "category": "arithmetic", "value": 69, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Mod" }, 101 "i32.rem_u": { "category": "arithmetic", "value": 70, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "UMod" }, 102 "i32.and": { "category": "arithmetic", "value": 71, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitAnd" }, 103 "i32.or": { "category": "arithmetic", "value": 72, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitOr" }, 104 "i32.xor": { "category": "arithmetic", "value": 73, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BitXor" }, 105 "i32.shl": { "category": "arithmetic", "value": 74, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Shl" }, 106 "i32.shr_u": { "category": "arithmetic", "value": 75, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "SShr" }, 107 "i32.shr_s": { "category": "arithmetic", "value": 76, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "ZShr" }, 108 "i32.rotr": { "category": "arithmetic", "value": 182, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "RotR" }, 109 "i32.rotl": { "category": "arithmetic", "value": 183, "return": ["i32"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "RotL" }, 110 "i32.eq": { "category": "comparison", "value": 77, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Equal" }, 111 "i32.ne": { "category": "comparison", "value": 78, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "NotEqual" }, 112 "i32.lt_s": { "category": "comparison", "value": 79, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "LessThan" }, 113 "i32.le_s": { "category": "comparison", "value": 80, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "LessEqual" }, 114 "i32.lt_u": { "category": "comparison", "value": 81, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Below" }, 115 "i32.le_u": { "category": "comparison", "value": 82, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "BelowEqual" }, 116 "i32.gt_s": { "category": "comparison", "value": 83, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "GreaterThan" }, 117 "i32.ge_s": { "category": "comparison", "value": 84, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "GreaterEqual" }, 118 "i32.gt_u": { "category": "comparison", "value": 85, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "Above" }, 119 "i32.ge_u": { "category": "comparison", "value": 86, "return": ["bool"], "parameter": ["i32", "i32"], "immediate": [], "b3op": "AboveEqual" }, 120 "i32.clz": { "category": "arithmetic", "value": 87, "return": ["i32"], "parameter": ["i32"], "immediate": [], "b3op": "Clz" }, 121 "i32.ctz": { "category": "arithmetic", "value": 88, "return": ["i32"], "parameter": ["i32"], "immediate": [] }, 122 "i32.popcnt": { "category": "arithmetic", "value": 89, "return": ["i32"], "parameter": ["i32"], "immediate": [] }, 123 "i32.eqz": { "category": "comparison", "value": 90, "return": ["bool"], "parameter": ["i32"], "immediate": [], "b3op": "Equal(i32(0), @0)" }, 124 "i64.add": { "category": "arithmetic", "value": 91, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Add" }, 125 "i64.sub": { "category": "arithmetic", "value": 92, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Sub" }, 126 "i64.mul": { "category": "arithmetic", "value": 93, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Mul" }, 127 "i64.div_s": { "category": "arithmetic", "value": 94, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Div" }, 128 "i64.div_u": { "category": "arithmetic", "value": 95, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "UDiv" }, 129 "i64.rem_s": { "category": "arithmetic", "value": 96, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Mod" }, 130 "i64.rem_u": { "category": "arithmetic", "value": 97, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "UDiv" }, 131 "i64.and": { "category": "arithmetic", "value": 98, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitAnd" }, 132 "i64.or": { "category": "arithmetic", "value": 99, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitOr" }, 133 "i64.xor": { "category": "arithmetic", "value": 100, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BitXor" }, 134 "i64.shl": { "category": "arithmetic", "value": 101, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Shl" }, 135 "i64.shr_u": { "category": "arithmetic", "value": 102, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "SShr" }, 136 "i64.shr_s": { "category": "arithmetic", "value": 103, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "ZShr" }, 137 "i64.rotr": { "category": "arithmetic", "value": 184, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "RotR" }, 138 "i64.rotl": { "category": "arithmetic", "value": 185, "return": ["i64"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "RotL" }, 139 "i64.eq": { "category": "comparison", "value": 104, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Equal" }, 140 "i64.ne": { "category": "comparison", "value": 105, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "NotEqual" }, 141 "i64.lt_s": { "category": "comparison", "value": 106, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "LessThan" }, 142 "i64.le_s": { "category": "comparison", "value": 107, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "LessEqual" }, 143 "i64.lt_u": { "category": "comparison", "value": 108, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Below" }, 144 "i64.le_u": { "category": "comparison", "value": 109, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "BelowEqual" }, 145 "i64.gt_s": { "category": "comparison", "value": 110, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "GreaterThan" }, 146 "i64.ge_s": { "category": "comparison", "value": 111, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "GreaterEqual" }, 147 "i64.gt_u": { "category": "comparison", "value": 112, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "Above" }, 148 "i64.ge_u": { "category": "comparison", "value": 113, "return": ["bool"], "parameter": ["i64", "i64"], "immediate": [], "b3op": "AboveEqual" }, 149 "i64.clz": { "category": "arithmetic", "value": 114, "return": ["i64"], "parameter": ["i64"], "immediate": [], "b3op": "Clz" }, 150 "i64.ctz": { "category": "arithmetic", "value": 115, "return": ["i64"], "parameter": ["i64"], "immediate": [] }, 151 "i64.popcnt": { "category": "arithmetic", "value": 116, "return": ["i64"], "parameter": ["i64"], "immediate": [] }, 152 "i64.eqz": { "category": "comparison", "value": 186, "return": ["bool"], "parameter": ["i64"], "immediate": [], "b3op": "Equal(i32(0), @0)" }, 153 "f32.add": { "category": "arithmetic", "value": 117, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Add" }, 154 "f32.sub": { "category": "arithmetic", "value": 118, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Sub" }, 155 "f32.mul": { "category": "arithmetic", "value": 119, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Mul" }, 156 "f32.div": { "category": "arithmetic", "value": 120, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Div" }, 157 "f32.min": { "category": "arithmetic", "value": 121, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @0, @1)" }, 158 "f32.max": { "category": "arithmetic", "value": 122, "return": ["f32"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @1, @0)" }, 159 "f32.abs": { "category": "arithmetic", "value": 123, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Abs" }, 160 "f32.neg": { "category": "arithmetic", "value": 124, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Neg" }, 161 "f32.copysign": { "category": "arithmetic", "value": 125, "return": ["f32"], "parameter": ["f32"], "immediate": [] }, 162 "f32.ceil": { "category": "arithmetic", "value": 126, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Ceil" }, 163 "f32.floor": { "category": "arithmetic", "value": 127, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Floor" }, 164 "f32.trunc": { "category": "arithmetic", "value": 128, "return": ["f32"], "parameter": ["f32"], "immediate": [] }, 165 "f32.nearest": { "category": "arithmetic", "value": 129, "return": ["f32"], "parameter": ["f32"], "immediate": [] }, 166 "f32.sqrt": { "category": "arithmetic", "value": 130, "return": ["f32"], "parameter": ["f32"], "immediate": [], "b3op": "Sqrt" }, 167 "f32.eq": { "category": "comparison", "value": 131, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "Equal" }, 168 "f32.ne": { "category": "comparison", "value": 132, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "NotEqual" }, 169 "f32.lt": { "category": "comparison", "value": 133, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "LessThan" }, 170 "f32.le": { "category": "comparison", "value": 134, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "LessEqual" }, 171 "f32.gt": { "category": "comparison", "value": 135, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "GreaterThan" }, 172 "f32.ge": { "category": "comparison", "value": 136, "return": ["bool"], "parameter": ["f32", "f32"], "immediate": [], "b3op": "GreaterEqual" }, 173 "f64.add": { "category": "arithmetic", "value": 137, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Add" }, 174 "f64.sub": { "category": "arithmetic", "value": 138, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Sub" }, 175 "f64.mul": { "category": "arithmetic", "value": 139, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Mul" }, 176 "f64.div": { "category": "arithmetic", "value": 140, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Div" }, 177 "f64.min": { "category": "arithmetic", "value": 141, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @0, @1)" }, 178 "f64.max": { "category": "arithmetic", "value": 142, "return": ["f64"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Select(LessThan(@0, @1), @1, @0)" }, 179 "f64.abs": { "category": "arithmetic", "value": 143, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Abs" }, 180 "f64.neg": { "category": "arithmetic", "value": 144, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Neg" }, 181 "f64.copysign": { "category": "arithmetic", "value": 145, "return": ["f64"], "parameter": ["f64"], "immediate": [] }, 182 "f64.ceil": { "category": "arithmetic", "value": 146, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Ceil" }, 183 "f64.floor": { "category": "arithmetic", "value": 147, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Floor" }, 184 "f64.trunc": { "category": "arithmetic", "value": 148, "return": ["f64"], "parameter": ["f64"], "immediate": [] }, 185 "f64.nearest": { "category": "arithmetic", "value": 149, "return": ["f64"], "parameter": ["f64"], "immediate": [] }, 186 "f64.sqrt": { "category": "arithmetic", "value": 150, "return": ["f64"], "parameter": ["f64"], "immediate": [], "b3op": "Sqrt" }, 187 "f64.eq": { "category": "comparison", "value": 151, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "Equal" }, 188 "f64.ne": { "category": "comparison", "value": 152, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "NotEqual" }, 189 "f64.lt": { "category": "comparison", "value": 153, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "LessThan" }, 190 "f64.le": { "category": "comparison", "value": 154, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "LessEqual" }, 191 "f64.gt": { "category": "comparison", "value": 155, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "GreaterThan" }, 192 "f64.ge": { "category": "comparison", "value": 156, "return": ["bool"], "parameter": ["f64", "f64"], "immediate": [], "b3op": "GreaterEqual" }, 193 "i32.trunc_s/f32": { "category": "conversion", "value": 157, "return": ["i32"], "parameter": ["f32"], "immediate": [] }, 194 "i32.trunc_s/f64": { "category": "conversion", "value": 158, "return": ["i32"], "parameter": ["f64"], "immediate": [] }, 195 "i32.trunc_u/f32": { "category": "conversion", "value": 159, "return": ["i32"], "parameter": ["f32"], "immediate": [] }, 196 "i32.trunc_u/f64": { "category": "conversion", "value": 160, "return": ["i32"], "parameter": ["f64"], "immediate": [] }, 197 "i32.wrap/i64": { "category": "conversion", "value": 161, "return": ["i32"], "parameter": ["i64"], "immediate": [] }, 198 "i64.trunc_s/f32": { "category": "conversion", "value": 162, "return": ["i64"], "parameter": ["f32"], "immediate": [] }, 199 "i64.trunc_s/f64": { "category": "conversion", "value": 163, "return": ["i64"], "parameter": ["f64"], "immediate": [] }, 200 "i64.trunc_u/f32": { "category": "conversion", "value": 164, "return": ["i64"], "parameter": ["f32"], "immediate": [] }, 201 "i64.trunc_u/f64": { "category": "conversion", "value": 165, "return": ["i64"], "parameter": ["f64"], "immediate": [] }, 202 "i64.extend_s/i32": { "category": "conversion", "value": 166, "return": ["i64"], "parameter": ["i32"], "immediate": [], "b3op": "SExt32" }, 203 "i64.extend_u/i32": { "category": "conversion", "value": 167, "return": ["i64"], "parameter": ["i32"], "immediate": [], "b3op": "ZExt32" }, 204 "f32.convert_s/i32": { "category": "conversion", "value": 168, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "IToF" }, 205 "f32.convert_u/i32": { "category": "conversion", "value": 169, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "IToF(ZExt32(@0))" }, 206 "f32.convert_s/i64": { "category": "conversion", "value": 170, "return": ["f32"], "parameter": ["i64"], "immediate": [], "b3op": "IToF" }, 207 "f32.convert_u/i64": { "category": "conversion", "value": 171, "return": ["f32"], "parameter": ["i64"], "immediate": [] }, 208 "f32.demote/f64": { "category": "conversion", "value": 172, "return": ["f32"], "parameter": ["f64"], "immediate": [], "b3op": "DoubleToFloat"}, 209 "f32.reinterpret/i32": { "category": "conversion", "value": 173, "return": ["f32"], "parameter": ["i32"], "immediate": [], "b3op": "BitwiseCast" }, 210 "f64.convert_s/i32": { "category": "conversion", "value": 174, "return": ["f64"], "parameter": ["i32"], "immediate": [], "b3op": "IToD" }, 211 "f64.convert_u/i32": { "category": "conversion", "value": 175, "return": ["f64"], "parameter": ["i32"], "immediate": [], "b3op": "IToD(ZExt32(@0))" }, 212 "f64.convert_s/i64": { "category": "conversion", "value": 176, "return": ["f64"], "parameter": ["i64"], "immediate": [], "b3op": "IToD" }, 213 "f64.convert_u/i64": { "category": "conversion", "value": 177, "return": ["f64"], "parameter": ["i64"], "immediate": [] }, 214 "f64.promote/f32": { "category": "conversion", "value": 178, "return": ["f64"], "parameter": ["f32"], "immediate": [], "b3op": "FloatToDouble"}, 215 "f64.reinterpret/i64": { "category": "conversion", "value": 179, "return": ["f64"], "parameter": ["i64"], "immediate": [], "b3op": "BitwiseCast" }, 216 "i32.reinterpret/f32": { "category": "conversion", "value": 180, "return": ["i32"], "parameter": ["f32"], "immediate": [], "b3op": "BitwiseCast" }, 217 "i64.reinterpret/f64": { "category": "conversion", "value": 181, "return": ["i64"], "parameter": ["f64"], "immediate": [], "b3op": "BitwiseCast" } 216 218 } 217 219 }
Note: See TracChangeset
for help on using the changeset viewer.