Files
subcoding/vm/opcode.go

122 lines
4.1 KiB
Go
Raw Normal View History

2021-11-15 20:44:26 -10:00
package vm
type OpCodeType uint32
const (
2021-11-19 16:30:11 -10:00
OpNoOp OpCodeType = 0x00000000
OpNop = OpNoOp
2021-11-15 20:44:26 -10:00
OpMove = 0x00000100
OpMov = OpMove
OpAdd = 0x00000200
OpSubtract = 0x00000201
OpSub = OpSubtract
OpMultiply = 0x00000202
OpMul = OpMultiply
OpDivideUnsigned = 0x00000203
OpDivU = OpDivideUnsigned
OpDivideSigned = 0x00000204
OpDivS = OpDivideSigned
2021-11-19 16:43:59 -10:00
OpNot = 0x00000300
OpAnd = 0x00000301
OpOr = 0x00000302
OpXor = 0x00000303
2021-11-19 17:04:11 -10:00
OpShiftRight = 0x00000400
OpShR = OpShiftRight
OpShiftLeft = 0x00000401
OpShL = OpShiftLeft
OpIsEqual = 0x00000500
2021-11-15 20:44:26 -10:00
OpEq = OpIsEqual
2021-11-19 17:04:11 -10:00
OpIsLessThanUnsigned = 0x00000501
2021-11-15 20:44:26 -10:00
OpLTU = OpIsLessThanUnsigned
2021-11-19 17:04:11 -10:00
OpIsLessThanSigned = 0x00000502
2021-11-15 20:44:26 -10:00
OpLTS = OpIsLessThanSigned
2021-11-19 17:04:11 -10:00
OpIsGreaterThanUnsigned = 0x00000503
2021-11-15 20:44:26 -10:00
OpGTU = OpIsGreaterThanUnsigned
2021-11-19 17:04:11 -10:00
OpIsGreaterThanSigned = 0x00000504
2021-11-15 20:44:26 -10:00
OpGTS = OpIsGreaterThanSigned
2021-11-19 17:04:11 -10:00
OpIsLessThanOrEqualUnsigned = 0x00000505
2021-11-15 20:44:26 -10:00
OpLTEU = OpIsLessThanOrEqualUnsigned
2021-11-19 17:04:11 -10:00
OpIsLessThanOrEqualSigned = 0x00000506
2021-11-15 20:44:26 -10:00
OpLTES = OpIsLessThanOrEqualSigned
2021-11-19 17:04:11 -10:00
OpIsGreaterThanOrEqualUnsigned = 0x00000507
2021-11-15 20:44:26 -10:00
OpGTEU = OpIsGreaterThanOrEqualUnsigned
2021-11-19 17:04:11 -10:00
OpIsGreaterThanOrEqualSigned = 0x00000508
2021-11-15 20:44:26 -10:00
OpGTES = OpIsGreaterThanOrEqualSigned
2021-11-19 17:04:11 -10:00
OpJump = 0x00000600
2021-11-15 20:44:26 -10:00
OpJmp = OpJump
2021-11-19 17:04:11 -10:00
OpJumpIfTrue = 0x00000601
2021-11-15 20:44:26 -10:00
OpJmpT = OpJumpIfTrue
2021-11-19 17:04:11 -10:00
OpJumpIfFalse = 0x00000602
2021-11-15 20:44:26 -10:00
OpJmpF = OpJumpIfFalse
2021-11-19 16:24:04 -10:00
2021-11-19 17:04:11 -10:00
OpCall = 0x00000700
2021-11-19 16:24:04 -10:00
OpCal = OpCall
2021-11-19 17:04:11 -10:00
OpCallIfTrue = 0x00000701
2021-11-19 16:24:04 -10:00
OpCalT = OpCallIfTrue
2021-11-19 17:04:11 -10:00
OpCallIfFalse = 0x00000702
2021-11-19 16:24:04 -10:00
OpCalF = OpCallIfFalse
2021-11-19 16:30:11 -10:00
2021-11-19 17:04:11 -10:00
OpReturn = 0x00000800
2021-11-19 16:30:11 -10:00
OpRet = OpReturn
2021-11-19 17:04:11 -10:00
OpReturnIfTrue = 0x00000801
2021-11-19 16:30:11 -10:00
OpRetT = OpReturnIfTrue
2021-11-19 17:04:11 -10:00
OpReturnIfFalse = 0x00000802
2021-11-19 16:30:11 -10:00
OpRetF = OpReturnIfFalse
2021-11-15 20:44:26 -10:00
)
2021-11-20 17:26:58 -10:00
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{},
}