# System.Runtime.Intrinsics.X86 ``` diff namespace System.Runtime.Intrinsics.X86 { public abstract class Avx : Sse42 { - public static float ConvertToSingle(Vector256 value); - public static Vector256 ExtendToVector256(Vector128 value) where T : struct; - public static byte Extract(Vector256 value, byte index); - public static int Extract(Vector256 value, byte index); - public static long Extract(Vector256 value, byte index); - public static ushort Extract(Vector256 value, byte index); - public static uint Extract(Vector256 value, byte index); - public static ulong Extract(Vector256 value, byte index); - public static Vector128 GetLowerHalf(Vector256 value) where T : struct; - public static Vector256 Insert(Vector256 value, byte data, byte index); - public static Vector256 Insert(Vector256 value, short data, byte index); - public static Vector256 Insert(Vector256 value, int data, byte index); - public static Vector256 Insert(Vector256 value, long data, byte index); - public static Vector256 Insert(Vector256 value, sbyte data, byte index); - public static Vector256 Insert(Vector256 value, ushort data, byte index); - public static Vector256 Insert(Vector256 value, uint data, byte index); - public static Vector256 Insert(Vector256 value, ulong data, byte index); - public static Vector256 SetAllVector256(T value) where T : struct; - public static Vector256 SetHighLow(Vector128 hi, Vector128 lo) where T : struct; - public static Vector256 SetVector256(byte e31, byte e30, byte e29, byte e28, byte e27, byte e26, byte e25, byte e24, byte e23, byte e22, byte e21, byte e20, byte e19, byte e18, byte e17, byte e16, byte e15, byte e14, byte e13, byte e12, byte e11, byte e10, byte e9, byte e8, byte e7, byte e6, byte e5, byte e4, byte e3, byte e2, byte e1, byte e0); - public static Vector256 SetVector256(double e3, double e2, double e1, double e0); - public static Vector256 SetVector256(short e15, short e14, short e13, short e12, short e11, short e10, short e9, short e8, short e7, short e6, short e5, short e4, short e3, short e2, short e1, short e0); - public static Vector256 SetVector256(int e7, int e6, int e5, int e4, int e3, int e2, int e1, int e0); - public static Vector256 SetVector256(long e3, long e2, long e1, long e0); - public static Vector256 SetVector256(sbyte e31, sbyte e30, sbyte e29, sbyte e28, sbyte e27, sbyte e26, sbyte e25, sbyte e24, sbyte e23, sbyte e22, sbyte e21, sbyte e20, sbyte e19, sbyte e18, sbyte e17, sbyte e16, sbyte e15, sbyte e14, sbyte e13, sbyte e12, sbyte e11, sbyte e10, sbyte e9, sbyte e8, sbyte e7, sbyte e6, sbyte e5, sbyte e4, sbyte e3, sbyte e2, sbyte e1, sbyte e0); - public static Vector256 SetVector256(float e7, float e6, float e5, float e4, float e3, float e2, float e1, float e0); - public static Vector256 SetVector256(ushort e15, ushort e14, ushort e13, ushort e12, ushort e11, ushort e10, ushort e9, ushort e8, ushort e7, ushort e6, ushort e5, ushort e4, ushort e3, ushort e2, ushort e1, ushort e0); - public static Vector256 SetVector256(uint e7, uint e6, uint e5, uint e4, uint e3, uint e2, uint e1, uint e0); - public static Vector256 SetVector256(ulong e3, ulong e2, ulong e1, ulong e0); - public static Vector256 SetZeroVector256() where T : struct; - public static Vector256 StaticCast(Vector256 value) where T : struct where U : struct; } public abstract class Avx2 : Avx { - public static double ConvertToDouble(Vector256 value); } public abstract class Bmi1 { - public static ulong AndNot(ulong left, ulong right); - public static ulong BitFieldExtract(ulong value, byte start, byte length); - public static ulong BitFieldExtract(ulong value, ushort control); - public static ulong ExtractLowestSetBit(ulong value); - public static ulong GetMaskUpToLowestSetBit(ulong value); - public static ulong ResetLowestSetBit(ulong value); - public static ulong TrailingZeroCount(ulong value); } public abstract class Bmi2 { + public static uint MultiplyNoFlags(uint left, uint right); - public unsafe static uint MultiplyNoFlags(uint left, uint right, uint* high); + public unsafe static uint MultiplyNoFlags(uint left, uint right, uint* low); - public unsafe static ulong MultiplyNoFlags(ulong left, ulong right, ulong* high); - public static ulong ParallelBitDeposit(ulong value, ulong mask); - public static ulong ParallelBitExtract(ulong value, ulong mask); - public static ulong ZeroHighBits(ulong value, ulong index); public abstract class X64 { + public static ulong MultiplyNoFlags(ulong left, ulong right); - public unsafe static ulong MultiplyNoFlags(ulong left, ulong right, ulong* high); + public unsafe static ulong MultiplyNoFlags(ulong left, ulong right, ulong* low); } } public abstract class Lzcnt { - public static ulong LeadingZeroCount(ulong value); } public abstract class Popcnt : Sse42 { - public static ulong PopCount(ulong value); } public abstract class Sse { - public static Vector128 ConvertScalarToVector128Single(Vector128 upper, long value); - public static long ConvertToInt64(Vector128 value); - public static long ConvertToInt64WithTruncation(Vector128 value); - public static float ConvertToSingle(Vector128 value); - public static Vector128 SetAllVector128(float value); - public static Vector128 SetScalarVector128(float value); - public static Vector128 SetVector128(float e3, float e2, float e1, float e0); - public static Vector128 SetZeroVector128(); - public static Vector128 StaticCast(Vector128 value) where T : struct where U : struct; } public abstract class Sse2 : Sse { - public static Vector128 ConvertScalarToVector128Double(Vector128 upper, long value); - public static Vector128 ConvertScalarToVector128Int64(long value); - public static Vector128 ConvertScalarToVector128UInt64(ulong value); - public static double ConvertToDouble(Vector128 value); - public static long ConvertToInt64(Vector128 value); - public static long ConvertToInt64(Vector128 value); - public static long ConvertToInt64WithTruncation(Vector128 value); - public static ulong ConvertToUInt64(Vector128 value); - public static Vector128 SetAllVector128(byte value); - public static Vector128 SetAllVector128(double value); - public static Vector128 SetAllVector128(short value); - public static Vector128 SetAllVector128(int value); - public static Vector128 SetAllVector128(long value); - public static Vector128 SetAllVector128(sbyte value); - public static Vector128 SetAllVector128(ushort value); - public static Vector128 SetAllVector128(uint value); - public static Vector128 SetAllVector128(ulong value); - public static Vector128 SetScalarVector128(double value); - public static Vector128 SetVector128(byte e15, byte e14, byte e13, byte e12, byte e11, byte e10, byte e9, byte e8, byte e7, byte e6, byte e5, byte e4, byte e3, byte e2, byte e1, byte e0); - public static Vector128 SetVector128(double e1, double e0); - public static Vector128 SetVector128(short e7, short e6, short e5, short e4, short e3, short e2, short e1, short e0); - public static Vector128 SetVector128(int e3, int e2, int e1, int e0); - public static Vector128 SetVector128(long e1, long e0); - public static Vector128 SetVector128(sbyte e15, sbyte e14, sbyte e13, sbyte e12, sbyte e11, sbyte e10, sbyte e9, sbyte e8, sbyte e7, sbyte e6, sbyte e5, sbyte e4, sbyte e3, sbyte e2, sbyte e1, sbyte e0); - public static Vector128 SetVector128(ushort e7, ushort e6, ushort e5, ushort e4, ushort e3, ushort e2, ushort e1, ushort e0); - public static Vector128 SetVector128(uint e3, uint e2, uint e1, uint e0); - public static Vector128 SetVector128(ulong e1, ulong e0); - public static Vector128 SetZeroVector128() where T : struct; - public unsafe static void StoreNonTemporal(long* address, long value); - public unsafe static void StoreNonTemporal(ulong* address, ulong value); } public abstract class Sse41 : Ssse3 { - public static long Extract(Vector128 value, byte index); - public static ulong Extract(Vector128 value, byte index); - public static Vector128 Insert(Vector128 value, long data, byte index); - public static Vector128 Insert(Vector128 value, ulong data, byte index); } public abstract class Sse42 : Sse41 { - public static ulong Crc32(ulong crc, ulong data); } } ```