Documentation
¶
Index ¶
- Constants
- func DecodeExternref(input uint64) uintptr
- func DecodeF32(input uint64) float32
- func DecodeF64(input uint64) float64
- func EncodeExternref(input uintptr) uint64
- func EncodeF32(input float32) uint64
- func EncodeF64(input float64) uint64
- func EncodeI32(input int32) uint64
- func EncodeI64(input int64) uint64
- func ExternTypeName(et ExternType) string
- func InstructionName(oc Opcode) string
- func MemoryPagesToBytesNum(pages uint32) (bytesNum uint64)
- func MiscInstructionName(oc OpcodeMisc) string
- func PagesToUnitOfBytes(pages uint32) string
- func RefTypeName(t RefType) (ret string)
- func SectionIDName(sectionID SectionID) string
- func ValueTypeName(t ValueType) string
- func VectorInstructionName(oc OpcodeVec) (ret string)
- type Code
- type ConstantExpression
- type CoreFeatures
- type CustomSection
- type DataSegment
- type DecodeModule
- type ElementInstance
- type ElementMode
- type ElementSegment
- type EncodeModule
- type Export
- type ExternType
- type FunctionType
- type Global
- type GlobalType
- type Import
- type Index
- type IndirectNameMap
- type Memory
- type Module
- type NameAssoc
- type NameMap
- type NameMapAssoc
- type NameSection
- type Opcode
- type OpcodeMisc
- type OpcodeVec
- type RefType
- type Reference
- type SectionID
- type Table
- type TableInstance
- type ValueType
Constants ¶
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" 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" )
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" )
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" )
const ( // MemoryPageSize is the unit of memory length in WebAssembly, // and is defined as 2^16 = 65536. // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#memory-instances%E2%91%A0 MemoryPageSize = uint32(65536) // MemoryPageSizeInBits satisfies the relation: "1 << MemoryPageSizeInBits == MemoryPageSize". MemoryPageSizeInBits = 16 )
const ( MaximumGlobals = uint32(1 << 27) MaximumFunctionIndex = uint32(1 << 27) MaximumTableIndex = uint32(1 << 27) )
The wazero specific limitation described at RATIONALE.md. TL;DR; We multiply by 8 (to get offsets in bytes) and the multiplication result must be less than 32bit max
const ( // RefTypeFuncref represents a reference to a function. RefTypeFuncref = ValueTypeFuncref // RefTypeExternref represents a reference to a host object, which is not currently supported in wazero. RefTypeExternref = ValueTypeExternref )
const ( // ExternTypeFuncName is the name of the WebAssembly Text Format field for ExternTypeFunc. ExternTypeFuncName = "func" // ExternTypeTableName is the name of the WebAssembly Text Format field for ExternTypeTable. ExternTypeTableName = "table" // ExternTypeMemoryName is the name of the WebAssembly Text Format field for ExternTypeMemory. ExternTypeMemoryName = "memory" // ExternTypeGlobalName is the name of the WebAssembly Text Format field for ExternTypeGlobal. ExternTypeGlobalName = "global" )
The below are exported to consolidate parsing behavior for external types.
const CoreFeaturesV1 = CoreFeatureMutableGlobal
CoreFeaturesV1 are features included in the WebAssembly Core Specification 1.0. As of late 2022, this is the only version that is a Web Standard (W3C Recommendation).
See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/
const CoreFeaturesV2 = CoreFeaturesV1 | CoreFeatureBulkMemoryOperations | CoreFeatureMultiValue | CoreFeatureNonTrappingFloatToIntConversion | CoreFeatureReferenceTypes | CoreFeatureSignExtensionOps | CoreFeatureSIMD
CoreFeaturesV2 are features included in the WebAssembly Core Specification 2.0 (20220419). As of late 2022, version 2.0 is a W3C working draft, not yet a Web Standard (W3C Recommendation).
See https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/appendix/changes.html#release-1-1
Variables ¶
This section is empty.
Functions ¶
func DecodeExternref ¶
DecodeExternref decodes the input as a ValueTypeExternref.
See EncodeExternref
func EncodeExternref ¶
EncodeExternref encodes the input as a ValueTypeExternref.
See DecodeExternref
func ExternTypeName ¶
func ExternTypeName(et ExternType) string
ExternTypeName returns the name of the WebAssembly Text Format field of the given type.
See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#exports%E2%91%A4
func InstructionName ¶
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 MemoryPagesToBytesNum ¶
MemoryPagesToBytesNum converts the given pages into the number of bytes contained in these pages.
func MiscInstructionName ¶
func MiscInstructionName(oc OpcodeMisc) string
MiscInstructionName returns the instruction corresponding to this miscellaneous Opcode.
func PagesToUnitOfBytes ¶
PagesToUnitOfBytes converts the pages to a human-readable form similar to what's specified. Ex. 1 -> "64Ki"
See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#memory-instances%E2%91%A0
func RefTypeName ¶
func SectionIDName ¶
SectionIDName returns the canonical name of a module section. https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#sections%E2%91%A0
func ValueTypeName ¶
ValueTypeName returns the type name of the given ValueType as a string. These type names match the names used in the WebAssembly text format.
Note: This returns "unknown", if an undefined ValueType value is passed.
func VectorInstructionName ¶
VectorInstructionName returns the instruction name corresponding to the vector Opcode.
Types ¶
type Code ¶
type Code struct { // LocalTypes are any function-scoped variables in insertion order. // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#binary-local LocalTypes []ValueType // Body is a sequence of expressions ending in OpcodeEnd // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#binary-expr Body []byte }
Code is an entry in the Module.CodeSection containing the locals and body of the function. See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#binary-code
type ConstantExpression ¶
type CoreFeatures ¶
type CoreFeatures uint64
CoreFeatures is a bit flag of WebAssembly Core specification features. See https://github.com/WebAssembly/proposals for proposals and their status.
Constants define individual features, such as CoreFeatureMultiValue, or groups of "finished" features, assigned to a WebAssembly Core Specification version, ex. CoreFeaturesV1 or CoreFeaturesV2.
Note: Numeric values are not intended to be interpreted except as bit flags.
const ( // CoreFeatureBulkMemoryOperations adds instructions modify ranges of // memory or table entries ("bulk-memory-operations"). This is included in // CoreFeaturesV2, but not CoreFeaturesV1. // // Here are the notable effects: // - Adds `memory.fill`, `memory.init`, `memory.copy` and `data.drop` // instructions. // - Adds `table.init`, `table.copy` and `elem.drop` instructions. // - Introduces a "passive" form of element and data segments. // - Stops checking "active" element and data segment boundaries at // compile-time, meaning they can error at runtime. // // Note: "bulk-memory-operations" is mixed with the "reference-types" // proposal due to the WebAssembly Working Group merging them // "mutually dependent". Therefore, enabling this feature requires enabling // CoreFeatureReferenceTypes, and vice-versa. // // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/bulk-memory-operations/Overview.md // https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/reference-types/Overview.md and // https://github.com/WebAssembly/spec/pull/1287 CoreFeatureBulkMemoryOperations CoreFeatures = 1 << iota // CoreFeatureMultiValue enables multiple values ("multi-value"). This is // included in CoreFeaturesV2, but not CoreFeaturesV1. // // Here are the notable effects: // - Function (`func`) types allow more than one result. // - Block types (`block`, `loop` and `if`) can be arbitrary function // types. // // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/multi-value/Overview.md CoreFeatureMultiValue // CoreFeatureMutableGlobal allows globals to be mutable. This is included // in both CoreFeaturesV1 and CoreFeaturesV2. // // When false, an api.Global can never be cast to an api.MutableGlobal, and // any wasm that includes global vars will fail to parse. CoreFeatureMutableGlobal // CoreFeatureNonTrappingFloatToIntConversion enables non-trapping // float-to-int conversions ("nontrapping-float-to-int-conversion"). This // is included in CoreFeaturesV2, but not CoreFeaturesV1. // // The only effect of enabling is allowing the following instructions, // which return 0 on NaN instead of panicking. // - `i32.trunc_sat_f32_s` // - `i32.trunc_sat_f32_u` // - `i32.trunc_sat_f64_s` // - `i32.trunc_sat_f64_u` // - `i64.trunc_sat_f32_s` // - `i64.trunc_sat_f32_u` // - `i64.trunc_sat_f64_s` // - `i64.trunc_sat_f64_u` // // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/nontrapping-float-to-int-conversion/Overview.md CoreFeatureNonTrappingFloatToIntConversion // CoreFeatureReferenceTypes enables various instructions and features // related to table and new reference types. This is included in // CoreFeaturesV2, but not CoreFeaturesV1. // // - Introduction of new value types: `funcref` and `externref`. // - Support for the following new instructions: // - `ref.null` // - `ref.func` // - `ref.is_null` // - `table.fill` // - `table.get` // - `table.grow` // - `table.set` // - `table.size` // - Support for multiple tables per module: // - `call_indirect`, `table.init`, `table.copy` and `elem.drop` // - Support for instructions can take non-zero table index. // - Element segments can take non-zero table index. // // Note: "reference-types" is mixed with the "bulk-memory-operations" // proposal due to the WebAssembly Working Group merging them // "mutually dependent". Therefore, enabling this feature requires enabling // CoreFeatureBulkMemoryOperations, and vice-versa. // // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/bulk-memory-operations/Overview.md // https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/reference-types/Overview.md and // https://github.com/WebAssembly/spec/pull/1287 CoreFeatureReferenceTypes // CoreFeatureSignExtensionOps enables sign extension instructions // ("sign-extension-ops"). This is included in CoreFeaturesV2, but not // CoreFeaturesV1. // // Adds instructions: // - `i32.extend8_s` // - `i32.extend16_s` // - `i64.extend8_s` // - `i64.extend16_s` // - `i64.extend32_s` // // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/sign-extension-ops/Overview.md CoreFeatureSignExtensionOps // CoreFeatureSIMD enables the vector value type and vector instructions // (aka SIMD). This is included in CoreFeaturesV2, but not CoreFeaturesV1. // // Note: The instruction list is too long to enumerate in godoc. // See https://github.com/WebAssembly/spec/blob/wg-2.0.draft1/proposals/simd/SIMD.md CoreFeatureSIMD )
func (CoreFeatures) IsEnabled ¶
func (f CoreFeatures) IsEnabled(feature CoreFeatures) bool
IsEnabled returns true if the feature (or group of features) is enabled.
func (CoreFeatures) RequireEnabled ¶
func (f CoreFeatures) RequireEnabled(feature CoreFeatures) error
RequireEnabled returns an error if the feature (or group of features) is not enabled.
func (CoreFeatures) SetEnabled ¶
func (f CoreFeatures) SetEnabled(feature CoreFeatures, val bool) CoreFeatures
SetEnabled enables or disables the feature or group of features.
func (CoreFeatures) String ¶
func (f CoreFeatures) String() string
String implements fmt.Stringer by returning each enabled feature.
type CustomSection ¶
CustomSection contains the name and raw data of a custom section.
type DataSegment ¶
type DataSegment struct { OffsetExpression *ConstantExpression Init []byte }
type DecodeModule ¶
type DecodeModule func( wasm []byte, features CoreFeatures, memorySizer func(minPages uint32, maxPages *uint32) (min, capacity, max uint32), ) (result *Module, err error)
DecodeModule parses the WebAssembly Binary Format (%.wasm) into a Module. This function returns when the input is exhausted or an error occurs. The result can be initialized for use via Store.Instantiate.
Here's a description of the return values: * result is the module parsed or nil on error * err is a FormatError invoking the parser, dangling block comments or unexpected characters. See binary.DecodeModule and text.DecodeModule
type ElementInstance ¶
type ElementInstance struct { // References holds references whose type is either RefTypeFuncref or RefTypeExternref (unsupported). References []Reference // Type is the RefType of the references in this instance's References. Type RefType }
ElementInstance represents an element instance in a module.
See https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/exec/runtime.html#element-instances
type ElementMode ¶
type ElementMode = byte
ElementMode represents a mode of element segment which is either active, passive or declarative.
https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/syntax/modules.html#element-segments
const ( // ElementModeActive is the mode which requires the runtime to initialize table with the contents in .Init field combined with OffsetExpr. ElementModeActive ElementMode = iota // ElementModePassive is the mode which doesn't require the runtime to initialize table, and only used with OpcodeTableInitName. ElementModePassive // ElementModeDeclarative is introduced in reference-types proposal which can be used to declare function indexes used by OpcodeRefFunc. ElementModeDeclarative )
type ElementSegment ¶
type ElementSegment struct { // OffsetExpr returns the table element offset to apply to Init indices. // Note: This can be validated prior to instantiation unless it includes OpcodeGlobalGet (an imported global). // Note: This is only set when Mode is active. OffsetExpr *ConstantExpression // TableIndex is the table's index to which this element segment is applied. // Note: This is used if and only if the Mode is active. TableIndex Index // Init indices are (nullable) table elements where each index is the function index by which the module initialize the table. Init []*Index // Type holds the type of this element segment, which is the RefType in WebAssembly 2.0. Type RefType // Mode is the mode of this element segment. Mode ElementMode }
ElementSegment are initialization instructions for a TableInstance
See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#syntax-elem
type EncodeModule ¶
EncodeModule encodes the given module into a byte slice depending on the format of the implementation. See binary.EncodeModule
type Export ¶
type Export struct { Type ExternType // Name is what the host refers to this definition as. Name string // Index is the index of the definition to export, the index namespace is by Type // Ex. If ExternTypeFunc, this is a position in the function index namespace. Index Index }
Export is the binary representation of an export indicated by Type See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#binary-export
type ExternType ¶
type ExternType = byte
ExternType classifies imports and exports with their respective types.
See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#external-types%E2%91%A0
const ( ExternTypeFunc ExternType = 0x00 ExternTypeTable ExternType = 0x01 ExternTypeMemory ExternType = 0x02 ExternTypeGlobal ExternType = 0x03 )
type FunctionType ¶
type FunctionType struct { // Params are the possibly empty sequence of value types accepted by a function with this signature. Params []ValueType // Results are the possibly empty sequence of value types returned by a function with this signature. // // Note: In WebAssembly 1.0 (20191205), there can be at most one result. // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#result-types%E2%91%A0 Results []ValueType }
FunctionType is a possibly empty function signature.
See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#function-types%E2%91%A0
func (*FunctionType) EqualsSignature ¶
func (f *FunctionType) EqualsSignature(params []ValueType, results []ValueType) bool
EqualsSignature returns true if the function type has the same parameters and results.
type Global ¶
type Global struct { Type *GlobalType Init *ConstantExpression }
type GlobalType ¶
type Import ¶
type Import struct { Type ExternType // Module is the possibly empty primary namespace of this import Module string // Module is the possibly empty secondary namespace of this import Name string // DescFunc is the index in Module.TypeSection when Type equals ExternTypeFunc DescFunc Index // DescTable is the inlined Table when Type equals ExternTypeTable DescTable *Table // DescMem is the inlined Memory when Type equals ExternTypeMemory DescMem *Memory // DescGlobal is the inlined GlobalType when Type equals ExternTypeGlobal DescGlobal *GlobalType }
Import is the binary representation of an import indicated by Type See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#binary-import
type Index ¶
type Index = uint32
Index is the offset in an index namespace, not necessarily an absolute position in a Module section. This is because index namespaces are often preceded by a corresponding type in the Module.ImportSection.
For example, the function index namespace starts with any ExternTypeFunc in the Module.ImportSection followed by the Module.FunctionSection
See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#binary-index
type IndirectNameMap ¶
type IndirectNameMap []*NameMapAssoc
IndirectNameMap associates an index with an association of names.
Note: IndirectNameMap is unique by NameMapAssoc.Index, but NameMapAssoc.NameMap needn't be unique. Note: When encoding in the Binary format, this must be ordered by NameMapAssoc.Index https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#binary-indirectnamemap
type Memory ¶
type Memory struct {
Min, Max uint32
// IsMaxEncoded true if the Max is encoded in the original source (binary or text).
IsMaxEncoded bool
}
Memory describes the limits of pages (64KB) in a memory.
type Module ¶
type Module struct { // TypeSection contains the unique FunctionType of functions imported or defined in this module. // // Note: Currently, there is no type ambiguity in the index as WebAssembly 1.0 only defines function type. // In the future, other types may be introduced to support CoreFeatures such as module linking. // // Note: In the Binary Format, this is SectionIDType. // // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#types%E2%91%A0%E2%91%A0 TypeSection []*FunctionType // ImportSection contains imported functions, tables, memories or globals required for instantiation // (Store.Instantiate). // // Note: there are no unique constraints relating to the two-level namespace of Import.Module and Import.Name. // // Note: In the Binary Format, this is SectionIDImport. // // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#import-section%E2%91%A0 ImportSection []*Import // FunctionSection contains the index in TypeSection of each function defined in this module. // // Note: The function Index namespace begins with imported functions and ends with those defined in this module. // For example, if there are two imported functions and one defined in this module, the function Index 3 is defined // in this module at FunctionSection[0]. // // Note: FunctionSection is index correlated with the CodeSection. If given the same position, ex. 2, a function // type is at TypeSection[FunctionSection[2]], while its locals and body are at CodeSection[2]. // // Note: In the Binary Format, this is SectionIDFunction. // // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#function-section%E2%91%A0 FunctionSection []Index // TableSection contains each table defined in this module. // // Note: The table Index namespace begins with imported tables and ends with those defined in this module. // For example, if there are two imported tables and one defined in this module, the table Index 3 is defined in // this module at TableSection[0]. // // Note: Version of the WebAssembly spec allows at most one table definition per module, so the // length of the TableSection can be zero or one, and can only be one if there is no imported table. // // Note: In the Binary Format, this is SectionIDTable. // // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#table-section%E2%91%A0 TableSection []*Table // MemorySection contains each memory defined in this module. // // Note: The memory Index namespace begins with imported memories and ends with those defined in this module. // For example, if there are two imported memories and one defined in this module, the memory Index 3 is defined in // this module at TableSection[0]. // // Note: Version of the WebAssembly spec allows at most one memory definition per module, so the // length of the MemorySection can be zero or one, and can only be one if there is no imported memory. // // Note: In the Binary Format, this is SectionIDMemory. // // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#memory-section%E2%91%A0 MemorySection *Memory // GlobalSection contains each global defined in this module. // // Global indexes are offset by any imported globals because the global index space begins with imports, followed by // ones defined in this module. For example, if there are two imported globals and three defined in this module, the // global at index 3 is defined in this module at GlobalSection[0]. // // Note: In the Binary Format, this is SectionIDGlobal. // // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#global-section%E2%91%A0 GlobalSection []*Global // ExportSection contains each export defined in this module. // // Note: In the Binary Format, this is SectionIDExport. // // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#exports%E2%91%A0 ExportSection []*Export // StartSection is the index of a function to call before returning from Store.Instantiate. // // Note: The index here is not the position in the FunctionSection, rather in the function index namespace, which // begins with imported functions. // // Note: In the Binary Format, this is SectionIDStart. // // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#start-section%E2%91%A0 StartSection *Index // Note: In the Binary Format, this is SectionIDElement. ElementSection []*ElementSegment // CodeSection is index-correlated with FunctionSection and contains each // function's locals and body. // // When present, the HostFunctionSection of the same index must be nil. // // Note: In the Binary Format, this is SectionIDCode. // // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#code-section%E2%91%A0 CodeSection []*Code // Note: In the Binary Format, this is SectionIDData. DataSection []*DataSegment // DataCountSection is the optional section and holds the number of data segments in the data section. // // Note: This may exist in WebAssembly 2.0 or WebAssembly 1.0 with FeatureBulkMemoryOperations. // See https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/binary/modules.html#data-count-section // See https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/appendix/changes.html#bulk-memory-and-table-instructions DataCountSection *uint32 // NameSection is set when the SectionIDCustom "name" was successfully decoded from the binary format. // // Note: This is the only SectionIDCustom defined in the WebAssembly Binary Format. // Others are read into CustomSections. // // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#name-section%E2%91%A0 // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#custom-section%E2%91%A0 NameSection *NameSection // CustomSections are set when the SectionIDCustom other than "name" were successfully decoded from the binary format. // // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#custom-section%E2%91%A0 CustomSections []*CustomSection }
Module is a WebAssembly binary representation. See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#modules%E2%91%A8
Differences from the specification: * NameSection is the only key ("name") decoded from the SectionIDCustom. * ExportSection is represented as a map for lookup convenience. * Code.GoFunc is contains any go `func`. It may be present when Code.Body is not.
func (*Module) ImportFuncCount ¶
ImportFuncCount returns the possibly empty count of imported functions. This plus SectionElementCount of SectionIDFunction is the size of the function index namespace.
func (*Module) ImportGlobalCount ¶
ImportGlobalCount returns the possibly empty count of imported globals. This plus SectionElementCount of SectionIDGlobal is the size of the global index namespace.
func (*Module) ImportMemoryCount ¶
ImportMemoryCount returns the possibly empty count of imported memories. This plus SectionElementCount of SectionIDMemory is the size of the memory index namespace.
func (*Module) ImportTableCount ¶
ImportTableCount returns the possibly empty count of imported tables. This plus SectionElementCount of SectionIDTable is the size of the table index namespace.
func (*Module) SectionElementCount ¶
SectionElementCount returns the count of elements in a given section ID
For example... * SectionIDType returns the count of FunctionType * SectionIDCustom returns one if the NameSection is present * SectionIDHostFunction returns the count of HostFunctionSection * SectionIDExport returns the count of unique export names
type NameMap ¶
type NameMap []*NameAssoc
NameMap associates an index with any associated names.
Note: Often the index namespace bridges multiple sections. For example, the function index namespace starts with any ExternTypeFunc in the Module.ImportSection followed by the Module.FunctionSection
Note: NameMap is unique by NameAssoc.Index, but NameAssoc.Name needn't be unique. Note: When encoding in the Binary format, this must be ordered by NameAssoc.Index See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#binary-namemap
type NameMapAssoc ¶
type NameSection ¶
type NameSection struct { // ModuleName is the symbolic identifier for a module. Ex. math // // Note: This can be empty for any reason including configuration. ModuleName string // FunctionNames is an association of a function index to its symbolic identifier. Ex. add // // * the key (idx) is in the function namespace, where module defined functions are preceded by imported ones. // See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#functions%E2%91%A7 // // Ex. Assuming the below text format is the second import, you would expect FunctionNames[1] = "mul" // (import "Math" "Mul" (func $mul (param $x f32) (param $y f32) (result f32))) // // Note: FunctionNames are only used for debugging. At runtime, functions are called based on raw numeric index. // Note: This can be nil for any reason including configuration. FunctionNames NameMap // LocalNames contains symbolic names for function parameters or locals that have one. // // Note: In the Text Format, function local names can inherit parameter names from their type. Ex. // * (module (import (func (param $x i32) (param i32))) (func (type 0))) = [{0, {x,0}}] // * (module (import (func (param i32) (param $y i32))) (func (type 0) (local $z i32))) = [0, [{y,1},{z,2}]] // * (module (func (param $x i32) (local $y i32) (local $z i32))) = [{x,0},{y,1},{z,2}] // // Note: LocalNames are only used for debugging. At runtime, locals are called based on raw numeric index. // Note: This can be nil for any reason including configuration. LocalNames IndirectNameMap }
NameSection represent the known custom name subsections defined in the WebAssembly Binary Format
Note: This can be nil if no names were decoded for any reason including configuration. See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#name-section%E2%91%A0
type Opcode ¶
type Opcode = byte
Opcode is the binary Opcode of an instruction. See also InstructionName
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 FeatureMultiValue 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 FeatureMultiValue 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 OpcodeDrop Opcode = 0x1a OpcodeSelect Opcode = 0x1b OpcodeTypedSelect Opcode = 0x1c OpcodeLocalGet Opcode = 0x20 OpcodeLocalSet Opcode = 0x21 OpcodeLocalTee Opcode = 0x22 OpcodeGlobalGet Opcode = 0x23 OpcodeGlobalSet Opcode = 0x24 OpcodeTableGet Opcode = 0x25 OpcodeTableSet Opcode = 0x26 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 OpcodeI32Const Opcode = 0x41 OpcodeI64Const Opcode = 0x42 OpcodeF32Const Opcode = 0x43 OpcodeF64Const Opcode = 0x44 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 FeatureBulkMemoryOperations 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 FeatureBulkMemoryOperations 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 FeatureBulkMemoryOperations as well. // // Currently, this is only supported in the constant expression in element segments. OpcodeRefFunc = 0xd2 // OpcodeI32Extend8S extends a signed 8-bit integer to a 32-bit integer. // Note: This is dependent on the flag FeatureSignExtensionOps OpcodeI32Extend8S Opcode = 0xc0 // OpcodeI32Extend16S extends a signed 16-bit integer to a 32-bit integer. // Note: This is dependent on the flag FeatureSignExtensionOps OpcodeI32Extend16S Opcode = 0xc1 // OpcodeI64Extend8S extends a signed 8-bit integer to a 64-bit integer. // Note: This is dependent on the flag FeatureSignExtensionOps OpcodeI64Extend8S Opcode = 0xc2 // OpcodeI64Extend16S extends a signed 16-bit integer to a 64-bit integer. // Note: This is dependent on the flag FeatureSignExtensionOps OpcodeI64Extend16S Opcode = 0xc3 // OpcodeI64Extend32S extends a signed 32-bit integer to a 64-bit integer. // Note: This is dependent on the flag FeatureSignExtensionOps OpcodeI64Extend32S Opcode = 0xc4 // OpcodeMiscPrefix is the prefix of various multi-byte opcodes. // Introduced in FeatureNonTrappingFloatToIntConversion, but used in other // features, such as FeatureBulkMemoryOperations. OpcodeMiscPrefix Opcode = 0xfc // OpcodeVecPrefix is the prefix of all vector isntructions introduced in // FeatureSIMD. OpcodeVecPrefix Opcode = 0xfd )
type OpcodeMisc ¶
type OpcodeMisc = byte
OpcodeMisc represents opcodes of the miscellaneous operations. Such an operations has multi-byte encoding which is prefixed by OpcodeMiscPrefix.
const ( OpcodeMiscI32TruncSatF32S OpcodeMisc = 0x00 OpcodeMiscI32TruncSatF32U OpcodeMisc = 0x01 OpcodeMiscI32TruncSatF64S OpcodeMisc = 0x02 OpcodeMiscI32TruncSatF64U OpcodeMisc = 0x03 OpcodeMiscI64TruncSatF32S OpcodeMisc = 0x04 OpcodeMiscI64TruncSatF32U OpcodeMisc = 0x05 OpcodeMiscI64TruncSatF64S OpcodeMisc = 0x06 OpcodeMiscI64TruncSatF64U OpcodeMisc = 0x07 OpcodeMiscMemoryInit OpcodeMisc = 0x08 OpcodeMiscDataDrop OpcodeMisc = 0x09 OpcodeMiscMemoryCopy OpcodeMisc = 0x0a OpcodeMiscMemoryFill OpcodeMisc = 0x0b OpcodeMiscTableInit OpcodeMisc = 0x0c OpcodeMiscElemDrop OpcodeMisc = 0x0d OpcodeMiscTableCopy OpcodeMisc = 0x0e OpcodeMiscTableGrow OpcodeMisc = 0x0f OpcodeMiscTableSize OpcodeMisc = 0x10 OpcodeMiscTableFill OpcodeMisc = 0x11 )
type OpcodeVec ¶
type OpcodeVec = byte
OpcodeVec represents an opcode of a vector instructions which has multi-byte encoding and is prefixed by OpcodeMiscPrefix.
These opcodes are toggled with FeatureSIMD.
const ( 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 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 OpcodeVecI8x16Swizzle OpcodeVec = 0x0e OpcodeVecI8x16Splat OpcodeVec = 0x0f OpcodeVecI16x8Splat OpcodeVec = 0x10 OpcodeVecI32x4Splat OpcodeVec = 0x11 OpcodeVecI64x2Splat OpcodeVec = 0x12 OpcodeVecF32x4Splat OpcodeVec = 0x13 OpcodeVecF64x2Splat OpcodeVec = 0x14 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 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 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 OpcodeVecI64x2Eq OpcodeVec = 0xd6 OpcodeVecI64x2Ne OpcodeVec = 0xd7 OpcodeVecI64x2LtS OpcodeVec = 0xd8 OpcodeVecI64x2GtS OpcodeVec = 0xd9 OpcodeVecI64x2LeS OpcodeVec = 0xda OpcodeVecI64x2GeS OpcodeVec = 0xdb OpcodeVecF32x4Eq OpcodeVec = 0x41 OpcodeVecF32x4Ne OpcodeVec = 0x42 OpcodeVecF32x4Lt OpcodeVec = 0x43 OpcodeVecF32x4Gt OpcodeVec = 0x44 OpcodeVecF32x4Le OpcodeVec = 0x45 OpcodeVecF32x4Ge OpcodeVec = 0x46 OpcodeVecF64x2Eq OpcodeVec = 0x47 OpcodeVecF64x2Ne OpcodeVec = 0x48 OpcodeVecF64x2Lt OpcodeVec = 0x49 OpcodeVecF64x2Gt OpcodeVec = 0x4a OpcodeVecF64x2Le OpcodeVec = 0x4b OpcodeVecF64x2Ge OpcodeVec = 0x4c OpcodeVecV128Not OpcodeVec = 0x4d OpcodeVecV128And OpcodeVec = 0x4e OpcodeVecV128AndNot OpcodeVec = 0x4f OpcodeVecV128Or OpcodeVec = 0x50 OpcodeVecV128Xor OpcodeVec = 0x51 OpcodeVecV128Bitselect OpcodeVec = 0x52 OpcodeVecV128AnyTrue OpcodeVec = 0x53 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 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 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 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 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 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 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 )
type RefType ¶
type RefType = byte
RefType is either RefTypeFuncref or RefTypeExternref as of WebAssembly core 2.0.
type Reference ¶
type Reference = uintptr
Reference is the runtime representation of RefType which is either RefTypeFuncref or RefTypeExternref.
type SectionID ¶
type SectionID = byte
SectionID identifies the sections of a Module in the WebAssembly Binary Format.
Note: these are defined in the wasm package, instead of the binary package, as a key per section is needed regardless of format, and deferring to the binary type avoids confusion.
See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#sections%E2%91%A0
const ( // SectionIDCustom includes the standard defined NameSection and possibly others not defined in the standard. SectionIDCustom SectionID = iota // don't add anything not in https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#sections%E2%91%A0 SectionIDType SectionIDImport SectionIDFunction SectionIDTable SectionIDMemory SectionIDGlobal SectionIDExport SectionIDStart SectionIDElement SectionIDCode SectionIDData // SectionIDDataCount may exist in WebAssembly 2.0 or WebAssembly 1.0 with FeatureBulkMemoryOperations enabled. // // See https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/binary/modules.html#data-count-section // See https://www.w3.org/TR/2022/WD-wasm-core-2-20220419/appendix/changes.html#bulk-memory-and-table-instructions SectionIDDataCount )
type TableInstance ¶
type TableInstance struct { // References holds references whose type is either RefTypeFuncref or RefTypeExternref (unsupported). // // Currently, only function references are supported. References []Reference // Min is the minimum (function) elements in this table and cannot grow to accommodate ElementSegment. Min uint32 // Max if present is the maximum (function) elements in this table, or nil if unbounded. Max *uint32 // Type is either RefTypeFuncref or RefTypeExternRef. Type RefType }
TableInstance represents a table of (RefTypeFuncref) elements in a module.
See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#table-instances%E2%91%A0
type ValueType ¶
type ValueType = byte
ValueType describes a numeric type used in Web Assembly 1.0 (20191205). For example, Function parameters and results are only definable as a value type.
The following describes how to convert between Wasm and Golang types:
- ValueTypeI32 - uint64(uint32,int32)
- ValueTypeI64 - uint64(int64)
- ValueTypeF32 - EncodeF32 DecodeF32 from float32
- ValueTypeF64 - EncodeF64 DecodeF64 from float64
- ValueTypeExternref - uintptr(unsafe.Pointer(p)) where p is any pointer type in Go (e.g. *string)
Ex. Given a Text Format type use (param i64) (result i64), no conversion is necessary.
results, _ := fn(ctx, input) result := result[0]
Ex. Given a Text Format type use (param f64) (result f64), conversion is necessary.
results, _ := fn(ctx, api.EncodeF64(input)) result := api.DecodeF64(result[0])
Note: This is a type alias as it is easier to encode and decode in the binary format.
See https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/#binary-valtype
const ( // ValueTypeI32 is a 32-bit integer. ValueTypeI32 ValueType = 0x7f // ValueTypeI64 is a 64-bit integer. ValueTypeI64 ValueType = 0x7e // ValueTypeF32 is a 32-bit floating point number. ValueTypeF32 ValueType = 0x7d // ValueTypeF64 is a 64-bit floating point number. ValueTypeF64 ValueType = 0x7c // ValueTypeExternref is an externref type. // // Note: in wazero, externref type value are opaque raw 64-bit pointers, // and the ValueTypeExternref type in the signature will be translated as // uintptr in wazero's API level. // // For example, given the import function: // (func (import "env" "f") (param externref) (result externref)) // // This can be defined in Go as: // r.NewModuleBuilder("env").ExportFunctions(map[string]interface{}{ // "f": func(externref uintptr) (resultExternRef uintptr) { return }, // }) // // Note: The usage of this type is toggled with WithFeatureBulkMemoryOperations. ValueTypeExternref ValueType = 0x6f ValueTypeV128 ValueType = 0x7b ValueTypeFuncref ValueType = 0x70 )