// // ILOpcode.cs - indicates the MSIL opcode for an instruction // // Author: // Michael Becker // // Copyright (c) 2019-2020 Mike Becker's Software // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . using System; namespace UniversalEditor.Plugins.Executable.UserInterface.Editors.Executable { /// /// Indicates the MSIL opcode for an instruction. /// public enum ILOpcode : short { /// /// add - Add two values, returning a new value. /// Add = 0x58, /// /// add.ovf - Add signed integer values with overflow check. /// AddOvf = 0xD6, /// /// add.ovf.un - Add unsigned integer values with overflow check. /// AddOvfUn = 0xD7, /// /// and - Bitwise AND of two integral values, returns an integral value. /// And = 0x5F, /// /// arglist - Return argument list handle for the current method. /// ArgList = 0x00FE, /// /// beq <int32 (target)> - Branch to target if equal. /// Beq = 0x3B, /// /// beq.s <int8 (target)> - Branch to target if equal, short form. /// BeqS = 0x2E, /// /// bge <int32 (target)> - Branch to target if greater than or equal to. /// Bge = 0x3C, /// /// bge.s <int8 (target)> - Branch to target if greater than or equal to, short form. /// BgeS = 0x2F, /// /// bge.un <int32 (target)> - Branch to target if greater than or equal to (unsigned or unordered). /// BgeUn = 0x41, /// /// bge.un.s <int8 (target)> - Branch to target if greater than or equal to (unsigned or unordered), short form /// BgeUnS = 0x34, /// /// bgt <int32 (target)> Branch to target if greater than. /// Bgt = 0x3D, /// /// bgt.s <int8 (target)> Branch to target if greater than, short form. /// BgtS = 0x30, /// /// bgt.un <int32 (target)> Branch to target if greater than (unsigned or unordered). /// BgtUn = 0x42, /// /// bgt.un.s <int8 (target)> Branch to target if greater than (unsigned or unordered), short form. /// BgtUnS = 0x35, /// /// ble <int32 (target)> Branch to target if less than or equal to. /// Ble = 0x3E, /// /// ble.s <int8 (target)> Branch to target if less than or equal to, short form. /// BleS = 0x31, /// /// ble.un <int32 (target)> Branch to target if less than or equal to (unsigned or unordered). /// BleUn = 0x43, /// /// ble.un.s <int8 (target)> Branch to target if less than or equal to (unsigned or unordered), short form. /// BleUnS = 0x36, /// /// blt <int32 (target)> Branch to target if less than. /// Blt = 0x3F, /// /// blt.s <int8 (target)> Branch to target if less than, short form. /// BltS = 0x32, /// /// blt.un <int32 (target)> Branch to target if less than (unsigned or unordered). /// BltUn = 0x44, /// /// blt.un.s <int8 (target)> Branch to target if less than (unsigned or unordered), short form. /// BltUnS = 0x37, /// /// bne.un <int32 (target)> Branch to target if unequal or unordered. /// BneUn = 0x40, /// /// bne.un.s <int8 (target)> Branch to target if unequal or unordered, short form. /// BneUnS = 0x33, /// /// Convert a boxable value to its boxed form /// Box = 0x8C, /// /// br <int32 (target)> Branch to target. /// Br = 0x38, /// /// br.s <int8 (target)> Branch to target, short form. /// BrS = 0x2B, /// /// break - Inform a debugger that a breakpoint has been reached. /// Break = 0x01, /// /// brfalse <int32 (target)> - Branch to target if value is zero (false). /// BrFalse = 0x39, /// /// brfalse.s <int8 (target)> - Branch to target if value is zero (false), short form. /// BrFalseS = 0x2C, /// /// brinst <int32 (target)> - Branch to target if value is a non-null object reference (alias for brtrue). /// BrInst = 0x3A, /// /// brinst.s <int8 (target)> - Branch to target if value is a non-null object reference, short form (alias for brtrue.s). /// BrInstS = 0x2D, /// /// brnull <int32 (target)> - Branch to target if value is null (alias for brfalse). /// BrNull = 0x39, /// /// brnull.s <int8 (target)> - Branch to target if value is null (alias for brfalse.s), short form. /// BrNullS = 0x2C, /// /// brtrue <int32 (target)> - Branch to target if value is non-zero (true). /// BrTrue = 0x3A, /// /// brtrue.s <int8 (target)> - Branch to target if value is non-zero (true), short form. /// BrTrueS = 0x2D, /// /// brzero <int32 (target)> - Branch to target if value is zero (alias for brfalse). /// BrZero = 0x39, /// /// brzero.s <int8 (target)> - Branch to target if value is zero (alias for brfalse.s), short form. /// BrZeroS = 0x2C, /// /// call <method> - Call method described by method. /// Call = 0x28, /// /// calli <callsitedescr> - Call method indicated on the stack with arguments described by callsitedescr. /// CallI = 0x29, /// /// callvirt <method> - Call a method associated with an object. /// CallVirt = 0x6F, /// /// castclass <class> - Cast obj to class. /// CastClass = 0x74, /// /// ceq - Push 1 (of type int32) if value1 equals value2, else push 0. /// Ceq = 0x01FE, /// /// cgt - Push 1 (of type int32) if value1 greater that value2, else push 0. /// Cgt = 0x02FE, /// /// cgt.un - Push 1 (of type int32) if value1 greater that value2, unsigned or unordered, else push 0. /// CgtUn = 0x03FE, /// /// Throw ArithmeticException if value is not a finite number. /// CkFinite = 0xC3, /// /// clt - Push 1 (of type int32) if value1 lower than value2, else push 0. /// Clt = 0x04FE, /// /// clt.un - Push 1 (of type int32) if value1 lower than value2, unsigned or unordered, else push 0. /// CltUn = 0x05FE, /// /// constrained <thisType> - Call a virtual method on a type constrained to be type T /// Constrained = 0x16FE, /// /// Convert to native int, pushing native int on stack. /// ConvI = 0xD3, /// /// conv.i1 - Convert to int8, pushing int32 on stack. /// ConvI1 = 0x67, /// /// conv.i2 - Convert to int16, pushing int32 on stack. /// ConvI2 = 0x68, /// /// conv.i4 - Convert to int32, pushing int32 on stack. /// ConvI4 = 0x69, /// /// conv.i8 - Convert to int64, pushing int64 on stack. /// ConvI8 = 0x6A, /// /// conv.ovf.i - Convert to a native int (on the stack as native int) and throw an exception on overflow. /// ConvOvfI = 0xD4, /// /// conv.ovf.i.un - Convert unsigned to a native int (on the stack as native int) and throw an exception on overflow. /// ConvOvfIUn = 0x8A, /// /// conv.ovf.i1 - Convert to an int8 (on the stack as int32) and throw an exception on overflow. /// ConvOvfI1 = 0xB3, /// /// conv.ovf.i1.un - Convert unsigned to an int8 (on the stack as int32) and throw an exception on overflow. /// ConvOvfI1Un = 0x82, /// /// conv.ovf.i2 - Convert to an int16 (on the stack as int32) and throw an exception on overflow. /// ConvOvfI2 = 0xB5, /// /// conv.ovf.i2.un - Convert unsigned to an int16 (on the stack as int32) and throw an exception on overflow. /// ConvOvfI2Un = 0x83, /// /// conv.ovf.i4 - Convert to an int32 (on the stack as int32) and throw an exception on overflow. /// ConvOvfI4 = 0xB7, /// /// conv.ovf.i4.un - Convert unsigned to an int32 (on the stack as int32) and throw an exception on overflow. /// ConvOvfI4Un = 0x84, /// /// conv.ovf.i8 - Convert to an int64 (on the stack as int64) and throw an exception on overflow. /// ConvOvfI8 = 0xB9, /// /// conv.ovf.i8.un - Convert unsigned to an int64 (on the stack as int64) and throw an exception on overflow. /// ConvOvfI8Un = 0x85, /// /// conv.ovf.u - Convert to a native unsigned int (on the stack as native int) and throw an exception on overflow. /// ConvOvfU = 0xD5, /// /// conv.ovf.u.un - Convert unsigned to a native unsigned int (on the stack as native int) and throw an exception on overflow. /// ConvOvfUUn = 0x8B, /// /// conv.ovf.u1 - Convert to an unsigned int8 (on the stack as int32) and throw an exception on overflow. /// ConvOvfU1 = 0xB4, /// /// conv.ovf.u1.un - Convert unsigned to an unsigned int8 (on the stack as int32) and throw an exception on overflow. /// ConvOvfU1Un = 0x86, /// /// conv.ovf.u2 - Convert to an unsigned int16 (on the stack as int32) and throw an exception on overflow. /// ConvOvfU2 = 0xB6, /// /// conv.ovf.u2.un - Convert unsigned to an unsigned int16 (on the stack as int32) and throw an exception on overflow. /// ConvOvfU2Un = 0x87, /// /// conv.ovf.u4 - Convert to an unsigned int32 (on the stack as int32) and throw an exception on overflow. /// ConvOvfU4 = 0xB8, /// /// conv.ovf.u4.un - Convert unsigned to an unsigned int32 (on the stack as int32) and throw an exception on overflow. /// ConvOvfU4Un = 0x88, /// /// conv.ovf.u8 - Convert to an unsigned int64 (on the stack as int64) and throw an exception on overflow. /// ConvOvfU8 = 0xBA, /// /// conv.ovf.u8.un - Convert unsigned to an unsigned int64 (on the stack as int64) and throw an exception on overflow. /// ConvOvfU8Un = 0x89, /// /// conv.r.un - Convert unsigned integer to floating-point, pushing F on stack. /// ConvRUn = 0x76, /// /// conv.r4 - Convert to float32, pushing F on stack. /// ConvR4 = 0x6B, /// /// conv.r8 - Convert to float64, pushing F on stack. /// ConvR8 = 0x6C, /// /// conv.u - Convert to native unsigned int, pushing native int on stack. /// ConvU = 0xE0, /// /// conv.u1 - Convert to unsigned int8, pushing int32 on stack. /// ConvU1 = 0xD2, /// /// conv.u2 - Convert to unsigned int16, pushing int32 on stack. /// ConvU2 = 0xD1, /// /// conv.u4 - Convert to unsigned int32, pushing int32 on stack. /// ConvU4 = 0x6D, /// /// conv.u8 - Convert to unsigned int64, pushing int64 on stack. /// ConvU8 = 0x6E, /// /// cpblk - Copy data from memory to memory. /// CpBlk = 0x17FE, /// /// cpobj <typeTok> - Copy a value type from src to dest. /// CpObj = 0x70, /// /// div - Divide two values to return a quotient or floating-point result. /// Div = 0x5B, /// /// div.un - Divide two values, unsigned, returning a quotient. /// DivUn = 0x5C, /// /// dup - Duplicate the value on the top of the stack. /// Dup = 0x25, /// /// endfault - End fault clause of an exception block. /// EndFault = 0xDC, /// /// endfilter - End an exception handling filter clause. /// EndFilter = 0x11FE, /// /// endfinally - End finally clause of an exception block. /// EndFinally = 0xDC, /// /// initblk - Set all bytes in a block of memory to a given byte value. /// InitBlk = 0x18FE, /// /// initobj <typeTok> - initialize the value at address dest. /// InitObj = 0x15FE, /// /// isinst <class> - Test if obj is an instance of class, returning null or an instance of that class or interface. /// IsInst = 0x75, /// /// jmp <method> - Exit current method and jump to the specified method. /// Jmp = 0x27, /// /// ldarg <uint16 (num)> - Load argument numbered num onto the stack. /// LdArg = 0x09FE, /// /// ldarg.0 - Load argument 0 onto the stack. /// LdArg0 = 0x02, /// /// ldarg.1 - Load argument 1 onto the stack. /// LdArg1 = 0x03, /// /// ldarg.2 - Load argument 2 onto the stack. /// LdArg2 = 0x04, /// /// ldarg.3 - Load argument 3 onto the stack. /// LdArg3 = 0x05, /// /// ldarg.s <uint8 (num)> Load argument numbered num onto the stack, short form. /// LdArgS = 0x0E, /// /// ldarga <uint16 (argNum)> - Fetch the address of argument argNum. /// LdArgA = 0x0AFE, /// /// ldarga.s <uint8 (argNum)> - Fetch the address of argument argNum, short form. /// LdArgAS = 0x0F, /// /// Push num of type int32 onto the stack as int32. /// LdCI4 = 0x20, /// /// ldc.i4.m1 - Push the constant value -1 onto the stack as int32. /// LdCI4_M1 = 0x15, /// /// ldc.i4.0 - Push the constant value 0 onto the stack as int32. /// LdCI4_0 = 0x16, /// /// ldc.i4.1 - Push the constant value 1 onto the stack as int32. /// LdCI4_1 = 0x17, /// /// ldc.i4.2 - Push the constant value 2 onto the stack as int32. /// LdCI4_2 = 0x18, /// /// ldc.i4.3 - Push the constant value 3 onto the stack as int32. /// LdCI4_3 = 0x19, /// /// ldc.i4.4 - Push the constant value 4 onto the stack as int32. /// LdCI4_4 = 0x1A, /// /// ldc.i4.5 - Push the constant value 5 onto the stack as int32. /// LdCI4_5 = 0x1B, /// /// ldc.i4.6 - Push the constant value 6 onto the stack as int32. /// LdCI4_6 = 0x1C, /// /// ldc.i4.7 - Push the constant value 7 onto the stack as int32. /// LdCI4_7 = 0x1D, /// /// ldc.i4.8 - Push the constant value 8 onto the stack as int32. /// LdCI4_8 = 0x1E, /// /// ldc.i4.s <int8 (num)> - Push num onto the stack as int32, short form. /// LdCI4S = 0x1F, /// /// ldc.i8 <int64 (num)> - Push num of type int64 onto the stack as int64. /// LdCI8 = 0x21, /// /// ldc.r4 <float32 (num)> - Push num of type float32 onto the stack as F. /// LdCR4 = 0x22, /// /// ldc.r8 <float64 (num)> - Push num of type float64 onto the stack as F. /// LdCR8 = 0x23, /// /// ldelem <typeTok> - Load the element at index onto the top of the stack. /// LdElem = 0xA3, /// /// ldelem.i - Load the element with type native int at index onto the top of the stack as a native int. /// LdElemI = 0x97, /// /// ldelem.i1 - Load the element with type int8 at index onto the top of the stack as an int32. /// LdElemI1 = 0x90, /// /// ldelem.u1 - Load the element with type unsigned int8 at index onto the top of the stack as an int32. /// LdElemU1 = 0x91, /// /// ldelem.i2 - Load the element with type int16 at index onto the top of the stack as an int32. /// LdElemI2 = 0x92, /// /// ldelem.u1 - Load the element with type unsigned int8 at index onto the top of the stack as an int32. /// LdElemU2 = 0x93, /// /// ldelem.i4 - Load the element with type int32 at index onto the top of the stack as an int32. /// LdElemI4 = 0x94, /// /// ldelem.u1 - Load the element with type unsigned int8 at index onto the top of the stack as an int32. /// LdElemU4 = 0x95, /// /// ldelem.i8 / ldelem.u8 - Load the element with type (unsigned) int64 at index onto the top of the stack as an int64. /// LdElemI8 = 0x96, /// /// ldelem.i4 - Load the element with type float32 at index onto the top of the stack as an F. /// LdElemR4 = 0x98, /// /// ldelem.i8 - Load the element with type float64 at index onto the top of the stack as an F. /// LdElemR8 = 0x99, /// /// ldelem.ref - Load the element at index onto the top of the stack as an O. The type of the O is the same as the element type of the array pushed on the CIL stack. /// LdElemRef = 0x9A, /// /// ldelema <class> - Load the address of element at index onto the top of the stack. /// LdElemA = 0x8F, /// /// ldfld <field> - Push the value of field of object (or value type) obj, onto the stack. /// LdFld = 0x7B, /// /// ldflda <field> - Push the address of field of object obj on the stack. /// LdFldA = 0x7C, /// /// ldftn <method> - Push a pointer to a method referenced by method, on the stack. /// LdFtn = 0x06FE, /// /// ldind.i - Indirect load value of type native int as native int on the stack /// LdIndI = 0x4D, /// /// ldind.i1 - Indirect load value of type int8 as int32 on the stack /// LdIndI1 = 0x46, /// /// ldind.u1 - Indirect load value of type unsigned int8 as int32 on the stack /// LdIndU1 = 0x47, /// /// ldind.i2 - Indirect load value of type int16 as int32 on the stack /// LdIndI2 = 0x48, /// /// ldind.u2 - Indirect load value of type unsigned int16 as int32 on the stack /// LdIndU2 = 0x49, /// /// ldind.i4 - Indirect load value of type int32 as int32 on the stack /// LdIndI4 = 0x4A, /// /// ldind.u4 - Indirect load value of type unsigned int32 as int32 on the stack /// LdIndU4 = 0x4B, /// /// ldind.i8 / ldind.u8 - Indirect load value of type (unsigned) int64 as int64 on the stack /// LdIndI8 = 0x4C, /// /// ldind.r8 - Indirect load value of type float32 as F on the stack /// LdIndR4 = 0x4E, /// /// ldind.r8 - Indirect load value of type float64 as F on the stack /// LdIndR8 = 0x4F, /// /// ldind.ref - Indirect load value of type object ref as O on the stack. /// LdIndRef = 0x50, /// /// ldlen - Push the length (of type native unsigned int) of array on the stack. /// LdLen = 0x8E, /// /// ldloc <uint16 (indx)> - Load local variable of index indx onto stack. /// LdLoc = 0x0CFE, /// /// ldloc.0 - Load local variable 0 onto stack. /// LdLoc0 = 0x06, /// /// ldloc.1 - Load local variable 1 onto stack. /// LdLoc1 = 0x07, /// /// ldloc.2 - Load local variable 2 onto stack. /// LdLoc2 = 0x08, /// /// ldloc.3 - Load local variable 3 onto stack. /// LdLoc3 = 0x09, /// /// ldloc.s <uint8 (indx)> - Load local variable of index indx onto stack, short form. /// LdLocS = 0x11, /// /// ldloca <uint16 (indx)> - Load address of local variable with index indx. /// LdLocA = 0x0DFE, /// /// ldloca.s <uint16 (indx)> - Load address of local variable with index indx, short form. /// LdLocAS = 0x12, /// /// ldnull - Push a null reference on the stack. /// LdNull = 0x14, /// /// ldobj <typeTok> - Copy the value stored at address src to the stack. /// LdObj = 0x71, /// /// ldsfld <field> - Push the value of the static field on the stack. /// LdSFld = 0x7E, /// /// ldsflda <field> - Push the address of the static field, field, on the stack. /// LdSFldA = 0x7F, /// /// ldstr <string> - Push a string object for the literal string. /// LdStr = 0x72, /// /// ldtoken <token> - Convert metadata token to its runtime representation. /// LdToken = 0xD0, /// /// ldvirtftn <method> - Push address of virtual method on the stack. /// LdVirtFtn = 0x07FE, /// /// leave <int32 (target)> - Exit a protected region of code. /// Leave = 0xDD, /// /// leave <int8 (target)> - Exit a protected region of code, short form. /// LeaveS = 0xDE, /// /// localloc - Allocate space from the local memory pool. /// LocAlloc = 0x0FFE, /// /// mkrefany <class> - Push a typed reference to ptr of type class onto the stack. /// MkRefAny = 0xC6, /// /// mul - Multiply values. /// Mul = 0x5A, /// /// mul.ovf - Multiply signed integer values. Signed result shall fit in same size. /// MulOvf = 0xD8, /// /// mul.ovf.un - Multiply unsigned integer values. Unsigned result shall fit in same size. /// MulOvfUn = 0xD9, /// /// neg - Negate value. /// Neg = 0x65, /// /// newarr <etype> - Create a new array with elements of type etype. /// NewArr = 0x8D, /// /// newobj <ctor> - Allocate an uninitialized object or value type and call ctor. /// NewObj = 0x73, /// /// no.{typecheck, rangecheck, nullcheck} - The specified fault check(s) normally performed as part of the execution of the subsequent instruction can/shall be skipped. /// No = 0x19FE, /// /// nop - Do nothing (No operation). /// Nop = 0x00, /// /// not - Bitwise complement (logical not). /// Not = 0x66, /// /// or - Bitwise OR of two integer values, returns an integer. /// Or = 0x60, /// /// pop - Pop value from the stack. /// Pop = 0x26, /// /// readonly. - Specify that the subsequent array address operation performs no type check at runtime, and that it returns a controlled-mutability managed pointer. /// Readonly = 0x1EFE, /// /// refanytype - Push the type token stored in a typed reference. /// RefAnyType = 0x1DFE, /// /// refanyval <type> - Push the address stored in a typed reference. /// RefAnyVal = 0xC2, /// /// rem - Remainder when dividing one value by another. /// Rem = 0x5D, /// /// rem.un - Remainder when dividing one unsigned value by another. /// RemUn = 0x5E, /// /// ret - Return from method, possibly with a value. /// Ret = 0x2A, /// /// rethrow - Rethrow the current exception. /// Rethrow = 0x1AFE, /// /// shl - Shift an integer left (shifting in zeros), return an integer. /// Shl = 0x62, /// /// shr - Shift an integer right (shift in sign), return an integer. /// Shr = 0x63, /// /// shr.un - Shift an integer right (shift in zero), return an integer. /// ShrUn = 0x64, /// /// sizeof <typeTok> - Push the size, in bytes, of a type as an unsigned int32. /// SizeOf = 0x1CFE, /// /// starg <uint16 (num)> - Store value to the argument numbered num. /// StArg = 0x0BFE, /// /// starg.s <uint8 (num)> - Store value to the argument numbered num, short form. /// StArgS = 0x10, /// /// stelem <typeTok> - Replace array element at index with the value on the stack /// StElem = 0xA4, /// /// stelem.i - Replace array element at index with the i value on the stack. /// StElemI = 0x9B, /// /// stelem.i1 - Replace array element at index with the int8 value on the stack. /// StElemI1 = 0x9C, /// /// stelem.i2 - Replace array element at index with the int16 value on the stack. /// StElemI2 = 0x9D, /// /// stelem.i1 - Replace array element at index with the int32 value on the stack. /// StElemI4 = 0x9E, /// /// stelem.i2 - Replace array element at index with the int64 value on the stack. /// StElemI8 = 0x9F, /// /// stelem.r4 - Replace array element at index with the float32 value on the stack. /// StElemR4 = 0xA0, /// /// stelem.r8 - Replace array element at index with the float64 value on the stack. /// StElemR8 = 0xA1, /// /// stelem.ref - Replace array element at index with the ref value on the stack. /// StElemRef = 0xA2, /// /// stfld <field> - Replace the value of field of the object obj with value. /// StFld = 0x7D, /// /// stind.i - Store value of type native int into memory at address /// StIndI = 0xDF, /// /// stind.i1 - Store value of type int8 into memory at address /// StIndI1 = 0x52, /// /// stind.i2 - Store value of type int16 into memory at address /// StIndI2 = 0x53, /// /// stind.i4 - Store value of type int32 into memory at address /// StIndI4 = 0x54, /// /// stind.i8 - Store value of type int64 into memory at address /// StIndI8 = 0x55, /// /// stind.r4 - Store value of type float32 into memory at address /// StIndR4 = 0x56, /// /// stind.r8 - Store value of type float64 into memory at address /// StIndR8 = 0x57, /// /// stind.ref - Store value of type object ref (type O) into memory at address /// StIndRef = 0x51, /// /// stloc <uint16 (indx)> - Pop a value from stack into local variable indx. /// StLoc = 0x0EFE, /// /// stloc.0 - Pop a value from stack into local variable 0. /// StLoc0 = 0x0A, /// /// stloc.1 - Pop a value from stack into local variable 1. /// StLoc1 = 0x0B, /// /// stloc.2 - Pop a value from stack into local variable 2. /// StLoc2 = 0x0C, /// /// stloc.3 - Pop a value from stack into local variable 3. /// StLoc3 = 0x0D, /// /// stloc.s <uint8 (indx)> - Pop a value from stack into local variable indx, short form. /// StLocS = 0x13, /// /// stobj <typeTok> - Store a value of type typeTok at an address. /// StObj = 0x81, /// /// stsfld <field> - Replace the value of the static field with val. /// StSFld = 0x80, /// /// sub - Subtract value2 from value1, returning a new value. /// Sub = 0x59, /// /// sub.ovf - Subtract native int from a native int. Signed result shall fit in same size. /// SubOvf = 0xDA, /// /// sub.ovf.un - Subtract native unsigned int from a native unsigned int. Unsigned result shall fit in same size. /// SubOvfUn = 0xDB, /// /// switch <uint32, int32, int32 (t1..tN)> - Jump to one of n values. /// Switch = 0x45, /// /// tail. - Subsequent call terminates current method. /// Tail = 0x14FE, /// /// throw - Throw an exception. /// Throw = 0x7A, /// /// unaligned.(alignment) - Subsequent pointer instruction might be unaligned. /// Unaligned = 0x12FE, /// /// unbox <valuetype> - Extract a value-type from obj, its boxed representation, and push a controlled-mutability managed pointer to it to the top of the stack. /// Unbox = 0x79, /// /// unbox.any <typeTok> - Extract a value-type from obj, its boxed representation, and copy to the top of the stack /// UnboxAny = 0xA5, /// /// Subsequent pointer reference is volatile. /// Volatile = 0x13FE, /// /// xor - Bitwise XOR of integer values, returns an integer. /// Xor = 0x61 } }