package vm type OpCodeType uint32 const ( OpNoOp OpCodeType = 0x00000000 OpNop = OpNoOp OpMove = 0x00000100 OpMov = OpMove OpAdd = 0x00000200 OpSubtract = 0x00000201 OpSub = OpSubtract OpMultiply = 0x00000202 OpMul = OpMultiply OpDivideUnsigned = 0x00000203 OpDivU = OpDivideUnsigned OpDivideSigned = 0x00000204 OpDivS = OpDivideSigned OpNot = 0x00000300 OpAnd = 0x00000301 OpOr = 0x00000302 OpXor = 0x00000303 OpShiftRight = 0x00000400 OpShR = OpShiftRight OpShiftLeft = 0x00000401 OpShL = OpShiftLeft OpIsEqual = 0x00000500 OpEq = OpIsEqual OpIsLessThanUnsigned = 0x00000501 OpLTU = OpIsLessThanUnsigned OpIsLessThanSigned = 0x00000502 OpLTS = OpIsLessThanSigned OpIsGreaterThanUnsigned = 0x00000503 OpGTU = OpIsGreaterThanUnsigned OpIsGreaterThanSigned = 0x00000504 OpGTS = OpIsGreaterThanSigned OpIsLessThanOrEqualUnsigned = 0x00000505 OpLTEU = OpIsLessThanOrEqualUnsigned OpIsLessThanOrEqualSigned = 0x00000506 OpLTES = OpIsLessThanOrEqualSigned OpIsGreaterThanOrEqualUnsigned = 0x00000507 OpGTEU = OpIsGreaterThanOrEqualUnsigned OpIsGreaterThanOrEqualSigned = 0x00000508 OpGTES = OpIsGreaterThanOrEqualSigned OpJump = 0x00000600 OpJmp = OpJump OpJumpIfTrue = 0x00000601 OpJmpT = OpJumpIfTrue OpJumpIfFalse = 0x00000602 OpJmpF = OpJumpIfFalse OpCall = 0x00000700 OpCal = OpCall OpCallIfTrue = 0x00000701 OpCalT = OpCallIfTrue OpCallIfFalse = 0x00000702 OpCalF = OpCallIfFalse OpReturn = 0x00000800 OpRet = OpReturn OpReturnIfTrue = 0x00000801 OpRetT = OpReturnIfTrue OpReturnIfFalse = 0x00000802 OpRetF = OpReturnIfFalse OpSquareRoot = 0x00000900 OpSqRt = OpSquareRoot OpSqrt = OpSquareRoot ) type OperandNumericType int const ( OperandUnsigned OperandNumericType = 0 OperandSigned = 1 OperandSignedOrUnsigned = 2 OperandReference = 3 ) var OperandsByOpCode = map[OpCodeType][]OperandNumericType{ OpNop: []OperandNumericType{}, OpMov: []OperandNumericType{OperandReference, OperandSignedOrUnsigned}, OpAdd: []OperandNumericType{OperandReference, OperandSignedOrUnsigned}, OpSub: []OperandNumericType{OperandReference, OperandSignedOrUnsigned}, OpMul: []OperandNumericType{OperandReference, OperandSignedOrUnsigned}, OpDivU: []OperandNumericType{OperandReference, OperandUnsigned}, OpDivS: []OperandNumericType{OperandReference, OperandSigned}, OpNot: []OperandNumericType{OperandReference}, OpAnd: []OperandNumericType{OperandReference, OperandUnsigned}, OpOr: []OperandNumericType{OperandReference, OperandUnsigned}, OpXor: []OperandNumericType{OperandReference, OperandUnsigned}, OpShR: []OperandNumericType{OperandReference, OperandUnsigned}, OpShL: []OperandNumericType{OperandReference, OperandUnsigned}, OpEq: []OperandNumericType{OperandSignedOrUnsigned, OperandSignedOrUnsigned}, OpLTU: []OperandNumericType{OperandUnsigned, OperandUnsigned}, OpLTS: []OperandNumericType{OperandSigned, OperandSigned}, OpGTU: []OperandNumericType{OperandUnsigned, OperandUnsigned}, OpGTS: []OperandNumericType{OperandSigned, OperandSigned}, OpLTEU: []OperandNumericType{OperandUnsigned, OperandUnsigned}, OpLTES: []OperandNumericType{OperandSigned, OperandSigned}, OpGTEU: []OperandNumericType{OperandUnsigned, OperandUnsigned}, OpGTES: []OperandNumericType{OperandSigned, OperandSigned}, OpJmp: []OperandNumericType{OperandSigned}, OpJmpT: []OperandNumericType{OperandSigned}, OpJmpF: []OperandNumericType{OperandSigned}, OpCal: []OperandNumericType{OperandSigned}, OpCalT: []OperandNumericType{OperandSigned}, OpCalF: []OperandNumericType{OperandSigned}, OpRet: []OperandNumericType{}, OpRetT: []OperandNumericType{}, OpRetF: []OperandNumericType{}, OpSqrt: []OperandNumericType{OperandReference}, }