...

Package wasm

import "cmd/internal/obj/wasm"
Overview
Index

Overview ▾

Index ▾

Package files

a.out.go anames.go wasmobj.go

Constants

const (
    /* mark flags */
    DONE          = 1 << iota
    PRESERVEFLAGS // not allowed to clobber flags
)

* wasm

const (
    AGet = obj.ABaseWasm + obj.A_ARCHSPECIFIC + iota
    ASet
    ATee
    ANot // alias for I32Eqz

    AUnreachable // opcode 0x00
    ANop
    ABlock
    ALoop
    AIf
    AElse

    AEnd // opcode 0x0B
    ABr
    ABrIf
    ABrTable
    // ACall and AReturn are WebAssembly instructions. obj.ACALL and obj.ARET are higher level instructions
    // with Go semantics, e.g. they manipulate the Go stack on the linear memory.
    AReturn
    ACall
    ACallIndirect

    ADrop // opcode 0x1A
    ASelect

    ALocalGet // opcode 0x20
    ALocalSet
    ALocalTee
    AGlobalGet
    AGlobalSet

    AI32Load // opcode 0x28
    AI64Load
    AF32Load
    AF64Load
    AI32Load8S
    AI32Load8U
    AI32Load16S
    AI32Load16U
    AI64Load8S
    AI64Load8U
    AI64Load16S
    AI64Load16U
    AI64Load32S
    AI64Load32U
    AI32Store
    AI64Store
    AF32Store
    AF64Store
    AI32Store8
    AI32Store16
    AI64Store8
    AI64Store16
    AI64Store32
    ACurrentMemory
    AGrowMemory

    AI32Const
    AI64Const
    AF32Const
    AF64Const

    AI32Eqz
    AI32Eq
    AI32Ne
    AI32LtS
    AI32LtU
    AI32GtS
    AI32GtU
    AI32LeS
    AI32LeU
    AI32GeS
    AI32GeU

    AI64Eqz
    AI64Eq
    AI64Ne
    AI64LtS
    AI64LtU
    AI64GtS
    AI64GtU
    AI64LeS
    AI64LeU
    AI64GeS
    AI64GeU

    AF32Eq
    AF32Ne
    AF32Lt
    AF32Gt
    AF32Le
    AF32Ge

    AF64Eq
    AF64Ne
    AF64Lt
    AF64Gt
    AF64Le
    AF64Ge

    AI32Clz
    AI32Ctz
    AI32Popcnt
    AI32Add
    AI32Sub
    AI32Mul
    AI32DivS
    AI32DivU
    AI32RemS
    AI32RemU
    AI32And
    AI32Or
    AI32Xor
    AI32Shl
    AI32ShrS
    AI32ShrU
    AI32Rotl
    AI32Rotr

    AI64Clz
    AI64Ctz
    AI64Popcnt
    AI64Add
    AI64Sub
    AI64Mul
    AI64DivS
    AI64DivU
    AI64RemS
    AI64RemU
    AI64And
    AI64Or
    AI64Xor
    AI64Shl
    AI64ShrS
    AI64ShrU
    AI64Rotl
    AI64Rotr

    AF32Abs
    AF32Neg
    AF32Ceil
    AF32Floor
    AF32Trunc
    AF32Nearest
    AF32Sqrt
    AF32Add
    AF32Sub
    AF32Mul
    AF32Div
    AF32Min
    AF32Max
    AF32Copysign

    AF64Abs
    AF64Neg
    AF64Ceil
    AF64Floor
    AF64Trunc
    AF64Nearest
    AF64Sqrt
    AF64Add
    AF64Sub
    AF64Mul
    AF64Div
    AF64Min
    AF64Max
    AF64Copysign

    AI32WrapI64
    AI32TruncF32S
    AI32TruncF32U
    AI32TruncF64S
    AI32TruncF64U
    AI64ExtendI32S
    AI64ExtendI32U
    AI64TruncF32S
    AI64TruncF32U
    AI64TruncF64S
    AI64TruncF64U
    AF32ConvertI32S
    AF32ConvertI32U
    AF32ConvertI64S
    AF32ConvertI64U
    AF32DemoteF64
    AF64ConvertI32S
    AF64ConvertI32U
    AF64ConvertI64S
    AF64ConvertI64U
    AF64PromoteF32
    AI32ReinterpretF32
    AI64ReinterpretF64
    AF32ReinterpretI32
    AF64ReinterpretI64
    AI32Extend8S
    AI32Extend16S
    AI64Extend8S
    AI64Extend16S
    AI64Extend32S

    AI32TruncSatF32S // opcode 0xFC 0x00
    AI32TruncSatF32U
    AI32TruncSatF64S
    AI32TruncSatF64U
    AI64TruncSatF32S
    AI64TruncSatF32U
    AI64TruncSatF64S
    AI64TruncSatF64U

    AMemoryInit
    ADataDrop
    AMemoryCopy
    AMemoryFill
    ATableInit
    AElemDrop
    ATableCopy
    ATableGrow
    ATableSize
    ATableFill

    // WASM Vector instructions 0xFD 0x00 and following
    AV128Load
    AV128Load8x8S
    AV128Load8x8U
    AV128Load16x4S
    AV128Load16x4U
    AV128Load32x2S
    AV128Load32x2U
    AV128Load8Splat
    AV128Load16Splat
    AV128Load32Splat
    AV128Load64Splat
    AV128Store
    AV128Const
    AI8x16Shuffle16
    AI8x16Swizzle
    AI8x16Splat
    AI16x8Splat
    AI32x4Splat
    AI64x2Splat
    AF32x4Splat
    AF64x2Splat
    AI8x16ExtractLaneS
    AI8x16ExtractLaneU
    AI8x16ReplaceLane
    AI16x8ExtractLaneS
    AI16x8ExtractLaneU
    AI16x8ReplaceLane
    AI32x4ExtractLane
    AI32x4ReplaceLane
    AI64x2ExtractLane
    AI64x2ReplaceLane
    AF32x4ExtractLane
    AF32x4ReplaceLane
    AF64x2ExtractLane
    AF64x2ReplaceLane
    AI8x16Eq
    AI8x16Ne
    AI8x16LtS
    AI8x16LtU
    AI8x16GtS
    AI8x16GtU
    AI8x16LeS
    AI8x16LeU
    AI8x16GeS
    AI8x16GeU
    AI16x8Eq
    AI16x8Ne
    AI16x8LtS
    AI16x8LtU
    AI16x8GtS
    AI16x8GtU
    AI16x8LeS
    AI16x8LeU
    AI16x8GeS
    AI16x8GeU
    AI32x4Eq
    AI32x4Ne
    AI32x4LtS
    AI32x4LtU
    AI32x4GtS
    AI32x4GtU
    AI32x4LeS
    AI32x4LeU
    AI32x4GeS
    AI32x4GeU
    AF32x4Eq
    AF32x4Ne
    AF32x4Lt
    AF32x4Gt
    AF32x4Le
    AF32x4Ge
    AF64x2Eq
    AF64x2Ne
    AF64x2Lt
    AF64x2Gt
    AF64x2Le
    AF64x2Ge
    AV128Not
    AV128And
    AV128Andnot
    AV128Or
    AV128Xor
    AV128Bitselect
    AV128AnyTrue
    AV128Load8Lane
    AV128Load16Lane
    AV128Load32Lane
    AV128Load64Lane
    AV128Store8Lane
    AV128Store16Lane
    AV128Store32Lane
    AV128Store64Lane
    AV128Load32Zero
    AV128Load64Zero
    AF32x4DemoteF64x2Zero
    AF64x2PromoteLowF32x4
    AI8x16Abs
    AI8x16Neg
    AI8x16Popcnt
    AI8x16AllTrue
    AI8x16Bitmask
    AI8x16NarrowI16x8S
    AI8x16NarrowI16x8U
    AF32x4Ceil
    AF32x4Floor
    AF32x4Trunc
    AF32x4Nearest
    AI8x16Shl
    AI8x16ShrS
    AI8x16ShrU
    AI8x16Add
    AI8x16AddSatS
    AI8x16AddSatU
    AI8x16Sub
    AI8x16SubSatS
    AI8x16SubSatU
    AF64x2Ceil
    AF64x2Floor
    AI8x16MinS
    AI8x16MinU
    AI8x16MaxS
    AI8x16MaxU
    AF64x2Trunc
    AI8x16AvgrU
    AI16x8ExtaddPairwiseI8x16S
    AI16x8ExtaddPairwiseI8x16U
    AI32x4ExtaddPairwiseI16x8S
    AI32x4ExtaddPairwiseI16x8U

    // WASM Vector instructions 0xFD 0x80 and following but followed by a 0x01
    // e.g. 0xFD 0x80 0x01, 0xFD  0x81  0x01, etc.
    AI16x8Abs
    AI16x8Neg
    AI16x8Q15MulrSatS
    AI16x8AllTrue
    AI16x8Bitmask
    AI16x8NarrowI32x4S
    AI16x8NarrowI32x4U
    AI16x8ExtendLowI8x16S
    AI16x8ExtendHighI8x16S
    AI16x8ExtendLowI8x16U
    AI16x8ExtendHighI8x16U
    AI16x8Shl
    AI16x8ShrS
    AI16x8ShrU
    AI16x8Add
    AI16x8AddSatS
    AI16x8AddSatU
    AI16x8Sub
    AI16x8SubSatS
    AI16x8SubSatU
    AF64x2Nearest
    AI16x8Mul
    AI16x8MinS
    AI16x8MinU
    AI16x8MaxS
    AI16x8MaxU
    AReservedFD9A01 // 0xFD 0x9A 0x01
    AI16x8AvgrU
    AI16x8ExtmulLowI8x16S
    AI16x8ExtmulHighI8x16S
    AI16x8ExtmulLowI8x16U
    AI16x8ExtmulHighI8x16U
    AI32x4Abs
    AI32x4Neg
    AReservedFDA201
    AI32x4AllTrue
    AI32x4Bitmask
    AReservedFDA501
    AReservedFDA601
    AI32x4ExtendLowI16x8S
    AI32x4ExtendHighI16x8S
    AI32x4ExtendLowI16x8U
    AI32x4ExtendHighI16x8U
    AI32x4Shl
    AI32x4ShrS
    AI32x4ShrU
    AI32x4Add
    AReservedFDAF01
    AReservedFDB001
    AI32x4Sub
    AReservedFDB201
    AReservedFDB301
    AReservedFDB401
    AI32x4Mul
    AI32x4MinS
    AI32x4MinU
    AI32x4MaxS
    AI32x4MaxU
    AI32x4DotI16x8S
    AReservedFDBB01
    AI32x4ExtmulLowI16x8S
    AI32x4ExtmulHighI16x8S
    AI32x4ExtmulLowI16x8U
    AI32x4ExtmulHighI16x8U
    AI64x2Abs
    AI64x2Neg
    AReservedFDC201
    AI64x2AllTrue
    AI64x2Bitmask
    AReservedFDC501
    AReservedFDC601
    AI64x2ExtendLowI32x4S
    AI64x2ExtendHighI32x4S
    AI64x2ExtendLowI32x4U
    AI64x2ExtendHighI32x4U
    AI64x2Shl
    AI64x2ShrS
    AI64x2ShrU
    AI64x2Add
    AReservedFDCF01
    AReservedFDD001
    AI64x2Sub
    AReservedFDD201
    AReservedFDD301
    AReservedFDD401
    AI64x2Mul
    AI64x2Eq
    AI64x2Ne
    AI64x2LtS
    AI64x2GtS
    AI64x2LeS
    AI64x2GeS
    AI64x2ExtmulLowI32x4S
    AI64x2ExtmulHighI32x4S
    AI64x2ExtmulLowI32x4U
    AI64x2ExtmulHighI32x4U
    AF32x4Abs
    AF32x4Neg
    AReservedFDE201
    AF32x4Sqrt
    AF32x4Add
    AF32x4Sub
    AF32x4Mul
    AF32x4Div
    AF32x4Min
    AF32x4Max
    AF32x4Pmin
    AF32x4Pmax
    AF64x2Abs
    AF64x2Neg
    AReservedFDEE01
    AF64x2Sqrt
    AF64x2Add
    AF64x2Sub
    AF64x2Mul
    AF64x2Div
    AF64x2Min
    AF64x2Max
    AF64x2Pmin
    AF64x2Pmax
    AI32x4TruncSatF32x4S
    AI32x4TruncSatF32x4U
    AF32x4ConvertI32x4S
    AF32x4ConvertI32x4U
    AI32x4TruncSatF64x2SZero
    AI32x4TruncSatF64x2UZero
    AF64x2ConvertLowI32x4S
    AF64x2ConvertLowI32x4U

    // WASM Vector instructions 0xFD 0x80 and following but followed by a 0x02
    // e.g. 0xFD 0x80 0x02, 0xFD 0x81 0x02, etc.
    AI8x16RelaxedSwizzle
    AI32x4RelaxedTruncF32x4S
    AI32x4RelaxedTruncF32x4U
    AI32x4RelaxedTruncF64x2S
    AI32x4RelaxedTruncF64x2U
    AF32x4RelaxedMadd
    AF32x4RelaxedNmadd
    AF64x2RelaxedMadd
    AF64x2RelaxedNmadd
    AI8x16RelaxedLaneselect
    AI16x8RelaxedLaneselect
    AI32x4RelaxedLaneselect
    AI64x2RelaxedLaneselect
    AF32x4RelaxedMin
    AF32x4RelaxedMax
    AF64x2RelaxedMin
    AF64x2RelaxedMax
    AI16x8RelaxedQ15MulrS
    AI16x8RelaxedDotI8x16I7x16S
    AI32x4RelaxedDotI8x16I7x16AddS

    ALast // Sentinel: End of low-level WebAssembly instructions.

    ARESUMEPOINT
    // ACALLNORESUME is a call which is not followed by a resume point.
    // It is allowed inside of WebAssembly blocks, whereas obj.ACALL is not.
    // However, it is not allowed to switch goroutines while inside of an ACALLNORESUME call.
    ACALLNORESUME

    ARETUNWIND

    AMOVB
    AMOVH
    AMOVW
    AMOVD

    AWORD
    ALAST
)
const (
    // globals
    REG_SP = obj.RBaseWasm + iota // SP is currently 32-bit, until 64-bit memory operations are available
    REG_CTXT
    REG_g
    // RET* are used by runtime.return0 and runtime.reflectcall. These functions pass return values in registers.
    REG_RET0
    REG_RET1
    REG_RET2
    REG_RET3
    REG_PAUSE

    // i32 locals
    REG_R0
    REG_R1
    REG_R2
    REG_R3
    REG_R4
    REG_R5
    REG_R6
    REG_R7
    REG_R8
    REG_R9
    REG_R10
    REG_R11
    REG_R12
    REG_R13
    REG_R14
    REG_R15

    // f32 locals
    REG_F0
    REG_F1
    REG_F2
    REG_F3
    REG_F4
    REG_F5
    REG_F6
    REG_F7
    REG_F8
    REG_F9
    REG_F10
    REG_F11
    REG_F12
    REG_F13
    REG_F14
    REG_F15

    // f64 locals
    REG_F16
    REG_F17
    REG_F18
    REG_F19
    REG_F20
    REG_F21
    REG_F22
    REG_F23
    REG_F24
    REG_F25
    REG_F26
    REG_F27
    REG_F28
    REG_F29
    REG_F30
    REG_F31

    // v128 locals
    REG_V0
    REG_V1
    REG_V2
    REG_V3
    REG_V4
    REG_V5
    REG_V6
    REG_V7
    REG_V8
    REG_V9
    REG_V10
    REG_V11
    REG_V12
    REG_V13
    REG_V14
    REG_V15

    REG_PC_B // also first parameter, i32

    MAXREG

    MINREG  = REG_SP
    REGSP   = REG_SP
    REGCTXT = REG_CTXT
    REGG    = REG_g
)
const (
    // This is a special wasm module name that when used as the module name
    // in //go:wasmimport will cause the generated code to pass the stack pointer
    // directly to the imported function. In other words, any function that
    // uses the gojs module understands the internal Go WASM ABI directly.
    GojsModule = "gojs"
)
const (
    REG_NONE = 0
)
const (
    /* mark flags */
    WasmImport = 1 << 0
)

