{name:"LoweredStaticCall",argLength:1,reg:regInfo{clobbers:callerSave},aux:"SymOff",call:true,symEffect:"None"},// call static function aux.(*obj.LSym). arg0=mem, auxint=argsize, returns mem
{name:"LoweredClosureCall",argLength:3,reg:regInfo{inputs:[]regMask{gp,gp,0},clobbers:callerSave},aux:"Int64",call:true},// call function via closure. arg0=codeptr, arg1=closure, arg2=mem, auxint=argsize, returns mem
{name:"LoweredInterCall",argLength:2,reg:regInfo{inputs:[]regMask{gp},clobbers:callerSave},aux:"Int64",call:true},// call fn by pointer. arg0=codeptr, arg1=mem, auxint=argsize, returns mem
{name:"LoweredMove",argLength:3,reg:regInfo{inputs:[]regMask{gp,gp}},aux:"Int64"},// large move. arg0=dst, arg1=src, arg2=mem, auxint=len/8, returns mem
{name:"LoweredZero",argLength:2,reg:regInfo{inputs:[]regMask{gp}},aux:"Int64"},// large zeroing. arg0=start, arg1=mem, auxint=len/8, returns mem
{name:"LoweredGetClosurePtr",reg:gp01},// returns wasm.REG_CTXT, the closure pointer
{name:"LoweredGetCallerPC",reg:gp01,rematerializeable:true},// returns the PC of the caller of the current function
{name:"LoweredGetCallerSP",reg:gp01,rematerializeable:true},// returns the SP of the caller of the current function
{name:"LoweredNilCheck",argLength:2,reg:regInfo{inputs:[]regMask{gp}},nilCheck:true,faultOnNilArg0:true},// panic if arg0 is nil. arg1=mem
// The following are native WebAssembly instructions, see https://webassembly.github.io/spec/core/syntax/instructions.html
{name:"Select",asm:"Select",argLength:3,reg:gp31},// returns arg0 if arg2 != 0, otherwise returns arg1
{name:"I64Load8U",asm:"I64Load8U",argLength:2,reg:gpload,aux:"Int64",typ:"UInt8"},// read unsigned 8-bit integer from address arg0+aux, arg1=mem
{name:"I64Load8S",asm:"I64Load8S",argLength:2,reg:gpload,aux:"Int64",typ:"Int8"},// read signed 8-bit integer from address arg0+aux, arg1=mem
{name:"I64Load16U",asm:"I64Load16U",argLength:2,reg:gpload,aux:"Int64",typ:"UInt16"},// read unsigned 16-bit integer from address arg0+aux, arg1=mem
{name:"I64Load16S",asm:"I64Load16S",argLength:2,reg:gpload,aux:"Int64",typ:"Int16"},// read signed 16-bit integer from address arg0+aux, arg1=mem
{name:"I64Load32U",asm:"I64Load32U",argLength:2,reg:gpload,aux:"Int64",typ:"UInt32"},// read unsigned 32-bit integer from address arg0+aux, arg1=mem
{name:"I64Load32S",asm:"I64Load32S",argLength:2,reg:gpload,aux:"Int64",typ:"Int32"},// read signed 32-bit integer from address arg0+aux, arg1=mem
{name:"I64Load",asm:"I64Load",argLength:2,reg:gpload,aux:"Int64",typ:"UInt64"},// read 64-bit integer from address arg0+aux, arg1=mem
{name:"I64Store8",asm:"I64Store8",argLength:3,reg:gpstore,aux:"Int64",typ:"Mem"},// store 8-bit integer arg1 at address arg0+aux, arg2=mem, returns mem
{name:"I64Store16",asm:"I64Store16",argLength:3,reg:gpstore,aux:"Int64",typ:"Mem"},// store 16-bit integer arg1 at address arg0+aux, arg2=mem, returns mem
{name:"I64Store32",asm:"I64Store32",argLength:3,reg:gpstore,aux:"Int64",typ:"Mem"},// store 32-bit integer arg1 at address arg0+aux, arg2=mem, returns mem
{name:"I64Store",asm:"I64Store",argLength:3,reg:gpstore,aux:"Int64",typ:"Mem"},// store 64-bit integer arg1 at address arg0+aux, arg2=mem, returns mem
{name:"F32Load",asm:"F32Load",argLength:2,reg:fpload,aux:"Int64",typ:"Float64"},// read 32-bit float from address arg0+aux, arg1=mem
{name:"F64Load",asm:"F64Load",argLength:2,reg:fpload,aux:"Int64",typ:"Float64"},// read 64-bit float from address arg0+aux, arg1=mem
{name:"F32Store",asm:"F32Store",argLength:3,reg:fpstore,aux:"Int64",typ:"Mem"},// store 32-bit float arg1 at address arg0+aux, arg2=mem, returns mem
{name:"F64Store",asm:"F64Store",argLength:3,reg:fpstore,aux:"Int64",typ:"Mem"},// store 64-bit float arg1 at address arg0+aux, arg2=mem, returns mem
{name:"I64Const",reg:gp01,aux:"Int64",rematerializeable:true,typ:"Int64"},// returns the constant integer aux
{name:"F64Const",reg:fp01,aux:"Float64",rematerializeable:true,typ:"Float64"},// returns the constant float aux
{name:"I64TruncF64S",asm:"I64TruncF64S",argLength:1,reg:regInfo{inputs:[]regMask{fp},outputs:[]regMask{gp}},typ:"Int64"},// truncates the float arg0 to a signed integer
{name:"I64TruncF64U",asm:"I64TruncF64U",argLength:1,reg:regInfo{inputs:[]regMask{fp},outputs:[]regMask{gp}},typ:"Int64"},// truncates the float arg0 to an unsigned integer
{name:"F64ConvertI64S",asm:"F64ConvertI64S",argLength:1,reg:regInfo{inputs:[]regMask{gp},outputs:[]regMask{fp}},typ:"Float64"},// converts the signed integer arg0 to a float
{name:"F64ConvertI64U",asm:"F64ConvertI64U",argLength:1,reg:regInfo{inputs:[]regMask{gp},outputs:[]regMask{fp}},typ:"Float64"},// converts the unsigned integer arg0 to a float