diff options
Diffstat (limited to 'vendor/github.com/tetratelabs/wazero/internal/wasm/instruction.go')
-rw-r--r-- | vendor/github.com/tetratelabs/wazero/internal/wasm/instruction.go | 1866 |
1 files changed, 0 insertions, 1866 deletions
diff --git a/vendor/github.com/tetratelabs/wazero/internal/wasm/instruction.go b/vendor/github.com/tetratelabs/wazero/internal/wasm/instruction.go deleted file mode 100644 index 67f196b8b..000000000 --- a/vendor/github.com/tetratelabs/wazero/internal/wasm/instruction.go +++ /dev/null @@ -1,1866 +0,0 @@ -package wasm - -// Opcode is the binary Opcode of an instruction. See also InstructionName -type Opcode = byte - -const ( - // OpcodeUnreachable causes an unconditional trap. - OpcodeUnreachable Opcode = 0x00 - // OpcodeNop does nothing - OpcodeNop Opcode = 0x01 - // OpcodeBlock brackets a sequence of instructions. A branch instruction on an if label breaks out to after its - // OpcodeEnd. - OpcodeBlock Opcode = 0x02 - // OpcodeLoop brackets a sequence of instructions. A branch instruction on a loop label will jump back to the - // beginning of its block. - OpcodeLoop Opcode = 0x03 - // OpcodeIf brackets a sequence of instructions. When the top of the stack evaluates to 1, the block is executed. - // Zero jumps to the optional OpcodeElse. A branch instruction on an if label breaks out to after its OpcodeEnd. - OpcodeIf Opcode = 0x04 - // OpcodeElse brackets a sequence of instructions enclosed by an OpcodeIf. A branch instruction on a then label - // breaks out to after the OpcodeEnd on the enclosing OpcodeIf. - OpcodeElse Opcode = 0x05 - // OpcodeEnd terminates a control instruction OpcodeBlock, OpcodeLoop or OpcodeIf. - OpcodeEnd Opcode = 0x0b - - // OpcodeBr is a stack-polymorphic opcode that performs an unconditional branch. How the stack is modified depends - // on whether the "br" is enclosed by a loop, and if CoreFeatureMultiValue is enabled. - // - // Here are the rules in pseudocode about how the stack is modified based on the "br" operand L (label): - // if L is loop: append(L.originalStackWithoutInputs, N-values popped from the stack) where N == L.inputs - // else: append(L.originalStackWithoutInputs, N-values popped from the stack) where N == L.results - // - // In WebAssembly 1.0 (20191205), N can be zero or one. When CoreFeatureMultiValue is enabled, N can be more than one, - // depending on the type use of the label L. - // - // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#-hrefsyntax-instr-controlmathsfbrl - OpcodeBr Opcode = 0x0c - - OpcodeBrIf Opcode = 0x0d - OpcodeBrTable Opcode = 0x0e - OpcodeReturn Opcode = 0x0f - OpcodeCall Opcode = 0x10 - OpcodeCallIndirect Opcode = 0x11 - - // parametric instructions - - OpcodeDrop Opcode = 0x1a - OpcodeSelect Opcode = 0x1b - OpcodeTypedSelect Opcode = 0x1c - - // variable instructions - - OpcodeLocalGet Opcode = 0x20 - OpcodeLocalSet Opcode = 0x21 - OpcodeLocalTee Opcode = 0x22 - OpcodeGlobalGet Opcode = 0x23 - OpcodeGlobalSet Opcode = 0x24 - - // Below are toggled with CoreFeatureReferenceTypes - - OpcodeTableGet Opcode = 0x25 - OpcodeTableSet Opcode = 0x26 - - // memory instructions - - OpcodeI32Load Opcode = 0x28 - OpcodeI64Load Opcode = 0x29 - OpcodeF32Load Opcode = 0x2a - OpcodeF64Load Opcode = 0x2b - OpcodeI32Load8S Opcode = 0x2c - OpcodeI32Load8U Opcode = 0x2d - OpcodeI32Load16S Opcode = 0x2e - OpcodeI32Load16U Opcode = 0x2f - OpcodeI64Load8S Opcode = 0x30 - OpcodeI64Load8U Opcode = 0x31 - OpcodeI64Load16S Opcode = 0x32 - OpcodeI64Load16U Opcode = 0x33 - OpcodeI64Load32S Opcode = 0x34 - OpcodeI64Load32U Opcode = 0x35 - OpcodeI32Store Opcode = 0x36 - OpcodeI64Store Opcode = 0x37 - OpcodeF32Store Opcode = 0x38 - OpcodeF64Store Opcode = 0x39 - OpcodeI32Store8 Opcode = 0x3a - OpcodeI32Store16 Opcode = 0x3b - OpcodeI64Store8 Opcode = 0x3c - OpcodeI64Store16 Opcode = 0x3d - OpcodeI64Store32 Opcode = 0x3e - OpcodeMemorySize Opcode = 0x3f - OpcodeMemoryGrow Opcode = 0x40 - - // const instructions - - OpcodeI32Const Opcode = 0x41 - OpcodeI64Const Opcode = 0x42 - OpcodeF32Const Opcode = 0x43 - OpcodeF64Const Opcode = 0x44 - - // numeric instructions - - OpcodeI32Eqz Opcode = 0x45 - OpcodeI32Eq Opcode = 0x46 - OpcodeI32Ne Opcode = 0x47 - OpcodeI32LtS Opcode = 0x48 - OpcodeI32LtU Opcode = 0x49 - OpcodeI32GtS Opcode = 0x4a - OpcodeI32GtU Opcode = 0x4b - OpcodeI32LeS Opcode = 0x4c - OpcodeI32LeU Opcode = 0x4d - OpcodeI32GeS Opcode = 0x4e - OpcodeI32GeU Opcode = 0x4f - - OpcodeI64Eqz Opcode = 0x50 - OpcodeI64Eq Opcode = 0x51 - OpcodeI64Ne Opcode = 0x52 - OpcodeI64LtS Opcode = 0x53 - OpcodeI64LtU Opcode = 0x54 - OpcodeI64GtS Opcode = 0x55 - OpcodeI64GtU Opcode = 0x56 - OpcodeI64LeS Opcode = 0x57 - OpcodeI64LeU Opcode = 0x58 - OpcodeI64GeS Opcode = 0x59 - OpcodeI64GeU Opcode = 0x5a - - OpcodeF32Eq Opcode = 0x5b - OpcodeF32Ne Opcode = 0x5c - OpcodeF32Lt Opcode = 0x5d - OpcodeF32Gt Opcode = 0x5e - OpcodeF32Le Opcode = 0x5f - OpcodeF32Ge Opcode = 0x60 - - OpcodeF64Eq Opcode = 0x61 - OpcodeF64Ne Opcode = 0x62 - OpcodeF64Lt Opcode = 0x63 - OpcodeF64Gt Opcode = 0x64 - OpcodeF64Le Opcode = 0x65 - OpcodeF64Ge Opcode = 0x66 - - OpcodeI32Clz Opcode = 0x67 - OpcodeI32Ctz Opcode = 0x68 - OpcodeI32Popcnt Opcode = 0x69 - OpcodeI32Add Opcode = 0x6a - OpcodeI32Sub Opcode = 0x6b - OpcodeI32Mul Opcode = 0x6c - OpcodeI32DivS Opcode = 0x6d - OpcodeI32DivU Opcode = 0x6e - OpcodeI32RemS Opcode = 0x6f - OpcodeI32RemU Opcode = 0x70 - OpcodeI32And Opcode = 0x71 - OpcodeI32Or Opcode = 0x72 - OpcodeI32Xor Opcode = 0x73 - OpcodeI32Shl Opcode = 0x74 - OpcodeI32ShrS Opcode = 0x75 - OpcodeI32ShrU Opcode = 0x76 - OpcodeI32Rotl Opcode = 0x77 - OpcodeI32Rotr Opcode = 0x78 - - OpcodeI64Clz Opcode = 0x79 - OpcodeI64Ctz Opcode = 0x7a - OpcodeI64Popcnt Opcode = 0x7b - OpcodeI64Add Opcode = 0x7c - OpcodeI64Sub Opcode = 0x7d - OpcodeI64Mul Opcode = 0x7e - OpcodeI64DivS Opcode = 0x7f - OpcodeI64DivU Opcode = 0x80 - OpcodeI64RemS Opcode = 0x81 - OpcodeI64RemU Opcode = 0x82 - OpcodeI64And Opcode = 0x83 - OpcodeI64Or Opcode = 0x84 - OpcodeI64Xor Opcode = 0x85 - OpcodeI64Shl Opcode = 0x86 - OpcodeI64ShrS Opcode = 0x87 - OpcodeI64ShrU Opcode = 0x88 - OpcodeI64Rotl Opcode = 0x89 - OpcodeI64Rotr Opcode = 0x8a - - OpcodeF32Abs Opcode = 0x8b - OpcodeF32Neg Opcode = 0x8c - OpcodeF32Ceil Opcode = 0x8d - OpcodeF32Floor Opcode = 0x8e - OpcodeF32Trunc Opcode = 0x8f - OpcodeF32Nearest Opcode = 0x90 - OpcodeF32Sqrt Opcode = 0x91 - OpcodeF32Add Opcode = 0x92 - OpcodeF32Sub Opcode = 0x93 - OpcodeF32Mul Opcode = 0x94 - OpcodeF32Div Opcode = 0x95 - OpcodeF32Min Opcode = 0x96 - OpcodeF32Max Opcode = 0x97 - OpcodeF32Copysign Opcode = 0x98 - - OpcodeF64Abs Opcode = 0x99 - OpcodeF64Neg Opcode = 0x9a - OpcodeF64Ceil Opcode = 0x9b - OpcodeF64Floor Opcode = 0x9c - OpcodeF64Trunc Opcode = 0x9d - OpcodeF64Nearest Opcode = 0x9e - OpcodeF64Sqrt Opcode = 0x9f - OpcodeF64Add Opcode = 0xa0 - OpcodeF64Sub Opcode = 0xa1 - OpcodeF64Mul Opcode = 0xa2 - OpcodeF64Div Opcode = 0xa3 - OpcodeF64Min Opcode = 0xa4 - OpcodeF64Max Opcode = 0xa5 - OpcodeF64Copysign Opcode = 0xa6 - - OpcodeI32WrapI64 Opcode = 0xa7 - OpcodeI32TruncF32S Opcode = 0xa8 - OpcodeI32TruncF32U Opcode = 0xa9 - OpcodeI32TruncF64S Opcode = 0xaa - OpcodeI32TruncF64U Opcode = 0xab - - OpcodeI64ExtendI32S Opcode = 0xac - OpcodeI64ExtendI32U Opcode = 0xad - OpcodeI64TruncF32S Opcode = 0xae - OpcodeI64TruncF32U Opcode = 0xaf - OpcodeI64TruncF64S Opcode = 0xb0 - OpcodeI64TruncF64U Opcode = 0xb1 - - OpcodeF32ConvertI32S Opcode = 0xb2 - OpcodeF32ConvertI32U Opcode = 0xb3 - OpcodeF32ConvertI64S Opcode = 0xb4 - OpcodeF32ConvertI64U Opcode = 0xb5 - OpcodeF32DemoteF64 Opcode = 0xb6 - - OpcodeF64ConvertI32S Opcode = 0xb7 - OpcodeF64ConvertI32U Opcode = 0xb8 - OpcodeF64ConvertI64S Opcode = 0xb9 - OpcodeF64ConvertI64U Opcode = 0xba - OpcodeF64PromoteF32 Opcode = 0xbb - - OpcodeI32ReinterpretF32 Opcode = 0xbc - OpcodeI64ReinterpretF64 Opcode = 0xbd - OpcodeF32ReinterpretI32 Opcode = 0xbe - OpcodeF64ReinterpretI64 Opcode = 0xbf - - // OpcodeRefNull pushes a null reference value whose type is specified by immediate to this opcode. - // This is defined in the reference-types proposal, but necessary for CoreFeatureBulkMemoryOperations as well. - // - // Currently only supported in the constant expression in element segments. - OpcodeRefNull = 0xd0 - // OpcodeRefIsNull pops a reference value, and pushes 1 if it is null, 0 otherwise. - // This is defined in the reference-types proposal, but necessary for CoreFeatureBulkMemoryOperations as well. - // - // Currently not supported. - OpcodeRefIsNull = 0xd1 - // OpcodeRefFunc pushes a funcref value whose index equals the immediate to this opcode. - // This is defined in the reference-types proposal, but necessary for CoreFeatureBulkMemoryOperations as well. - // - // Currently, this is only supported in the constant expression in element segments. - OpcodeRefFunc = 0xd2 - - // Below are toggled with CoreFeatureSignExtensionOps - - // OpcodeI32Extend8S extends a signed 8-bit integer to a 32-bit integer. - // Note: This is dependent on the flag CoreFeatureSignExtensionOps - OpcodeI32Extend8S Opcode = 0xc0 - - // OpcodeI32Extend16S extends a signed 16-bit integer to a 32-bit integer. - // Note: This is dependent on the flag CoreFeatureSignExtensionOps - OpcodeI32Extend16S Opcode = 0xc1 - - // OpcodeI64Extend8S extends a signed 8-bit integer to a 64-bit integer. - // Note: This is dependent on the flag CoreFeatureSignExtensionOps - OpcodeI64Extend8S Opcode = 0xc2 - - // OpcodeI64Extend16S extends a signed 16-bit integer to a 64-bit integer. - // Note: This is dependent on the flag CoreFeatureSignExtensionOps - OpcodeI64Extend16S Opcode = 0xc3 - - // OpcodeI64Extend32S extends a signed 32-bit integer to a 64-bit integer. - // Note: This is dependent on the flag CoreFeatureSignExtensionOps - OpcodeI64Extend32S Opcode = 0xc4 - - // OpcodeMiscPrefix is the prefix of various multi-byte opcodes. - // Introduced in CoreFeatureNonTrappingFloatToIntConversion, but used in other - // features, such as CoreFeatureBulkMemoryOperations. - OpcodeMiscPrefix Opcode = 0xfc - - // OpcodeVecPrefix is the prefix of all vector isntructions introduced in - // CoreFeatureSIMD. - OpcodeVecPrefix Opcode = 0xfd - - // OpcodeAtomicPrefix is the prefix of all atomic instructions introduced in - // CoreFeatureThreads. - OpcodeAtomicPrefix Opcode = 0xfe -) - -// OpcodeMisc represents opcodes of the miscellaneous operations. -// Such an operations has multi-byte encoding which is prefixed by OpcodeMiscPrefix. -type OpcodeMisc = byte - -const ( - // Below are toggled with CoreFeatureNonTrappingFloatToIntConversion. - // https://github.com/WebAssembly/spec/blob/ce4b6c4d47eb06098cc7ab2e81f24748da822f20/proposals/nontrapping-float-to-int-conversion/Overview.md - - OpcodeMiscI32TruncSatF32S OpcodeMisc = 0x00 - OpcodeMiscI32TruncSatF32U OpcodeMisc = 0x01 - OpcodeMiscI32TruncSatF64S OpcodeMisc = 0x02 - OpcodeMiscI32TruncSatF64U OpcodeMisc = 0x03 - OpcodeMiscI64TruncSatF32S OpcodeMisc = 0x04 - OpcodeMiscI64TruncSatF32U OpcodeMisc = 0x05 - OpcodeMiscI64TruncSatF64S OpcodeMisc = 0x06 - OpcodeMiscI64TruncSatF64U OpcodeMisc = 0x07 - - // Below are toggled with CoreFeatureBulkMemoryOperations. - // Opcodes are those new in document/core/appendix/index-instructions.rst (the commit that merged the feature). - // See https://github.com/WebAssembly/spec/commit/7fa2f20a6df4cf1c114582c8cb60f5bfcdbf1be1 - // See https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/appendix/changes.html#bulk-memory-and-table-instructions - - OpcodeMiscMemoryInit OpcodeMisc = 0x08 - OpcodeMiscDataDrop OpcodeMisc = 0x09 - OpcodeMiscMemoryCopy OpcodeMisc = 0x0a - OpcodeMiscMemoryFill OpcodeMisc = 0x0b - OpcodeMiscTableInit OpcodeMisc = 0x0c - OpcodeMiscElemDrop OpcodeMisc = 0x0d - OpcodeMiscTableCopy OpcodeMisc = 0x0e - - // Below are toggled with CoreFeatureReferenceTypes - - OpcodeMiscTableGrow OpcodeMisc = 0x0f - OpcodeMiscTableSize OpcodeMisc = 0x10 - OpcodeMiscTableFill OpcodeMisc = 0x11 -) - -// OpcodeVec represents an opcode of a vector instructions which has -// multi-byte encoding and is prefixed by OpcodeMiscPrefix. -// -// These opcodes are toggled with CoreFeatureSIMD. -type OpcodeVec = byte - -const ( - // Loads and stores. - - OpcodeVecV128Load OpcodeVec = 0x00 - OpcodeVecV128Load8x8s OpcodeVec = 0x01 - OpcodeVecV128Load8x8u OpcodeVec = 0x02 - OpcodeVecV128Load16x4s OpcodeVec = 0x03 - OpcodeVecV128Load16x4u OpcodeVec = 0x04 - OpcodeVecV128Load32x2s OpcodeVec = 0x05 - OpcodeVecV128Load32x2u OpcodeVec = 0x06 - OpcodeVecV128Load8Splat OpcodeVec = 0x07 - OpcodeVecV128Load16Splat OpcodeVec = 0x08 - OpcodeVecV128Load32Splat OpcodeVec = 0x09 - OpcodeVecV128Load64Splat OpcodeVec = 0x0a - - OpcodeVecV128Load32zero OpcodeVec = 0x5c - OpcodeVecV128Load64zero OpcodeVec = 0x5d - - OpcodeVecV128Store OpcodeVec = 0x0b - OpcodeVecV128Load8Lane OpcodeVec = 0x54 - OpcodeVecV128Load16Lane OpcodeVec = 0x55 - OpcodeVecV128Load32Lane OpcodeVec = 0x56 - OpcodeVecV128Load64Lane OpcodeVec = 0x57 - OpcodeVecV128Store8Lane OpcodeVec = 0x58 - OpcodeVecV128Store16Lane OpcodeVec = 0x59 - OpcodeVecV128Store32Lane OpcodeVec = 0x5a - OpcodeVecV128Store64Lane OpcodeVec = 0x5b - - // OpcodeVecV128Const is the vector const instruction. - OpcodeVecV128Const OpcodeVec = 0x0c - - // OpcodeVecV128i8x16Shuffle is the vector shuffle instruction. - OpcodeVecV128i8x16Shuffle OpcodeVec = 0x0d - - // Extrac and replaces. - - OpcodeVecI8x16ExtractLaneS OpcodeVec = 0x15 - OpcodeVecI8x16ExtractLaneU OpcodeVec = 0x16 - OpcodeVecI8x16ReplaceLane OpcodeVec = 0x17 - OpcodeVecI16x8ExtractLaneS OpcodeVec = 0x18 - OpcodeVecI16x8ExtractLaneU OpcodeVec = 0x19 - OpcodeVecI16x8ReplaceLane OpcodeVec = 0x1a - OpcodeVecI32x4ExtractLane OpcodeVec = 0x1b - OpcodeVecI32x4ReplaceLane OpcodeVec = 0x1c - OpcodeVecI64x2ExtractLane OpcodeVec = 0x1d - OpcodeVecI64x2ReplaceLane OpcodeVec = 0x1e - OpcodeVecF32x4ExtractLane OpcodeVec = 0x1f - OpcodeVecF32x4ReplaceLane OpcodeVec = 0x20 - OpcodeVecF64x2ExtractLane OpcodeVec = 0x21 - OpcodeVecF64x2ReplaceLane OpcodeVec = 0x22 - - // Splat and swizzle. - - OpcodeVecI8x16Swizzle OpcodeVec = 0x0e - OpcodeVecI8x16Splat OpcodeVec = 0x0f - OpcodeVecI16x8Splat OpcodeVec = 0x10 - OpcodeVecI32x4Splat OpcodeVec = 0x11 - OpcodeVecI64x2Splat OpcodeVec = 0x12 - OpcodeVecF32x4Splat OpcodeVec = 0x13 - OpcodeVecF64x2Splat OpcodeVec = 0x14 - - // i8 comparisons. - - OpcodeVecI8x16Eq OpcodeVec = 0x23 - OpcodeVecI8x16Ne OpcodeVec = 0x24 - OpcodeVecI8x16LtS OpcodeVec = 0x25 - OpcodeVecI8x16LtU OpcodeVec = 0x26 - OpcodeVecI8x16GtS OpcodeVec = 0x27 - OpcodeVecI8x16GtU OpcodeVec = 0x28 - OpcodeVecI8x16LeS OpcodeVec = 0x29 - OpcodeVecI8x16LeU OpcodeVec = 0x2a - OpcodeVecI8x16GeS OpcodeVec = 0x2b - OpcodeVecI8x16GeU OpcodeVec = 0x2c - - // i16 comparisons. - - OpcodeVecI16x8Eq OpcodeVec = 0x2d - OpcodeVecI16x8Ne OpcodeVec = 0x2e - OpcodeVecI16x8LtS OpcodeVec = 0x2f - OpcodeVecI16x8LtU OpcodeVec = 0x30 - OpcodeVecI16x8GtS OpcodeVec = 0x31 - OpcodeVecI16x8GtU OpcodeVec = 0x32 - OpcodeVecI16x8LeS OpcodeVec = 0x33 - OpcodeVecI16x8LeU OpcodeVec = 0x34 - OpcodeVecI16x8GeS OpcodeVec = 0x35 - OpcodeVecI16x8GeU OpcodeVec = 0x36 - - // i32 comparisons. - - OpcodeVecI32x4Eq OpcodeVec = 0x37 - OpcodeVecI32x4Ne OpcodeVec = 0x38 - OpcodeVecI32x4LtS OpcodeVec = 0x39 - OpcodeVecI32x4LtU OpcodeVec = 0x3a - OpcodeVecI32x4GtS OpcodeVec = 0x3b - OpcodeVecI32x4GtU OpcodeVec = 0x3c - OpcodeVecI32x4LeS OpcodeVec = 0x3d - OpcodeVecI32x4LeU OpcodeVec = 0x3e - OpcodeVecI32x4GeS OpcodeVec = 0x3f - OpcodeVecI32x4GeU OpcodeVec = 0x40 - - // i64 comparisons. - - OpcodeVecI64x2Eq OpcodeVec = 0xd6 - OpcodeVecI64x2Ne OpcodeVec = 0xd7 - OpcodeVecI64x2LtS OpcodeVec = 0xd8 - OpcodeVecI64x2GtS OpcodeVec = 0xd9 - OpcodeVecI64x2LeS OpcodeVec = 0xda - OpcodeVecI64x2GeS OpcodeVec = 0xdb - - // f32 comparisons. - - OpcodeVecF32x4Eq OpcodeVec = 0x41 - OpcodeVecF32x4Ne OpcodeVec = 0x42 - OpcodeVecF32x4Lt OpcodeVec = 0x43 - OpcodeVecF32x4Gt OpcodeVec = 0x44 - OpcodeVecF32x4Le OpcodeVec = 0x45 - OpcodeVecF32x4Ge OpcodeVec = 0x46 - - // f64 comparisons. - - OpcodeVecF64x2Eq OpcodeVec = 0x47 - OpcodeVecF64x2Ne OpcodeVec = 0x48 - OpcodeVecF64x2Lt OpcodeVec = 0x49 - OpcodeVecF64x2Gt OpcodeVec = 0x4a - OpcodeVecF64x2Le OpcodeVec = 0x4b - OpcodeVecF64x2Ge OpcodeVec = 0x4c - - // v128 logical instructions. - - OpcodeVecV128Not OpcodeVec = 0x4d - OpcodeVecV128And OpcodeVec = 0x4e - OpcodeVecV128AndNot OpcodeVec = 0x4f - OpcodeVecV128Or OpcodeVec = 0x50 - OpcodeVecV128Xor OpcodeVec = 0x51 - OpcodeVecV128Bitselect OpcodeVec = 0x52 - OpcodeVecV128AnyTrue OpcodeVec = 0x53 - - // i8 misc. - - OpcodeVecI8x16Abs OpcodeVec = 0x60 - OpcodeVecI8x16Neg OpcodeVec = 0x61 - OpcodeVecI8x16Popcnt OpcodeVec = 0x62 - OpcodeVecI8x16AllTrue OpcodeVec = 0x63 - OpcodeVecI8x16BitMask OpcodeVec = 0x64 - OpcodeVecI8x16NarrowI16x8S OpcodeVec = 0x65 - OpcodeVecI8x16NarrowI16x8U OpcodeVec = 0x66 - - OpcodeVecI8x16Shl OpcodeVec = 0x6b - OpcodeVecI8x16ShrS OpcodeVec = 0x6c - OpcodeVecI8x16ShrU OpcodeVec = 0x6d - OpcodeVecI8x16Add OpcodeVec = 0x6e - OpcodeVecI8x16AddSatS OpcodeVec = 0x6f - - OpcodeVecI8x16AddSatU OpcodeVec = 0x70 - OpcodeVecI8x16Sub OpcodeVec = 0x71 - OpcodeVecI8x16SubSatS OpcodeVec = 0x72 - OpcodeVecI8x16SubSatU OpcodeVec = 0x73 - OpcodeVecI8x16MinS OpcodeVec = 0x76 - OpcodeVecI8x16MinU OpcodeVec = 0x77 - OpcodeVecI8x16MaxS OpcodeVec = 0x78 - OpcodeVecI8x16MaxU OpcodeVec = 0x79 - OpcodeVecI8x16AvgrU OpcodeVec = 0x7b - - // i16 misc. - - OpcodeVecI16x8ExtaddPairwiseI8x16S OpcodeVec = 0x7c - OpcodeVecI16x8ExtaddPairwiseI8x16U OpcodeVec = 0x7d - OpcodeVecI16x8Abs OpcodeVec = 0x80 - OpcodeVecI16x8Neg OpcodeVec = 0x81 - OpcodeVecI16x8Q15mulrSatS OpcodeVec = 0x82 - OpcodeVecI16x8AllTrue OpcodeVec = 0x83 - OpcodeVecI16x8BitMask OpcodeVec = 0x84 - OpcodeVecI16x8NarrowI32x4S OpcodeVec = 0x85 - OpcodeVecI16x8NarrowI32x4U OpcodeVec = 0x86 - OpcodeVecI16x8ExtendLowI8x16S OpcodeVec = 0x87 - OpcodeVecI16x8ExtendHighI8x16S OpcodeVec = 0x88 - OpcodeVecI16x8ExtendLowI8x16U OpcodeVec = 0x89 - OpcodeVecI16x8ExtendHighI8x16U OpcodeVec = 0x8a - OpcodeVecI16x8Shl OpcodeVec = 0x8b - OpcodeVecI16x8ShrS OpcodeVec = 0x8c - OpcodeVecI16x8ShrU OpcodeVec = 0x8d - OpcodeVecI16x8Add OpcodeVec = 0x8e - OpcodeVecI16x8AddSatS OpcodeVec = 0x8f - OpcodeVecI16x8AddSatU OpcodeVec = 0x90 - OpcodeVecI16x8Sub OpcodeVec = 0x91 - OpcodeVecI16x8SubSatS OpcodeVec = 0x92 - OpcodeVecI16x8SubSatU OpcodeVec = 0x93 - OpcodeVecI16x8Mul OpcodeVec = 0x95 - OpcodeVecI16x8MinS OpcodeVec = 0x96 - OpcodeVecI16x8MinU OpcodeVec = 0x97 - OpcodeVecI16x8MaxS OpcodeVec = 0x98 - OpcodeVecI16x8MaxU OpcodeVec = 0x99 - OpcodeVecI16x8AvgrU OpcodeVec = 0x9b - OpcodeVecI16x8ExtMulLowI8x16S OpcodeVec = 0x9c - OpcodeVecI16x8ExtMulHighI8x16S OpcodeVec = 0x9d - OpcodeVecI16x8ExtMulLowI8x16U OpcodeVec = 0x9e - OpcodeVecI16x8ExtMulHighI8x16U OpcodeVec = 0x9f - - // i32 misc. - - OpcodeVecI32x4ExtaddPairwiseI16x8S OpcodeVec = 0x7e - OpcodeVecI32x4ExtaddPairwiseI16x8U OpcodeVec = 0x7f - OpcodeVecI32x4Abs OpcodeVec = 0xa0 - OpcodeVecI32x4Neg OpcodeVec = 0xa1 - OpcodeVecI32x4AllTrue OpcodeVec = 0xa3 - OpcodeVecI32x4BitMask OpcodeVec = 0xa4 - OpcodeVecI32x4ExtendLowI16x8S OpcodeVec = 0xa7 - OpcodeVecI32x4ExtendHighI16x8S OpcodeVec = 0xa8 - OpcodeVecI32x4ExtendLowI16x8U OpcodeVec = 0xa9 - OpcodeVecI32x4ExtendHighI16x8U OpcodeVec = 0xaa - OpcodeVecI32x4Shl OpcodeVec = 0xab - OpcodeVecI32x4ShrS OpcodeVec = 0xac - OpcodeVecI32x4ShrU OpcodeVec = 0xad - OpcodeVecI32x4Add OpcodeVec = 0xae - OpcodeVecI32x4Sub OpcodeVec = 0xb1 - OpcodeVecI32x4Mul OpcodeVec = 0xb5 - OpcodeVecI32x4MinS OpcodeVec = 0xb6 - OpcodeVecI32x4MinU OpcodeVec = 0xb7 - OpcodeVecI32x4MaxS OpcodeVec = 0xb8 - OpcodeVecI32x4MaxU OpcodeVec = 0xb9 - OpcodeVecI32x4DotI16x8S OpcodeVec = 0xba - OpcodeVecI32x4ExtMulLowI16x8S OpcodeVec = 0xbc - OpcodeVecI32x4ExtMulHighI16x8S OpcodeVec = 0xbd - OpcodeVecI32x4ExtMulLowI16x8U OpcodeVec = 0xbe - OpcodeVecI32x4ExtMulHighI16x8U OpcodeVec = 0xbf - - // i64 misc. - - OpcodeVecI64x2Abs OpcodeVec = 0xc0 - OpcodeVecI64x2Neg OpcodeVec = 0xc1 - OpcodeVecI64x2AllTrue OpcodeVec = 0xc3 - OpcodeVecI64x2BitMask OpcodeVec = 0xc4 - OpcodeVecI64x2ExtendLowI32x4S OpcodeVec = 0xc7 - OpcodeVecI64x2ExtendHighI32x4S OpcodeVec = 0xc8 - OpcodeVecI64x2ExtendLowI32x4U OpcodeVec = 0xc9 - OpcodeVecI64x2ExtendHighI32x4U OpcodeVec = 0xca - OpcodeVecI64x2Shl OpcodeVec = 0xcb - OpcodeVecI64x2ShrS OpcodeVec = 0xcc - OpcodeVecI64x2ShrU OpcodeVec = 0xcd - OpcodeVecI64x2Add OpcodeVec = 0xce - OpcodeVecI64x2Sub OpcodeVec = 0xd1 - OpcodeVecI64x2Mul OpcodeVec = 0xd5 - OpcodeVecI64x2ExtMulLowI32x4S OpcodeVec = 0xdc - OpcodeVecI64x2ExtMulHighI32x4S OpcodeVec = 0xdd - OpcodeVecI64x2ExtMulLowI32x4U OpcodeVec = 0xde - OpcodeVecI64x2ExtMulHighI32x4U OpcodeVec = 0xdf - - // f32 misc. - - OpcodeVecF32x4Ceil OpcodeVec = 0x67 - OpcodeVecF32x4Floor OpcodeVec = 0x68 - OpcodeVecF32x4Trunc OpcodeVec = 0x69 - OpcodeVecF32x4Nearest OpcodeVec = 0x6a - OpcodeVecF32x4Abs OpcodeVec = 0xe0 - OpcodeVecF32x4Neg OpcodeVec = 0xe1 - OpcodeVecF32x4Sqrt OpcodeVec = 0xe3 - OpcodeVecF32x4Add OpcodeVec = 0xe4 - OpcodeVecF32x4Sub OpcodeVec = 0xe5 - OpcodeVecF32x4Mul OpcodeVec = 0xe6 - OpcodeVecF32x4Div OpcodeVec = 0xe7 - OpcodeVecF32x4Min OpcodeVec = 0xe8 - OpcodeVecF32x4Max OpcodeVec = 0xe9 - OpcodeVecF32x4Pmin OpcodeVec = 0xea - OpcodeVecF32x4Pmax OpcodeVec = 0xeb - - // f64 misc. - - OpcodeVecF64x2Ceil OpcodeVec = 0x74 - OpcodeVecF64x2Floor OpcodeVec = 0x75 - OpcodeVecF64x2Trunc OpcodeVec = 0x7a - OpcodeVecF64x2Nearest OpcodeVec = 0x94 - OpcodeVecF64x2Abs OpcodeVec = 0xec - OpcodeVecF64x2Neg OpcodeVec = 0xed - OpcodeVecF64x2Sqrt OpcodeVec = 0xef - OpcodeVecF64x2Add OpcodeVec = 0xf0 - OpcodeVecF64x2Sub OpcodeVec = 0xf1 - OpcodeVecF64x2Mul OpcodeVec = 0xf2 - OpcodeVecF64x2Div OpcodeVec = 0xf3 - OpcodeVecF64x2Min OpcodeVec = 0xf4 - OpcodeVecF64x2Max OpcodeVec = 0xf5 - OpcodeVecF64x2Pmin OpcodeVec = 0xf6 - OpcodeVecF64x2Pmax OpcodeVec = 0xf7 - - // conversions. - - OpcodeVecI32x4TruncSatF32x4S OpcodeVec = 0xf8 - OpcodeVecI32x4TruncSatF32x4U OpcodeVec = 0xf9 - OpcodeVecF32x4ConvertI32x4S OpcodeVec = 0xfa - OpcodeVecF32x4ConvertI32x4U OpcodeVec = 0xfb - OpcodeVecI32x4TruncSatF64x2SZero OpcodeVec = 0xfc - OpcodeVecI32x4TruncSatF64x2UZero OpcodeVec = 0xfd - OpcodeVecF64x2ConvertLowI32x4S OpcodeVec = 0xfe - OpcodeVecF64x2ConvertLowI32x4U OpcodeVec = 0xff - OpcodeVecF32x4DemoteF64x2Zero OpcodeVec = 0x5e - OpcodeVecF64x2PromoteLowF32x4Zero OpcodeVec = 0x5f -) - -// OpcodeAtomic represents an opcode of atomic instructions which has -// multi-byte encoding and is prefixed by OpcodeAtomicPrefix. -// -// These opcodes are toggled with CoreFeaturesThreads. -type OpcodeAtomic = byte - -const ( - // OpcodeAtomicMemoryNotify represents the instruction memory.atomic.notify. - OpcodeAtomicMemoryNotify OpcodeAtomic = 0x00 - // OpcodeAtomicMemoryWait32 represents the instruction memory.atomic.wait32. - OpcodeAtomicMemoryWait32 OpcodeAtomic = 0x01 - // OpcodeAtomicMemoryWait64 represents the instruction memory.atomic.wait64. - OpcodeAtomicMemoryWait64 OpcodeAtomic = 0x02 - // OpcodeAtomicFence represents the instruction atomic.fence. - OpcodeAtomicFence OpcodeAtomic = 0x03 - - // OpcodeAtomicI32Load represents the instruction i32.atomic.load. - OpcodeAtomicI32Load OpcodeAtomic = 0x10 - // OpcodeAtomicI64Load represents the instruction i64.atomic.load. - OpcodeAtomicI64Load OpcodeAtomic = 0x11 - // OpcodeAtomicI32Load8U represents the instruction i32.atomic.load8_u. - OpcodeAtomicI32Load8U OpcodeAtomic = 0x12 - // OpcodeAtomicI32Load16U represents the instruction i32.atomic.load16_u. - OpcodeAtomicI32Load16U OpcodeAtomic = 0x13 - // OpcodeAtomicI64Load8U represents the instruction i64.atomic.load8_u. - OpcodeAtomicI64Load8U OpcodeAtomic = 0x14 - // OpcodeAtomicI64Load16U represents the instruction i64.atomic.load16_u. - OpcodeAtomicI64Load16U OpcodeAtomic = 0x15 - // OpcodeAtomicI64Load32U represents the instruction i64.atomic.load32_u. - OpcodeAtomicI64Load32U OpcodeAtomic = 0x16 - // OpcodeAtomicI32Store represents the instruction i32.atomic.store. - OpcodeAtomicI32Store OpcodeAtomic = 0x17 - // OpcodeAtomicI64Store represents the instruction i64.atomic.store. - OpcodeAtomicI64Store OpcodeAtomic = 0x18 - // OpcodeAtomicI32Store8 represents the instruction i32.atomic.store8. - OpcodeAtomicI32Store8 OpcodeAtomic = 0x19 - // OpcodeAtomicI32Store16 represents the instruction i32.atomic.store16. - OpcodeAtomicI32Store16 OpcodeAtomic = 0x1a - // OpcodeAtomicI64Store8 represents the instruction i64.atomic.store8. - OpcodeAtomicI64Store8 OpcodeAtomic = 0x1b - // OpcodeAtomicI64Store16 represents the instruction i64.atomic.store16. - OpcodeAtomicI64Store16 OpcodeAtomic = 0x1c - // OpcodeAtomicI64Store32 represents the instruction i64.atomic.store32. - OpcodeAtomicI64Store32 OpcodeAtomic = 0x1d - - // OpcodeAtomicI32RmwAdd represents the instruction i32.atomic.rmw.add. - OpcodeAtomicI32RmwAdd OpcodeAtomic = 0x1e - // OpcodeAtomicI64RmwAdd represents the instruction i64.atomic.rmw.add. - OpcodeAtomicI64RmwAdd OpcodeAtomic = 0x1f - // OpcodeAtomicI32Rmw8AddU represents the instruction i32.atomic.rmw8.add_u. - OpcodeAtomicI32Rmw8AddU OpcodeAtomic = 0x20 - // OpcodeAtomicI32Rmw16AddU represents the instruction i32.atomic.rmw16.add_u. - OpcodeAtomicI32Rmw16AddU OpcodeAtomic = 0x21 - // OpcodeAtomicI64Rmw8AddU represents the instruction i64.atomic.rmw8.add_u. - OpcodeAtomicI64Rmw8AddU OpcodeAtomic = 0x22 - // OpcodeAtomicI64Rmw16AddU represents the instruction i64.atomic.rmw16.add_u. - OpcodeAtomicI64Rmw16AddU OpcodeAtomic = 0x23 - // OpcodeAtomicI64Rmw32AddU represents the instruction i64.atomic.rmw32.add_u. - OpcodeAtomicI64Rmw32AddU OpcodeAtomic = 0x24 - - // OpcodeAtomicI32RmwSub represents the instruction i32.atomic.rmw.sub. - OpcodeAtomicI32RmwSub OpcodeAtomic = 0x25 - // OpcodeAtomicI64RmwSub represents the instruction i64.atomic.rmw.sub. - OpcodeAtomicI64RmwSub OpcodeAtomic = 0x26 - // OpcodeAtomicI32Rmw8SubU represents the instruction i32.atomic.rmw8.sub_u. - OpcodeAtomicI32Rmw8SubU OpcodeAtomic = 0x27 - // OpcodeAtomicI32Rmw16SubU represents the instruction i32.atomic.rmw16.sub_u. - OpcodeAtomicI32Rmw16SubU OpcodeAtomic = 0x28 - // OpcodeAtomicI64Rmw8SubU represents the instruction i64.atomic.rmw8.sub_u. - OpcodeAtomicI64Rmw8SubU OpcodeAtomic = 0x29 - // OpcodeAtomicI64Rmw16SubU represents the instruction i64.atomic.rmw16.sub_u. - OpcodeAtomicI64Rmw16SubU OpcodeAtomic = 0x2a - // OpcodeAtomicI64Rmw32SubU represents the instruction i64.atomic.rmw32.sub_u. - OpcodeAtomicI64Rmw32SubU OpcodeAtomic = 0x2b - - // OpcodeAtomicI32RmwAnd represents the instruction i32.atomic.rmw.and. - OpcodeAtomicI32RmwAnd OpcodeAtomic = 0x2c - // OpcodeAtomicI64RmwAnd represents the instruction i64.atomic.rmw.and. - OpcodeAtomicI64RmwAnd OpcodeAtomic = 0x2d - // OpcodeAtomicI32Rmw8AndU represents the instruction i32.atomic.rmw8.and_u. - OpcodeAtomicI32Rmw8AndU OpcodeAtomic = 0x2e - // OpcodeAtomicI32Rmw16AndU represents the instruction i32.atomic.rmw16.and_u. - OpcodeAtomicI32Rmw16AndU OpcodeAtomic = 0x2f - // OpcodeAtomicI64Rmw8AndU represents the instruction i64.atomic.rmw8.and_u. - OpcodeAtomicI64Rmw8AndU OpcodeAtomic = 0x30 - // OpcodeAtomicI64Rmw16AndU represents the instruction i64.atomic.rmw16.and_u. - OpcodeAtomicI64Rmw16AndU OpcodeAtomic = 0x31 - // OpcodeAtomicI64Rmw32AndU represents the instruction i64.atomic.rmw32.and_u. - OpcodeAtomicI64Rmw32AndU OpcodeAtomic = 0x32 - - // OpcodeAtomicI32RmwOr represents the instruction i32.atomic.rmw.or. - OpcodeAtomicI32RmwOr OpcodeAtomic = 0x33 - // OpcodeAtomicI64RmwOr represents the instruction i64.atomic.rmw.or. - OpcodeAtomicI64RmwOr OpcodeAtomic = 0x34 - // OpcodeAtomicI32Rmw8OrU represents the instruction i32.atomic.rmw8.or_u. - OpcodeAtomicI32Rmw8OrU OpcodeAtomic = 0x35 - // OpcodeAtomicI32Rmw16OrU represents the instruction i32.atomic.rmw16.or_u. - OpcodeAtomicI32Rmw16OrU OpcodeAtomic = 0x36 - // OpcodeAtomicI64Rmw8OrU represents the instruction i64.atomic.rmw8.or_u. - OpcodeAtomicI64Rmw8OrU OpcodeAtomic = 0x37 - // OpcodeAtomicI64Rmw16OrU represents the instruction i64.atomic.rmw16.or_u. - OpcodeAtomicI64Rmw16OrU OpcodeAtomic = 0x38 - // OpcodeAtomicI64Rmw32OrU represents the instruction i64.atomic.rmw32.or_u. - OpcodeAtomicI64Rmw32OrU OpcodeAtomic = 0x39 - - // OpcodeAtomicI32RmwXor represents the instruction i32.atomic.rmw.xor. - OpcodeAtomicI32RmwXor OpcodeAtomic = 0x3a - // OpcodeAtomicI64RmwXor represents the instruction i64.atomic.rmw.xor. - OpcodeAtomicI64RmwXor OpcodeAtomic = 0x3b - // OpcodeAtomicI32Rmw8XorU represents the instruction i32.atomic.rmw8.xor_u. - OpcodeAtomicI32Rmw8XorU OpcodeAtomic = 0x3c - // OpcodeAtomicI32Rmw16XorU represents the instruction i32.atomic.rmw16.xor_u. - OpcodeAtomicI32Rmw16XorU OpcodeAtomic = 0x3d - // OpcodeAtomicI64Rmw8XorU represents the instruction i64.atomic.rmw8.xor_u. - OpcodeAtomicI64Rmw8XorU OpcodeAtomic = 0x3e - // OpcodeAtomicI64Rmw16XorU represents the instruction i64.atomic.rmw16.xor_u. - OpcodeAtomicI64Rmw16XorU OpcodeAtomic = 0x3f - // OpcodeAtomicI64Rmw32XorU represents the instruction i64.atomic.rmw32.xor_u. - OpcodeAtomicI64Rmw32XorU OpcodeAtomic = 0x40 - - // OpcodeAtomicI32RmwXchg represents the instruction i32.atomic.rmw.xchg. - OpcodeAtomicI32RmwXchg OpcodeAtomic = 0x41 - // OpcodeAtomicI64RmwXchg represents the instruction i64.atomic.rmw.xchg. - OpcodeAtomicI64RmwXchg OpcodeAtomic = 0x42 - // OpcodeAtomicI32Rmw8XchgU represents the instruction i32.atomic.rmw8.xchg_u. - OpcodeAtomicI32Rmw8XchgU OpcodeAtomic = 0x43 - // OpcodeAtomicI32Rmw16XchgU represents the instruction i32.atomic.rmw16.xchg_u. - OpcodeAtomicI32Rmw16XchgU OpcodeAtomic = 0x44 - // OpcodeAtomicI64Rmw8XchgU represents the instruction i64.atomic.rmw8.xchg_u. - OpcodeAtomicI64Rmw8XchgU OpcodeAtomic = 0x45 - // OpcodeAtomicI64Rmw16XchgU represents the instruction i64.atomic.rmw16.xchg_u. - OpcodeAtomicI64Rmw16XchgU OpcodeAtomic = 0x46 - // OpcodeAtomicI64Rmw32XchgU represents the instruction i64.atomic.rmw32.xchg_u. - OpcodeAtomicI64Rmw32XchgU OpcodeAtomic = 0x47 - - // OpcodeAtomicI32RmwCmpxchg represents the instruction i32.atomic.rmw.cmpxchg. - OpcodeAtomicI32RmwCmpxchg OpcodeAtomic = 0x48 - // OpcodeAtomicI64RmwCmpxchg represents the instruction i64.atomic.rmw.cmpxchg. - OpcodeAtomicI64RmwCmpxchg OpcodeAtomic = 0x49 - // OpcodeAtomicI32Rmw8CmpxchgU represents the instruction i32.atomic.rmw8.cmpxchg_u. - OpcodeAtomicI32Rmw8CmpxchgU OpcodeAtomic = 0x4a - // OpcodeAtomicI32Rmw16CmpxchgU represents the instruction i32.atomic.rmw16.cmpxchg_u. - OpcodeAtomicI32Rmw16CmpxchgU OpcodeAtomic = 0x4b - // OpcodeAtomicI64Rmw8CmpxchgU represents the instruction i64.atomic.rmw8.cmpxchg_u. - OpcodeAtomicI64Rmw8CmpxchgU OpcodeAtomic = 0x4c - // OpcodeAtomicI64Rmw16CmpxchgU represents the instruction i64.atomic.rmw16.cmpxchg_u. - OpcodeAtomicI64Rmw16CmpxchgU OpcodeAtomic = 0x4d - // OpcodeAtomicI64Rmw32CmpxchgU represents the instruction i64.atomic.rmw32.cmpxchg_u. - OpcodeAtomicI64Rmw32CmpxchgU OpcodeAtomic = 0x4e -) - -const ( - OpcodeUnreachableName = "unreachable" - OpcodeNopName = "nop" - OpcodeBlockName = "block" - OpcodeLoopName = "loop" - OpcodeIfName = "if" - OpcodeElseName = "else" - OpcodeEndName = "end" - OpcodeBrName = "br" - OpcodeBrIfName = "br_if" - OpcodeBrTableName = "br_table" - OpcodeReturnName = "return" - OpcodeCallName = "call" - OpcodeCallIndirectName = "call_indirect" - OpcodeDropName = "drop" - OpcodeSelectName = "select" - OpcodeTypedSelectName = "typed_select" - OpcodeLocalGetName = "local.get" - OpcodeLocalSetName = "local.set" - OpcodeLocalTeeName = "local.tee" - OpcodeGlobalGetName = "global.get" - OpcodeGlobalSetName = "global.set" - OpcodeI32LoadName = "i32.load" - OpcodeI64LoadName = "i64.load" - OpcodeF32LoadName = "f32.load" - OpcodeF64LoadName = "f64.load" - OpcodeI32Load8SName = "i32.load8_s" - OpcodeI32Load8UName = "i32.load8_u" - OpcodeI32Load16SName = "i32.load16_s" - OpcodeI32Load16UName = "i32.load16_u" - OpcodeI64Load8SName = "i64.load8_s" - OpcodeI64Load8UName = "i64.load8_u" - OpcodeI64Load16SName = "i64.load16_s" - OpcodeI64Load16UName = "i64.load16_u" - OpcodeI64Load32SName = "i64.load32_s" - OpcodeI64Load32UName = "i64.load32_u" - OpcodeI32StoreName = "i32.store" - OpcodeI64StoreName = "i64.store" - OpcodeF32StoreName = "f32.store" - OpcodeF64StoreName = "f64.store" - OpcodeI32Store8Name = "i32.store8" - OpcodeI32Store16Name = "i32.store16" - OpcodeI64Store8Name = "i64.store8" - OpcodeI64Store16Name = "i64.store16" - OpcodeI64Store32Name = "i64.store32" - OpcodeMemorySizeName = "memory.size" - OpcodeMemoryGrowName = "memory.grow" - OpcodeI32ConstName = "i32.const" - OpcodeI64ConstName = "i64.const" - OpcodeF32ConstName = "f32.const" - OpcodeF64ConstName = "f64.const" - OpcodeI32EqzName = "i32.eqz" - OpcodeI32EqName = "i32.eq" - OpcodeI32NeName = "i32.ne" - OpcodeI32LtSName = "i32.lt_s" - OpcodeI32LtUName = "i32.lt_u" - OpcodeI32GtSName = "i32.gt_s" - OpcodeI32GtUName = "i32.gt_u" - OpcodeI32LeSName = "i32.le_s" - OpcodeI32LeUName = "i32.le_u" - OpcodeI32GeSName = "i32.ge_s" - OpcodeI32GeUName = "i32.ge_u" - OpcodeI64EqzName = "i64.eqz" - OpcodeI64EqName = "i64.eq" - OpcodeI64NeName = "i64.ne" - OpcodeI64LtSName = "i64.lt_s" - OpcodeI64LtUName = "i64.lt_u" - OpcodeI64GtSName = "i64.gt_s" - OpcodeI64GtUName = "i64.gt_u" - OpcodeI64LeSName = "i64.le_s" - OpcodeI64LeUName = "i64.le_u" - OpcodeI64GeSName = "i64.ge_s" - OpcodeI64GeUName = "i64.ge_u" - OpcodeF32EqName = "f32.eq" - OpcodeF32NeName = "f32.ne" - OpcodeF32LtName = "f32.lt" - OpcodeF32GtName = "f32.gt" - OpcodeF32LeName = "f32.le" - OpcodeF32GeName = "f32.ge" - OpcodeF64EqName = "f64.eq" - OpcodeF64NeName = "f64.ne" - OpcodeF64LtName = "f64.lt" - OpcodeF64GtName = "f64.gt" - OpcodeF64LeName = "f64.le" - OpcodeF64GeName = "f64.ge" - OpcodeI32ClzName = "i32.clz" - OpcodeI32CtzName = "i32.ctz" - OpcodeI32PopcntName = "i32.popcnt" - OpcodeI32AddName = "i32.add" - OpcodeI32SubName = "i32.sub" - OpcodeI32MulName = "i32.mul" - OpcodeI32DivSName = "i32.div_s" - OpcodeI32DivUName = "i32.div_u" - OpcodeI32RemSName = "i32.rem_s" - OpcodeI32RemUName = "i32.rem_u" - OpcodeI32AndName = "i32.and" - OpcodeI32OrName = "i32.or" - OpcodeI32XorName = "i32.xor" - OpcodeI32ShlName = "i32.shl" - OpcodeI32ShrSName = "i32.shr_s" - OpcodeI32ShrUName = "i32.shr_u" - OpcodeI32RotlName = "i32.rotl" - OpcodeI32RotrName = "i32.rotr" - OpcodeI64ClzName = "i64.clz" - OpcodeI64CtzName = "i64.ctz" - OpcodeI64PopcntName = "i64.popcnt" - OpcodeI64AddName = "i64.add" - OpcodeI64SubName = "i64.sub" - OpcodeI64MulName = "i64.mul" - OpcodeI64DivSName = "i64.div_s" - OpcodeI64DivUName = "i64.div_u" - OpcodeI64RemSName = "i64.rem_s" - OpcodeI64RemUName = "i64.rem_u" - OpcodeI64AndName = "i64.and" - OpcodeI64OrName = "i64.or" - OpcodeI64XorName = "i64.xor" - OpcodeI64ShlName = "i64.shl" - OpcodeI64ShrSName = "i64.shr_s" - OpcodeI64ShrUName = "i64.shr_u" - OpcodeI64RotlName = "i64.rotl" - OpcodeI64RotrName = "i64.rotr" - OpcodeF32AbsName = "f32.abs" - OpcodeF32NegName = "f32.neg" - OpcodeF32CeilName = "f32.ceil" - OpcodeF32FloorName = "f32.floor" - OpcodeF32TruncName = "f32.trunc" - OpcodeF32NearestName = "f32.nearest" - OpcodeF32SqrtName = "f32.sqrt" - OpcodeF32AddName = "f32.add" - OpcodeF32SubName = "f32.sub" - OpcodeF32MulName = "f32.mul" - OpcodeF32DivName = "f32.div" - OpcodeF32MinName = "f32.min" - OpcodeF32MaxName = "f32.max" - OpcodeF32CopysignName = "f32.copysign" - OpcodeF64AbsName = "f64.abs" - OpcodeF64NegName = "f64.neg" - OpcodeF64CeilName = "f64.ceil" - OpcodeF64FloorName = "f64.floor" - OpcodeF64TruncName = "f64.trunc" - OpcodeF64NearestName = "f64.nearest" - OpcodeF64SqrtName = "f64.sqrt" - OpcodeF64AddName = "f64.add" - OpcodeF64SubName = "f64.sub" - OpcodeF64MulName = "f64.mul" - OpcodeF64DivName = "f64.div" - OpcodeF64MinName = "f64.min" - OpcodeF64MaxName = "f64.max" - OpcodeF64CopysignName = "f64.copysign" - OpcodeI32WrapI64Name = "i32.wrap_i64" - OpcodeI32TruncF32SName = "i32.trunc_f32_s" - OpcodeI32TruncF32UName = "i32.trunc_f32_u" - OpcodeI32TruncF64SName = "i32.trunc_f64_s" - OpcodeI32TruncF64UName = "i32.trunc_f64_u" - OpcodeI64ExtendI32SName = "i64.extend_i32_s" - OpcodeI64ExtendI32UName = "i64.extend_i32_u" - OpcodeI64TruncF32SName = "i64.trunc_f32_s" - OpcodeI64TruncF32UName = "i64.trunc_f32_u" - OpcodeI64TruncF64SName = "i64.trunc_f64_s" - OpcodeI64TruncF64UName = "i64.trunc_f64_u" - OpcodeF32ConvertI32SName = "f32.convert_i32_s" - OpcodeF32ConvertI32UName = "f32.convert_i32_u" - OpcodeF32ConvertI64SName = "f32.convert_i64_s" - OpcodeF32ConvertI64UName = "f32.convert_i64u" - OpcodeF32DemoteF64Name = "f32.demote_f64" - OpcodeF64ConvertI32SName = "f64.convert_i32_s" - OpcodeF64ConvertI32UName = "f64.convert_i32_u" - OpcodeF64ConvertI64SName = "f64.convert_i64_s" - OpcodeF64ConvertI64UName = "f64.convert_i64_u" - OpcodeF64PromoteF32Name = "f64.promote_f32" - OpcodeI32ReinterpretF32Name = "i32.reinterpret_f32" - OpcodeI64ReinterpretF64Name = "i64.reinterpret_f64" - OpcodeF32ReinterpretI32Name = "f32.reinterpret_i32" - OpcodeF64ReinterpretI64Name = "f64.reinterpret_i64" - - OpcodeRefNullName = "ref.null" - OpcodeRefIsNullName = "ref.is_null" - OpcodeRefFuncName = "ref.func" - - OpcodeTableGetName = "table.get" - OpcodeTableSetName = "table.set" - - // Below are toggled with CoreFeatureSignExtensionOps - - OpcodeI32Extend8SName = "i32.extend8_s" - OpcodeI32Extend16SName = "i32.extend16_s" - OpcodeI64Extend8SName = "i64.extend8_s" - OpcodeI64Extend16SName = "i64.extend16_s" - OpcodeI64Extend32SName = "i64.extend32_s" - - OpcodeMiscPrefixName = "misc_prefix" - OpcodeVecPrefixName = "vector_prefix" - OpcodeAtomicPrefixName = "atomic_prefix" -) - -var instructionNames = [256]string{ - OpcodeUnreachable: OpcodeUnreachableName, - OpcodeNop: OpcodeNopName, - OpcodeBlock: OpcodeBlockName, - OpcodeLoop: OpcodeLoopName, - OpcodeIf: OpcodeIfName, - OpcodeElse: OpcodeElseName, - OpcodeEnd: OpcodeEndName, - OpcodeBr: OpcodeBrName, - OpcodeBrIf: OpcodeBrIfName, - OpcodeBrTable: OpcodeBrTableName, - OpcodeReturn: OpcodeReturnName, - OpcodeCall: OpcodeCallName, - OpcodeCallIndirect: OpcodeCallIndirectName, - OpcodeDrop: OpcodeDropName, - OpcodeSelect: OpcodeSelectName, - OpcodeTypedSelect: OpcodeTypedSelectName, - OpcodeLocalGet: OpcodeLocalGetName, - OpcodeLocalSet: OpcodeLocalSetName, - OpcodeLocalTee: OpcodeLocalTeeName, - OpcodeGlobalGet: OpcodeGlobalGetName, - OpcodeGlobalSet: OpcodeGlobalSetName, - OpcodeI32Load: OpcodeI32LoadName, - OpcodeI64Load: OpcodeI64LoadName, - OpcodeF32Load: OpcodeF32LoadName, - OpcodeF64Load: OpcodeF64LoadName, - OpcodeI32Load8S: OpcodeI32Load8SName, - OpcodeI32Load8U: OpcodeI32Load8UName, - OpcodeI32Load16S: OpcodeI32Load16SName, - OpcodeI32Load16U: OpcodeI32Load16UName, - OpcodeI64Load8S: OpcodeI64Load8SName, - OpcodeI64Load8U: OpcodeI64Load8UName, - OpcodeI64Load16S: OpcodeI64Load16SName, - OpcodeI64Load16U: OpcodeI64Load16UName, - OpcodeI64Load32S: OpcodeI64Load32SName, - OpcodeI64Load32U: OpcodeI64Load32UName, - OpcodeI32Store: OpcodeI32StoreName, - OpcodeI64Store: OpcodeI64StoreName, - OpcodeF32Store: OpcodeF32StoreName, - OpcodeF64Store: OpcodeF64StoreName, - OpcodeI32Store8: OpcodeI32Store8Name, - OpcodeI32Store16: OpcodeI32Store16Name, - OpcodeI64Store8: OpcodeI64Store8Name, - OpcodeI64Store16: OpcodeI64Store16Name, - OpcodeI64Store32: OpcodeI64Store32Name, - OpcodeMemorySize: OpcodeMemorySizeName, - OpcodeMemoryGrow: OpcodeMemoryGrowName, - OpcodeI32Const: OpcodeI32ConstName, - OpcodeI64Const: OpcodeI64ConstName, - OpcodeF32Const: OpcodeF32ConstName, - OpcodeF64Const: OpcodeF64ConstName, - OpcodeI32Eqz: OpcodeI32EqzName, - OpcodeI32Eq: OpcodeI32EqName, - OpcodeI32Ne: OpcodeI32NeName, - OpcodeI32LtS: OpcodeI32LtSName, - OpcodeI32LtU: OpcodeI32LtUName, - OpcodeI32GtS: OpcodeI32GtSName, - OpcodeI32GtU: OpcodeI32GtUName, - OpcodeI32LeS: OpcodeI32LeSName, - OpcodeI32LeU: OpcodeI32LeUName, - OpcodeI32GeS: OpcodeI32GeSName, - OpcodeI32GeU: OpcodeI32GeUName, - OpcodeI64Eqz: OpcodeI64EqzName, - OpcodeI64Eq: OpcodeI64EqName, - OpcodeI64Ne: OpcodeI64NeName, - OpcodeI64LtS: OpcodeI64LtSName, - OpcodeI64LtU: OpcodeI64LtUName, - OpcodeI64GtS: OpcodeI64GtSName, - OpcodeI64GtU: OpcodeI64GtUName, - OpcodeI64LeS: OpcodeI64LeSName, - OpcodeI64LeU: OpcodeI64LeUName, - OpcodeI64GeS: OpcodeI64GeSName, - OpcodeI64GeU: OpcodeI64GeUName, - OpcodeF32Eq: OpcodeF32EqName, - OpcodeF32Ne: OpcodeF32NeName, - OpcodeF32Lt: OpcodeF32LtName, - OpcodeF32Gt: OpcodeF32GtName, - OpcodeF32Le: OpcodeF32LeName, - OpcodeF32Ge: OpcodeF32GeName, - OpcodeF64Eq: OpcodeF64EqName, - OpcodeF64Ne: OpcodeF64NeName, - OpcodeF64Lt: OpcodeF64LtName, - OpcodeF64Gt: OpcodeF64GtName, - OpcodeF64Le: OpcodeF64LeName, - OpcodeF64Ge: OpcodeF64GeName, - OpcodeI32Clz: OpcodeI32ClzName, - OpcodeI32Ctz: OpcodeI32CtzName, - OpcodeI32Popcnt: OpcodeI32PopcntName, - OpcodeI32Add: OpcodeI32AddName, - OpcodeI32Sub: OpcodeI32SubName, - OpcodeI32Mul: OpcodeI32MulName, - OpcodeI32DivS: OpcodeI32DivSName, - OpcodeI32DivU: OpcodeI32DivUName, - OpcodeI32RemS: OpcodeI32RemSName, - OpcodeI32RemU: OpcodeI32RemUName, - OpcodeI32And: OpcodeI32AndName, - OpcodeI32Or: OpcodeI32OrName, - OpcodeI32Xor: OpcodeI32XorName, - OpcodeI32Shl: OpcodeI32ShlName, - OpcodeI32ShrS: OpcodeI32ShrSName, - OpcodeI32ShrU: OpcodeI32ShrUName, - OpcodeI32Rotl: OpcodeI32RotlName, - OpcodeI32Rotr: OpcodeI32RotrName, - OpcodeI64Clz: OpcodeI64ClzName, - OpcodeI64Ctz: OpcodeI64CtzName, - OpcodeI64Popcnt: OpcodeI64PopcntName, - OpcodeI64Add: OpcodeI64AddName, - OpcodeI64Sub: OpcodeI64SubName, - OpcodeI64Mul: OpcodeI64MulName, - OpcodeI64DivS: OpcodeI64DivSName, - OpcodeI64DivU: OpcodeI64DivUName, - OpcodeI64RemS: OpcodeI64RemSName, - OpcodeI64RemU: OpcodeI64RemUName, - OpcodeI64And: OpcodeI64AndName, - OpcodeI64Or: OpcodeI64OrName, - OpcodeI64Xor: OpcodeI64XorName, - OpcodeI64Shl: OpcodeI64ShlName, - OpcodeI64ShrS: OpcodeI64ShrSName, - OpcodeI64ShrU: OpcodeI64ShrUName, - OpcodeI64Rotl: OpcodeI64RotlName, - OpcodeI64Rotr: OpcodeI64RotrName, - OpcodeF32Abs: OpcodeF32AbsName, - OpcodeF32Neg: OpcodeF32NegName, - OpcodeF32Ceil: OpcodeF32CeilName, - OpcodeF32Floor: OpcodeF32FloorName, - OpcodeF32Trunc: OpcodeF32TruncName, - OpcodeF32Nearest: OpcodeF32NearestName, - OpcodeF32Sqrt: OpcodeF32SqrtName, - OpcodeF32Add: OpcodeF32AddName, - OpcodeF32Sub: OpcodeF32SubName, - OpcodeF32Mul: OpcodeF32MulName, - OpcodeF32Div: OpcodeF32DivName, - OpcodeF32Min: OpcodeF32MinName, - OpcodeF32Max: OpcodeF32MaxName, - OpcodeF32Copysign: OpcodeF32CopysignName, - OpcodeF64Abs: OpcodeF64AbsName, - OpcodeF64Neg: OpcodeF64NegName, - OpcodeF64Ceil: OpcodeF64CeilName, - OpcodeF64Floor: OpcodeF64FloorName, - OpcodeF64Trunc: OpcodeF64TruncName, - OpcodeF64Nearest: OpcodeF64NearestName, - OpcodeF64Sqrt: OpcodeF64SqrtName, - OpcodeF64Add: OpcodeF64AddName, - OpcodeF64Sub: OpcodeF64SubName, - OpcodeF64Mul: OpcodeF64MulName, - OpcodeF64Div: OpcodeF64DivName, - OpcodeF64Min: OpcodeF64MinName, - OpcodeF64Max: OpcodeF64MaxName, - OpcodeF64Copysign: OpcodeF64CopysignName, - OpcodeI32WrapI64: OpcodeI32WrapI64Name, - OpcodeI32TruncF32S: OpcodeI32TruncF32SName, - OpcodeI32TruncF32U: OpcodeI32TruncF32UName, - OpcodeI32TruncF64S: OpcodeI32TruncF64SName, - OpcodeI32TruncF64U: OpcodeI32TruncF64UName, - OpcodeI64ExtendI32S: OpcodeI64ExtendI32SName, - OpcodeI64ExtendI32U: OpcodeI64ExtendI32UName, - OpcodeI64TruncF32S: OpcodeI64TruncF32SName, - OpcodeI64TruncF32U: OpcodeI64TruncF32UName, - OpcodeI64TruncF64S: OpcodeI64TruncF64SName, - OpcodeI64TruncF64U: OpcodeI64TruncF64UName, - OpcodeF32ConvertI32S: OpcodeF32ConvertI32SName, - OpcodeF32ConvertI32U: OpcodeF32ConvertI32UName, - OpcodeF32ConvertI64S: OpcodeF32ConvertI64SName, - OpcodeF32ConvertI64U: OpcodeF32ConvertI64UName, - OpcodeF32DemoteF64: OpcodeF32DemoteF64Name, - OpcodeF64ConvertI32S: OpcodeF64ConvertI32SName, - OpcodeF64ConvertI32U: OpcodeF64ConvertI32UName, - OpcodeF64ConvertI64S: OpcodeF64ConvertI64SName, - OpcodeF64ConvertI64U: OpcodeF64ConvertI64UName, - OpcodeF64PromoteF32: OpcodeF64PromoteF32Name, - OpcodeI32ReinterpretF32: OpcodeI32ReinterpretF32Name, - OpcodeI64ReinterpretF64: OpcodeI64ReinterpretF64Name, - OpcodeF32ReinterpretI32: OpcodeF32ReinterpretI32Name, - OpcodeF64ReinterpretI64: OpcodeF64ReinterpretI64Name, - - OpcodeRefNull: OpcodeRefNullName, - OpcodeRefIsNull: OpcodeRefIsNullName, - OpcodeRefFunc: OpcodeRefFuncName, - - OpcodeTableGet: OpcodeTableGetName, - OpcodeTableSet: OpcodeTableSetName, - - // Below are toggled with CoreFeatureSignExtensionOps - - OpcodeI32Extend8S: OpcodeI32Extend8SName, - OpcodeI32Extend16S: OpcodeI32Extend16SName, - OpcodeI64Extend8S: OpcodeI64Extend8SName, - OpcodeI64Extend16S: OpcodeI64Extend16SName, - OpcodeI64Extend32S: OpcodeI64Extend32SName, - - OpcodeMiscPrefix: OpcodeMiscPrefixName, - OpcodeVecPrefix: OpcodeVecPrefixName, -} - -// InstructionName returns the instruction corresponding to this binary Opcode. -// See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#a7-index-of-instructions -func InstructionName(oc Opcode) string { - return instructionNames[oc] -} - -const ( - OpcodeI32TruncSatF32SName = "i32.trunc_sat_f32_s" - OpcodeI32TruncSatF32UName = "i32.trunc_sat_f32_u" - OpcodeI32TruncSatF64SName = "i32.trunc_sat_f64_s" - OpcodeI32TruncSatF64UName = "i32.trunc_sat_f64_u" - OpcodeI64TruncSatF32SName = "i64.trunc_sat_f32_s" - OpcodeI64TruncSatF32UName = "i64.trunc_sat_f32_u" - OpcodeI64TruncSatF64SName = "i64.trunc_sat_f64_s" - OpcodeI64TruncSatF64UName = "i64.trunc_sat_f64_u" - - OpcodeMemoryInitName = "memory.init" - OpcodeDataDropName = "data.drop" - OpcodeMemoryCopyName = "memory.copy" - OpcodeMemoryFillName = "memory.fill" - OpcodeTableInitName = "table.init" - OpcodeElemDropName = "elem.drop" - OpcodeTableCopyName = "table.copy" - OpcodeTableGrowName = "table.grow" - OpcodeTableSizeName = "table.size" - OpcodeTableFillName = "table.fill" -) - -var miscInstructionNames = [256]string{ - OpcodeMiscI32TruncSatF32S: OpcodeI32TruncSatF32SName, - OpcodeMiscI32TruncSatF32U: OpcodeI32TruncSatF32UName, - OpcodeMiscI32TruncSatF64S: OpcodeI32TruncSatF64SName, - OpcodeMiscI32TruncSatF64U: OpcodeI32TruncSatF64UName, - OpcodeMiscI64TruncSatF32S: OpcodeI64TruncSatF32SName, - OpcodeMiscI64TruncSatF32U: OpcodeI64TruncSatF32UName, - OpcodeMiscI64TruncSatF64S: OpcodeI64TruncSatF64SName, - OpcodeMiscI64TruncSatF64U: OpcodeI64TruncSatF64UName, - - OpcodeMiscMemoryInit: OpcodeMemoryInitName, - OpcodeMiscDataDrop: OpcodeDataDropName, - OpcodeMiscMemoryCopy: OpcodeMemoryCopyName, - OpcodeMiscMemoryFill: OpcodeMemoryFillName, - OpcodeMiscTableInit: OpcodeTableInitName, - OpcodeMiscElemDrop: OpcodeElemDropName, - OpcodeMiscTableCopy: OpcodeTableCopyName, - OpcodeMiscTableGrow: OpcodeTableGrowName, - OpcodeMiscTableSize: OpcodeTableSizeName, - OpcodeMiscTableFill: OpcodeTableFillName, -} - -// MiscInstructionName returns the instruction corresponding to this miscellaneous Opcode. -func MiscInstructionName(oc OpcodeMisc) string { - return miscInstructionNames[oc] -} - -const ( - OpcodeVecV128LoadName = "v128.load" - OpcodeVecV128Load8x8SName = "v128.load8x8_s" - OpcodeVecV128Load8x8UName = "v128.load8x8_u" - OpcodeVecV128Load16x4SName = "v128.load16x4_s" - OpcodeVecV128Load16x4UName = "v128.load16x4_u" - OpcodeVecV128Load32x2SName = "v128.load32x2_s" - OpcodeVecV128Load32x2UName = "v128.load32x2_u" - OpcodeVecV128Load8SplatName = "v128.load8_splat" - OpcodeVecV128Load16SplatName = "v128.load16_splat" - OpcodeVecV128Load32SplatName = "v128.load32_splat" - OpcodeVecV128Load64SplatName = "v128.load64_splat" - OpcodeVecV128Load32zeroName = "v128.load32_zero" - OpcodeVecV128Load64zeroName = "v128.load64_zero" - OpcodeVecV128StoreName = "v128.store" - OpcodeVecV128Load8LaneName = "v128.load8_lane" - OpcodeVecV128Load16LaneName = "v128.load16_lane" - OpcodeVecV128Load32LaneName = "v128.load32_lane" - OpcodeVecV128Load64LaneName = "v128.load64_lane" - OpcodeVecV128Store8LaneName = "v128.store8_lane" - OpcodeVecV128Store16LaneName = "v128.store16_lane" - OpcodeVecV128Store32LaneName = "v128.store32_lane" - OpcodeVecV128Store64LaneName = "v128.store64_lane" - OpcodeVecV128ConstName = "v128.const" - OpcodeVecV128i8x16ShuffleName = "v128.shuffle" - OpcodeVecI8x16ExtractLaneSName = "i8x16.extract_lane_s" - OpcodeVecI8x16ExtractLaneUName = "i8x16.extract_lane_u" - OpcodeVecI8x16ReplaceLaneName = "i8x16.replace_lane" - OpcodeVecI16x8ExtractLaneSName = "i16x8.extract_lane_s" - OpcodeVecI16x8ExtractLaneUName = "i16x8.extract_lane_u" - OpcodeVecI16x8ReplaceLaneName = "i16x8.replace_lane" - OpcodeVecI32x4ExtractLaneName = "i32x4.extract_lane" - OpcodeVecI32x4ReplaceLaneName = "i32x4.replace_lane" - OpcodeVecI64x2ExtractLaneName = "i64x2.extract_lane" - OpcodeVecI64x2ReplaceLaneName = "i64x2.replace_lane" - OpcodeVecF32x4ExtractLaneName = "f32x4.extract_lane" - OpcodeVecF32x4ReplaceLaneName = "f32x4.replace_lane" - OpcodeVecF64x2ExtractLaneName = "f64x2.extract_lane" - OpcodeVecF64x2ReplaceLaneName = "f64x2.replace_lane" - OpcodeVecI8x16SwizzleName = "i8x16.swizzle" - OpcodeVecI8x16SplatName = "i8x16.splat" - OpcodeVecI16x8SplatName = "i16x8.splat" - OpcodeVecI32x4SplatName = "i32x4.splat" - OpcodeVecI64x2SplatName = "i64x2.splat" - OpcodeVecF32x4SplatName = "f32x4.splat" - OpcodeVecF64x2SplatName = "f64x2.splat" - OpcodeVecI8x16EqName = "i8x16.eq" - OpcodeVecI8x16NeName = "i8x16.ne" - OpcodeVecI8x16LtSName = "i8x16.lt_s" - OpcodeVecI8x16LtUName = "i8x16.lt_u" - OpcodeVecI8x16GtSName = "i8x16.gt_s" - OpcodeVecI8x16GtUName = "i8x16.gt_u" - OpcodeVecI8x16LeSName = "i8x16.le_s" - OpcodeVecI8x16LeUName = "i8x16.le_u" - OpcodeVecI8x16GeSName = "i8x16.ge_s" - OpcodeVecI8x16GeUName = "i8x16.ge_u" - OpcodeVecI16x8EqName = "i16x8.eq" - OpcodeVecI16x8NeName = "i16x8.ne" - OpcodeVecI16x8LtSName = "i16x8.lt_s" - OpcodeVecI16x8LtUName = "i16x8.lt_u" - OpcodeVecI16x8GtSName = "i16x8.gt_s" - OpcodeVecI16x8GtUName = "i16x8.gt_u" - OpcodeVecI16x8LeSName = "i16x8.le_s" - OpcodeVecI16x8LeUName = "i16x8.le_u" - OpcodeVecI16x8GeSName = "i16x8.ge_s" - OpcodeVecI16x8GeUName = "i16x8.ge_u" - OpcodeVecI32x4EqName = "i32x4.eq" - OpcodeVecI32x4NeName = "i32x4.ne" - OpcodeVecI32x4LtSName = "i32x4.lt_s" - OpcodeVecI32x4LtUName = "i32x4.lt_u" - OpcodeVecI32x4GtSName = "i32x4.gt_s" - OpcodeVecI32x4GtUName = "i32x4.gt_u" - OpcodeVecI32x4LeSName = "i32x4.le_s" - OpcodeVecI32x4LeUName = "i32x4.le_u" - OpcodeVecI32x4GeSName = "i32x4.ge_s" - OpcodeVecI32x4GeUName = "i32x4.ge_u" - OpcodeVecI64x2EqName = "i64x2.eq" - OpcodeVecI64x2NeName = "i64x2.ne" - OpcodeVecI64x2LtSName = "i64x2.lt" - OpcodeVecI64x2GtSName = "i64x2.gt" - OpcodeVecI64x2LeSName = "i64x2.le" - OpcodeVecI64x2GeSName = "i64x2.ge" - OpcodeVecF32x4EqName = "f32x4.eq" - OpcodeVecF32x4NeName = "f32x4.ne" - OpcodeVecF32x4LtName = "f32x4.lt" - OpcodeVecF32x4GtName = "f32x4.gt" - OpcodeVecF32x4LeName = "f32x4.le" - OpcodeVecF32x4GeName = "f32x4.ge" - OpcodeVecF64x2EqName = "f64x2.eq" - OpcodeVecF64x2NeName = "f64x2.ne" - OpcodeVecF64x2LtName = "f64x2.lt" - OpcodeVecF64x2GtName = "f64x2.gt" - OpcodeVecF64x2LeName = "f64x2.le" - OpcodeVecF64x2GeName = "f64x2.ge" - OpcodeVecV128NotName = "v128.not" - OpcodeVecV128AndName = "v128.and" - OpcodeVecV128AndNotName = "v128.andnot" - OpcodeVecV128OrName = "v128.or" - OpcodeVecV128XorName = "v128.xor" - OpcodeVecV128BitselectName = "v128.bitselect" - OpcodeVecV128AnyTrueName = "v128.any_true" - OpcodeVecI8x16AbsName = "i8x16.abs" - OpcodeVecI8x16NegName = "i8x16.neg" - OpcodeVecI8x16PopcntName = "i8x16.popcnt" - OpcodeVecI8x16AllTrueName = "i8x16.all_true" - OpcodeVecI8x16BitMaskName = "i8x16.bitmask" - OpcodeVecI8x16NarrowI16x8SName = "i8x16.narrow_i16x8_s" - OpcodeVecI8x16NarrowI16x8UName = "i8x16.narrow_i16x8_u" - OpcodeVecI8x16ShlName = "i8x16.shl" - OpcodeVecI8x16ShrSName = "i8x16.shr_s" - OpcodeVecI8x16ShrUName = "i8x16.shr_u" - OpcodeVecI8x16AddName = "i8x16.add" - OpcodeVecI8x16AddSatSName = "i8x16.add_sat_s" - OpcodeVecI8x16AddSatUName = "i8x16.add_sat_u" - OpcodeVecI8x16SubName = "i8x16.sub" - OpcodeVecI8x16SubSatSName = "i8x16.sub_s" - OpcodeVecI8x16SubSatUName = "i8x16.sub_u" - OpcodeVecI8x16MinSName = "i8x16.min_s" - OpcodeVecI8x16MinUName = "i8x16.min_u" - OpcodeVecI8x16MaxSName = "i8x16.max_s" - OpcodeVecI8x16MaxUName = "i8x16.max_u" - OpcodeVecI8x16AvgrUName = "i8x16.avgr_u" - OpcodeVecI16x8ExtaddPairwiseI8x16SName = "i16x8.extadd_pairwise_i8x16_s" - OpcodeVecI16x8ExtaddPairwiseI8x16UName = "i16x8.extadd_pairwise_i8x16_u" - OpcodeVecI16x8AbsName = "i16x8.abs" - OpcodeVecI16x8NegName = "i16x8.neg" - OpcodeVecI16x8Q15mulrSatSName = "i16x8.q15mulr_sat_s" - OpcodeVecI16x8AllTrueName = "i16x8.all_true" - OpcodeVecI16x8BitMaskName = "i16x8.bitmask" - OpcodeVecI16x8NarrowI32x4SName = "i16x8.narrow_i32x4_s" - OpcodeVecI16x8NarrowI32x4UName = "i16x8.narrow_i32x4_u" - OpcodeVecI16x8ExtendLowI8x16SName = "i16x8.extend_low_i8x16_s" - OpcodeVecI16x8ExtendHighI8x16SName = "i16x8.extend_high_i8x16_s" - OpcodeVecI16x8ExtendLowI8x16UName = "i16x8.extend_low_i8x16_u" - OpcodeVecI16x8ExtendHighI8x16UName = "i16x8.extend_high_i8x16_u" - OpcodeVecI16x8ShlName = "i16x8.shl" - OpcodeVecI16x8ShrSName = "i16x8.shr_s" - OpcodeVecI16x8ShrUName = "i16x8.shr_u" - OpcodeVecI16x8AddName = "i16x8.add" - OpcodeVecI16x8AddSatSName = "i16x8.add_sat_s" - OpcodeVecI16x8AddSatUName = "i16x8.add_sat_u" - OpcodeVecI16x8SubName = "i16x8.sub" - OpcodeVecI16x8SubSatSName = "i16x8.sub_sat_s" - OpcodeVecI16x8SubSatUName = "i16x8.sub_sat_u" - OpcodeVecI16x8MulName = "i16x8.mul" - OpcodeVecI16x8MinSName = "i16x8.min_s" - OpcodeVecI16x8MinUName = "i16x8.min_u" - OpcodeVecI16x8MaxSName = "i16x8.max_s" - OpcodeVecI16x8MaxUName = "i16x8.max_u" - OpcodeVecI16x8AvgrUName = "i16x8.avgr_u" - OpcodeVecI16x8ExtMulLowI8x16SName = "i16x8.extmul_low_i8x16_s" - OpcodeVecI16x8ExtMulHighI8x16SName = "i16x8.extmul_high_i8x16_s" - OpcodeVecI16x8ExtMulLowI8x16UName = "i16x8.extmul_low_i8x16_u" - OpcodeVecI16x8ExtMulHighI8x16UName = "i16x8.extmul_high_i8x16_u" - OpcodeVecI32x4ExtaddPairwiseI16x8SName = "i32x4.extadd_pairwise_i16x8_s" - OpcodeVecI32x4ExtaddPairwiseI16x8UName = "i32x4.extadd_pairwise_i16x8_u" - OpcodeVecI32x4AbsName = "i32x4.abs" - OpcodeVecI32x4NegName = "i32x4.neg" - OpcodeVecI32x4AllTrueName = "i32x4.all_true" - OpcodeVecI32x4BitMaskName = "i32x4.bitmask" - OpcodeVecI32x4ExtendLowI16x8SName = "i32x4.extend_low_i16x8_s" - OpcodeVecI32x4ExtendHighI16x8SName = "i32x4.extend_high_i16x8_s" - OpcodeVecI32x4ExtendLowI16x8UName = "i32x4.extend_low_i16x8_u" - OpcodeVecI32x4ExtendHighI16x8UName = "i32x4.extend_high_i16x8_u" - OpcodeVecI32x4ShlName = "i32x4.shl" - OpcodeVecI32x4ShrSName = "i32x4.shr_s" - OpcodeVecI32x4ShrUName = "i32x4.shr_u" - OpcodeVecI32x4AddName = "i32x4.add" - OpcodeVecI32x4SubName = "i32x4.sub" - OpcodeVecI32x4MulName = "i32x4.mul" - OpcodeVecI32x4MinSName = "i32x4.min_s" - OpcodeVecI32x4MinUName = "i32x4.min_u" - OpcodeVecI32x4MaxSName = "i32x4.max_s" - OpcodeVecI32x4MaxUName = "i32x4.max_u" - OpcodeVecI32x4DotI16x8SName = "i32x4.dot_i16x8_s" - OpcodeVecI32x4ExtMulLowI16x8SName = "i32x4.extmul_low_i16x8_s" - OpcodeVecI32x4ExtMulHighI16x8SName = "i32x4.extmul_high_i16x8_s" - OpcodeVecI32x4ExtMulLowI16x8UName = "i32x4.extmul_low_i16x8_u" - OpcodeVecI32x4ExtMulHighI16x8UName = "i32x4.extmul_high_i16x8_u" - OpcodeVecI64x2AbsName = "i64x2.abs" - OpcodeVecI64x2NegName = "i64x2.neg" - OpcodeVecI64x2AllTrueName = "i64x2.all_true" - OpcodeVecI64x2BitMaskName = "i64x2.bitmask" - OpcodeVecI64x2ExtendLowI32x4SName = "i64x2.extend_low_i32x4_s" - OpcodeVecI64x2ExtendHighI32x4SName = "i64x2.extend_high_i32x4_s" - OpcodeVecI64x2ExtendLowI32x4UName = "i64x2.extend_low_i32x4_u" - OpcodeVecI64x2ExtendHighI32x4UName = "i64x2.extend_high_i32x4_u" - OpcodeVecI64x2ShlName = "i64x2.shl" - OpcodeVecI64x2ShrSName = "i64x2.shr_s" - OpcodeVecI64x2ShrUName = "i64x2.shr_u" - OpcodeVecI64x2AddName = "i64x2.add" - OpcodeVecI64x2SubName = "i64x2.sub" - OpcodeVecI64x2MulName = "i64x2.mul" - OpcodeVecI64x2ExtMulLowI32x4SName = "i64x2.extmul_low_i32x4_s" - OpcodeVecI64x2ExtMulHighI32x4SName = "i64x2.extmul_high_i32x4_s" - OpcodeVecI64x2ExtMulLowI32x4UName = "i64x2.extmul_low_i32x4_u" - OpcodeVecI64x2ExtMulHighI32x4UName = "i64x2.extmul_high_i32x4_u" - OpcodeVecF32x4CeilName = "f32x4.ceil" - OpcodeVecF32x4FloorName = "f32x4.floor" - OpcodeVecF32x4TruncName = "f32x4.trunc" - OpcodeVecF32x4NearestName = "f32x4.nearest" - OpcodeVecF32x4AbsName = "f32x4.abs" - OpcodeVecF32x4NegName = "f32x4.neg" - OpcodeVecF32x4SqrtName = "f32x4.sqrt" - OpcodeVecF32x4AddName = "f32x4.add" - OpcodeVecF32x4SubName = "f32x4.sub" - OpcodeVecF32x4MulName = "f32x4.mul" - OpcodeVecF32x4DivName = "f32x4.div" - OpcodeVecF32x4MinName = "f32x4.min" - OpcodeVecF32x4MaxName = "f32x4.max" - OpcodeVecF32x4PminName = "f32x4.pmin" - OpcodeVecF32x4PmaxName = "f32x4.pmax" - OpcodeVecF64x2CeilName = "f64x2.ceil" - OpcodeVecF64x2FloorName = "f64x2.floor" - OpcodeVecF64x2TruncName = "f64x2.trunc" - OpcodeVecF64x2NearestName = "f64x2.nearest" - OpcodeVecF64x2AbsName = "f64x2.abs" - OpcodeVecF64x2NegName = "f64x2.neg" - OpcodeVecF64x2SqrtName = "f64x2.sqrt" - OpcodeVecF64x2AddName = "f64x2.add" - OpcodeVecF64x2SubName = "f64x2.sub" - OpcodeVecF64x2MulName = "f64x2.mul" - OpcodeVecF64x2DivName = "f64x2.div" - OpcodeVecF64x2MinName = "f64x2.min" - OpcodeVecF64x2MaxName = "f64x2.max" - OpcodeVecF64x2PminName = "f64x2.pmin" - OpcodeVecF64x2PmaxName = "f64x2.pmax" - OpcodeVecI32x4TruncSatF32x4SName = "i32x4.trunc_sat_f32x4_s" - OpcodeVecI32x4TruncSatF32x4UName = "i32x4.trunc_sat_f32x4_u" - OpcodeVecF32x4ConvertI32x4SName = "f32x4.convert_i32x4_s" - OpcodeVecF32x4ConvertI32x4UName = "f32x4.convert_i32x4_u" - OpcodeVecI32x4TruncSatF64x2SZeroName = "i32x4.trunc_sat_f64x2_s_zero" - OpcodeVecI32x4TruncSatF64x2UZeroName = "i32x4.trunc_sat_f64x2_u_zero" - OpcodeVecF64x2ConvertLowI32x4SName = "f64x2.convert_low_i32x4_s" - OpcodeVecF64x2ConvertLowI32x4UName = "f64x2.convert_low_i32x4_u" - OpcodeVecF32x4DemoteF64x2ZeroName = "f32x4.demote_f64x2_zero" - OpcodeVecF64x2PromoteLowF32x4ZeroName = "f64x2.promote_low_f32x4" -) - -var vectorInstructionName = map[OpcodeVec]string{ - OpcodeVecV128Load: OpcodeVecV128LoadName, - OpcodeVecV128Load8x8s: OpcodeVecV128Load8x8SName, - OpcodeVecV128Load8x8u: OpcodeVecV128Load8x8UName, - OpcodeVecV128Load16x4s: OpcodeVecV128Load16x4SName, - OpcodeVecV128Load16x4u: OpcodeVecV128Load16x4UName, - OpcodeVecV128Load32x2s: OpcodeVecV128Load32x2SName, - OpcodeVecV128Load32x2u: OpcodeVecV128Load32x2UName, - OpcodeVecV128Load8Splat: OpcodeVecV128Load8SplatName, - OpcodeVecV128Load16Splat: OpcodeVecV128Load16SplatName, - OpcodeVecV128Load32Splat: OpcodeVecV128Load32SplatName, - OpcodeVecV128Load64Splat: OpcodeVecV128Load64SplatName, - OpcodeVecV128Load32zero: OpcodeVecV128Load32zeroName, - OpcodeVecV128Load64zero: OpcodeVecV128Load64zeroName, - OpcodeVecV128Store: OpcodeVecV128StoreName, - OpcodeVecV128Load8Lane: OpcodeVecV128Load8LaneName, - OpcodeVecV128Load16Lane: OpcodeVecV128Load16LaneName, - OpcodeVecV128Load32Lane: OpcodeVecV128Load32LaneName, - OpcodeVecV128Load64Lane: OpcodeVecV128Load64LaneName, - OpcodeVecV128Store8Lane: OpcodeVecV128Store8LaneName, - OpcodeVecV128Store16Lane: OpcodeVecV128Store16LaneName, - OpcodeVecV128Store32Lane: OpcodeVecV128Store32LaneName, - OpcodeVecV128Store64Lane: OpcodeVecV128Store64LaneName, - OpcodeVecV128Const: OpcodeVecV128ConstName, - OpcodeVecV128i8x16Shuffle: OpcodeVecV128i8x16ShuffleName, - OpcodeVecI8x16ExtractLaneS: OpcodeVecI8x16ExtractLaneSName, - OpcodeVecI8x16ExtractLaneU: OpcodeVecI8x16ExtractLaneUName, - OpcodeVecI8x16ReplaceLane: OpcodeVecI8x16ReplaceLaneName, - OpcodeVecI16x8ExtractLaneS: OpcodeVecI16x8ExtractLaneSName, - OpcodeVecI16x8ExtractLaneU: OpcodeVecI16x8ExtractLaneUName, - OpcodeVecI16x8ReplaceLane: OpcodeVecI16x8ReplaceLaneName, - OpcodeVecI32x4ExtractLane: OpcodeVecI32x4ExtractLaneName, - OpcodeVecI32x4ReplaceLane: OpcodeVecI32x4ReplaceLaneName, - OpcodeVecI64x2ExtractLane: OpcodeVecI64x2ExtractLaneName, - OpcodeVecI64x2ReplaceLane: OpcodeVecI64x2ReplaceLaneName, - OpcodeVecF32x4ExtractLane: OpcodeVecF32x4ExtractLaneName, - OpcodeVecF32x4ReplaceLane: OpcodeVecF32x4ReplaceLaneName, - OpcodeVecF64x2ExtractLane: OpcodeVecF64x2ExtractLaneName, - OpcodeVecF64x2ReplaceLane: OpcodeVecF64x2ReplaceLaneName, - OpcodeVecI8x16Swizzle: OpcodeVecI8x16SwizzleName, - OpcodeVecI8x16Splat: OpcodeVecI8x16SplatName, - OpcodeVecI16x8Splat: OpcodeVecI16x8SplatName, - OpcodeVecI32x4Splat: OpcodeVecI32x4SplatName, - OpcodeVecI64x2Splat: OpcodeVecI64x2SplatName, - OpcodeVecF32x4Splat: OpcodeVecF32x4SplatName, - OpcodeVecF64x2Splat: OpcodeVecF64x2SplatName, - OpcodeVecI8x16Eq: OpcodeVecI8x16EqName, - OpcodeVecI8x16Ne: OpcodeVecI8x16NeName, - OpcodeVecI8x16LtS: OpcodeVecI8x16LtSName, - OpcodeVecI8x16LtU: OpcodeVecI8x16LtUName, - OpcodeVecI8x16GtS: OpcodeVecI8x16GtSName, - OpcodeVecI8x16GtU: OpcodeVecI8x16GtUName, - OpcodeVecI8x16LeS: OpcodeVecI8x16LeSName, - OpcodeVecI8x16LeU: OpcodeVecI8x16LeUName, - OpcodeVecI8x16GeS: OpcodeVecI8x16GeSName, - OpcodeVecI8x16GeU: OpcodeVecI8x16GeUName, - OpcodeVecI16x8Eq: OpcodeVecI16x8EqName, - OpcodeVecI16x8Ne: OpcodeVecI16x8NeName, - OpcodeVecI16x8LtS: OpcodeVecI16x8LtSName, - OpcodeVecI16x8LtU: OpcodeVecI16x8LtUName, - OpcodeVecI16x8GtS: OpcodeVecI16x8GtSName, - OpcodeVecI16x8GtU: OpcodeVecI16x8GtUName, - OpcodeVecI16x8LeS: OpcodeVecI16x8LeSName, - OpcodeVecI16x8LeU: OpcodeVecI16x8LeUName, - OpcodeVecI16x8GeS: OpcodeVecI16x8GeSName, - OpcodeVecI16x8GeU: OpcodeVecI16x8GeUName, - OpcodeVecI32x4Eq: OpcodeVecI32x4EqName, - OpcodeVecI32x4Ne: OpcodeVecI32x4NeName, - OpcodeVecI32x4LtS: OpcodeVecI32x4LtSName, - OpcodeVecI32x4LtU: OpcodeVecI32x4LtUName, - OpcodeVecI32x4GtS: OpcodeVecI32x4GtSName, - OpcodeVecI32x4GtU: OpcodeVecI32x4GtUName, - OpcodeVecI32x4LeS: OpcodeVecI32x4LeSName, - OpcodeVecI32x4LeU: OpcodeVecI32x4LeUName, - OpcodeVecI32x4GeS: OpcodeVecI32x4GeSName, - OpcodeVecI32x4GeU: OpcodeVecI32x4GeUName, - OpcodeVecI64x2Eq: OpcodeVecI64x2EqName, - OpcodeVecI64x2Ne: OpcodeVecI64x2NeName, - OpcodeVecI64x2LtS: OpcodeVecI64x2LtSName, - OpcodeVecI64x2GtS: OpcodeVecI64x2GtSName, - OpcodeVecI64x2LeS: OpcodeVecI64x2LeSName, - OpcodeVecI64x2GeS: OpcodeVecI64x2GeSName, - OpcodeVecF32x4Eq: OpcodeVecF32x4EqName, - OpcodeVecF32x4Ne: OpcodeVecF32x4NeName, - OpcodeVecF32x4Lt: OpcodeVecF32x4LtName, - OpcodeVecF32x4Gt: OpcodeVecF32x4GtName, - OpcodeVecF32x4Le: OpcodeVecF32x4LeName, - OpcodeVecF32x4Ge: OpcodeVecF32x4GeName, - OpcodeVecF64x2Eq: OpcodeVecF64x2EqName, - OpcodeVecF64x2Ne: OpcodeVecF64x2NeName, - OpcodeVecF64x2Lt: OpcodeVecF64x2LtName, - OpcodeVecF64x2Gt: OpcodeVecF64x2GtName, - OpcodeVecF64x2Le: OpcodeVecF64x2LeName, - OpcodeVecF64x2Ge: OpcodeVecF64x2GeName, - OpcodeVecV128Not: OpcodeVecV128NotName, - OpcodeVecV128And: OpcodeVecV128AndName, - OpcodeVecV128AndNot: OpcodeVecV128AndNotName, - OpcodeVecV128Or: OpcodeVecV128OrName, - OpcodeVecV128Xor: OpcodeVecV128XorName, - OpcodeVecV128Bitselect: OpcodeVecV128BitselectName, - OpcodeVecV128AnyTrue: OpcodeVecV128AnyTrueName, - OpcodeVecI8x16Abs: OpcodeVecI8x16AbsName, - OpcodeVecI8x16Neg: OpcodeVecI8x16NegName, - OpcodeVecI8x16Popcnt: OpcodeVecI8x16PopcntName, - OpcodeVecI8x16AllTrue: OpcodeVecI8x16AllTrueName, - OpcodeVecI8x16BitMask: OpcodeVecI8x16BitMaskName, - OpcodeVecI8x16NarrowI16x8S: OpcodeVecI8x16NarrowI16x8SName, - OpcodeVecI8x16NarrowI16x8U: OpcodeVecI8x16NarrowI16x8UName, - OpcodeVecI8x16Shl: OpcodeVecI8x16ShlName, - OpcodeVecI8x16ShrS: OpcodeVecI8x16ShrSName, - OpcodeVecI8x16ShrU: OpcodeVecI8x16ShrUName, - OpcodeVecI8x16Add: OpcodeVecI8x16AddName, - OpcodeVecI8x16AddSatS: OpcodeVecI8x16AddSatSName, - OpcodeVecI8x16AddSatU: OpcodeVecI8x16AddSatUName, - OpcodeVecI8x16Sub: OpcodeVecI8x16SubName, - OpcodeVecI8x16SubSatS: OpcodeVecI8x16SubSatSName, - OpcodeVecI8x16SubSatU: OpcodeVecI8x16SubSatUName, - OpcodeVecI8x16MinS: OpcodeVecI8x16MinSName, - OpcodeVecI8x16MinU: OpcodeVecI8x16MinUName, - OpcodeVecI8x16MaxS: OpcodeVecI8x16MaxSName, - OpcodeVecI8x16MaxU: OpcodeVecI8x16MaxUName, - OpcodeVecI8x16AvgrU: OpcodeVecI8x16AvgrUName, - OpcodeVecI16x8ExtaddPairwiseI8x16S: OpcodeVecI16x8ExtaddPairwiseI8x16SName, - OpcodeVecI16x8ExtaddPairwiseI8x16U: OpcodeVecI16x8ExtaddPairwiseI8x16UName, - OpcodeVecI16x8Abs: OpcodeVecI16x8AbsName, - OpcodeVecI16x8Neg: OpcodeVecI16x8NegName, - OpcodeVecI16x8Q15mulrSatS: OpcodeVecI16x8Q15mulrSatSName, - OpcodeVecI16x8AllTrue: OpcodeVecI16x8AllTrueName, - OpcodeVecI16x8BitMask: OpcodeVecI16x8BitMaskName, - OpcodeVecI16x8NarrowI32x4S: OpcodeVecI16x8NarrowI32x4SName, - OpcodeVecI16x8NarrowI32x4U: OpcodeVecI16x8NarrowI32x4UName, - OpcodeVecI16x8ExtendLowI8x16S: OpcodeVecI16x8ExtendLowI8x16SName, - OpcodeVecI16x8ExtendHighI8x16S: OpcodeVecI16x8ExtendHighI8x16SName, - OpcodeVecI16x8ExtendLowI8x16U: OpcodeVecI16x8ExtendLowI8x16UName, - OpcodeVecI16x8ExtendHighI8x16U: OpcodeVecI16x8ExtendHighI8x16UName, - OpcodeVecI16x8Shl: OpcodeVecI16x8ShlName, - OpcodeVecI16x8ShrS: OpcodeVecI16x8ShrSName, - OpcodeVecI16x8ShrU: OpcodeVecI16x8ShrUName, - OpcodeVecI16x8Add: OpcodeVecI16x8AddName, - OpcodeVecI16x8AddSatS: OpcodeVecI16x8AddSatSName, - OpcodeVecI16x8AddSatU: OpcodeVecI16x8AddSatUName, - OpcodeVecI16x8Sub: OpcodeVecI16x8SubName, - OpcodeVecI16x8SubSatS: OpcodeVecI16x8SubSatSName, - OpcodeVecI16x8SubSatU: OpcodeVecI16x8SubSatUName, - OpcodeVecI16x8Mul: OpcodeVecI16x8MulName, - OpcodeVecI16x8MinS: OpcodeVecI16x8MinSName, - OpcodeVecI16x8MinU: OpcodeVecI16x8MinUName, - OpcodeVecI16x8MaxS: OpcodeVecI16x8MaxSName, - OpcodeVecI16x8MaxU: OpcodeVecI16x8MaxUName, - OpcodeVecI16x8AvgrU: OpcodeVecI16x8AvgrUName, - OpcodeVecI16x8ExtMulLowI8x16S: OpcodeVecI16x8ExtMulLowI8x16SName, - OpcodeVecI16x8ExtMulHighI8x16S: OpcodeVecI16x8ExtMulHighI8x16SName, - OpcodeVecI16x8ExtMulLowI8x16U: OpcodeVecI16x8ExtMulLowI8x16UName, - OpcodeVecI16x8ExtMulHighI8x16U: OpcodeVecI16x8ExtMulHighI8x16UName, - OpcodeVecI32x4ExtaddPairwiseI16x8S: OpcodeVecI32x4ExtaddPairwiseI16x8SName, - OpcodeVecI32x4ExtaddPairwiseI16x8U: OpcodeVecI32x4ExtaddPairwiseI16x8UName, - OpcodeVecI32x4Abs: OpcodeVecI32x4AbsName, - OpcodeVecI32x4Neg: OpcodeVecI32x4NegName, - OpcodeVecI32x4AllTrue: OpcodeVecI32x4AllTrueName, - OpcodeVecI32x4BitMask: OpcodeVecI32x4BitMaskName, - OpcodeVecI32x4ExtendLowI16x8S: OpcodeVecI32x4ExtendLowI16x8SName, - OpcodeVecI32x4ExtendHighI16x8S: OpcodeVecI32x4ExtendHighI16x8SName, - OpcodeVecI32x4ExtendLowI16x8U: OpcodeVecI32x4ExtendLowI16x8UName, - OpcodeVecI32x4ExtendHighI16x8U: OpcodeVecI32x4ExtendHighI16x8UName, - OpcodeVecI32x4Shl: OpcodeVecI32x4ShlName, - OpcodeVecI32x4ShrS: OpcodeVecI32x4ShrSName, - OpcodeVecI32x4ShrU: OpcodeVecI32x4ShrUName, - OpcodeVecI32x4Add: OpcodeVecI32x4AddName, - OpcodeVecI32x4Sub: OpcodeVecI32x4SubName, - OpcodeVecI32x4Mul: OpcodeVecI32x4MulName, - OpcodeVecI32x4MinS: OpcodeVecI32x4MinSName, - OpcodeVecI32x4MinU: OpcodeVecI32x4MinUName, - OpcodeVecI32x4MaxS: OpcodeVecI32x4MaxSName, - OpcodeVecI32x4MaxU: OpcodeVecI32x4MaxUName, - OpcodeVecI32x4DotI16x8S: OpcodeVecI32x4DotI16x8SName, - OpcodeVecI32x4ExtMulLowI16x8S: OpcodeVecI32x4ExtMulLowI16x8SName, - OpcodeVecI32x4ExtMulHighI16x8S: OpcodeVecI32x4ExtMulHighI16x8SName, - OpcodeVecI32x4ExtMulLowI16x8U: OpcodeVecI32x4ExtMulLowI16x8UName, - OpcodeVecI32x4ExtMulHighI16x8U: OpcodeVecI32x4ExtMulHighI16x8UName, - OpcodeVecI64x2Abs: OpcodeVecI64x2AbsName, - OpcodeVecI64x2Neg: OpcodeVecI64x2NegName, - OpcodeVecI64x2AllTrue: OpcodeVecI64x2AllTrueName, - OpcodeVecI64x2BitMask: OpcodeVecI64x2BitMaskName, - OpcodeVecI64x2ExtendLowI32x4S: OpcodeVecI64x2ExtendLowI32x4SName, - OpcodeVecI64x2ExtendHighI32x4S: OpcodeVecI64x2ExtendHighI32x4SName, - OpcodeVecI64x2ExtendLowI32x4U: OpcodeVecI64x2ExtendLowI32x4UName, - OpcodeVecI64x2ExtendHighI32x4U: OpcodeVecI64x2ExtendHighI32x4UName, - OpcodeVecI64x2Shl: OpcodeVecI64x2ShlName, - OpcodeVecI64x2ShrS: OpcodeVecI64x2ShrSName, - OpcodeVecI64x2ShrU: OpcodeVecI64x2ShrUName, - OpcodeVecI64x2Add: OpcodeVecI64x2AddName, - OpcodeVecI64x2Sub: OpcodeVecI64x2SubName, - OpcodeVecI64x2Mul: OpcodeVecI64x2MulName, - OpcodeVecI64x2ExtMulLowI32x4S: OpcodeVecI64x2ExtMulLowI32x4SName, - OpcodeVecI64x2ExtMulHighI32x4S: OpcodeVecI64x2ExtMulHighI32x4SName, - OpcodeVecI64x2ExtMulLowI32x4U: OpcodeVecI64x2ExtMulLowI32x4UName, - OpcodeVecI64x2ExtMulHighI32x4U: OpcodeVecI64x2ExtMulHighI32x4UName, - OpcodeVecF32x4Ceil: OpcodeVecF32x4CeilName, - OpcodeVecF32x4Floor: OpcodeVecF32x4FloorName, - OpcodeVecF32x4Trunc: OpcodeVecF32x4TruncName, - OpcodeVecF32x4Nearest: OpcodeVecF32x4NearestName, - OpcodeVecF32x4Abs: OpcodeVecF32x4AbsName, - OpcodeVecF32x4Neg: OpcodeVecF32x4NegName, - OpcodeVecF32x4Sqrt: OpcodeVecF32x4SqrtName, - OpcodeVecF32x4Add: OpcodeVecF32x4AddName, - OpcodeVecF32x4Sub: OpcodeVecF32x4SubName, - OpcodeVecF32x4Mul: OpcodeVecF32x4MulName, - OpcodeVecF32x4Div: OpcodeVecF32x4DivName, - OpcodeVecF32x4Min: OpcodeVecF32x4MinName, - OpcodeVecF32x4Max: OpcodeVecF32x4MaxName, - OpcodeVecF32x4Pmin: OpcodeVecF32x4PminName, - OpcodeVecF32x4Pmax: OpcodeVecF32x4PmaxName, - OpcodeVecF64x2Ceil: OpcodeVecF64x2CeilName, - OpcodeVecF64x2Floor: OpcodeVecF64x2FloorName, - OpcodeVecF64x2Trunc: OpcodeVecF64x2TruncName, - OpcodeVecF64x2Nearest: OpcodeVecF64x2NearestName, - OpcodeVecF64x2Abs: OpcodeVecF64x2AbsName, - OpcodeVecF64x2Neg: OpcodeVecF64x2NegName, - OpcodeVecF64x2Sqrt: OpcodeVecF64x2SqrtName, - OpcodeVecF64x2Add: OpcodeVecF64x2AddName, - OpcodeVecF64x2Sub: OpcodeVecF64x2SubName, - OpcodeVecF64x2Mul: OpcodeVecF64x2MulName, - OpcodeVecF64x2Div: OpcodeVecF64x2DivName, - OpcodeVecF64x2Min: OpcodeVecF64x2MinName, - OpcodeVecF64x2Max: OpcodeVecF64x2MaxName, - OpcodeVecF64x2Pmin: OpcodeVecF64x2PminName, - OpcodeVecF64x2Pmax: OpcodeVecF64x2PmaxName, - OpcodeVecI32x4TruncSatF32x4S: OpcodeVecI32x4TruncSatF32x4SName, - OpcodeVecI32x4TruncSatF32x4U: OpcodeVecI32x4TruncSatF32x4UName, - OpcodeVecF32x4ConvertI32x4S: OpcodeVecF32x4ConvertI32x4SName, - OpcodeVecF32x4ConvertI32x4U: OpcodeVecF32x4ConvertI32x4UName, - OpcodeVecI32x4TruncSatF64x2SZero: OpcodeVecI32x4TruncSatF64x2SZeroName, - OpcodeVecI32x4TruncSatF64x2UZero: OpcodeVecI32x4TruncSatF64x2UZeroName, - OpcodeVecF64x2ConvertLowI32x4S: OpcodeVecF64x2ConvertLowI32x4SName, - OpcodeVecF64x2ConvertLowI32x4U: OpcodeVecF64x2ConvertLowI32x4UName, - OpcodeVecF32x4DemoteF64x2Zero: OpcodeVecF32x4DemoteF64x2ZeroName, - OpcodeVecF64x2PromoteLowF32x4Zero: OpcodeVecF64x2PromoteLowF32x4ZeroName, -} - -// VectorInstructionName returns the instruction name corresponding to the vector Opcode. -func VectorInstructionName(oc OpcodeVec) (ret string) { - return vectorInstructionName[oc] -} - -const ( - OpcodeAtomicMemoryNotifyName = "memory.atomic.notify" - OpcodeAtomicMemoryWait32Name = "memory.atomic.wait32" - OpcodeAtomicMemoryWait64Name = "memory.atomic.wait64" - OpcodeAtomicFenceName = "atomic.fence" - - OpcodeAtomicI32LoadName = "i32.atomic.load" - OpcodeAtomicI64LoadName = "i64.atomic.load" - OpcodeAtomicI32Load8UName = "i32.atomic.load8_u" - OpcodeAtomicI32Load16UName = "i32.atomic.load16_u" - OpcodeAtomicI64Load8UName = "i64.atomic.load8_u" - OpcodeAtomicI64Load16UName = "i64.atomic.load16_u" - OpcodeAtomicI64Load32UName = "i64.atomic.load32_u" - OpcodeAtomicI32StoreName = "i32.atomic.store" - OpcodeAtomicI64StoreName = "i64.atomic.store" - OpcodeAtomicI32Store8Name = "i32.atomic.store8" - OpcodeAtomicI32Store16Name = "i32.atomic.store16" - OpcodeAtomicI64Store8Name = "i64.atomic.store8" - OpcodeAtomicI64Store16Name = "i64.atomic.store16" - OpcodeAtomicI64Store32Name = "i64.atomic.store32" - - OpcodeAtomicI32RmwAddName = "i32.atomic.rmw.add" - OpcodeAtomicI64RmwAddName = "i64.atomic.rmw.add" - OpcodeAtomicI32Rmw8AddUName = "i32.atomic.rmw8.add_u" - OpcodeAtomicI32Rmw16AddUName = "i32.atomic.rmw16.add_u" - OpcodeAtomicI64Rmw8AddUName = "i64.atomic.rmw8.add_u" - OpcodeAtomicI64Rmw16AddUName = "i64.atomic.rmw16.add_u" - OpcodeAtomicI64Rmw32AddUName = "i64.atomic.rmw32.add_u" - - OpcodeAtomicI32RmwSubName = "i32.atomic.rmw.sub" - OpcodeAtomicI64RmwSubName = "i64.atomic.rmw.sub" - OpcodeAtomicI32Rmw8SubUName = "i32.atomic.rmw8.sub_u" - OpcodeAtomicI32Rmw16SubUName = "i32.atomic.rmw16.sub_u" - OpcodeAtomicI64Rmw8SubUName = "i64.atomic.rmw8.sub_u" - OpcodeAtomicI64Rmw16SubUName = "i64.atomic.rmw16.sub_u" - OpcodeAtomicI64Rmw32SubUName = "i64.atomic.rmw32.sub_u" - - OpcodeAtomicI32RmwAndName = "i32.atomic.rmw.and" - OpcodeAtomicI64RmwAndName = "i64.atomic.rmw.and" - OpcodeAtomicI32Rmw8AndUName = "i32.atomic.rmw8.and_u" - OpcodeAtomicI32Rmw16AndUName = "i32.atomic.rmw16.and_u" - OpcodeAtomicI64Rmw8AndUName = "i64.atomic.rmw8.and_u" - OpcodeAtomicI64Rmw16AndUName = "i64.atomic.rmw16.and_u" - OpcodeAtomicI64Rmw32AndUName = "i64.atomic.rmw32.and_u" - - OpcodeAtomicI32RmwOrName = "i32.atomic.rmw.or" - OpcodeAtomicI64RmwOrName = "i64.atomic.rmw.or" - OpcodeAtomicI32Rmw8OrUName = "i32.atomic.rmw8.or_u" - OpcodeAtomicI32Rmw16OrUName = "i32.atomic.rmw16.or_u" - OpcodeAtomicI64Rmw8OrUName = "i64.atomic.rmw8.or_u" - OpcodeAtomicI64Rmw16OrUName = "i64.atomic.rmw16.or_u" - OpcodeAtomicI64Rmw32OrUName = "i64.atomic.rmw32.or_u" - - OpcodeAtomicI32RmwXorName = "i32.atomic.rmw.xor" - OpcodeAtomicI64RmwXorName = "i64.atomic.rmw.xor" - OpcodeAtomicI32Rmw8XorUName = "i32.atomic.rmw8.xor_u" - OpcodeAtomicI32Rmw16XorUName = "i32.atomic.rmw16.xor_u" - OpcodeAtomicI64Rmw8XorUName = "i64.atomic.rmw8.xor_u" - OpcodeAtomicI64Rmw16XorUName = "i64.atomic.rmw16.xor_u" - OpcodeAtomicI64Rmw32XorUName = "i64.atomic.rmw32.xor_u" - - OpcodeAtomicI32RmwXchgName = "i32.atomic.rmw.xchg" - OpcodeAtomicI64RmwXchgName = "i64.atomic.rmw.xchg" - OpcodeAtomicI32Rmw8XchgUName = "i32.atomic.rmw8.xchg_u" - OpcodeAtomicI32Rmw16XchgUName = "i32.atomic.rmw16.xchg_u" - OpcodeAtomicI64Rmw8XchgUName = "i64.atomic.rmw8.xchg_u" - OpcodeAtomicI64Rmw16XchgUName = "i64.atomic.rmw16.xchg_u" - OpcodeAtomicI64Rmw32XchgUName = "i64.atomic.rmw32.xchg_u" - - OpcodeAtomicI32RmwCmpxchgName = "i32.atomic.rmw.cmpxchg" - OpcodeAtomicI64RmwCmpxchgName = "i64.atomic.rmw.cmpxchg" - OpcodeAtomicI32Rmw8CmpxchgUName = "i32.atomic.rmw8.cmpxchg_u" - OpcodeAtomicI32Rmw16CmpxchgUName = "i32.atomic.rmw16.cmpxchg_u" - OpcodeAtomicI64Rmw8CmpxchgUName = "i64.atomic.rmw8.cmpxchg_u" - OpcodeAtomicI64Rmw16CmpxchgUName = "i64.atomic.rmw16.cmpxchg_u" - OpcodeAtomicI64Rmw32CmpxchgUName = "i64.atomic.rmw32.cmpxchg_u" -) - -var atomicInstructionName = map[OpcodeAtomic]string{ - OpcodeAtomicMemoryNotify: OpcodeAtomicMemoryNotifyName, - OpcodeAtomicMemoryWait32: OpcodeAtomicMemoryWait32Name, - OpcodeAtomicMemoryWait64: OpcodeAtomicMemoryWait64Name, - OpcodeAtomicFence: OpcodeAtomicFenceName, - - OpcodeAtomicI32Load: OpcodeAtomicI32LoadName, - OpcodeAtomicI64Load: OpcodeAtomicI64LoadName, - OpcodeAtomicI32Load8U: OpcodeAtomicI32Load8UName, - OpcodeAtomicI32Load16U: OpcodeAtomicI32Load16UName, - OpcodeAtomicI64Load8U: OpcodeAtomicI64Load8UName, - OpcodeAtomicI64Load16U: OpcodeAtomicI64Load16UName, - OpcodeAtomicI64Load32U: OpcodeAtomicI64Load32UName, - OpcodeAtomicI32Store: OpcodeAtomicI32StoreName, - OpcodeAtomicI64Store: OpcodeAtomicI64StoreName, - OpcodeAtomicI32Store8: OpcodeAtomicI32Store8Name, - OpcodeAtomicI32Store16: OpcodeAtomicI32Store16Name, - OpcodeAtomicI64Store8: OpcodeAtomicI64Store8Name, - OpcodeAtomicI64Store16: OpcodeAtomicI64Store16Name, - OpcodeAtomicI64Store32: OpcodeAtomicI64Store32Name, - - OpcodeAtomicI32RmwAdd: OpcodeAtomicI32RmwAddName, - OpcodeAtomicI64RmwAdd: OpcodeAtomicI64RmwAddName, - OpcodeAtomicI32Rmw8AddU: OpcodeAtomicI32Rmw8AddUName, - OpcodeAtomicI32Rmw16AddU: OpcodeAtomicI32Rmw16AddUName, - OpcodeAtomicI64Rmw8AddU: OpcodeAtomicI64Rmw8AddUName, - OpcodeAtomicI64Rmw16AddU: OpcodeAtomicI64Rmw16AddUName, - OpcodeAtomicI64Rmw32AddU: OpcodeAtomicI64Rmw32AddUName, - - OpcodeAtomicI32RmwSub: OpcodeAtomicI32RmwSubName, - OpcodeAtomicI64RmwSub: OpcodeAtomicI64RmwSubName, - OpcodeAtomicI32Rmw8SubU: OpcodeAtomicI32Rmw8SubUName, - OpcodeAtomicI32Rmw16SubU: OpcodeAtomicI32Rmw16SubUName, - OpcodeAtomicI64Rmw8SubU: OpcodeAtomicI64Rmw8SubUName, - OpcodeAtomicI64Rmw16SubU: OpcodeAtomicI64Rmw16SubUName, - OpcodeAtomicI64Rmw32SubU: OpcodeAtomicI64Rmw32SubUName, - - OpcodeAtomicI32RmwAnd: OpcodeAtomicI32RmwAndName, - OpcodeAtomicI64RmwAnd: OpcodeAtomicI64RmwAndName, - OpcodeAtomicI32Rmw8AndU: OpcodeAtomicI32Rmw8AndUName, - OpcodeAtomicI32Rmw16AndU: OpcodeAtomicI32Rmw16AndUName, - OpcodeAtomicI64Rmw8AndU: OpcodeAtomicI64Rmw8AndUName, - OpcodeAtomicI64Rmw16AndU: OpcodeAtomicI64Rmw16AndUName, - OpcodeAtomicI64Rmw32AndU: OpcodeAtomicI64Rmw32AndUName, - - OpcodeAtomicI32RmwOr: OpcodeAtomicI32RmwOrName, - OpcodeAtomicI64RmwOr: OpcodeAtomicI64RmwOrName, - OpcodeAtomicI32Rmw8OrU: OpcodeAtomicI32Rmw8OrUName, - OpcodeAtomicI32Rmw16OrU: OpcodeAtomicI32Rmw16OrUName, - OpcodeAtomicI64Rmw8OrU: OpcodeAtomicI64Rmw8OrUName, - OpcodeAtomicI64Rmw16OrU: OpcodeAtomicI64Rmw16OrUName, - OpcodeAtomicI64Rmw32OrU: OpcodeAtomicI64Rmw32OrUName, - - OpcodeAtomicI32RmwXor: OpcodeAtomicI32RmwXorName, - OpcodeAtomicI64RmwXor: OpcodeAtomicI64RmwXorName, - OpcodeAtomicI32Rmw8XorU: OpcodeAtomicI32Rmw8XorUName, - OpcodeAtomicI32Rmw16XorU: OpcodeAtomicI32Rmw16XorUName, - OpcodeAtomicI64Rmw8XorU: OpcodeAtomicI64Rmw8XorUName, - OpcodeAtomicI64Rmw16XorU: OpcodeAtomicI64Rmw16XorUName, - OpcodeAtomicI64Rmw32XorU: OpcodeAtomicI64Rmw32XorUName, - - OpcodeAtomicI32RmwXchg: OpcodeAtomicI32RmwXchgName, - OpcodeAtomicI64RmwXchg: OpcodeAtomicI64RmwXchgName, - OpcodeAtomicI32Rmw8XchgU: OpcodeAtomicI32Rmw8XchgUName, - OpcodeAtomicI32Rmw16XchgU: OpcodeAtomicI32Rmw16XchgUName, - OpcodeAtomicI64Rmw8XchgU: OpcodeAtomicI64Rmw8XchgUName, - OpcodeAtomicI64Rmw16XchgU: OpcodeAtomicI64Rmw16XchgUName, - OpcodeAtomicI64Rmw32XchgU: OpcodeAtomicI64Rmw32XchgUName, - - OpcodeAtomicI32RmwCmpxchg: OpcodeAtomicI32RmwCmpxchgName, - OpcodeAtomicI64RmwCmpxchg: OpcodeAtomicI64RmwCmpxchgName, - OpcodeAtomicI32Rmw8CmpxchgU: OpcodeAtomicI32Rmw8CmpxchgUName, - OpcodeAtomicI32Rmw16CmpxchgU: OpcodeAtomicI32Rmw16CmpxchgUName, - OpcodeAtomicI64Rmw8CmpxchgU: OpcodeAtomicI64Rmw8CmpxchgUName, - OpcodeAtomicI64Rmw16CmpxchgU: OpcodeAtomicI64Rmw16CmpxchgUName, - OpcodeAtomicI64Rmw32CmpxchgU: OpcodeAtomicI64Rmw32CmpxchgUName, -} - -// AtomicInstructionName returns the instruction name corresponding to the atomic Opcode. -func AtomicInstructionName(oc OpcodeAtomic) (ret string) { - return atomicInstructionName[oc] -} |