Move operand type lists into the vm
This commit is contained in:
50
vm/opcode.go
50
vm/opcode.go
@@ -69,3 +69,53 @@ const (
|
||||
OpReturnIfFalse = 0x00000802
|
||||
OpRetF = OpReturnIfFalse
|
||||
)
|
||||
|
||||
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{},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user