Variables

var Anames = []string{
    obj.A_ARCHSPECIFIC: "Get",
    "Set",
    "Tee",
    "Not",
    "Unreachable",
    "Nop",
    "Block",
    "Loop",
    "If",
    "Else",
    "End",
    "Br",
    "BrIf",
    "BrTable",
    "Return",
    "Call",
    "CallIndirect",
    "Drop",
    "Select",
    "LocalGet",
    "LocalSet",
    "LocalTee",
    "GlobalGet",
    "GlobalSet",
    "I32Load",
    "I64Load",
    "F32Load",
    "F64Load",
    "I32Load8S",
    "I32Load8U",
    "I32Load16S",
    "I32Load16U",
    "I64Load8S",
    "I64Load8U",
    "I64Load16S",
    "I64Load16U",
    "I64Load32S",
    "I64Load32U",
    "I32Store",
    "I64Store",
    "F32Store",
    "F64Store",
    "I32Store8",
    "I32Store16",
    "I64Store8",
    "I64Store16",
    "I64Store32",
    "CurrentMemory",
    "GrowMemory",
    "I32Const",
    "I64Const",
    "F32Const",
    "F64Const",
    "I32Eqz",
    "I32Eq",
    "I32Ne",
    "I32LtS",
    "I32LtU",
    "I32GtS",
    "I32GtU",
    "I32LeS",
    "I32LeU",
    "I32GeS",
    "I32GeU",
    "I64Eqz",
    "I64Eq",
    "I64Ne",
    "I64LtS",
    "I64LtU",
    "I64GtS",
    "I64GtU",
    "I64LeS",
    "I64LeU",
    "I64GeS",
    "I64GeU",
    "F32Eq",
    "F32Ne",
    "F32Lt",
    "F32Gt",
    "F32Le",
    "F32Ge",
    "F64Eq",
    "F64Ne",
    "F64Lt",
    "F64Gt",
    "F64Le",
    "F64Ge",
    "I32Clz",
    "I32Ctz",
    "I32Popcnt",
    "I32Add",
    "I32Sub",
    "I32Mul",
    "I32DivS",
    "I32DivU",
    "I32RemS",
    "I32RemU",
    "I32And",
    "I32Or",
    "I32Xor",
    "I32Shl",
    "I32ShrS",
    "I32ShrU",
    "I32Rotl",
    "I32Rotr",
    "I64Clz",
    "I64Ctz",
    "I64Popcnt",
    "I64Add",
    "I64Sub",
    "I64Mul",
    "I64DivS",
    "I64DivU",
    "I64RemS",
    "I64RemU",
    "I64And",
    "I64Or",
    "I64Xor",
    "I64Shl",
    "I64ShrS",
    "I64ShrU",
    "I64Rotl",
    "I64Rotr",
    "F32Abs",
    "F32Neg",
    "F32Ceil",
    "F32Floor",
    "F32Trunc",
    "F32Nearest",
    "F32Sqrt",
    "F32Add",
    "F32Sub",
    "F32Mul",
    "F32Div",
    "F32Min",
    "F32Max",
    "F32Copysign",
    "F64Abs",
    "F64Neg",
    "F64Ceil",
    "F64Floor",
    "F64Trunc",
    "F64Nearest",
    "F64Sqrt",
    "F64Add",
    "F64Sub",
    "F64Mul",
    "F64Div",
    "F64Min",
    "F64Max",
    "F64Copysign",
    "I32WrapI64",
    "I32TruncF32S",
    "I32TruncF32U",
    "I32TruncF64S",
    "I32TruncF64U",
    "I64ExtendI32S",
    "I64ExtendI32U",
    "I64TruncF32S",
    "I64TruncF32U",
    "I64TruncF64S",
    "I64TruncF64U",
    "F32ConvertI32S",
    "F32ConvertI32U",
    "F32ConvertI64S",
    "F32ConvertI64U",
    "F32DemoteF64",
    "F64ConvertI32S",
    "F64ConvertI32U",
    "F64ConvertI64S",
    "F64ConvertI64U",
    "F64PromoteF32",
    "I32ReinterpretF32",
    "I64ReinterpretF64",
    "F32ReinterpretI32",
    "F64ReinterpretI64",
    "I32Extend8S",
    "I32Extend16S",
    "I64Extend8S",
    "I64Extend16S",
    "I64Extend32S",
    "I32TruncSatF32S",
    "I32TruncSatF32U",
    "I32TruncSatF64S",
    "I32TruncSatF64U",
    "I64TruncSatF32S",
    "I64TruncSatF32U",
    "I64TruncSatF64S",
    "I64TruncSatF64U",
    "MemoryInit",
    "DataDrop",
    "MemoryCopy",
    "MemoryFill",
    "TableInit",
    "ElemDrop",
    "TableCopy",
    "TableGrow",
    "TableSize",
    "TableFill",
    "V128Load",
    "V128Load8x8S",
    "V128Load8x8U",
    "V128Load16x4S",
    "V128Load16x4U",
    "V128Load32x2S",
    "V128Load32x2U",
    "V128Load8Splat",
    "V128Load16Splat",
    "V128Load32Splat",
    "V128Load64Splat",
    "V128Store",
    "V128Const",
    "I8x16Shuffle16",
    "I8x16Swizzle",
    "I8x16Splat",
    "I16x8Splat",
    "I32x4Splat",
    "I64x2Splat",
    "F32x4Splat",
    "F64x2Splat",
    "I8x16ExtractLaneS",
    "I8x16ExtractLaneU",
    "I8x16ReplaceLane",
    "I16x8ExtractLaneS",
    "I16x8ExtractLaneU",
    "I16x8ReplaceLane",
    "I32x4ExtractLane",
    "I32x4ReplaceLane",
    "I64x2ExtractLane",
    "I64x2ReplaceLane",
    "F32x4ExtractLane",
    "F32x4ReplaceLane",
    "F64x2ExtractLane",
    "F64x2ReplaceLane",
    "I8x16Eq",
    "I8x16Ne",
    "I8x16LtS",
    "I8x16LtU",
    "I8x16GtS",
    "I8x16GtU",
    "I8x16LeS",
    "I8x16LeU",
    "I8x16GeS",
    "I8x16GeU",
    "I16x8Eq",
    "I16x8Ne",
    "I16x8LtS",
    "I16x8LtU",
    "I16x8GtS",
    "I16x8GtU",
    "I16x8LeS",
    "I16x8LeU",
    "I16x8GeS",
    "I16x8GeU",
    "I32x4Eq",
    "I32x4Ne",
    "I32x4LtS",
    "I32x4LtU",
    "I32x4GtS",
    "I32x4GtU",
    "I32x4LeS",
    "I32x4LeU",
    "I32x4GeS",
    "I32x4GeU",
    "F32x4Eq",
    "F32x4Ne",
    "F32x4Lt",
    "F32x4Gt",
    "F32x4Le",
    "F32x4Ge",
    "F64x2Eq",
    "F64x2Ne",
    "F64x2Lt",
    "F64x2Gt",
    "F64x2Le",
    "F64x2Ge",
    "V128Not",
    "V128And",
    "V128Andnot",
    "V128Or",
    "V128Xor",
    "V128Bitselect",
    "V128AnyTrue",
    "V128Load8Lane",
    "V128Load16Lane",
    "V128Load32Lane",
    "V128Load64Lane",
    "V128Store8Lane",
    "V128Store16Lane",
    "V128Store32Lane",
    "V128Store64Lane",
    "V128Load32Zero",
    "V128Load64Zero",
    "F32x4DemoteF64x2Zero",
    "F64x2PromoteLowF32x4",
    "I8x16Abs",
    "I8x16Neg",
    "I8x16Popcnt",
    "I8x16AllTrue",
    "I8x16Bitmask",
    "I8x16NarrowI16x8S",
    "I8x16NarrowI16x8U",
    "F32x4Ceil",
    "F32x4Floor",
    "F32x4Trunc",
    "F32x4Nearest",
    "I8x16Shl",
    "I8x16ShrS",
    "I8x16ShrU",
    "I8x16Add",
    "I8x16AddSatS",
    "I8x16AddSatU",
    "I8x16Sub",
    "I8x16SubSatS",
    "I8x16SubSatU",
    "F64x2Ceil",
    "F64x2Floor",
    "I8x16MinS",
    "I8x16MinU",
    "I8x16MaxS",
    "I8x16MaxU",
    "F64x2Trunc",
    "I8x16AvgrU",
    "I16x8ExtaddPairwiseI8x16S",
    "I16x8ExtaddPairwiseI8x16U",
    "I32x4ExtaddPairwiseI16x8S",
    "I32x4ExtaddPairwiseI16x8U",
    "I16x8Abs",
    "I16x8Neg",
    "I16x8Q15MulrSatS",
    "I16x8AllTrue",
    "I16x8Bitmask",
    "I16x8NarrowI32x4S",
    "I16x8NarrowI32x4U",
    "I16x8ExtendLowI8x16S",
    "I16x8ExtendHighI8x16S",
    "I16x8ExtendLowI8x16U",
    "I16x8ExtendHighI8x16U",
    "I16x8Shl",
    "I16x8ShrS",
    "I16x8ShrU",
    "I16x8Add",
    "I16x8AddSatS",
    "I16x8AddSatU",
    "I16x8Sub",
    "I16x8SubSatS",
    "I16x8SubSatU",
    "F64x2Nearest",
    "I16x8Mul",
    "I16x8MinS",
    "I16x8MinU",
    "I16x8MaxS",
    "I16x8MaxU",
    "ReservedFD9A01",
    "I16x8AvgrU",
    "I16x8ExtmulLowI8x16S",
    "I16x8ExtmulHighI8x16S",
    "I16x8ExtmulLowI8x16U",
    "I16x8ExtmulHighI8x16U",
    "I32x4Abs",
    "I32x4Neg",
    "ReservedFDA201",
    "I32x4AllTrue",
    "I32x4Bitmask",
    "ReservedFDA501",
    "ReservedFDA601",
    "I32x4ExtendLowI16x8S",
    "I32x4ExtendHighI16x8S",
    "I32x4ExtendLowI16x8U",
    "I32x4ExtendHighI16x8U",
    "I32x4Shl",
    "I32x4ShrS",
    "I32x4ShrU",
    "I32x4Add",
    "ReservedFDAF01",
    "ReservedFDB001",
    "I32x4Sub",
    "ReservedFDB201",
    "ReservedFDB301",
    "ReservedFDB401",
    "I32x4Mul",
    "I32x4MinS",
    "I32x4MinU",
    "I32x4MaxS",
    "I32x4MaxU",
    "I32x4DotI16x8S",
    "ReservedFDBB01",
    "I32x4ExtmulLowI16x8S",
    "I32x4ExtmulHighI16x8S",
    "I32x4ExtmulLowI16x8U",
    "I32x4ExtmulHighI16x8U",
    "I64x2Abs",
    "I64x2Neg",
    "ReservedFDC201",
    "I64x2AllTrue",
    "I64x2Bitmask",
    "ReservedFDC501",
    "ReservedFDC601",
    "I64x2ExtendLowI32x4S",
    "I64x2ExtendHighI32x4S",
    "I64x2ExtendLowI32x4U",
    "I64x2ExtendHighI32x4U",
    "I64x2Shl",
    "I64x2ShrS",
    "I64x2ShrU",
    "I64x2Add",
    "ReservedFDCF01",
    "ReservedFDD001",
    "I64x2Sub",
    "ReservedFDD201",
    "ReservedFDD301",
    "ReservedFDD401",
    "I64x2Mul",
    "I64x2Eq",
    "I64x2Ne",
    "I64x2LtS",
    "I64x2GtS",
    "I64x2LeS",
    "I64x2GeS",
    "I64x2ExtmulLowI32x4S",
    "I64x2ExtmulHighI32x4S",
    "I64x2ExtmulLowI32x4U",
    "I64x2ExtmulHighI32x4U",
    "F32x4Abs",
    "F32x4Neg",
    "ReservedFDE201",
    "F32x4Sqrt",
    "F32x4Add",
    "F32x4Sub",
    "F32x4Mul",
    "F32x4Div",
    "F32x4Min",
    "F32x4Max",
    "F32x4Pmin",
    "F32x4Pmax",
    "F64x2Abs",
    "F64x2Neg",
    "ReservedFDEE01",
    "F64x2Sqrt",
    "F64x2Add",
    "F64x2Sub",
    "F64x2Mul",
    "F64x2Div",
    "F64x2Min",
    "F64x2Max",
    "F64x2Pmin",
    "F64x2Pmax",
    "I32x4TruncSatF32x4S",
    "I32x4TruncSatF32x4U",
    "F32x4ConvertI32x4S",
    "F32x4ConvertI32x4U",
    "I32x4TruncSatF64x2SZero",
    "I32x4TruncSatF64x2UZero",
    "F64x2ConvertLowI32x4S",
    "F64x2ConvertLowI32x4U",
    "I8x16RelaxedSwizzle",
    "I32x4RelaxedTruncF32x4S",
    "I32x4RelaxedTruncF32x4U",
    "I32x4RelaxedTruncF64x2S",
    "I32x4RelaxedTruncF64x2U",
    "F32x4RelaxedMadd",
    "F32x4RelaxedNmadd",
    "F64x2RelaxedMadd",
    "F64x2RelaxedNmadd",
    "I8x16RelaxedLaneselect",
    "I16x8RelaxedLaneselect",
    "I32x4RelaxedLaneselect",
    "I64x2RelaxedLaneselect",
    "F32x4RelaxedMin",
    "F32x4RelaxedMax",
    "F64x2RelaxedMin",
    "F64x2RelaxedMax",
    "I16x8RelaxedQ15MulrS",
    "I16x8RelaxedDotI8x16I7x16S",
    "I32x4RelaxedDotI8x16I7x16AddS",
    "Last",
    "RESUMEPOINT",
    "CALLNORESUME",
    "RETUNWIND",
    "MOVB",
    "MOVH",
    "MOVW",
    "MOVD",
    "WORD",
    "LAST",
}
var Linkwasm = obj.LinkArch{
    Arch:       sys.ArchWasm,
    Init:       instinit,
    Preprocess: preprocess,
    Assemble:   assemble,
    UnaryDst:   unaryDst,
}
var Register = map[string]int16{
    "SP":    REG_SP,
    "CTXT":  REG_CTXT,
    "g":     REG_g,
    "RET0":  REG_RET0,
    "RET1":  REG_RET1,
    "RET2":  REG_RET2,
    "RET3":  REG_RET3,
    "PAUSE": REG_PAUSE,

    "R0":  REG_R0,
    "R1":  REG_R1,
    "R2":  REG_R2,
    "R3":  REG_R3,
    "R4":  REG_R4,
    "R5":  REG_R5,
    "R6":  REG_R6,
    "R7":  REG_R7,
    "R8":  REG_R8,
    "R9":  REG_R9,
    "R10": REG_R10,
    "R11": REG_R11,
    "R12": REG_R12,
    "R13": REG_R13,
    "R14": REG_R14,
    "R15": REG_R15,

    "F0":  REG_F0,
    "F1":  REG_F1,
    "F2":  REG_F2,
    "F3":  REG_F3,
    "F4":  REG_F4,
    "F5":  REG_F5,
    "F6":  REG_F6,
    "F7":  REG_F7,
    "F8":  REG_F8,
    "F9":  REG_F9,
    "F10": REG_F10,
    "F11": REG_F11,
    "F12": REG_F12,
    "F13": REG_F13,
    "F14": REG_F14,
    "F15": REG_F15,

    "F16": REG_F16,
    "F17": REG_F17,
    "F18": REG_F18,
    "F19": REG_F19,
    "F20": REG_F20,
    "F21": REG_F21,
    "F22": REG_F22,
    "F23": REG_F23,
    "F24": REG_F24,
    "F25": REG_F25,
    "F26": REG_F26,
    "F27": REG_F27,
    "F28": REG_F28,
    "F29": REG_F29,
    "F30": REG_F30,
    "F31": REG_F31,

    "V0":  REG_V0,
    "V1":  REG_V1,
    "V2":  REG_V2,
    "V3":  REG_V3,
    "V4":  REG_V4,
    "V5":  REG_V5,
    "V6":  REG_V6,
    "V7":  REG_V7,
    "V8":  REG_V8,
    "V9":  REG_V9,
    "V10": REG_V10,
    "V11": REG_V11,
    "V12": REG_V12,
    "V13": REG_V13,
    "V14": REG_V14,
    "V15": REG_V15,

    "PC_B": REG_PC_B,
}