package asm import "github.com/firestuff/subcoding/vm" var opCodeByName = map[string]vm.OpCodeType{ "noop": vm.OpNoOp, "nop": vm.OpNop, "call": vm.OpCall, "cal": vm.OpCal, "return": vm.OpReturn, "ret": vm.OpRet, "move": vm.OpMove, "mov": vm.OpMov, "add": vm.OpAdd, "subtract": vm.OpSubtract, "sub": vm.OpSub, "multiply": vm.OpMultiply, "mul": vm.OpMul, "divideunsigned": vm.OpDivideUnsigned, "divu": vm.OpDivU, "dividesigned": vm.OpDivideSigned, "divs": vm.OpDivS, "isequal": vm.OpIsEqual, "eq": vm.OpEq, "islessthanunsigned": vm.OpIsLessThanUnsigned, "ltu": vm.OpLTU, "islessthansigned": vm.OpIsLessThanSigned, "lts": vm.OpLTS, "isgreaterthanunsigned": vm.OpIsGreaterThanUnsigned, "gtu": vm.OpGTU, "isgreaterthansigned": vm.OpIsGreaterThanSigned, "gts": vm.OpGTS, "islessthanorequalunsigned": vm.OpIsLessThanOrEqualUnsigned, "lteu": vm.OpLTEU, "islessthanorequalsigned": vm.OpIsLessThanOrEqualSigned, "ltes": vm.OpLTES, "isgreaterthanorequalunsigned": vm.OpIsGreaterThanOrEqualUnsigned, "gteu": vm.OpGTEU, "isgreaterthanorequalsigned": vm.OpIsGreaterThanOrEqualSigned, "gtes": vm.OpGTES, "jump": vm.OpJump, "jmp": vm.OpJmp, "jumpiftrue": vm.OpJumpIfTrue, "jmpt": vm.OpJmpT, "jumpiffalse": vm.OpJumpIfFalse, "jmpf": vm.OpJmpF, } type operandType int const ( u operandType = 0 s = 1 us = 2 r = 3 ) var operandsByOpCode = map[vm.OpCodeType][]operandType{ vm.OpNop: []operandType{}, vm.OpCal: []operandType{s}, vm.OpRet: []operandType{}, vm.OpMov: []operandType{r, us}, vm.OpAdd: []operandType{r, us}, vm.OpSub: []operandType{r, us}, vm.OpMul: []operandType{r, us}, vm.OpDivU: []operandType{r, u}, vm.OpDivS: []operandType{r, s}, vm.OpEq: []operandType{us, us}, vm.OpLTU: []operandType{u, u}, vm.OpLTS: []operandType{s, s}, vm.OpGTU: []operandType{u, u}, vm.OpGTS: []operandType{s, s}, vm.OpLTEU: []operandType{u, u}, vm.OpLTES: []operandType{s, s}, vm.OpGTEU: []operandType{u, u}, vm.OpGTES: []operandType{s, s}, vm.OpJmp: []operandType{s}, vm.OpJmpT: []operandType{s}, vm.OpJmpF: []operandType{s}, }