53 lines
572 B
Go
53 lines
572 B
Go
|
|
package gen
|
||
|
|
|
||
|
|
import "math/rand"
|
||
|
|
|
||
|
|
import "github.com/firestuff/subcoding/vm"
|
||
|
|
|
||
|
|
var opCodes = []vm.OpCodeType{
|
||
|
|
vm.OpNop,
|
||
|
|
|
||
|
|
vm.OpMov,
|
||
|
|
|
||
|
|
vm.OpAdd,
|
||
|
|
vm.OpSub,
|
||
|
|
vm.OpMul,
|
||
|
|
vm.OpDivU,
|
||
|
|
vm.OpDivS,
|
||
|
|
|
||
|
|
vm.OpNot,
|
||
|
|
vm.OpAnd,
|
||
|
|
vm.OpOr,
|
||
|
|
vm.OpXor,
|
||
|
|
|
||
|
|
vm.OpShR,
|
||
|
|
vm.OpShL,
|
||
|
|
|
||
|
|
vm.OpEq,
|
||
|
|
vm.OpLTU,
|
||
|
|
vm.OpLTS,
|
||
|
|
vm.OpGTU,
|
||
|
|
vm.OpGTS,
|
||
|
|
vm.OpLTEU,
|
||
|
|
vm.OpLTES,
|
||
|
|
vm.OpGTEU,
|
||
|
|
vm.OpGTES,
|
||
|
|
|
||
|
|
vm.OpJmp,
|
||
|
|
vm.OpJmpT,
|
||
|
|
vm.OpJmpF,
|
||
|
|
|
||
|
|
vm.OpCal,
|
||
|
|
vm.OpCalT,
|
||
|
|
vm.OpCalF,
|
||
|
|
|
||
|
|
vm.OpRet,
|
||
|
|
vm.OpRetT,
|
||
|
|
vm.OpRetF,
|
||
|
|
}
|
||
|
|
|
||
|
|
func randOpCode() vm.OpCodeType {
|
||
|
|
// Uniform distribution
|
||
|
|
return opCodes[rand.Intn(len(opCodes))]
|
||
|
|
}
|