new OpCode("Nop", "No operation. Takes 0 arguments and returns void.", VoidResult, NoArguments),
new OpCode("Nop", "No operation. Takes 0 arguments and returns void.",
new OpCode("Pop", "Pops the top of the evaluation stack and returns the value.", NoArguments, NonVoidResult),
VoidResult, NoArguments),
new OpCode("Peek", "Peeks at the top of the evaluation stack and returns the value. Corresponds to IL 'dup'.", Peeking, NoArguments, NonVoidResult),
new OpCode("Pop", "Pops the top of the evaluation stack and returns the value.",
new OpCode("Void", "Ignore the arguments and produce void. Used to prevent the end result of an instruction from being pushed to the evaluation stack.", VoidResult, Unary),
NoArguments, ResultTypeParam),
new OpCode("Peek", "Peeks at the top of the evaluation stack and returns the value. Corresponds to IL 'dup'.",
Peeking, NoArguments, ResultTypeParam),
new OpCode("Void", "Ignore the arguments and produce void. Used to prevent the end result of an instruction from being pushed to the evaluation stack.",
VoidResult, Unary),
new OpCode("BlockContainer", "A container of IL blocks.", VoidResult),
new OpCode("BlockContainer", "A container of IL blocks.", VoidResult),
new OpCode("Block", "A block of IL instructions."),
new OpCode("Block", "A block of IL instructions."),
new OpCode("LogicNot", "Unary operator that expects an input of type I4. Returns 1 (of type I4) if the input value is 0. Otherwise, returns 0 (of type I4).", I4Result, Unary),
new OpCode("LogicNot", "Unary operator that expects an input of type I4. Returns 1 (of type I4) if the input value is 0. Otherwise, returns 0 (of type I4).",
ResultType("I4"), Unary),
new OpCode("Add", "Adds two numbers.", BinaryNumeric),
new OpCode("Add", "Adds two numbers.", BinaryNumeric),
new OpCode("Sub", "Subtracts two numbers", BinaryNumeric),
new OpCode("Sub", "Subtracts two numbers", BinaryNumeric),
new OpCode("Mul", "Multiplies two numbers", BinaryNumeric),
new OpCode("Mul", "Multiplies two numbers", BinaryNumeric),
new OpCode("Div", "Divides two numbers", BinaryNumeric, MayThrow),
new OpCode("Div", "Divides two numbers", BinaryNumeric, MayThrow),
new OpCode("Rem", "Division remainder", BinaryNumeric, MayThrow),
new OpCode("Rem", "Division remainder", BinaryNumeric, MayThrow),
new OpCode("Neg", "Unary negation", Unary, NonVoidResult),
new OpCode("Neg", "Unary negation", Unary, ResultTypeParam),
new OpCode("BitAnd", "Bitwise AND", BinaryNumeric),
new OpCode("BitAnd", "Bitwise AND", BinaryNumeric),
new OpCode("BitOr", "Bitwise OR", BinaryNumeric),
new OpCode("BitOr", "Bitwise OR", BinaryNumeric),
new OpCode("BitXor", "Bitwise XOR", BinaryNumeric),
new OpCode("BitXor", "Bitwise XOR", BinaryNumeric),
new OpCode("BitNot", "Bitwise NOT", Unary, NonVoidResult),
new OpCode("BitNot", "Bitwise NOT", Unary, ResultTypeParam),
new OpCode("Arglist", "Retrieves the RuntimeArgumentHandle.", NoArguments, NonVoidResult),
new OpCode("Arglist", "Retrieves the RuntimeArgumentHandle.", NoArguments, ResultType("O")),
new OpCode("ConditionalBranch", "<c>if (condition) goto target;</c>.", Unary, MayBranch, HasBranchTarget, VoidResult),
new OpCode("ConditionalBranch", "<c>if (condition) goto target;</c>.",
new OpCode("Branch", "<c>goto target;</c>.", NoArguments, UnconditionalBranch, MayBranch, HasBranchTarget),
Unary, MayBranch, HasBranchTarget, VoidResult),
new OpCode("DebugBreak", "Breakpoint instruction", NoArguments, VoidResult, SideEffect),
new OpCode("Branch", "<c>goto target;</c>.",
new OpCode("Ceq", "Compare equal. Returns 1 (of type I4) if two numbers or object references are equal; 0 otherwise.", BinaryComparison),
new OpCode("Cgt", "Compare greater than. For integers, perform a signed comparison. For floating-point numbers, return 0 for unordered numbers.", BinaryComparison),
new OpCode("DebugBreak", "Breakpoint instruction",
new OpCode("Cgt_Un", "Compare greater than (unordered/unsigned). For integers, perform a signed comparison. For floating-point numbers, return 1 for unordered numbers.", BinaryComparison),
NoArguments, VoidResult, SideEffect),
new OpCode("Clt", "Compare less than. For integers, perform a signed comparison. For floating-point numbers, return 0 for unordered numbers.", BinaryComparison),
new OpCode("Ceq", "Compare equal. Returns 1 (of type I4) if two numbers or object references are equal; 0 otherwise.",
new OpCode("Clt_Un", "Compare less than (unordered/unsigned). For integers, perform a signed comparison. For floating-point numbers, return 1 for unordered numbers.", BinaryComparison),
BinaryComparison),
new OpCode("Cgt", "Compare greater than. For integers, perform a signed comparison. For floating-point numbers, return 0 for unordered numbers.",
BinaryComparison),
new OpCode("Cgt_Un", "Compare greater than (unordered/unsigned). For integers, perform a signed comparison. For floating-point numbers, return 1 for unordered numbers.",
BinaryComparison),
new OpCode("Clt", "Compare less than. For integers, perform a signed comparison. For floating-point numbers, return 0 for unordered numbers.",
BinaryComparison),
new OpCode("Clt_Un", "Compare less than (unordered/unsigned). For integers, perform a signed comparison. For floating-point numbers, return 1 for unordered numbers.",
BinaryComparison),
new OpCode("Call", "Non-virtual method call.", Call),
new OpCode("Call", "Non-virtual method call.", Call),
new OpCode("CallVirt", "Virtual method call.", Call),
new OpCode("CallVirt", "Virtual method call.", Call),
new OpCode("CkFinite", "Checks that the float on top of the stack is not NaN or infinite.", Peeking, NoArguments, MayThrow, VoidResult),
new OpCode("CkFinite", "Checks that the float on top of the stack is not NaN or infinite.",
new OpCode("Conv", "Numeric cast.", Unary, NonVoidResult),
Peeking, NoArguments, MayThrow, VoidResult),
new OpCode("Ldloc", "Loads the value of a local variable. (ldarg/ldloc)", NoArguments, NonVoidResult, HasVariableOperand),
new OpCode("Conv", "Numeric cast.",
new OpCode("Ldloca", "Loads the address of a local variable. (ldarga/ldloca)", NoArguments, RefResult, HasVariableOperand),
Unary, CustomConstructor),
new OpCode("Stloc", "Stores a value into a local variable. (starg/stloc)", Unary, VoidResult, HasVariableOperand),
new OpCode("LdLoc", "Loads the value of a local variable. (ldarg/ldloc)",
new OpCode("LdStr", "Loads a constant string.", LoadConstant),