Move operand type lists into the vm

This commit is contained in:
Ian Gulliver
2021-11-20 17:26:58 -10:00
parent 30ff003494
commit ae771823b0
4 changed files with 60 additions and 60 deletions

View File

@@ -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{},
}