static DefaultInstructionInterpreter() { Default = new DefaultInstructionInterpreter(); Default.ImplementOperator(Operators.Unreachable, OperatorImpls.Unreachable); Default.ImplementOperator(Operators.Nop, OperatorImpls.Nop); Default.ImplementOperator(Operators.Block, OperatorImpls.Block); Default.ImplementOperator(Operators.Loop, OperatorImpls.Loop); Default.ImplementOperator(Operators.If, OperatorImpls.If); Default.ImplementOperator(Operators.Br, OperatorImpls.Br); Default.ImplementOperator(Operators.BrIf, OperatorImpls.BrIf); Default.ImplementOperator(Operators.BrTable, OperatorImpls.BrTable); Default.ImplementOperator(Operators.Return, OperatorImpls.Return); Default.ImplementOperator(Operators.Drop, OperatorImpls.Drop); Default.ImplementOperator(Operators.Select, OperatorImpls.Select); Default.ImplementOperator(Operators.Call, OperatorImpls.Call); Default.ImplementOperator(Operators.CallIndirect, OperatorImpls.CallIndirect); Default.ImplementOperator(Operators.GetLocal, OperatorImpls.GetLocal); Default.ImplementOperator(Operators.SetLocal, OperatorImpls.SetLocal); Default.ImplementOperator(Operators.TeeLocal, OperatorImpls.TeeLocal); Default.ImplementOperator(Operators.GetGlobal, OperatorImpls.GetGlobal); Default.ImplementOperator(Operators.SetGlobal, OperatorImpls.SetGlobal); Default.ImplementOperator(Operators.Int32Load, OperatorImpls.Int32Load); Default.ImplementOperator(Operators.Int64Load, OperatorImpls.Int64Load); Default.ImplementOperator(Operators.Int32Load8S, OperatorImpls.Int32Load8S); Default.ImplementOperator(Operators.Int32Load8U, OperatorImpls.Int32Load8U); Default.ImplementOperator(Operators.Int32Load16S, OperatorImpls.Int32Load16S); Default.ImplementOperator(Operators.Int32Load16U, OperatorImpls.Int32Load16U); Default.ImplementOperator(Operators.Int64Load8S, OperatorImpls.Int64Load8S); Default.ImplementOperator(Operators.Int64Load8U, OperatorImpls.Int64Load8U); Default.ImplementOperator(Operators.Int64Load16S, OperatorImpls.Int64Load16S); Default.ImplementOperator(Operators.Int64Load16U, OperatorImpls.Int64Load16U); Default.ImplementOperator(Operators.Int64Load32S, OperatorImpls.Int64Load32S); Default.ImplementOperator(Operators.Int64Load32U, OperatorImpls.Int64Load32U); Default.ImplementOperator(Operators.Float32Load, OperatorImpls.Float32Load); Default.ImplementOperator(Operators.Float64Load, OperatorImpls.Float64Load); Default.ImplementOperator(Operators.Int32Store8, OperatorImpls.Int32Store8); Default.ImplementOperator(Operators.Int32Store16, OperatorImpls.Int32Store16); Default.ImplementOperator(Operators.Int32Store, OperatorImpls.Int32Store); Default.ImplementOperator(Operators.Int64Store8, OperatorImpls.Int64Store8); Default.ImplementOperator(Operators.Int64Store16, OperatorImpls.Int64Store16); Default.ImplementOperator(Operators.Int64Store32, OperatorImpls.Int64Store32); Default.ImplementOperator(Operators.Int64Store, OperatorImpls.Int64Store); Default.ImplementOperator(Operators.Float32Store, OperatorImpls.Float32Store); Default.ImplementOperator(Operators.Float64Store, OperatorImpls.Float64Store); Default.ImplementOperator(Operators.CurrentMemory, OperatorImpls.CurrentMemory); Default.ImplementOperator(Operators.GrowMemory, OperatorImpls.GrowMemory); Default.ImplementOperator(Operators.Int32Const, OperatorImpls.Int32Const); Default.ImplementOperator(Operators.Int64Const, OperatorImpls.Int64Const); Default.ImplementOperator(Operators.Float32Const, OperatorImpls.Float32Const); Default.ImplementOperator(Operators.Float64Const, OperatorImpls.Float64Const); Default.ImplementOperator(Operators.Int32Add, OperatorImpls.Int32Add); Default.ImplementOperator(Operators.Int32And, OperatorImpls.Int32And); Default.ImplementOperator(Operators.Int32Clz, OperatorImpls.Int32Clz); Default.ImplementOperator(Operators.Int32Ctz, OperatorImpls.Int32Ctz); Default.ImplementOperator(Operators.Int32DivS, OperatorImpls.Int32DivS); Default.ImplementOperator(Operators.Int32DivU, OperatorImpls.Int32DivU); Default.ImplementOperator(Operators.Int32Eq, OperatorImpls.Int32Eq); Default.ImplementOperator(Operators.Int32Eqz, OperatorImpls.Int32Eqz); Default.ImplementOperator(Operators.Int32GeS, OperatorImpls.Int32GeS); Default.ImplementOperator(Operators.Int32GeU, OperatorImpls.Int32GeU); Default.ImplementOperator(Operators.Int32GtS, OperatorImpls.Int32GtS); Default.ImplementOperator(Operators.Int32GtU, OperatorImpls.Int32GtU); Default.ImplementOperator(Operators.Int32LeS, OperatorImpls.Int32LeS); Default.ImplementOperator(Operators.Int32LeU, OperatorImpls.Int32LeU); Default.ImplementOperator(Operators.Int32LtS, OperatorImpls.Int32LtS); Default.ImplementOperator(Operators.Int32LtU, OperatorImpls.Int32LtU); Default.ImplementOperator(Operators.Int32Mul, OperatorImpls.Int32Mul); Default.ImplementOperator(Operators.Int32Ne, OperatorImpls.Int32Ne); Default.ImplementOperator(Operators.Int32Or, OperatorImpls.Int32Or); Default.ImplementOperator(Operators.Int32Popcnt, OperatorImpls.Int32Popcnt); Default.ImplementOperator(Operators.Int32ReinterpretFloat32, OperatorImpls.Int32ReinterpretFloat32); Default.ImplementOperator(Operators.Int32RemS, OperatorImpls.Int32RemS); Default.ImplementOperator(Operators.Int32RemU, OperatorImpls.Int32RemU); Default.ImplementOperator(Operators.Int32Rotl, OperatorImpls.Int32Rotl); Default.ImplementOperator(Operators.Int32Rotr, OperatorImpls.Int32Rotr); Default.ImplementOperator(Operators.Int32Shl, OperatorImpls.Int32Shl); Default.ImplementOperator(Operators.Int32ShrS, OperatorImpls.Int32ShrS); Default.ImplementOperator(Operators.Int32ShrU, OperatorImpls.Int32ShrU); Default.ImplementOperator(Operators.Int32Sub, OperatorImpls.Int32Sub); Default.ImplementOperator(Operators.Int32TruncSFloat32, OperatorImpls.Int32TruncSFloat32); Default.ImplementOperator(Operators.Int32TruncSFloat64, OperatorImpls.Int32TruncSFloat64); Default.ImplementOperator(Operators.Int32TruncUFloat32, OperatorImpls.Int32TruncUFloat32); Default.ImplementOperator(Operators.Int32TruncUFloat64, OperatorImpls.Int32TruncUFloat64); Default.ImplementOperator(Operators.Int32WrapInt64, OperatorImpls.Int32WrapInt64); Default.ImplementOperator(Operators.Int32Xor, OperatorImpls.Int32Xor); Default.ImplementOperator(Operators.Int64Add, OperatorImpls.Int64Add); Default.ImplementOperator(Operators.Int64And, OperatorImpls.Int64And); Default.ImplementOperator(Operators.Int64Clz, OperatorImpls.Int64Clz); Default.ImplementOperator(Operators.Int64Ctz, OperatorImpls.Int64Ctz); Default.ImplementOperator(Operators.Int64DivS, OperatorImpls.Int64DivS); Default.ImplementOperator(Operators.Int64DivU, OperatorImpls.Int64DivU); Default.ImplementOperator(Operators.Int64Eq, OperatorImpls.Int64Eq); Default.ImplementOperator(Operators.Int64Eqz, OperatorImpls.Int64Eqz); Default.ImplementOperator(Operators.Int64ExtendSInt32, OperatorImpls.Int64ExtendSInt32); Default.ImplementOperator(Operators.Int64ExtendUInt32, OperatorImpls.Int64ExtendUInt32); Default.ImplementOperator(Operators.Int64GeS, OperatorImpls.Int64GeS); Default.ImplementOperator(Operators.Int64GeU, OperatorImpls.Int64GeU); Default.ImplementOperator(Operators.Int64GtS, OperatorImpls.Int64GtS); Default.ImplementOperator(Operators.Int64GtU, OperatorImpls.Int64GtU); Default.ImplementOperator(Operators.Int64LeS, OperatorImpls.Int64LeS); Default.ImplementOperator(Operators.Int64LeU, OperatorImpls.Int64LeU); Default.ImplementOperator(Operators.Int64LtS, OperatorImpls.Int64LtS); Default.ImplementOperator(Operators.Int64LtU, OperatorImpls.Int64LtU); Default.ImplementOperator(Operators.Int64Mul, OperatorImpls.Int64Mul); Default.ImplementOperator(Operators.Int64Ne, OperatorImpls.Int64Ne); Default.ImplementOperator(Operators.Int64Or, OperatorImpls.Int64Or); Default.ImplementOperator(Operators.Int64Popcnt, OperatorImpls.Int64Popcnt); Default.ImplementOperator(Operators.Int64ReinterpretFloat64, OperatorImpls.Int64ReinterpretFloat64); Default.ImplementOperator(Operators.Int64RemS, OperatorImpls.Int64RemS); Default.ImplementOperator(Operators.Int64RemU, OperatorImpls.Int64RemU); Default.ImplementOperator(Operators.Int64Rotl, OperatorImpls.Int64Rotl); Default.ImplementOperator(Operators.Int64Rotr, OperatorImpls.Int64Rotr); Default.ImplementOperator(Operators.Int64Shl, OperatorImpls.Int64Shl); Default.ImplementOperator(Operators.Int64ShrS, OperatorImpls.Int64ShrS); Default.ImplementOperator(Operators.Int64ShrU, OperatorImpls.Int64ShrU); Default.ImplementOperator(Operators.Int64Sub, OperatorImpls.Int64Sub); Default.ImplementOperator(Operators.Int64TruncSFloat32, OperatorImpls.Int64TruncSFloat32); Default.ImplementOperator(Operators.Int64TruncSFloat64, OperatorImpls.Int64TruncSFloat64); Default.ImplementOperator(Operators.Int64TruncUFloat32, OperatorImpls.Int64TruncUFloat32); Default.ImplementOperator(Operators.Int64TruncUFloat64, OperatorImpls.Int64TruncUFloat64); Default.ImplementOperator(Operators.Int64Xor, OperatorImpls.Int64Xor); Default.ImplementOperator(Operators.Float32Abs, OperatorImpls.Float32Abs); Default.ImplementOperator(Operators.Float32Add, OperatorImpls.Float32Add); Default.ImplementOperator(Operators.Float32Ceil, OperatorImpls.Float32Ceil); Default.ImplementOperator(Operators.Float32ConvertSInt32, OperatorImpls.Float32ConvertSInt32); Default.ImplementOperator(Operators.Float32ConvertSInt64, OperatorImpls.Float32ConvertSInt64); Default.ImplementOperator(Operators.Float32ConvertUInt32, OperatorImpls.Float32ConvertUInt32); Default.ImplementOperator(Operators.Float32ConvertUInt64, OperatorImpls.Float32ConvertUInt64); Default.ImplementOperator(Operators.Float32Copysign, OperatorImpls.Float32Copysign); Default.ImplementOperator(Operators.Float32DemoteFloat64, OperatorImpls.Float32DemoteFloat64); Default.ImplementOperator(Operators.Float32Div, OperatorImpls.Float32Div); Default.ImplementOperator(Operators.Float32Eq, OperatorImpls.Float32Eq); Default.ImplementOperator(Operators.Float32Floor, OperatorImpls.Float32Floor); Default.ImplementOperator(Operators.Float32Ge, OperatorImpls.Float32Ge); Default.ImplementOperator(Operators.Float32Gt, OperatorImpls.Float32Gt); Default.ImplementOperator(Operators.Float32Le, OperatorImpls.Float32Le); Default.ImplementOperator(Operators.Float32Lt, OperatorImpls.Float32Lt); Default.ImplementOperator(Operators.Float32Max, OperatorImpls.Float32Max); Default.ImplementOperator(Operators.Float32Min, OperatorImpls.Float32Min); Default.ImplementOperator(Operators.Float32Mul, OperatorImpls.Float32Mul); Default.ImplementOperator(Operators.Float32Ne, OperatorImpls.Float32Ne); Default.ImplementOperator(Operators.Float32Nearest, OperatorImpls.Float32Nearest); Default.ImplementOperator(Operators.Float32Neg, OperatorImpls.Float32Neg); Default.ImplementOperator(Operators.Float32ReinterpretInt32, OperatorImpls.Float32ReinterpretInt32); Default.ImplementOperator(Operators.Float32Sqrt, OperatorImpls.Float32Sqrt); Default.ImplementOperator(Operators.Float32Sub, OperatorImpls.Float32Sub); Default.ImplementOperator(Operators.Float32Trunc, OperatorImpls.Float32Trunc); Default.ImplementOperator(Operators.Float64Abs, OperatorImpls.Float64Abs); Default.ImplementOperator(Operators.Float64Add, OperatorImpls.Float64Add); Default.ImplementOperator(Operators.Float64Ceil, OperatorImpls.Float64Ceil); Default.ImplementOperator(Operators.Float64ConvertSInt32, OperatorImpls.Float64ConvertSInt32); Default.ImplementOperator(Operators.Float64ConvertSInt64, OperatorImpls.Float64ConvertSInt64); Default.ImplementOperator(Operators.Float64ConvertUInt32, OperatorImpls.Float64ConvertUInt32); Default.ImplementOperator(Operators.Float64ConvertUInt64, OperatorImpls.Float64ConvertUInt64); Default.ImplementOperator(Operators.Float64Copysign, OperatorImpls.Float64Copysign); Default.ImplementOperator(Operators.Float64Div, OperatorImpls.Float64Div); Default.ImplementOperator(Operators.Float64Eq, OperatorImpls.Float64Eq); Default.ImplementOperator(Operators.Float64Floor, OperatorImpls.Float64Floor); Default.ImplementOperator(Operators.Float64Ge, OperatorImpls.Float64Ge); Default.ImplementOperator(Operators.Float64Gt, OperatorImpls.Float64Gt); Default.ImplementOperator(Operators.Float64Le, OperatorImpls.Float64Le); Default.ImplementOperator(Operators.Float64Lt, OperatorImpls.Float64Lt); Default.ImplementOperator(Operators.Float64Max, OperatorImpls.Float64Max); Default.ImplementOperator(Operators.Float64Min, OperatorImpls.Float64Min); Default.ImplementOperator(Operators.Float64Mul, OperatorImpls.Float64Mul); Default.ImplementOperator(Operators.Float64Ne, OperatorImpls.Float64Ne); Default.ImplementOperator(Operators.Float64Nearest, OperatorImpls.Float64Nearest); Default.ImplementOperator(Operators.Float64Neg, OperatorImpls.Float64Neg); Default.ImplementOperator(Operators.Float64PromoteFloat32, OperatorImpls.Float64PromoteFloat32); Default.ImplementOperator(Operators.Float64ReinterpretInt64, OperatorImpls.Float64ReinterpretInt64); Default.ImplementOperator(Operators.Float64Sqrt, OperatorImpls.Float64Sqrt); Default.ImplementOperator(Operators.Float64Sub, OperatorImpls.Float64Sub); Default.ImplementOperator(Operators.Float64Trunc, OperatorImpls.Float64Trunc); }
/// <summary> /// Creates an instruction interpreter that clones the given interpreter's /// operator implementations. /// </summary> public DefaultInstructionInterpreter(DefaultInstructionInterpreter Other) { this.operatorImpls = new Dictionary <Operator, Action <Instruction, InterpreterContext> >( Other.operatorImpls); }