diff --git a/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems b/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems index e4f97a3735629..09db5ad47cc55 100644 --- a/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems +++ b/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems @@ -920,7 +920,9 @@ + + diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/ISimdVector_2.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/ISimdVector_2.cs new file mode 100644 index 0000000000000..8c12e1e935dd4 --- /dev/null +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/ISimdVector_2.cs @@ -0,0 +1,450 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Runtime.Intrinsics +{ + /// Defines a single instruction, multiple data (SIMD) vector type. + /// The type that implements the interface. + /// The type of the elements in the vector. + internal interface ISimdVector + : IAdditionOperators, + // IAdditiveIdentity, + IBitwiseOperators, + // IComparisonOperators, + // IDecrementOperators, + IDivisionOperators, + IEqualityOperators, + IEquatable, + // IIncrementOperators, + // IMinMaxValue, + // IModulusOperators, + // IMultiplicativeIdentity, + IMultiplyOperators, + // IShiftOperators + // ISpanFormattable, + ISubtractionOperators, + IUnaryNegationOperators, + IUnaryPlusOperators + where TSelf : unmanaged, ISimdVector + where T : struct + { + /// Gets an instance of the vector type in which all bits are set. + /// The type of the elements in the vector () is not supported. + static abstract TSelf AllBitsSet { get; } + + /// Gets the number of that are in the vector. + /// The type of the elements in the vector () is not supported. + static abstract int Count { get; } + + /// Gets a value that indicates whether the vector operations are subject to hardware acceleration through JIT intrinsic support. + /// if the vector operations are subject to hardware acceleration; otherwise, . + static abstract bool IsHardwareAccelerated { get; } + + /// Gets if is supported; otherwise, . + /// if is supported; otherwise, . + static abstract bool IsSupported { get; } + + /// Gets an instance of the vector type in which each element is the value zero. + /// The type of the elements in the vector () is not supported. + static abstract TSelf Zero { get; } + + /// Gets the element at the specified index. + /// The index of the element to get. + /// The value of the element at . + /// was less than zero or greater than the number of elements. + /// The type of the elements in the vector () is not supported. + T this[int index] { get; } + + /// Computes the absolute of a vector. + /// The vector for which to get its absolute. + /// A absolute of . + /// The type of the elements in the vector () is not supported. + static abstract TSelf Abs(TSelf vector); + + /// Conditionally selects bits from two vectors based on a given condition. + /// The mask that is used to select a value from or . + /// The vector that is selected when the corresponding bit in is one. + /// The vector that is selected when the corresponding bit in is zero. + /// A vector whose bits come from or based on the value of . + /// The type of the elements in the vector () is not supported. + static abstract TSelf ConditionalSelect(TSelf condition, TSelf left, TSelf right); + + /// Copies a vector to a given array. + /// The vector to be copied. + /// The array to which is copied. + /// The length of is less than . + /// The type of the elements in the vector () is not supported. + /// is null. + static virtual void CopyTo(TSelf vector, T[] destination) + { + if (!TSelf.IsSupported) + { + ThrowHelper.ThrowNotSupportedException(ExceptionResource.Arg_TypeNotSupported); + } + + // We explicitly don't check for `null` because historically this has thrown `NullReferenceException` for perf reasons + + if (destination.Length < TSelf.Count) + { + ThrowHelper.ThrowArgumentException_DestinationTooShort(); + } + + ref byte address = ref Unsafe.As(ref MemoryMarshal.GetArrayDataReference(destination)); + Unsafe.WriteUnaligned(ref address, vector); + } + + /// Copies a vector to a given array starting at the specified index. + /// The vector to be copied. + /// The array to which is copied. + /// The starting index of which will be copied to. + /// The length of is less than . + /// is negative or greater than the length of . + /// The type of the elements in the vector () is not supported. + /// is null. + static virtual void CopyTo(TSelf vector, T[] destination, int startIndex) + { + if (!TSelf.IsSupported) + { + ThrowHelper.ThrowNotSupportedException(ExceptionResource.Arg_TypeNotSupported); + } + + // We explicitly don't check for `null` because historically this has thrown `NullReferenceException` for perf reasons + + if ((uint)(startIndex) >= (uint)(destination.Length)) + { + ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLess(); + } + + if ((destination.Length - startIndex) < TSelf.Count) + { + ThrowHelper.ThrowArgumentException_DestinationTooShort(); + } + + ref byte address = ref Unsafe.As(ref MemoryMarshal.GetArrayDataReference(destination)); + Unsafe.WriteUnaligned(ref Unsafe.Add(ref address, startIndex), vector); + } + + /// Copies a vector to a given span. + /// The vector to be copied. + /// The span to which the is copied. + /// The length of is less than . + /// The type of the elements in the vector () is not supported. + static virtual void CopyTo(TSelf vector, Span destination) + { + if (!TSelf.IsSupported) + { + ThrowHelper.ThrowNotSupportedException(ExceptionResource.Arg_TypeNotSupported); + } + + if ((uint)(destination.Length) < (uint)(TSelf.Count)) + { + ThrowHelper.ThrowArgumentException_DestinationTooShort(); + } + + ref byte address = ref Unsafe.As(ref MemoryMarshal.GetReference(destination)); + Unsafe.WriteUnaligned(ref address, vector); + } + + /// Creates a new vector with all elements initialized to the specified value. + /// The value that all elements will be initialized to. + /// A new vector with all elements initialized to . + /// The type of the elements in the vector () is not supported. + static abstract TSelf Create(T value); + + /// Creates a new vector from a given array. + /// The array from which the vector is created. + /// A new vector with its elements set to the first elements from . + /// The length of is less than . + /// The type of the elements in the vector () is not supported. + /// is null. + static virtual TSelf Create(T[] values) + { + if (!TSelf.IsSupported) + { + ThrowHelper.ThrowNotSupportedException(ExceptionResource.Arg_TypeNotSupported); + } + + // We explicitly don't check for `null` because historically this has thrown `NullReferenceException` for perf reasons + + if (values.Length < TSelf.Count) + { + ThrowHelper.ThrowArgumentOutOfRange_IndexMustBeLessOrEqualException(); + } + + ref byte address = ref Unsafe.As(ref MemoryMarshal.GetArrayDataReference(values)); + return Unsafe.ReadUnaligned(ref address); + } + + /// Creates a new vector from a given array. + /// The array from which the vector is created. + /// The index in at which to being reading elements. + /// A new vector with its elements set to the first elements from . + /// The length of , starting from , is less than . + /// The type of the elements in the vector () is not supported. + /// is null. + static virtual TSelf Create(T[] values, int index) + { + if (!TSelf.IsSupported) + { + ThrowHelper.ThrowNotSupportedException(ExceptionResource.Arg_TypeNotSupported); + } + + // We explicitly don't check for `null` because historically this has thrown `NullReferenceException` for perf reasons + + if ((index < 0) || ((values.Length - index) < TSelf.Count)) + { + ThrowHelper.ThrowArgumentOutOfRange_IndexMustBeLessOrEqualException(); + } + + ref byte address = ref Unsafe.As(ref MemoryMarshal.GetArrayDataReference(values)); + return Unsafe.ReadUnaligned(ref Unsafe.Add(ref address, index)); + } + + /// Creates a new vector from a given readonly span. + /// The readonly span from which the vector is created. + /// A new vector with its elements set to the first elements from . + /// The length of is less than . + /// The type of the elements in the vector () is not supported. + static virtual TSelf Create(ReadOnlySpan values) + { + if (!TSelf.IsSupported) + { + ThrowHelper.ThrowNotSupportedException(ExceptionResource.Arg_TypeNotSupported); + } + + if (values.Length < TSelf.Count) + { + ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.values); + } + + ref byte address = ref Unsafe.As(ref MemoryMarshal.GetReference(values)); + return Unsafe.ReadUnaligned(ref address); + } + + /// Creates a new vector with the first element initialized to the specified value and the remaining elements initialized to zero. + /// The value that element 0 will be initialized to. + /// A new vector with the first element initialized to and the remaining elements initialized to zero. + /// The type of the elements in the vector () is not supported. + static abstract TSelf CreateScalar(T value); + + /// Creates a new vector with the first element initialized to the specified value and the remaining elements left uninitialized. + /// The value that element 0 will be initialized to. + /// A new vector with the first element initialized to and the remaining elements left uninitialized. + /// The type of the elements in the vector () is not supported. + static abstract TSelf CreateScalarUnsafe(T value); + + /// Compares two vectors to determine if they are equal on a per-element basis. + /// The vector to compare with . + /// The vector to compare with . + /// A vector whose elements are all-bits-set or zero, depending on if the corresponding elements in and were equal. + /// The type of the elements in the vector () is not supported. + static abstract TSelf Equals(TSelf left, TSelf right); + + /// Compares two vectors to determine if all elements are equal. + /// The vector to compare with . + /// The vector to compare with . + /// true if all elements in were equal to the corresponding element in . + /// The type of the elements in the vector () is not supported. + static abstract bool EqualsAll(TSelf left, TSelf right); + + /// Compares two vectors to determine if any elements are equal. + /// The vector to compare with . + /// The vector to compare with . + /// true if any elements in was equal to the corresponding element in . + /// The type of the elements in the vector () is not supported. + static abstract bool EqualsAny(TSelf left, TSelf right); + + /// Gets the element at the specified index. + /// The vector to get the element from. + /// The index of the element to get. + /// The value of the element at . + /// was less than zero or greater than the number of elements. + /// The type of the elements in the vector () is not supported. + static abstract T GetElement(TSelf vector, int index); + + /// Compares two vectors to determine which is greater on a per-element basis. + /// The vector to compare with . + /// The vector to compare with . + /// A vector whose elements are all-bits-set or zero, depending on if which of the corresponding elements in and were greater. + /// The type of the elements in the vector () is not supported. + static abstract TSelf GreaterThan(TSelf left, TSelf right); + + /// Compares two vectors to determine if all elements are greater. + /// The vector to compare with . + /// The vector to compare with . + /// true if all elements in were greater than the corresponding element in . + /// The type of the elements in the vector () is not supported. + static abstract bool GreaterThanAll(TSelf left, TSelf right); + + /// Compares two vectors to determine if any elements are greater. + /// The vector to compare with . + /// The vector to compare with . + /// true if any elements in was greater than the corresponding element in . + /// The type of the elements in the vector () is not supported. + static abstract bool GreaterThanAny(TSelf left, TSelf right); + + /// Compares two vectors to determine which is greater or equal on a per-element basis. + /// The vector to compare with . + /// The vector to compare with . + /// A vector whose elements are all-bits-set or zero, depending on if which of the corresponding elements in and were greater or equal. + /// The type of the elements in the vector () is not supported. + static abstract TSelf GreaterThanOrEqual(TSelf left, TSelf right); + + /// Compares two vectors to determine if all elements are greater or equal. + /// The vector to compare with . + /// The vector to compare with . + /// true if all elements in were greater than or equal to the corresponding element in . + /// The type of the elements in the vector () is not supported. + static abstract bool GreaterThanOrEqualAll(TSelf left, TSelf right); + + /// Compares two vectors to determine if any elements are greater or equal. + /// The vector to compare with . + /// The vector to compare with . + /// true if any elements in was greater than or equal to the corresponding element in . + /// The type of the elements in the vector () is not supported. + static abstract bool GreaterThanOrEqualAny(TSelf left, TSelf right); + + /// Compares two vectors to determine which is less on a per-element basis. + /// The vector to compare with . + /// The vector to compare with . + /// A vector whose elements are all-bits-set or zero, depending on if which of the corresponding elements in and were less. + /// The type of the elements in the vector () is not supported. + static abstract TSelf LessThan(TSelf left, TSelf right); + + /// Compares two vectors to determine if all elements are less. + /// The vector to compare with . + /// The vector to compare with . + /// true if all elements in were less than the corresponding element in . + /// The type of the elements in the vector () is not supported. + static abstract bool LessThanAll(TSelf left, TSelf right); + + /// Compares two vectors to determine if any elements are less. + /// The vector to compare with . + /// The vector to compare with . + /// true if any elements in was less than the corresponding element in . + /// The type of the elements in the vector () is not supported. + static abstract bool LessThanAny(TSelf left, TSelf right); + + /// Compares two vectors to determine which is less or equal on a per-element basis. + /// The vector to compare with . + /// The vector to compare with . + /// A vector whose elements are all-bits-set or zero, depending on if which of the corresponding elements in and were less or equal. + /// The type of the elements in the vector () is not supported. + static abstract TSelf LessThanOrEqual(TSelf left, TSelf right); + + /// Compares two vectors to determine if all elements are less or equal. + /// The vector to compare with . + /// The vector to compare with . + /// true if all elements in were less than or equal to the corresponding element in . + /// The type of the elements in the vector () is not supported. + static abstract bool LessThanOrEqualAll(TSelf left, TSelf right); + + /// Compares two vectors to determine if any elements are less or equal. + /// The vector to compare with . + /// The vector to compare with . + /// true if any elements in was less than or equal to the corresponding element in . + /// The type of the elements in the vector () is not supported. + static abstract bool LessThanOrEqualAny(TSelf left, TSelf right); + + /// Loads a vector from the given source. + /// The source from which the vector will be loaded. + /// The vector loaded from . + /// The type of the elements in the vector () is not supported. + static abstract TSelf LoadUnsafe(ref T source); + + /// Loads a vector from the given source and element offset. + /// The source to which will be added before loading the vector. + /// The element offset from from which the vector will be loaded. + /// The vector loaded from plus . + /// The type of the elements in the vector () is not supported. + static abstract TSelf LoadUnsafe(ref T source, nuint elementOffset); + + /// Computes the maximum of two vectors on a per-element basis. + /// The vector to compare with . + /// The vector to compare with . + /// A vector whose elements are the maximum of the corresponding elements in and . + /// The type of the elements in the vector () is not supported. + static abstract TSelf Max(TSelf left, TSelf right); + + /// Computes the minimum of two vectors on a per-element basis. + /// The vector to compare with . + /// The vector to compare with . + /// A vector whose elements are the minimum of the corresponding elements in and . + /// The type of the elements in the vector () is not supported. + static abstract TSelf Min(TSelf left, TSelf right); + + /// Stores a vector at the given destination. + /// The vector that will be stored. + /// The destination at which will be stored. + /// The type of the elements in the vector () is not supported. + static abstract void StoreUnsafe(TSelf vector, ref T destination); + + /// Stores a vector at the given destination. + /// The vector that will be stored. + /// The destination to which will be added before the vector will be stored. + /// The element offset from from which the vector will be stored. + /// The type of the elements in the vector () is not supported. + static abstract void StoreUnsafe(TSelf vector, ref T destination, nuint elementOffset); + + /// Converts the given vector to a scalar containing the value of the first element. + /// The vector to get the first element from. + /// A scalar containing the value of the first element. + /// The type of the elements in the vector () is not supported. + static abstract T ToScalar(TSelf vector); + + /// Tries to copy a to a given span. + /// The vector to copy. + /// The span to which is copied. + /// true if was successfully copied to ; otherwise, false if the length of is less than . + /// The type of the elements in the vector () is not supported. + static virtual bool TryCopyTo(TSelf vector, Span destination) + { + if (!TSelf.IsSupported) + { + ThrowHelper.ThrowNotSupportedException(ExceptionResource.Arg_TypeNotSupported); + } + + if ((uint)(destination.Length) < (uint)(TSelf.Count)) + { + return false; + } + + ref byte address = ref Unsafe.As(ref MemoryMarshal.GetReference(destination)); + Unsafe.WriteUnaligned(ref address, vector); + + return true; + } + + /// Creates a new with the element at the specified index set to the specified value and the remaining elements set to the same value as that in the given vector. + /// The vector to get the remaining elements from. + /// The index of the element to set. + /// The value to set the element to. + /// A with the value of the element at set to and the remaining elements set to the same value as that in . + /// was less than zero or greater than the number of elements. + /// The type of the elements in the vector () is not supported. + static abstract TSelf WithElement(TSelf vector, int index, T value); + + // TODO: static abstract operator *(TSelf left, T right); + // TODO: As() + // TODO: Ceiling() + // TODO: Dot + // TODO: ExtractMostSignificantBits + // TODO: Floor + // TODO: Load + // TODO: LoadAligned + // TODO: LoadAlignedNonTemporal + // TODO: ShiftLeft + // TODO: ShiftRightArithmetic + // TODO: ShiftRightLogical + // TODO: Shuffle + // TODO: Sqrt + // TODO: Store + // TODO: StoreAligned + // TODO: StoreAlignedNonTemporal + // TODO: Sum + } +} diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/SimdVectorExtensions.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/SimdVectorExtensions.cs new file mode 100644 index 0000000000000..5bc7a6646945c --- /dev/null +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/SimdVectorExtensions.cs @@ -0,0 +1,122 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Runtime.Intrinsics +{ + internal static class SimdVectorExtensions + { + /// Copies a vector to a given array. + /// The type of the vector. + /// The type of the elements in the vector. + /// The vector to be copied. + /// The array to which is copied. + /// The length of is less than . + /// is null. + /// The type of the elements in the vector () is not supported. + public static void CopyTo(this TVector vector, T[] destination) + where TVector : unmanaged, ISimdVector + where T : struct + { + TVector.CopyTo(vector, destination); + } + + /// Copies a vector to a given array starting at the specified index. + /// The type of the vector. + /// The type of the elements in the vector. + /// The vector to be copied. + /// The array to which is copied. + /// The starting index of which will be copied to. + /// The length of is less than . + /// is negative or greater than the length of . + /// is null. + /// The type of the elements in the vector () is not supported. + public static void CopyTo(this TVector vector, T[] destination, int startIndex) + where TVector : unmanaged, ISimdVector + where T : struct + { + TVector.CopyTo(vector, destination, startIndex); + } + + /// Copies a vector to a given span. + /// The type of the vector. + /// The type of the elements in the vector. + /// The vector to be copied. + /// The span to which the is copied. + /// The length of is less than . + /// The type of the elements in the vector () is not supported. + public static void CopyTo(this TVector vector, Span destination) + where TVector : unmanaged, ISimdVector + where T : struct + { + TVector.CopyTo(vector, destination); + } + + /// Stores a vector at the given destination. + /// The type of the vector. + /// The type of the elements in the vector. + /// The vector that will be stored. + /// The destination at which the vector will be stored. + /// The type of the elements in the vector () is not supported. + public static void StoreUnsafe(this TVector vector, ref T destination) + where TVector : unmanaged, ISimdVector + where T : struct + { + TVector.StoreUnsafe(vector, ref destination); + } + + /// Stores a vector at the given destination. + /// The type of the vector. + /// The type of the elements in the vector. + /// The vector that will be stored. + /// The destination to which will be added before the vector will be stored. + /// The element offset from from which the vector will be stored. + /// The type of the elements in the vector () is not supported. + public static void StoreUnsafe(this TVector vector, ref T destination, nuint elementOffset) + where TVector : unmanaged, ISimdVector + where T : struct + { + TVector.StoreUnsafe(vector, ref destination, elementOffset); + } + + /// Converts the given vector to a scalar containing the value of the first element. + /// The type of the vector. + /// The type of the elements in the vector. + /// The vector to get the first element from. + /// A scalar containing the value of the first element. + /// The type of the elements in the vector () is not supported. + public static T ToScalar(this TVector vector) + where TVector : unmanaged, ISimdVector + where T : struct + { + return TVector.ToScalar(vector); + } + + /// Tries to copy a vector to a given span. + /// The type of the vector. + /// The type of the elements in the vector. + /// The vector to copy. + /// The span to which is copied. + /// true if was successfully copied to ; otherwise, false if the length of is less than . + /// The type of the elements in the vector () is not supported. + public static bool TryCopyTo(this TVector vector, Span destination) + where TVector : unmanaged, ISimdVector + where T : struct + { + return TVector.TryCopyTo(vector, destination); + } + + /// Creates a new with the element at the specified index set to the specified value and the remaining elements set to the same value as that in the given vector. + /// The vector to get the remaining elements from. + /// The index of the element to set. + /// The value to set the element to. + /// A with the value of the element at set to and the remaining elements set to the same value as that in . + /// was less than zero or greater than the number of elements. + /// The type of the elements in the vector () is not supported. + public static TVector WithElement(this TVector vector, int index, T value) + where TVector : unmanaged, ISimdVector + where T : struct + { + return TVector.WithElement(vector, index, value); + } + } +} diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128.cs index 658c48aa04511..47fb4a8ae4205 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128.cs @@ -72,6 +72,10 @@ public static Vector128 Abs(Vector128 vector) { return vector; } + else if (typeof(T) == typeof(nuint)) + { + return vector; + } else { return SoftwareFallback(vector); @@ -709,6 +713,10 @@ public static unsafe Vector128 Create(T value) { return Create((long)(object)value).As(); } + else if (typeof(T) == typeof(nint)) + { + return Create((nint)(object)value).As(); + } else if (typeof(T) == typeof(sbyte)) { return Create((sbyte)(object)value).As(); @@ -729,6 +737,10 @@ public static unsafe Vector128 Create(T value) { return Create((ulong)(object)value).As(); } + else if (typeof(T) == typeof(nuint)) + { + return Create((nuint)(object)value).As(); + } else { throw new NotSupportedException(SR.Arg_TypeNotSupported); @@ -1538,6 +1550,20 @@ static Vector128 SoftwareFallback(Vector64 lower, Vector64 } } + /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. + /// The type of the elements in the vector. + /// The value that element 0 will be initialized to. + /// A new instance with the first element initialized to and the remaining elements initialized to zero. + /// The type of the elements in the vector () is not supported. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static unsafe Vector128 CreateScalar(T value) + where T : struct + { + Vector128 result = Vector128.Zero; + result.SetElementUnsafe(0, value); + return result; + } + /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements initialized to zero. @@ -1556,14 +1582,7 @@ public static unsafe Vector128 CreateScalar(byte value) return Sse2.ConvertScalarToVector128UInt32(value).AsByte(); } - return SoftwareFallback(value); - - static Vector128 SoftwareFallback(byte value) - { - Vector128 result = Vector128.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1582,14 +1601,7 @@ public static unsafe Vector128 CreateScalar(double value) return Sse2.MoveScalar(Vector128.Zero, CreateScalarUnsafe(value)); } - return SoftwareFallback(value); - - static Vector128 SoftwareFallback(double value) - { - Vector128 result = Vector128.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1610,14 +1622,7 @@ public static unsafe Vector128 CreateScalar(short value) return Sse2.ConvertScalarToVector128UInt32((ushort)(value)).AsInt16(); } - return SoftwareFallback(value); - - static Vector128 SoftwareFallback(short value) - { - Vector128 result = Vector128.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1636,14 +1641,7 @@ public static unsafe Vector128 CreateScalar(int value) return Sse2.ConvertScalarToVector128Int32(value); } - return SoftwareFallback(value); - - static Vector128 SoftwareFallback(int value) - { - Vector128 result = Vector128.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1662,14 +1660,7 @@ public static unsafe Vector128 CreateScalar(long value) return Sse2.X64.ConvertScalarToVector128Int64(value); } - return SoftwareFallback(value); - - static Vector128 SoftwareFallback(long value) - { - Vector128 result = Vector128.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1679,9 +1670,9 @@ static Vector128 SoftwareFallback(long value) public static unsafe Vector128 CreateScalar(nint value) { #if TARGET_64BIT - return CreateScalar((long)value).AsNInt(); + return CreateScalar((long)(value)).AsNInt(); #else - return CreateScalar((int)value).AsNInt(); + return CreateScalar((int)(value)).AsNInt(); #endif } @@ -1693,9 +1684,9 @@ public static unsafe Vector128 CreateScalar(nint value) public static unsafe Vector128 CreateScalar(nuint value) { #if TARGET_64BIT - return CreateScalar((ulong)value).AsNUInt(); + return CreateScalar((ulong)(value)).AsNUInt(); #else - return CreateScalar((uint)value).AsNUInt(); + return CreateScalar((uint)(value)).AsNUInt(); #endif } @@ -1718,14 +1709,7 @@ public static unsafe Vector128 CreateScalar(sbyte value) return Sse2.ConvertScalarToVector128UInt32((byte)(value)).AsSByte(); } - return SoftwareFallback(value); - - static Vector128 SoftwareFallback(sbyte value) - { - Vector128 result = Vector128.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1744,14 +1728,7 @@ public static unsafe Vector128 CreateScalar(float value) return Sse.MoveScalar(Vector128.Zero, CreateScalarUnsafe(value)); } - return SoftwareFallback(value); - - static Vector128 SoftwareFallback(float value) - { - Vector128 result = Vector128.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1773,14 +1750,7 @@ public static unsafe Vector128 CreateScalar(ushort value) return Sse2.ConvertScalarToVector128UInt32(value).AsUInt16(); } - return SoftwareFallback(value); - - static Vector128 SoftwareFallback(ushort value) - { - Vector128 result = Vector128.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1800,14 +1770,7 @@ public static unsafe Vector128 CreateScalar(uint value) return Sse2.ConvertScalarToVector128UInt32(value); } - return SoftwareFallback(value); - - static Vector128 SoftwareFallback(uint value) - { - Vector128 result = Vector128.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1827,186 +1790,104 @@ public static unsafe Vector128 CreateScalar(ulong value) return Sse2.X64.ConvertScalarToVector128UInt64(value); } - return SoftwareFallback(value); - - static Vector128 SoftwareFallback(ulong value) - { - Vector128 result = Vector128.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } - /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. + /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. + /// The type of the elements in the vector. /// The value that element 0 will be initialized to. - /// A new instance with the first element initialized to and the remaining elements left uninitialized. + /// A new instance with the first element initialized to and the remaining elements left uninitialized. + /// The type of the elements in the vector () is not supported. [Intrinsic] - public static unsafe Vector128 CreateScalarUnsafe(byte value) + internal static unsafe Vector128 CreateScalarUnsafe(T value) + where T : struct { // This relies on us stripping the "init" flag from the ".locals" // declaration to let the upper bits be uninitialized. - byte* pResult = stackalloc byte[16]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); + ThrowHelper.ThrowForUnsupportedIntrinsicsVector128BaseType(); + Unsafe.SkipInit(out Vector128 result); + + result.SetElementUnsafe(0, value); + return result; } + /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. + /// The value that element 0 will be initialized to. + /// A new instance with the first element initialized to and the remaining elements left uninitialized. + [Intrinsic] + public static unsafe Vector128 CreateScalarUnsafe(byte value) => CreateScalarUnsafe(value); + /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector128 CreateScalarUnsafe(double value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - double* pResult = stackalloc double[2]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector128 CreateScalarUnsafe(double value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector128 CreateScalarUnsafe(short value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - short* pResult = stackalloc short[8]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector128 CreateScalarUnsafe(short value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector128 CreateScalarUnsafe(int value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - int* pResult = stackalloc int[4]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector128 CreateScalarUnsafe(int value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector128 CreateScalarUnsafe(long value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - long* pResult = stackalloc long[2]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector128 CreateScalarUnsafe(long value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector128 CreateScalarUnsafe(nint value) - { -#if TARGET_64BIT - return CreateScalarUnsafe((long)value).AsNInt(); -#else - return CreateScalarUnsafe((int)value).AsNInt(); -#endif - } + public static unsafe Vector128 CreateScalarUnsafe(nint value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] [CLSCompliant(false)] - public static unsafe Vector128 CreateScalarUnsafe(nuint value) - { -#if TARGET_64BIT - return CreateScalarUnsafe((ulong)value).AsNUInt(); -#else - return CreateScalarUnsafe((uint)value).AsNUInt(); -#endif - } + public static unsafe Vector128 CreateScalarUnsafe(nuint value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] [CLSCompliant(false)] - public static unsafe Vector128 CreateScalarUnsafe(sbyte value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - sbyte* pResult = stackalloc sbyte[16]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector128 CreateScalarUnsafe(sbyte value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector128 CreateScalarUnsafe(float value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - float* pResult = stackalloc float[4]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector128 CreateScalarUnsafe(float value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] [CLSCompliant(false)] - public static unsafe Vector128 CreateScalarUnsafe(ushort value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - ushort* pResult = stackalloc ushort[8]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector128 CreateScalarUnsafe(ushort value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] [CLSCompliant(false)] - public static unsafe Vector128 CreateScalarUnsafe(uint value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - uint* pResult = stackalloc uint[4]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector128 CreateScalarUnsafe(uint value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] [CLSCompliant(false)] - public static unsafe Vector128 CreateScalarUnsafe(ulong value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - ulong* pResult = stackalloc ulong[2]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector128 CreateScalarUnsafe(ulong value) => CreateScalarUnsafe(value); /// Divides two vectors to compute their quotient. /// The vector that will be divided by . diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128_1.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128_1.cs index 7fa449d3ef503..05e7c077d5f75 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128_1.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128_1.cs @@ -6,7 +6,6 @@ using System.Globalization; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -using System.Runtime.Intrinsics.X86; using System.Text; namespace System.Runtime.Intrinsics @@ -26,7 +25,7 @@ namespace System.Runtime.Intrinsics [DebuggerDisplay("{DisplayString,nq}")] [DebuggerTypeProxy(typeof(Vector128DebugView<>))] [StructLayout(LayoutKind.Sequential, Size = Vector128.Size)] - public readonly struct Vector128 : IEquatable> + public readonly struct Vector128 : ISimdVector, T> where T : struct { // These fields exist to ensure the alignment is 8, rather than 1. @@ -89,6 +88,9 @@ public static Vector128 Zero } } + /// + static bool ISimdVector, T>.IsHardwareAccelerated => Vector128.IsHardwareAccelerated; + internal unsafe string DisplayString { get @@ -387,5 +389,92 @@ private string ToString([StringSyntax(StringSyntaxAttribute.NumericFormat)] stri return sb.ToString(); } + + /// + static Vector128 ISimdVector, T>.Abs(Vector128 vector) => Vector128.Abs(vector); + + /// + static Vector128 ISimdVector, T>.ConditionalSelect(Vector128 condition, Vector128 left, Vector128 right) => Vector128.ConditionalSelect(condition, left, right); + + /// + static Vector128 ISimdVector, T>.Create(T value) => Vector128.Create(value); + + /// + static Vector128 ISimdVector, T>.CreateScalar(T value) => Vector128.CreateScalar(value); + + /// + static Vector128 ISimdVector, T>.CreateScalarUnsafe(T value) => Vector128.CreateScalarUnsafe(value); + + /// + static Vector128 ISimdVector, T>.Equals(Vector128 left, Vector128 right) => Vector128.Equals(left, right); + + /// + static bool ISimdVector, T>.EqualsAll(Vector128 left, Vector128 right) => Vector128.EqualsAll(left, right); + + /// + static bool ISimdVector, T>.EqualsAny(Vector128 left, Vector128 right) => Vector128.EqualsAny(left, right); + + /// + static T ISimdVector, T>.GetElement(Vector128 vector, int index) => vector.GetElement(index); + + /// + static Vector128 ISimdVector, T>.GreaterThan(Vector128 left, Vector128 right) => Vector128.GreaterThan(left, right); + + /// + static bool ISimdVector, T>.GreaterThanAll(Vector128 left, Vector128 right) => Vector128.GreaterThanAll(left, right); + + /// + static bool ISimdVector, T>.GreaterThanAny(Vector128 left, Vector128 right) => Vector128.GreaterThanAny(left, right); + + /// + static Vector128 ISimdVector, T>.GreaterThanOrEqual(Vector128 left, Vector128 right) => Vector128.GreaterThanOrEqual(left, right); + + /// + static bool ISimdVector, T>.GreaterThanOrEqualAll(Vector128 left, Vector128 right) => Vector128.GreaterThanOrEqualAll(left, right); + + /// + static bool ISimdVector, T>.GreaterThanOrEqualAny(Vector128 left, Vector128 right) => Vector128.GreaterThanOrEqualAny(left, right); + + /// + static Vector128 ISimdVector, T>.LessThan(Vector128 left, Vector128 right) => Vector128.LessThan(left, right); + + /// + static bool ISimdVector, T>.LessThanAll(Vector128 left, Vector128 right) => Vector128.LessThanAll(left, right); + + /// + static bool ISimdVector, T>.LessThanAny(Vector128 left, Vector128 right) => Vector128.LessThanAny(left, right); + + /// + static Vector128 ISimdVector, T>.LessThanOrEqual(Vector128 left, Vector128 right) => Vector128.LessThanOrEqual(left, right); + + /// + static bool ISimdVector, T>.LessThanOrEqualAll(Vector128 left, Vector128 right) => Vector128.LessThanOrEqualAll(left, right); + + /// + static bool ISimdVector, T>.LessThanOrEqualAny(Vector128 left, Vector128 right) => Vector128.LessThanOrEqualAny(left, right); + + /// + static Vector128 ISimdVector, T>.LoadUnsafe(ref T source) => Vector128.LoadUnsafe(ref source); + + /// + static Vector128 ISimdVector, T>.LoadUnsafe(ref T source, nuint elementOffset) => Vector128.LoadUnsafe(ref source, elementOffset); + + /// + static Vector128 ISimdVector, T>.Max(Vector128 left, Vector128 right) => Vector128.Max(left, right); + + /// + static Vector128 ISimdVector, T>.Min(Vector128 left, Vector128 right) => Vector128.Min(left, right); + + /// + static void ISimdVector, T>.StoreUnsafe(Vector128 vector, ref T destination) => vector.StoreUnsafe(ref destination); + + /// + static void ISimdVector, T>.StoreUnsafe(Vector128 vector, ref T destination, nuint elementOffset) => vector.StoreUnsafe(ref destination, elementOffset); + + /// + static T ISimdVector, T>.ToScalar(Vector128 vector) => vector.ToScalar(); + + /// + static Vector128 ISimdVector, T>.WithElement(Vector128 vector, int index, T value) => vector.WithElement(index, value); } } diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256.cs index 9f3cc77a8506d..9560d333bb1cd 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256.cs @@ -73,6 +73,10 @@ public static Vector256 Abs(Vector256 vector) { return vector; } + else if (typeof(T) == typeof(nuint)) + { + return vector; + } else { return SoftwareFallback(vector); @@ -657,6 +661,10 @@ public static unsafe Vector256 Create(T value) { return Create((long)(object)value).As(); } + else if (typeof(T) == typeof(nint)) + { + return Create((nint)(object)value).As(); + } else if (typeof(T) == typeof(sbyte)) { return Create((sbyte)(object)value).As(); @@ -677,6 +685,10 @@ public static unsafe Vector256 Create(T value) { return Create((ulong)(object)value).As(); } + else if (typeof(T) == typeof(nuint)) + { + return Create((nuint)(object)value).As(); + } else { throw new NotSupportedException(SR.Arg_TypeNotSupported); @@ -1696,6 +1708,20 @@ static Vector256 SoftwareFallback(Vector128 lower, Vector128Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. + /// The type of the elements in the vector. + /// The value that element 0 will be initialized to. + /// A new instance with the first element initialized to and the remaining elements initialized to zero. + /// The type of the elements in the vector () is not supported. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static unsafe Vector256 CreateScalar(T value) + where T : struct + { + Vector256 result = Vector256.Zero; + result.SetElementUnsafe(0, value); + return result; + } + /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements initialized to zero. @@ -1707,14 +1733,7 @@ public static unsafe Vector256 CreateScalar(byte value) return Vector128.CreateScalar(value).ToVector256(); } - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(byte value) - { - Vector256 result = Vector256.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1728,14 +1747,7 @@ public static unsafe Vector256 CreateScalar(double value) return Vector128.CreateScalar(value).ToVector256(); } - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(double value) - { - Vector256 result = Vector256.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1749,14 +1761,7 @@ public static unsafe Vector256 CreateScalar(short value) return Vector128.CreateScalar(value).ToVector256(); } - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(short value) - { - Vector256 result = Vector256.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1770,14 +1775,7 @@ public static unsafe Vector256 CreateScalar(int value) return Vector128.CreateScalar(value).ToVector256(); } - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(int value) - { - Vector256 result = Vector256.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1791,14 +1789,7 @@ public static unsafe Vector256 CreateScalar(long value) return Vector128.CreateScalar(value).ToVector256(); } - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(long value) - { - Vector256 result = Vector256.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1807,21 +1798,11 @@ static Vector256 SoftwareFallback(long value) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static unsafe Vector256 CreateScalar(nint value) { - if (Avx.IsSupported) - { - return Create(value); - } - - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(nint value) - { #if TARGET_64BIT - return CreateScalar((long)value).AsNInt(); + return CreateScalar((long)(value)).AsNInt(); #else - return CreateScalar((int)value).AsNInt(); + return CreateScalar((int)(value)).AsNInt(); #endif - } } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1831,21 +1812,11 @@ static Vector256 SoftwareFallback(nint value) [CLSCompliant(false)] public static unsafe Vector256 CreateScalar(nuint value) { - if (Avx.IsSupported) - { - return Create(value); - } - - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(nuint value) - { #if TARGET_64BIT - return CreateScalar((ulong)value).AsNUInt(); + return CreateScalar((ulong)(value)).AsNUInt(); #else - return CreateScalar((uint)value).AsNUInt(); + return CreateScalar((uint)(value)).AsNUInt(); #endif - } } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1860,14 +1831,7 @@ public static unsafe Vector256 CreateScalar(sbyte value) return Vector128.CreateScalar(value).ToVector256(); } - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(sbyte value) - { - Vector256 result = Vector256.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1881,14 +1845,7 @@ public static unsafe Vector256 CreateScalar(float value) return Vector128.CreateScalar(value).ToVector256(); } - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(float value) - { - Vector256 result = Vector256.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1903,14 +1860,7 @@ public static unsafe Vector256 CreateScalar(ushort value) return Vector128.CreateScalar(value).ToVector256(); } - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(ushort value) - { - Vector256 result = Vector256.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1925,14 +1875,7 @@ public static unsafe Vector256 CreateScalar(uint value) return Vector128.CreateScalar(value).ToVector256(); } - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(uint value) - { - Vector256 result = Vector256.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1947,186 +1890,104 @@ public static unsafe Vector256 CreateScalar(ulong value) return Vector128.CreateScalar(value).ToVector256(); } - return SoftwareFallback(value); - - static Vector256 SoftwareFallback(ulong value) - { - Vector256 result = Vector256.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } - /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. + /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. + /// The type of the elements in the vector. /// The value that element 0 will be initialized to. - /// A new instance with the first element initialized to and the remaining elements left uninitialized. + /// A new instance with the first element initialized to and the remaining elements left uninitialized. + /// The type of the elements in the vector () is not supported. [Intrinsic] - public static unsafe Vector256 CreateScalarUnsafe(byte value) + internal static unsafe Vector256 CreateScalarUnsafe(T value) + where T : struct { // This relies on us stripping the "init" flag from the ".locals" // declaration to let the upper bits be uninitialized. - byte* pResult = stackalloc byte[32]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); + ThrowHelper.ThrowForUnsupportedIntrinsicsVector128BaseType(); + Unsafe.SkipInit(out Vector256 result); + + result.SetElementUnsafe(0, value); + return result; } + /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. + /// The value that element 0 will be initialized to. + /// A new instance with the first element initialized to and the remaining elements left uninitialized. + [Intrinsic] + public static unsafe Vector256 CreateScalarUnsafe(byte value) => CreateScalarUnsafe(value); + /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector256 CreateScalarUnsafe(double value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - double* pResult = stackalloc double[4]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector256 CreateScalarUnsafe(double value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector256 CreateScalarUnsafe(short value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - short* pResult = stackalloc short[16]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector256 CreateScalarUnsafe(short value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector256 CreateScalarUnsafe(int value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - int* pResult = stackalloc int[8]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector256 CreateScalarUnsafe(int value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector256 CreateScalarUnsafe(long value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - long* pResult = stackalloc long[4]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector256 CreateScalarUnsafe(long value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector256 CreateScalarUnsafe(nint value) - { -#if TARGET_64BIT - return CreateScalarUnsafe((long)value).AsNInt(); -#else - return CreateScalarUnsafe((int)value).AsNInt(); -#endif - } + public static unsafe Vector256 CreateScalarUnsafe(nint value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] [CLSCompliant(false)] - public static unsafe Vector256 CreateScalarUnsafe(nuint value) - { -#if TARGET_64BIT - return CreateScalarUnsafe((ulong)value).AsNUInt(); -#else - return CreateScalarUnsafe((uint)value).AsNUInt(); -#endif - } + public static unsafe Vector256 CreateScalarUnsafe(nuint value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] [CLSCompliant(false)] - public static unsafe Vector256 CreateScalarUnsafe(sbyte value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - sbyte* pResult = stackalloc sbyte[32]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector256 CreateScalarUnsafe(sbyte value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector256 CreateScalarUnsafe(float value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - float* pResult = stackalloc float[8]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector256 CreateScalarUnsafe(float value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] [CLSCompliant(false)] - public static unsafe Vector256 CreateScalarUnsafe(ushort value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - ushort* pResult = stackalloc ushort[16]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector256 CreateScalarUnsafe(ushort value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] [CLSCompliant(false)] - public static unsafe Vector256 CreateScalarUnsafe(uint value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - uint* pResult = stackalloc uint[8]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector256 CreateScalarUnsafe(uint value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] [CLSCompliant(false)] - public static unsafe Vector256 CreateScalarUnsafe(ulong value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - ulong* pResult = stackalloc ulong[4]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector256 CreateScalarUnsafe(ulong value) => CreateScalarUnsafe(value); /// Divides two vectors to compute their quotient. /// The vector that will be divided by . diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256_1.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256_1.cs index dac4eac2a8fe0..2d68c9a04e7b0 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256_1.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256_1.cs @@ -27,7 +27,7 @@ namespace System.Runtime.Intrinsics [DebuggerDisplay("{DisplayString,nq}")] [DebuggerTypeProxy(typeof(Vector256DebugView<>))] [StructLayout(LayoutKind.Sequential, Size = Vector256.Size)] - public readonly struct Vector256 : IEquatable> + public readonly struct Vector256 : ISimdVector, T> where T : struct { // These fields exist to ensure the alignment is 8, rather than 1. @@ -92,6 +92,9 @@ public static Vector256 Zero } } + /// + static bool ISimdVector, T>.IsHardwareAccelerated => Vector256.IsHardwareAccelerated; + internal unsafe string DisplayString { get @@ -396,5 +399,92 @@ private string ToString([StringSyntax(StringSyntaxAttribute.NumericFormat)] stri return sb.ToString(); } + + /// + static Vector256 ISimdVector, T>.Abs(Vector256 vector) => Vector256.Abs(vector); + + /// + static Vector256 ISimdVector, T>.ConditionalSelect(Vector256 condition, Vector256 left, Vector256 right) => Vector256.ConditionalSelect(condition, left, right); + + /// + static Vector256 ISimdVector, T>.Create(T value) => Vector256.Create(value); + + /// + static Vector256 ISimdVector, T>.CreateScalar(T value) => Vector256.CreateScalar(value); + + /// + static Vector256 ISimdVector, T>.CreateScalarUnsafe(T value) => Vector256.CreateScalarUnsafe(value); + + /// + static Vector256 ISimdVector, T>.Equals(Vector256 left, Vector256 right) => Vector256.Equals(left, right); + + /// + static bool ISimdVector, T>.EqualsAll(Vector256 left, Vector256 right) => Vector256.EqualsAll(left, right); + + /// + static bool ISimdVector, T>.EqualsAny(Vector256 left, Vector256 right) => Vector256.EqualsAny(left, right); + + /// + static T ISimdVector, T>.GetElement(Vector256 vector, int index) => vector.GetElement(index); + + /// + static Vector256 ISimdVector, T>.GreaterThan(Vector256 left, Vector256 right) => Vector256.GreaterThan(left, right); + + /// + static bool ISimdVector, T>.GreaterThanAll(Vector256 left, Vector256 right) => Vector256.GreaterThanAll(left, right); + + /// + static bool ISimdVector, T>.GreaterThanAny(Vector256 left, Vector256 right) => Vector256.GreaterThanAny(left, right); + + /// + static Vector256 ISimdVector, T>.GreaterThanOrEqual(Vector256 left, Vector256 right) => Vector256.GreaterThanOrEqual(left, right); + + /// + static bool ISimdVector, T>.GreaterThanOrEqualAll(Vector256 left, Vector256 right) => Vector256.GreaterThanOrEqualAll(left, right); + + /// + static bool ISimdVector, T>.GreaterThanOrEqualAny(Vector256 left, Vector256 right) => Vector256.GreaterThanOrEqualAny(left, right); + + /// + static Vector256 ISimdVector, T>.LessThan(Vector256 left, Vector256 right) => Vector256.LessThan(left, right); + + /// + static bool ISimdVector, T>.LessThanAll(Vector256 left, Vector256 right) => Vector256.LessThanAll(left, right); + + /// + static bool ISimdVector, T>.LessThanAny(Vector256 left, Vector256 right) => Vector256.LessThanAny(left, right); + + /// + static Vector256 ISimdVector, T>.LessThanOrEqual(Vector256 left, Vector256 right) => Vector256.LessThanOrEqual(left, right); + + /// + static bool ISimdVector, T>.LessThanOrEqualAll(Vector256 left, Vector256 right) => Vector256.LessThanOrEqualAll(left, right); + + /// + static bool ISimdVector, T>.LessThanOrEqualAny(Vector256 left, Vector256 right) => Vector256.LessThanOrEqualAny(left, right); + + /// + static Vector256 ISimdVector, T>.LoadUnsafe(ref T source) => Vector256.LoadUnsafe(ref source); + + /// + static Vector256 ISimdVector, T>.LoadUnsafe(ref T source, nuint elementOffset) => Vector256.LoadUnsafe(ref source, elementOffset); + + /// + static Vector256 ISimdVector, T>.Max(Vector256 left, Vector256 right) => Vector256.Max(left, right); + + /// + static Vector256 ISimdVector, T>.Min(Vector256 left, Vector256 right) => Vector256.Min(left, right); + + /// + static void ISimdVector, T>.StoreUnsafe(Vector256 vector, ref T destination) => vector.StoreUnsafe(ref destination); + + /// + static void ISimdVector, T>.StoreUnsafe(Vector256 vector, ref T destination, nuint elementOffset) => vector.StoreUnsafe(ref destination, elementOffset); + + /// + static T ISimdVector, T>.ToScalar(Vector256 vector) => vector.ToScalar(); + + /// + static Vector256 ISimdVector, T>.WithElement(Vector256 vector, int index, T value) => vector.WithElement(index, value); } } diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector64.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector64.cs index 69e7bc88d7851..9165d9679df30 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector64.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector64.cs @@ -49,6 +49,10 @@ public static Vector64 Abs(Vector64 vector) { return vector; } + else if (typeof(T) == typeof(nuint)) + { + return vector; + } else { return SoftwareFallback(vector); @@ -510,6 +514,10 @@ public static unsafe Vector64 Create(T value) { return Create((long)(object)value).As(); } + else if (typeof(T) == typeof(nint)) + { + return Create((nint)(object)value).As(); + } else if (typeof(T) == typeof(sbyte)) { return Create((sbyte)(object)value).As(); @@ -530,6 +538,10 @@ public static unsafe Vector64 Create(T value) { return Create((ulong)(object)value).As(); } + else if (typeof(T) == typeof(nuint)) + { + return Create((nuint)(object)value).As(); + } else { throw new NotSupportedException(SR.Arg_TypeNotSupported); @@ -914,6 +926,20 @@ public static unsafe Vector64 Create(uint e0, uint e1) return Unsafe.AsRef>(pResult); } + /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. + /// The type of the elements in the vector. + /// The value that element 0 will be initialized to. + /// A new instance with the first element initialized to and the remaining elements initialized to zero. + /// The type of the elements in the vector () is not supported. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static unsafe Vector64 CreateScalar(T value) + where T : struct + { + Vector64 result = Vector64.Zero; + result.SetElementUnsafe(0, value); + return result; + } + /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements initialized to zero. @@ -925,14 +951,7 @@ public static unsafe Vector64 CreateScalar(byte value) return AdvSimd.Insert(Vector64.Zero, 0, value); } - return SoftwareFallback(value); - - static Vector64 SoftwareFallback(byte value) - { - Vector64 result = Vector64.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -946,12 +965,7 @@ public static unsafe Vector64 CreateScalar(double value) return Create(value); } - return SoftwareFallback(value); - - static Vector64 SoftwareFallback(double value) - { - return Unsafe.As>(ref value); - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -965,14 +979,7 @@ public static unsafe Vector64 CreateScalar(short value) return AdvSimd.Insert(Vector64.Zero, 0, value); } - return SoftwareFallback(value); - - static Vector64 SoftwareFallback(short value) - { - Vector64 result = Vector64.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -986,14 +993,7 @@ public static unsafe Vector64 CreateScalar(int value) return AdvSimd.Insert(Vector64.Zero, 0, value); } - return SoftwareFallback(value); - - static Vector64 SoftwareFallback(int value) - { - Vector64 result = Vector64.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1007,12 +1007,7 @@ public static unsafe Vector64 CreateScalar(long value) return Create(value); } - return SoftwareFallback(value); - - static Vector64 SoftwareFallback(long value) - { - return Unsafe.As>(ref value); - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1022,9 +1017,9 @@ static Vector64 SoftwareFallback(long value) public static unsafe Vector64 CreateScalar(nint value) { #if TARGET_64BIT - return CreateScalar((long)value).AsNInt(); + return CreateScalar((long)(value)).AsNInt(); #else - return CreateScalar((int)value).AsNInt(); + return CreateScalar((int)(value)).AsNInt(); #endif } @@ -1036,9 +1031,9 @@ public static unsafe Vector64 CreateScalar(nint value) public static unsafe Vector64 CreateScalar(nuint value) { #if TARGET_64BIT - return CreateScalar((ulong)value).AsNUInt(); + return CreateScalar((ulong)(value)).AsNUInt(); #else - return CreateScalar((uint)value).AsNUInt(); + return CreateScalar((uint)(value)).AsNUInt(); #endif } @@ -1054,14 +1049,7 @@ public static unsafe Vector64 CreateScalar(sbyte value) return AdvSimd.Insert(Vector64.Zero, 0, value); } - return SoftwareFallback(value); - - static Vector64 SoftwareFallback(sbyte value) - { - Vector64 result = Vector64.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1075,14 +1063,7 @@ public static unsafe Vector64 CreateScalar(float value) return AdvSimd.Insert(Vector64.Zero, 0, value); } - return SoftwareFallback(value); - - static Vector64 SoftwareFallback(float value) - { - Vector64 result = Vector64.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1097,14 +1078,7 @@ public static unsafe Vector64 CreateScalar(ushort value) return AdvSimd.Insert(Vector64.Zero, 0, value); } - return SoftwareFallback(value); - - static Vector64 SoftwareFallback(ushort value) - { - Vector64 result = Vector64.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } /// Creates a new instance with the first element initialized to the specified value and the remaining elements initialized to zero. @@ -1119,14 +1093,7 @@ public static unsafe Vector64 CreateScalar(uint value) return AdvSimd.Insert(Vector64.Zero, 0, value); } - return SoftwareFallback(value); - - static Vector64 SoftwareFallback(uint value) - { - Vector64 result = Vector64.Zero; - Unsafe.WriteUnaligned(ref Unsafe.As, byte>(ref result), value); - return result; - } + return CreateScalar(value); } @@ -1142,55 +1109,45 @@ public static unsafe Vector64 CreateScalar(ulong value) return Create(value); } - return SoftwareFallback(value); - - static Vector64 SoftwareFallback(ulong value) - { - return Unsafe.As>(ref value); - } + return CreateScalar(value); } - /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. + /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. + /// The type of the elements in the vector. /// The value that element 0 will be initialized to. - /// A new instance with the first element initialized to and the remaining elements left uninitialized. + /// A new instance with the first element initialized to and the remaining elements left uninitialized. + /// The type of the elements in the vector () is not supported. [Intrinsic] - public static unsafe Vector64 CreateScalarUnsafe(byte value) + internal static unsafe Vector64 CreateScalarUnsafe(T value) + where T : struct { // This relies on us stripping the "init" flag from the ".locals" // declaration to let the upper bits be uninitialized. - byte* pResult = stackalloc byte[8]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); + ThrowHelper.ThrowForUnsupportedIntrinsicsVector64BaseType(); + Unsafe.SkipInit(out Vector64 result); + + result.SetElementUnsafe(0, value); + return result; } + /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. + /// The value that element 0 will be initialized to. + /// A new instance with the first element initialized to and the remaining elements left uninitialized. + [Intrinsic] + public static unsafe Vector64 CreateScalarUnsafe(byte value) => CreateScalarUnsafe(value); + /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector64 CreateScalarUnsafe(short value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - short* pResult = stackalloc short[4]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector64 CreateScalarUnsafe(short value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector64 CreateScalarUnsafe(int value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - int* pResult = stackalloc int[2]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector64 CreateScalarUnsafe(int value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. @@ -1199,9 +1156,9 @@ public static unsafe Vector64 CreateScalarUnsafe(int value) public static unsafe Vector64 CreateScalarUnsafe(nint value) { #if TARGET_64BIT - return Create((long)value).AsNInt(); + return Create((long)(value)).AsNInt(); #else - return CreateScalarUnsafe((int)value).AsNInt(); + return CreateScalarUnsafe((int)(value)).AsNInt(); #endif } @@ -1213,9 +1170,9 @@ public static unsafe Vector64 CreateScalarUnsafe(nint value) public static unsafe Vector64 CreateScalarUnsafe(nuint value) { #if TARGET_64BIT - return Create((ulong)value).AsNUInt(); + return Create((ulong)(value)).AsNUInt(); #else - return CreateScalarUnsafe((uint)value).AsNUInt(); + return CreateScalarUnsafe((uint)(value)).AsNUInt(); #endif } @@ -1224,59 +1181,27 @@ public static unsafe Vector64 CreateScalarUnsafe(nuint value) /// A new instance with the first element initialized to and the remaining elements left uninitialized. [CLSCompliant(false)] [Intrinsic] - public static unsafe Vector64 CreateScalarUnsafe(sbyte value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - sbyte* pResult = stackalloc sbyte[8]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector64 CreateScalarUnsafe(sbyte value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [Intrinsic] - public static unsafe Vector64 CreateScalarUnsafe(float value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - float* pResult = stackalloc float[2]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector64 CreateScalarUnsafe(float value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [CLSCompliant(false)] [Intrinsic] - public static unsafe Vector64 CreateScalarUnsafe(ushort value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - ushort* pResult = stackalloc ushort[4]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector64 CreateScalarUnsafe(ushort value) => CreateScalarUnsafe(value); /// Creates a new instance with the first element initialized to the specified value and the remaining elements left uninitialized. /// The value that element 0 will be initialized to. /// A new instance with the first element initialized to and the remaining elements left uninitialized. [CLSCompliant(false)] [Intrinsic] - public static unsafe Vector64 CreateScalarUnsafe(uint value) - { - // This relies on us stripping the "init" flag from the ".locals" - // declaration to let the upper bits be uninitialized. - - uint* pResult = stackalloc uint[2]; - pResult[0] = value; - return Unsafe.AsRef>(pResult); - } + public static unsafe Vector64 CreateScalarUnsafe(uint value) => CreateScalarUnsafe(value); /// Divides two vectors to compute their quotient. /// The vector that will be divided by . diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector64_1.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector64_1.cs index c3419fb89ba74..9b6f77265559e 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector64_1.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector64_1.cs @@ -15,7 +15,7 @@ namespace System.Runtime.Intrinsics [DebuggerDisplay("{DisplayString,nq}")] [DebuggerTypeProxy(typeof(Vector64DebugView<>))] [StructLayout(LayoutKind.Sequential, Size = Vector64.Size)] - public readonly struct Vector64 : IEquatable> + public readonly struct Vector64 : ISimdVector, T> where T : struct { // These fields exist to ensure the alignment is 8, rather than 1. @@ -73,6 +73,9 @@ public static Vector64 Zero } } + /// + static bool ISimdVector, T>.IsHardwareAccelerated => Vector64.IsHardwareAccelerated; + internal unsafe string DisplayString { get @@ -368,5 +371,92 @@ private string ToString([StringSyntax(StringSyntaxAttribute.NumericFormat)] stri return sb.ToString(); } + + /// + static Vector64 ISimdVector, T>.Abs(Vector64 vector) => Vector64.Abs(vector); + + /// + static Vector64 ISimdVector, T>.ConditionalSelect(Vector64 condition, Vector64 left, Vector64 right) => Vector64.ConditionalSelect(condition, left, right); + + /// + static Vector64 ISimdVector, T>.Create(T value) => Vector64.Create(value); + + /// + static Vector64 ISimdVector, T>.CreateScalar(T value) => Vector64.CreateScalar(value); + + /// + static Vector64 ISimdVector, T>.CreateScalarUnsafe(T value) => Vector64.CreateScalarUnsafe(value); + + /// + static Vector64 ISimdVector, T>.Equals(Vector64 left, Vector64 right) => Vector64.Equals(left, right); + + /// + static bool ISimdVector, T>.EqualsAll(Vector64 left, Vector64 right) => Vector64.EqualsAll(left, right); + + /// + static bool ISimdVector, T>.EqualsAny(Vector64 left, Vector64 right) => Vector64.EqualsAny(left, right); + + /// + static T ISimdVector, T>.GetElement(Vector64 vector, int index) => vector.GetElement(index); + + /// + static Vector64 ISimdVector, T>.GreaterThan(Vector64 left, Vector64 right) => Vector64.GreaterThan(left, right); + + /// + static bool ISimdVector, T>.GreaterThanAll(Vector64 left, Vector64 right) => Vector64.GreaterThanAll(left, right); + + /// + static bool ISimdVector, T>.GreaterThanAny(Vector64 left, Vector64 right) => Vector64.GreaterThanAny(left, right); + + /// + static Vector64 ISimdVector, T>.GreaterThanOrEqual(Vector64 left, Vector64 right) => Vector64.GreaterThanOrEqual(left, right); + + /// + static bool ISimdVector, T>.GreaterThanOrEqualAll(Vector64 left, Vector64 right) => Vector64.GreaterThanOrEqualAll(left, right); + + /// + static bool ISimdVector, T>.GreaterThanOrEqualAny(Vector64 left, Vector64 right) => Vector64.GreaterThanOrEqualAny(left, right); + + /// + static Vector64 ISimdVector, T>.LessThan(Vector64 left, Vector64 right) => Vector64.LessThan(left, right); + + /// + static bool ISimdVector, T>.LessThanAll(Vector64 left, Vector64 right) => Vector64.LessThanAll(left, right); + + /// + static bool ISimdVector, T>.LessThanAny(Vector64 left, Vector64 right) => Vector64.LessThanAny(left, right); + + /// + static Vector64 ISimdVector, T>.LessThanOrEqual(Vector64 left, Vector64 right) => Vector64.LessThanOrEqual(left, right); + + /// + static bool ISimdVector, T>.LessThanOrEqualAll(Vector64 left, Vector64 right) => Vector64.LessThanOrEqualAll(left, right); + + /// + static bool ISimdVector, T>.LessThanOrEqualAny(Vector64 left, Vector64 right) => Vector64.LessThanOrEqualAny(left, right); + + /// + static Vector64 ISimdVector, T>.LoadUnsafe(ref T source) => Vector64.LoadUnsafe(ref source); + + /// + static Vector64 ISimdVector, T>.LoadUnsafe(ref T source, nuint elementOffset) => Vector64.LoadUnsafe(ref source, elementOffset); + + /// + static Vector64 ISimdVector, T>.Max(Vector64 left, Vector64 right) => Vector64.Max(left, right); + + /// + static Vector64 ISimdVector, T>.Min(Vector64 left, Vector64 right) => Vector64.Min(left, right); + + /// + static void ISimdVector, T>.StoreUnsafe(Vector64 vector, ref T destination) => vector.StoreUnsafe(ref destination); + + /// + static void ISimdVector, T>.StoreUnsafe(Vector64 vector, ref T destination, nuint elementOffset) => vector.StoreUnsafe(ref destination, elementOffset); + + /// + static T ISimdVector, T>.ToScalar(Vector64 vector) => vector.ToScalar(); + + /// + static Vector64 ISimdVector, T>.WithElement(Vector64 vector, int index, T value) => vector.WithElement(index, value); } } diff --git a/src/libraries/System.Private.CoreLib/src/System/SpanHelpers.T.cs b/src/libraries/System.Private.CoreLib/src/System/SpanHelpers.T.cs index 5a4f52b4e679c..b1b12bb532408 100644 --- a/src/libraries/System.Private.CoreLib/src/System/SpanHelpers.T.cs +++ b/src/libraries/System.Private.CoreLib/src/System/SpanHelpers.T.cs @@ -2159,66 +2159,54 @@ private static int LastIndexOfValueType(ref TValue searchSpace offset -= 1; } + + return -1; } else if (Vector256.IsHardwareAccelerated && length >= Vector256.Count) { - Vector256 equals, values = Vector256.Create(value); - nint offset = length - Vector256.Count; - - // Loop until either we've finished all elements -or- there's one or less than a vector's-worth remaining. - while (offset > 0) - { - equals = TNegator.NegateIfNeeded(Vector256.Equals(values, Vector256.LoadUnsafe(ref searchSpace, (nuint)(offset)))); - - if (equals == Vector256.Zero) - { - offset -= Vector256.Count; - continue; - } - - return ComputeLastIndex(offset, equals); - } - - // Process the first vector in the search space. - - equals = TNegator.NegateIfNeeded(Vector256.Equals(values, Vector256.LoadUnsafe(ref searchSpace))); - - if (equals != Vector256.Zero) - { - return ComputeLastIndex(offset: 0, equals); - } + return SimdImpl>(ref searchSpace, value, length); } else { - Vector128 equals, values = Vector128.Create(value); - nint offset = length - Vector128.Count; + return SimdImpl>(ref searchSpace, value, length); + } + + [MethodImpl(MethodImplOptions.AggressiveOptimization)] + static int SimdImpl(ref TValue searchSpace, TValue value, int length) + where TVector : unmanaged, ISimdVector + { + Debug.Assert(TVector.IsHardwareAccelerated && TVector.IsSupported); + + TVector equals; + TVector values = TVector.Create(value); + nint offset = length - TVector.Count; // Loop until either we've finished all elements -or- there's one or less than a vector's-worth remaining. while (offset > 0) { - equals = TNegator.NegateIfNeeded(Vector128.Equals(values, Vector128.LoadUnsafe(ref searchSpace, (nuint)(offset)))); + equals = TNegator.NegateIfNeeded(TVector.Equals(values, TVector.LoadUnsafe(ref searchSpace, (nuint)(offset)))); - if (equals == Vector128.Zero) + if (equals == TVector.Zero) { - offset -= Vector128.Count; + offset -= TVector.Count; continue; } - return ComputeLastIndex(offset, equals); + return ComputeLastIndex(offset, equals); } // Process the first vector in the search space. - equals = TNegator.NegateIfNeeded(Vector128.Equals(values, Vector128.LoadUnsafe(ref searchSpace))); + equals = TNegator.NegateIfNeeded(TVector.Equals(values, TVector.LoadUnsafe(ref searchSpace))); - if (equals != Vector128.Zero) + if (equals != TVector.Zero) { - return ComputeLastIndex(offset: 0, equals); + return ComputeLastIndex(offset: 0, equals); } - } - return -1; + return -1; + } } #if !MONO @@ -2298,68 +2286,58 @@ private static int LastIndexOfAnyValueType(ref TValue searchSp offset -= 1; } + + return -1; } else if (Vector256.IsHardwareAccelerated && length >= Vector256.Count) { - Vector256 equals, current, values0 = Vector256.Create(value0), values1 = Vector256.Create(value1); - nint offset = length - Vector256.Count; - - // Loop until either we've finished all elements or there's less than a vector's-worth remaining. - while (offset > 0) - { - current = Vector256.LoadUnsafe(ref searchSpace, (nuint)(offset)); - equals = TNegator.NegateIfNeeded(Vector256.Equals(current, values0) | Vector256.Equals(current, values1)); + return SimdImpl>(ref searchSpace, value0, value1, length); + } + else + { + return SimdImpl>(ref searchSpace, value0, value1, length); + } - if (equals == Vector256.Zero) - { - offset -= Vector256.Count; - continue; - } + [MethodImpl(MethodImplOptions.AggressiveOptimization)] + static int SimdImpl(ref TValue searchSpace, TValue value0, TValue value1, int length) + where TVector : unmanaged, ISimdVector + { + Debug.Assert(TVector.IsHardwareAccelerated && TVector.IsSupported); - return ComputeLastIndex(offset, equals); - } + TVector equals; + TVector current; - // Process the first vector in the search space. + TVector values0 = TVector.Create(value0); + TVector values1 = TVector.Create(value1); - current = Vector256.LoadUnsafe(ref searchSpace); - equals = TNegator.NegateIfNeeded(Vector256.Equals(current, values0) | Vector256.Equals(current, values1)); - - if (equals != Vector256.Zero) - { - return ComputeLastIndex(offset: 0, equals); - } - } - else - { - Vector128 equals, current, values0 = Vector128.Create(value0), values1 = Vector128.Create(value1); - nint offset = length - Vector128.Count; + nint offset = length - TVector.Count; // Loop until either we've finished all elements or there's less than a vector's-worth remaining. while (offset > 0) { - current = Vector128.LoadUnsafe(ref searchSpace, (nuint)(offset)); - equals = TNegator.NegateIfNeeded(Vector128.Equals(current, values0) | Vector128.Equals(current, values1)); - if (equals == Vector128.Zero) + current = TVector.LoadUnsafe(ref searchSpace, (nuint)(offset)); + equals = TNegator.NegateIfNeeded(TVector.Equals(current, values0) | TVector.Equals(current, values1)); + if (equals == TVector.Zero) { - offset -= Vector128.Count; + offset -= TVector.Count; continue; } - return ComputeLastIndex(offset, equals); + return ComputeLastIndex(offset, equals); } // Process the first vector in the search space. - current = Vector128.LoadUnsafe(ref searchSpace); - equals = TNegator.NegateIfNeeded(Vector128.Equals(current, values0) | Vector128.Equals(current, values1)); + current = TVector.LoadUnsafe(ref searchSpace); + equals = TNegator.NegateIfNeeded(TVector.Equals(current, values0) | TVector.Equals(current, values1)); - if (equals != Vector128.Zero) + if (equals != TVector.Zero) { - return ComputeLastIndex(offset: 0, equals); + return ComputeLastIndex(offset: 0, equals); } - } - return -1; + return -1; + } } #if !MONO @@ -2439,69 +2417,60 @@ private static int LastIndexOfAnyValueType(ref TValue searchSp offset -= 1; } + + return -1; } else if (Vector256.IsHardwareAccelerated && length >= Vector256.Count) { - Vector256 equals, current, values0 = Vector256.Create(value0), values1 = Vector256.Create(value1), values2 = Vector256.Create(value2); - nint offset = length - Vector256.Count; - - // Loop until either we've finished all elements or there's less than a vector's-worth remaining. - while (offset > 0) - { - current = Vector256.LoadUnsafe(ref searchSpace, (nuint)(offset)); - equals = TNegator.NegateIfNeeded(Vector256.Equals(current, values0) | Vector256.Equals(current, values1) | Vector256.Equals(current, values2)); + return SimdImpl>(ref searchSpace, value0, value1, value2, length); + } + else + { + return SimdImpl>(ref searchSpace, value0, value1, value2, length); + } - if (equals == Vector256.Zero) - { - offset -= Vector256.Count; - continue; - } + [MethodImpl(MethodImplOptions.AggressiveOptimization)] + static int SimdImpl(ref TValue searchSpace, TValue value0, TValue value1, TValue value2, int length) + where TVector : unmanaged, ISimdVector + { + Debug.Assert(TVector.IsHardwareAccelerated && TVector.IsSupported); - return ComputeLastIndex(offset, equals); - } + TVector equals; + TVector current; - // Process the first vector in the search space. + TVector values0 = TVector.Create(value0); + TVector values1 = TVector.Create(value1); + TVector values2 = TVector.Create(value2); - current = Vector256.LoadUnsafe(ref searchSpace); - equals = TNegator.NegateIfNeeded(Vector256.Equals(current, values0) | Vector256.Equals(current, values1) | Vector256.Equals(current, values2)); - - if (equals != Vector256.Zero) - { - return ComputeLastIndex(offset: 0, equals); - } - } - else - { - Vector128 equals, current, values0 = Vector128.Create(value0), values1 = Vector128.Create(value1), values2 = Vector128.Create(value2); - nint offset = length - Vector128.Count; + nint offset = length - TVector.Count; // Loop until either we've finished all elements or there's less than a vector's-worth remaining. while (offset > 0) { - current = Vector128.LoadUnsafe(ref searchSpace, (nuint)(offset)); - equals = TNegator.NegateIfNeeded(Vector128.Equals(current, values0) | Vector128.Equals(current, values1) | Vector128.Equals(current, values2)); + current = TVector.LoadUnsafe(ref searchSpace, (nuint)(offset)); + equals = TNegator.NegateIfNeeded(TVector.Equals(current, values0) | TVector.Equals(current, values1) | TVector.Equals(current, values2)); - if (equals == Vector128.Zero) + if (equals == TVector.Zero) { - offset -= Vector128.Count; + offset -= TVector.Count; continue; } - return ComputeLastIndex(offset, equals); + return ComputeLastIndex(offset, equals); } // Process the first vector in the search space. - current = Vector128.LoadUnsafe(ref searchSpace); - equals = TNegator.NegateIfNeeded(Vector128.Equals(current, values0) | Vector128.Equals(current, values1) | Vector128.Equals(current, values2)); + current = TVector.LoadUnsafe(ref searchSpace); + equals = TNegator.NegateIfNeeded(TVector.Equals(current, values0) | TVector.Equals(current, values1) | TVector.Equals(current, values2)); - if (equals != Vector128.Zero) + if (equals != TVector.Zero) { - return ComputeLastIndex(offset: 0, equals); + return ComputeLastIndex(offset: 0, equals); } - } - return -1; + return -1; + } } #if !MONO @@ -2553,69 +2522,61 @@ private static int LastIndexOfAnyValueType(ref TValue searchSp offset -= 1; } + + return -1; } else if (Vector256.IsHardwareAccelerated && length >= Vector256.Count) { - Vector256 equals, current, values0 = Vector256.Create(value0), values1 = Vector256.Create(value1), values2 = Vector256.Create(value2), values3 = Vector256.Create(value3); - nint offset = length - Vector256.Count; - - // Loop until either we've finished all elements or there's less than a vector's-worth remaining. - while (offset > 0) - { - current = Vector256.LoadUnsafe(ref searchSpace, (nuint)(offset)); - equals = TNegator.NegateIfNeeded(Vector256.Equals(current, values0) | Vector256.Equals(current, values1) - | Vector256.Equals(current, values2) | Vector256.Equals(current, values3)); - if (equals == Vector256.Zero) - { - offset -= Vector256.Count; - continue; - } + return SimdImpl>(ref searchSpace, value0, value1, value2, value3, length); + } + else + { + return SimdImpl>(ref searchSpace, value0, value1, value2, value3, length); + } - return ComputeLastIndex(offset, equals); - } + [MethodImpl(MethodImplOptions.AggressiveOptimization)] + static int SimdImpl(ref TValue searchSpace, TValue value0, TValue value1, TValue value2, TValue value3, int length) + where TVector : unmanaged, ISimdVector + { + Debug.Assert(TVector.IsHardwareAccelerated && TVector.IsSupported); - // Process the first vector in the search space. + TVector equals; + TVector current; - current = Vector256.LoadUnsafe(ref searchSpace); - equals = TNegator.NegateIfNeeded(Vector256.Equals(current, values0) | Vector256.Equals(current, values1) | Vector256.Equals(current, values2) | Vector256.Equals(current, values3)); + TVector values0 = TVector.Create(value0); + TVector values1 = TVector.Create(value1); + TVector values2 = TVector.Create(value2); + TVector values3 = TVector.Create(value3); - if (equals != Vector256.Zero) - { - return ComputeLastIndex(offset: 0, equals); - } - } - else - { - Vector128 equals, current, values0 = Vector128.Create(value0), values1 = Vector128.Create(value1), values2 = Vector128.Create(value2), values3 = Vector128.Create(value3); - nint offset = length - Vector128.Count; + nint offset = length - TVector.Count; // Loop until either we've finished all elements or there's less than a vector's-worth remaining. while (offset > 0) { - current = Vector128.LoadUnsafe(ref searchSpace, (nuint)(offset)); - equals = TNegator.NegateIfNeeded(Vector128.Equals(current, values0) | Vector128.Equals(current, values1) | Vector128.Equals(current, values2) | Vector128.Equals(current, values3)); + current = TVector.LoadUnsafe(ref searchSpace, (nuint)(offset)); + equals = TNegator.NegateIfNeeded(TVector.Equals(current, values0) | TVector.Equals(current, values1) | TVector.Equals(current, values2) | TVector.Equals(current, values3)); - if (equals == Vector128.Zero) + if (equals == TVector.Zero) { - offset -= Vector128.Count; + offset -= TVector.Count; continue; } - return ComputeLastIndex(offset, equals); + return ComputeLastIndex(offset, equals); } // Process the first vector in the search space. - current = Vector128.LoadUnsafe(ref searchSpace); - equals = TNegator.NegateIfNeeded(Vector128.Equals(current, values0) | Vector128.Equals(current, values1) | Vector128.Equals(current, values2) | Vector128.Equals(current, values3)); + current = TVector.LoadUnsafe(ref searchSpace); + equals = TNegator.NegateIfNeeded(TVector.Equals(current, values0) | TVector.Equals(current, values1) | TVector.Equals(current, values2) | TVector.Equals(current, values3)); - if (equals != Vector128.Zero) + if (equals != TVector.Zero) { - return ComputeLastIndex(offset: 0, equals); + return ComputeLastIndex(offset: 0, equals); } - } - return -1; + return -1; + } } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -2635,40 +2596,51 @@ private static int ComputeFirstIndex(ref T searchSpace, ref T current, Vector } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static int ComputeLastIndex(nint offset, Vector128 equals) where T : struct - { - uint notEqualsElements = equals.ExtractMostSignificantBits(); - int index = 31 - BitOperations.LeadingZeroCount(notEqualsElements); // 31 = 32 (bits in Int32) - 1 (indexing from zero) - return (int)offset + index; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static int ComputeLastIndex(nint offset, Vector256 equals) where T : struct + private static int ComputeLastIndex(nint offset, TVector equals) + where TVector : unmanaged, ISimdVector + where T : struct { - uint notEqualsElements = equals.ExtractMostSignificantBits(); - int index = 31 - BitOperations.LeadingZeroCount(notEqualsElements); // 31 = 32 (bits in Int32) - 1 (indexing from zero) - return (int)offset + index; + if (typeof(T) == typeof(Vector128)) + { + uint notEqualsElements = ((Vector128)(object)(equals)).ExtractMostSignificantBits(); + int index = 31 - BitOperations.LeadingZeroCount(notEqualsElements); // 31 = 32 (bits in Int32) - 1 (indexing from zero) + return (int)offset + index; + } + else if (typeof(T) == typeof(Vector256)) + { + uint notEqualsElements = ((Vector256)(object)(equals)).ExtractMostSignificantBits(); + int index = 31 - BitOperations.LeadingZeroCount(notEqualsElements); // 31 = 32 (bits in Int32) - 1 (indexing from zero) + return (int)offset + index; + } + else + { + ThrowHelper.ThrowUnreachableException(); + return default; + } } - private interface INegator where T : struct + private interface INegator + where T : struct { static abstract bool NegateIfNeeded(bool equals); - static abstract Vector128 NegateIfNeeded(Vector128 equals); - static abstract Vector256 NegateIfNeeded(Vector256 equals); + static abstract TVector NegateIfNeeded(TVector equals) + where TVector : unmanaged, ISimdVector; } - private readonly struct DontNegate : INegator where T : struct + private readonly struct DontNegate : INegator + where T : struct { public static bool NegateIfNeeded(bool equals) => equals; - public static Vector128 NegateIfNeeded(Vector128 equals) => equals; - public static Vector256 NegateIfNeeded(Vector256 equals) => equals; + public static TVector NegateIfNeeded(TVector equals) + where TVector : unmanaged, ISimdVector => equals; } - private readonly struct Negate : INegator where T : struct + private readonly struct Negate : INegator + where T : struct { public static bool NegateIfNeeded(bool equals) => !equals; - public static Vector128 NegateIfNeeded(Vector128 equals) => ~equals; - public static Vector256 NegateIfNeeded(Vector256 equals) => ~equals; + public static TVector NegateIfNeeded(TVector equals) + where TVector : unmanaged, ISimdVector => ~equals; } } } diff --git a/src/libraries/System.Private.CoreLib/src/System/ThrowHelper.cs b/src/libraries/System.Private.CoreLib/src/System/ThrowHelper.cs index 19f10acb6a5af..9a1262cc4ee27 100644 --- a/src/libraries/System.Private.CoreLib/src/System/ThrowHelper.cs +++ b/src/libraries/System.Private.CoreLib/src/System/ThrowHelper.cs @@ -56,6 +56,12 @@ internal static void ThrowArrayTypeMismatchException() throw new ArrayTypeMismatchException(); } + [DoesNotReturn] + internal static void ThrowUnreachableException() + { + throw new UnreachableException(); + } + [DoesNotReturn] internal static void ThrowInvalidTypeWithPointersNotSupported(Type targetType) { diff --git a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs index f6a264e1d089f..052c0cfa424b0 100644 --- a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs +++ b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs @@ -6,137 +6,193 @@ namespace System.Runtime.Intrinsics { + internal partial interface ISimdVector : System.IEquatable, System.Numerics.IAdditionOperators, System.Numerics.IBitwiseOperators, System.Numerics.IDivisionOperators, System.Numerics.IEqualityOperators, System.Numerics.IMultiplyOperators, System.Numerics.ISubtractionOperators, System.Numerics.IUnaryNegationOperators, System.Numerics.IUnaryPlusOperators where TSelf : unmanaged, System.Runtime.Intrinsics.ISimdVector where T : struct + { + static abstract TSelf AllBitsSet { get; } + static abstract int Count { get; } + static abstract bool IsHardwareAccelerated { get; } + static abstract bool IsSupported { get; } + T this[int index] { get; } + static abstract TSelf Zero { get; } + static abstract TSelf Abs(TSelf vector); + static abstract TSelf ConditionalSelect(TSelf condition, TSelf left, TSelf right); + static virtual void CopyTo(TSelf vector, System.Span destination) { } + static virtual void CopyTo(TSelf vector, T[] destination) { } + static virtual void CopyTo(TSelf vector, T[] destination, int startIndex) { } + static virtual TSelf Create(System.ReadOnlySpan values) { throw null; } + static abstract TSelf Create(T value); + static virtual TSelf Create(T[] values) { throw null; } + static virtual TSelf Create(T[] values, int index) { throw null; } + static abstract TSelf CreateScalar(T value); + static abstract TSelf CreateScalarUnsafe(T value); + static abstract TSelf Equals(TSelf left, TSelf right); + static abstract bool EqualsAll(TSelf left, TSelf right); + static abstract bool EqualsAny(TSelf left, TSelf right); + static abstract T GetElement(TSelf vector, int index); + static abstract TSelf GreaterThan(TSelf left, TSelf right); + static abstract bool GreaterThanAll(TSelf left, TSelf right); + static abstract bool GreaterThanAny(TSelf left, TSelf right); + static abstract TSelf GreaterThanOrEqual(TSelf left, TSelf right); + static abstract bool GreaterThanOrEqualAll(TSelf left, TSelf right); + static abstract bool GreaterThanOrEqualAny(TSelf left, TSelf right); + static abstract TSelf LessThan(TSelf left, TSelf right); + static abstract bool LessThanAll(TSelf left, TSelf right); + static abstract bool LessThanAny(TSelf left, TSelf right); + static abstract TSelf LessThanOrEqual(TSelf left, TSelf right); + static abstract bool LessThanOrEqualAll(TSelf left, TSelf right); + static abstract bool LessThanOrEqualAny(TSelf left, TSelf right); + static abstract TSelf LoadUnsafe(ref T source); + static abstract TSelf LoadUnsafe(ref T source, nuint elementOffset); + static abstract TSelf Max(TSelf left, TSelf right); + static abstract TSelf Min(TSelf left, TSelf right); + static abstract void StoreUnsafe(TSelf vector, ref T destination); + static abstract void StoreUnsafe(TSelf vector, ref T destination, nuint elementOffset); + static abstract T ToScalar(TSelf vector); + static virtual bool TryCopyTo(TSelf vector, System.Span destination) { throw null; } + static abstract TSelf WithElement(TSelf vector, int index, T value); + } + internal static partial class SimdVectorExtensions + { + public static void CopyTo(this TVector vector, System.Span destination) where TVector : unmanaged, System.Runtime.Intrinsics.ISimdVector where T : struct { } + public static void CopyTo(this TVector vector, T[] destination) where TVector : unmanaged, System.Runtime.Intrinsics.ISimdVector where T : struct { } + public static void CopyTo(this TVector vector, T[] destination, int startIndex) where TVector : unmanaged, System.Runtime.Intrinsics.ISimdVector where T : struct { } + public static void StoreUnsafe(this TVector vector, ref T destination) where TVector : unmanaged, System.Runtime.Intrinsics.ISimdVector where T : struct { } + public static void StoreUnsafe(this TVector vector, ref T destination, nuint elementOffset) where TVector : unmanaged, System.Runtime.Intrinsics.ISimdVector where T : struct { } + public static T ToScalar(this TVector vector) where TVector : unmanaged, System.Runtime.Intrinsics.ISimdVector where T : struct { throw null; } + public static bool TryCopyTo(this TVector vector, System.Span destination) where TVector : unmanaged, System.Runtime.Intrinsics.ISimdVector where T : struct { throw null; } + public static TVector WithElement(this TVector vector, int index, T value) where TVector : unmanaged, System.Runtime.Intrinsics.ISimdVector where T : struct { throw null; } + } public static partial class Vector128 { public static bool IsHardwareAccelerated { get { throw null; } } public static System.Runtime.Intrinsics.Vector128 Abs(System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 Add(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 AndNot(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 AsByte(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 AsDouble(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 AsInt16(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 AsInt32(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 AsInt64(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsByte(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsDouble(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsInt16(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsInt32(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsInt64(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 AsNInt(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector128 AsNUInt(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 AsSByte(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 AsSingle(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsSByte(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsSingle(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 AsUInt16(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsUInt16(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 AsUInt32(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsUInt32(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 AsUInt64(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 AsVector128(this System.Numerics.Vector2 value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 AsVector128(this System.Numerics.Vector3 value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 AsVector128(this System.Numerics.Vector4 value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsUInt64(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsVector128(this System.Numerics.Vector2 value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsVector128(this System.Numerics.Vector3 value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 AsVector128(this System.Numerics.Vector4 value) { throw null; } public static System.Runtime.Intrinsics.Vector128 AsVector128(this System.Numerics.Vector value) where T : struct { throw null; } - public static System.Numerics.Vector2 AsVector2(this System.Runtime.Intrinsics.Vector128 value) { throw null; } - public static System.Numerics.Vector3 AsVector3(this System.Runtime.Intrinsics.Vector128 value) { throw null; } - public static System.Numerics.Vector4 AsVector4(this System.Runtime.Intrinsics.Vector128 value) { throw null; } + public static System.Numerics.Vector2 AsVector2(this System.Runtime.Intrinsics.Vector128 value) { throw null; } + public static System.Numerics.Vector3 AsVector3(this System.Runtime.Intrinsics.Vector128 value) { throw null; } + public static System.Numerics.Vector4 AsVector4(this System.Runtime.Intrinsics.Vector128 value) { throw null; } public static System.Numerics.Vector AsVector(this System.Runtime.Intrinsics.Vector128 value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 As(this System.Runtime.Intrinsics.Vector128 vector) where TFrom : struct where TTo : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 BitwiseAnd(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 BitwiseOr(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 Ceiling(System.Runtime.Intrinsics.Vector128 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Ceiling(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Ceiling(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Ceiling(System.Runtime.Intrinsics.Vector128 vector) { throw null; } public static System.Runtime.Intrinsics.Vector128 ConditionalSelect(System.Runtime.Intrinsics.Vector128 condition, System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 ConvertToDouble(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ConvertToDouble(System.Runtime.Intrinsics.Vector128 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ConvertToDouble(System.Runtime.Intrinsics.Vector128 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ConvertToInt32(System.Runtime.Intrinsics.Vector128 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ConvertToInt64(System.Runtime.Intrinsics.Vector128 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ConvertToSingle(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ConvertToDouble(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ConvertToInt32(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ConvertToInt64(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ConvertToSingle(System.Runtime.Intrinsics.Vector128 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ConvertToSingle(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ConvertToSingle(System.Runtime.Intrinsics.Vector128 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ConvertToUInt32(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ConvertToUInt32(System.Runtime.Intrinsics.Vector128 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ConvertToUInt64(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ConvertToUInt64(System.Runtime.Intrinsics.Vector128 vector) { throw null; } public static void CopyTo(this System.Runtime.Intrinsics.Vector128 vector, System.Span destination) where T : struct { } public static void CopyTo(this System.Runtime.Intrinsics.Vector128 vector, T[] destination) where T : struct { } public static void CopyTo(this System.Runtime.Intrinsics.Vector128 vector, T[] destination, int startIndex) where T : struct { } - public static System.Runtime.Intrinsics.Vector128 Create(byte value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(byte e0, byte e1, byte e2, byte e3, byte e4, byte e5, byte e6, byte e7, byte e8, byte e9, byte e10, byte e11, byte e12, byte e13, byte e14, byte e15) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(double value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(double e0, double e1) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(short value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(short e0, short e1, short e2, short e3, short e4, short e5, short e6, short e7) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(int value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(int e0, int e1, int e2, int e3) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(long value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(long e0, long e1) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(byte value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(byte e0, byte e1, byte e2, byte e3, byte e4, byte e5, byte e6, byte e7, byte e8, byte e9, byte e10, byte e11, byte e12, byte e13, byte e14, byte e15) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(double value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(double e0, double e1) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(short value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(short e0, short e1, short e2, short e3, short e4, short e5, short e6, short e7) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(int value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(int e0, int e1, int e2, int e3) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(long value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(long e0, long e1) { throw null; } public static System.Runtime.Intrinsics.Vector128 Create(nint value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(nuint value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(sbyte value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(sbyte value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(sbyte e0, sbyte e1, sbyte e2, sbyte e3, sbyte e4, sbyte e5, sbyte e6, sbyte e7, sbyte e8, sbyte e9, sbyte e10, sbyte e11, sbyte e12, sbyte e13, sbyte e14, sbyte e15) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(float value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(float e0, float e1, float e2, float e3) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(sbyte e0, sbyte e1, sbyte e2, sbyte e3, sbyte e4, sbyte e5, sbyte e6, sbyte e7, sbyte e8, sbyte e9, sbyte e10, sbyte e11, sbyte e12, sbyte e13, sbyte e14, sbyte e15) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(float value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Create(float e0, float e1, float e2, float e3) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(ushort value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(ushort value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(ushort e0, ushort e1, ushort e2, ushort e3, ushort e4, ushort e5, ushort e6, ushort e7) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(ushort e0, ushort e1, ushort e2, ushort e3, ushort e4, ushort e5, ushort e6, ushort e7) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(uint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(uint value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(uint e0, uint e1, uint e2, uint e3) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(uint e0, uint e1, uint e2, uint e3) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(ulong value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(ulong value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(ulong e0, ulong e1) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Create(ulong e0, ulong e1) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalar(byte value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalar(double value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalar(short value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalar(int value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalar(long value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Create(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalar(byte value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalar(double value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalar(short value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalar(int value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalar(long value) { throw null; } public static System.Runtime.Intrinsics.Vector128 CreateScalar(nint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 CreateScalar(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalar(sbyte value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalar(float value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 CreateScalar(sbyte value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalar(float value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalar(ushort value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 CreateScalar(ushort value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalar(uint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 CreateScalar(uint value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalar(ulong value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 CreateScalar(ulong value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(byte value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(double value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(short value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(int value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(long value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalar(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(byte value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(double value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(short value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(int value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(long value) { throw null; } public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(nint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(sbyte value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(float value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(sbyte value) { throw null; } - public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(float value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(ushort value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(ushort value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(uint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(uint value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(ulong value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(ulong value) { throw null; } + public static System.Runtime.Intrinsics.Vector128 CreateScalarUnsafe(nuint value) { throw null; } public static System.Runtime.Intrinsics.Vector128 Create(System.ReadOnlySpan values) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 Create(T value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 Create(T[] values) where T : struct { throw null; } @@ -148,8 +204,8 @@ public static void CopyTo(this System.Runtime.Intrinsics.Vector128 vector, public static System.Runtime.Intrinsics.Vector128 Equals(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] public static uint ExtractMostSignificantBits(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 Floor(System.Runtime.Intrinsics.Vector128 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Floor(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Floor(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Floor(System.Runtime.Intrinsics.Vector128 vector) { throw null; } public static T GetElement(this System.Runtime.Intrinsics.Vector128 vector, int index) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 GetLower(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 GetUpper(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } @@ -166,92 +222,92 @@ public static void CopyTo(this System.Runtime.Intrinsics.Vector128 vector, public static System.Runtime.Intrinsics.Vector128 LessThanOrEqual(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 LessThan(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static unsafe System.Runtime.Intrinsics.Vector128 Load(T* source) where T : unmanaged { throw null; } + public unsafe static System.Runtime.Intrinsics.Vector128 LoadAlignedNonTemporal(T* source) where T : unmanaged { throw null; } [System.CLSCompliantAttribute(false)] - public static unsafe System.Runtime.Intrinsics.Vector128 LoadAligned(T* source) where T : unmanaged { throw null; } - [System.CLSCompliantAttribute(false)] - public static unsafe System.Runtime.Intrinsics.Vector128 LoadAlignedNonTemporal(T* source) where T : unmanaged { throw null; } + public unsafe static System.Runtime.Intrinsics.Vector128 LoadAligned(T* source) where T : unmanaged { throw null; } public static System.Runtime.Intrinsics.Vector128 LoadUnsafe(ref T source) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector128 LoadUnsafe(ref T source, nuint elementOffset) where T : struct { throw null; } + [System.CLSCompliantAttribute(false)] + public unsafe static System.Runtime.Intrinsics.Vector128 Load(T* source) where T : unmanaged { throw null; } public static System.Runtime.Intrinsics.Vector128 Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 Min(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 Multiply(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 Multiply(System.Runtime.Intrinsics.Vector128 left, T right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 Multiply(T left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Narrow(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } public static System.Runtime.Intrinsics.Vector128 Negate(System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 OnesComplement(System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftLeft(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector128 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector128 ShiftRightLogical(System.Runtime.Intrinsics.Vector128 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector128 Shuffle(System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector128 indices) { throw null; } public static System.Runtime.Intrinsics.Vector128 Sqrt(System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static unsafe void Store(this System.Runtime.Intrinsics.Vector128 source, T* destination) where T : unmanaged { throw null; } + public unsafe static void StoreAlignedNonTemporal(this System.Runtime.Intrinsics.Vector128 source, T* destination) where T : unmanaged { } [System.CLSCompliantAttribute(false)] - public static unsafe void StoreAligned(this System.Runtime.Intrinsics.Vector128 source, T* destination) where T : unmanaged { throw null; } + public unsafe static void StoreAligned(this System.Runtime.Intrinsics.Vector128 source, T* destination) where T : unmanaged { } + public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector128 source, ref T destination) where T : struct { } [System.CLSCompliantAttribute(false)] - public static unsafe void StoreAlignedNonTemporal(this System.Runtime.Intrinsics.Vector128 source, T* destination) where T : unmanaged { throw null; } - public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector128 source, ref T destination) where T : struct { throw null; } + public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector128 source, ref T destination, nuint elementOffset) where T : struct { } [System.CLSCompliantAttribute(false)] - public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector128 source, ref T destination, nuint elementOffset) where T : struct { throw null; } + public unsafe static void Store(this System.Runtime.Intrinsics.Vector128 source, T* destination) where T : unmanaged { } public static System.Runtime.Intrinsics.Vector128 Subtract(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } public static T Sum(System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } public static T ToScalar(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } @@ -259,32 +315,33 @@ public static void CopyTo(this System.Runtime.Intrinsics.Vector128 vector, public static System.Runtime.Intrinsics.Vector256 ToVector256(this System.Runtime.Intrinsics.Vector128 vector) where T : struct { throw null; } public static bool TryCopyTo(this System.Runtime.Intrinsics.Vector128 vector, System.Span destination) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } - public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } - public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } - public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector128 Lower, System.Runtime.Intrinsics.Vector128 Upper) Widen(System.Runtime.Intrinsics.Vector128 source) { throw null; } public static System.Runtime.Intrinsics.Vector128 WithElement(this System.Runtime.Intrinsics.Vector128 vector, int index, T value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 WithLower(this System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector64 value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 WithUpper(this System.Runtime.Intrinsics.Vector128 vector, System.Runtime.Intrinsics.Vector64 value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 Xor(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) where T : struct { throw null; } } - public readonly partial struct Vector128 : System.IEquatable> where T : struct + public readonly partial struct Vector128 : System.IEquatable>, System.Numerics.IAdditionOperators, System.Runtime.Intrinsics.Vector128, System.Runtime.Intrinsics.Vector128>, System.Numerics.IBitwiseOperators, System.Runtime.Intrinsics.Vector128, System.Runtime.Intrinsics.Vector128>, System.Numerics.IDivisionOperators, System.Runtime.Intrinsics.Vector128, System.Runtime.Intrinsics.Vector128>, System.Numerics.IEqualityOperators, System.Runtime.Intrinsics.Vector128, bool>, System.Numerics.IMultiplyOperators, System.Runtime.Intrinsics.Vector128, System.Runtime.Intrinsics.Vector128>, System.Numerics.ISubtractionOperators, System.Runtime.Intrinsics.Vector128, System.Runtime.Intrinsics.Vector128>, System.Numerics.IUnaryNegationOperators, System.Runtime.Intrinsics.Vector128>, System.Numerics.IUnaryPlusOperators, System.Runtime.Intrinsics.Vector128>, System.Runtime.Intrinsics.ISimdVector, T> where T : struct { private readonly int _dummyPrimitive; public static System.Runtime.Intrinsics.Vector128 AllBitsSet { get { throw null; } } - public static bool IsSupported { get { throw null; } } public static int Count { get { throw null; } } + public static bool IsSupported { get { throw null; } } + public T this[int index] { get { throw null; } } + static bool System.Runtime.Intrinsics.ISimdVector,T>.IsHardwareAccelerated { get { throw null; } } public static System.Runtime.Intrinsics.Vector128 Zero { get { throw null; } } public override bool Equals([System.Diagnostics.CodeAnalysis.NotNullWhenAttribute(true)] object? obj) { throw null; } public bool Equals(System.Runtime.Intrinsics.Vector128 other) { throw null; } public override int GetHashCode() { throw null; } - public T this[int index] { get { throw null; } } public static System.Runtime.Intrinsics.Vector128 operator +(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 operator &(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 operator |(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } @@ -299,6 +356,35 @@ public static void CopyTo(this System.Runtime.Intrinsics.Vector128 vector, public static System.Runtime.Intrinsics.Vector128 operator -(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } public static System.Runtime.Intrinsics.Vector128 operator -(System.Runtime.Intrinsics.Vector128 vector) { throw null; } public static System.Runtime.Intrinsics.Vector128 operator +(System.Runtime.Intrinsics.Vector128 value) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.Abs(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.ConditionalSelect(System.Runtime.Intrinsics.Vector128 condition, System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.Create(T value) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.CreateScalar(T value) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.CreateScalarUnsafe(T value) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.Equals(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.EqualsAll(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.EqualsAny(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static T System.Runtime.Intrinsics.ISimdVector, T>.GetElement(System.Runtime.Intrinsics.Vector128 vector, int index) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.GreaterThan(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanAll(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanAny(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanOrEqual(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanOrEqualAll(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanOrEqualAny(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.LessThan(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanAll(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanAny(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.LessThanOrEqual(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanOrEqualAll(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanOrEqualAny(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.LoadUnsafe(ref T source) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.LoadUnsafe(ref T source, nuint elementOffset) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.Max(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.Min(System.Runtime.Intrinsics.Vector128 left, System.Runtime.Intrinsics.Vector128 right) { throw null; } + static void System.Runtime.Intrinsics.ISimdVector, T>.StoreUnsafe(System.Runtime.Intrinsics.Vector128 vector, ref T destination) { } + static void System.Runtime.Intrinsics.ISimdVector, T>.StoreUnsafe(System.Runtime.Intrinsics.Vector128 vector, ref T destination, nuint elementOffset) { } + static T System.Runtime.Intrinsics.ISimdVector, T>.ToScalar(System.Runtime.Intrinsics.Vector128 vector) { throw null; } + static System.Runtime.Intrinsics.Vector128 System.Runtime.Intrinsics.ISimdVector, T>.WithElement(System.Runtime.Intrinsics.Vector128 vector, int index, T value) { throw null; } public override string ToString() { throw null; } } public static partial class Vector256 @@ -307,125 +393,125 @@ public static partial class Vector256 public static System.Runtime.Intrinsics.Vector256 Abs(System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 Add(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 AndNot(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector256 AsByte(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector256 AsDouble(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector256 AsInt16(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector256 AsInt32(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector256 AsInt64(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector256 AsByte(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector256 AsDouble(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector256 AsInt16(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector256 AsInt32(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector256 AsInt64(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 AsNInt(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector256 AsNUInt(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 AsSByte(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector256 AsSingle(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector256 AsSByte(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector256 AsSingle(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 AsUInt16(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector256 AsUInt16(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 AsUInt32(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector256 AsUInt32(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 AsUInt64(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector256 AsUInt64(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 AsVector256(this System.Numerics.Vector value) where T : struct { throw null; } public static System.Numerics.Vector AsVector(this System.Runtime.Intrinsics.Vector256 value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 As(this System.Runtime.Intrinsics.Vector256 vector) where TFrom : struct where TTo : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 BitwiseAnd(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 BitwiseOr(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector256 Ceiling(System.Runtime.Intrinsics.Vector256 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Ceiling(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Ceiling(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Ceiling(System.Runtime.Intrinsics.Vector256 vector) { throw null; } public static System.Runtime.Intrinsics.Vector256 ConditionalSelect(System.Runtime.Intrinsics.Vector256 condition, System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector256 ConvertToDouble(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ConvertToDouble(System.Runtime.Intrinsics.Vector256 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ConvertToDouble(System.Runtime.Intrinsics.Vector256 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ConvertToInt32(System.Runtime.Intrinsics.Vector256 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ConvertToInt64(System.Runtime.Intrinsics.Vector256 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ConvertToSingle(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ConvertToDouble(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ConvertToInt32(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ConvertToInt64(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ConvertToSingle(System.Runtime.Intrinsics.Vector256 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ConvertToSingle(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ConvertToSingle(System.Runtime.Intrinsics.Vector256 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ConvertToUInt32(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ConvertToUInt32(System.Runtime.Intrinsics.Vector256 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ConvertToUInt64(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ConvertToUInt64(System.Runtime.Intrinsics.Vector256 vector) { throw null; } public static void CopyTo(this System.Runtime.Intrinsics.Vector256 vector, System.Span destination) where T : struct { } public static void CopyTo(this System.Runtime.Intrinsics.Vector256 vector, T[] destination) where T : struct { } public static void CopyTo(this System.Runtime.Intrinsics.Vector256 vector, T[] destination, int startIndex) where T : struct { } - public static System.Runtime.Intrinsics.Vector256 Create(byte value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(byte e0, byte e1, byte e2, byte e3, byte e4, byte e5, byte e6, byte e7, byte e8, byte e9, byte e10, byte e11, byte e12, byte e13, byte e14, byte e15, byte e16, byte e17, byte e18, byte e19, byte e20, byte e21, byte e22, byte e23, byte e24, byte e25, byte e26, byte e27, byte e28, byte e29, byte e30, byte e31) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(double value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(double e0, double e1, double e2, double e3) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(short value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(short e0, short e1, short e2, short e3, short e4, short e5, short e6, short e7, short e8, short e9, short e10, short e11, short e12, short e13, short e14, short e15) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(int value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(int e0, int e1, int e2, int e3, int e4, int e5, int e6, int e7) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(long value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(long e0, long e1, long e2, long e3) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(byte value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(byte e0, byte e1, byte e2, byte e3, byte e4, byte e5, byte e6, byte e7, byte e8, byte e9, byte e10, byte e11, byte e12, byte e13, byte e14, byte e15, byte e16, byte e17, byte e18, byte e19, byte e20, byte e21, byte e22, byte e23, byte e24, byte e25, byte e26, byte e27, byte e28, byte e29, byte e30, byte e31) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(double value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(double e0, double e1, double e2, double e3) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(short value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(short e0, short e1, short e2, short e3, short e4, short e5, short e6, short e7, short e8, short e9, short e10, short e11, short e12, short e13, short e14, short e15) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(int value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(int e0, int e1, int e2, int e3, int e4, int e5, int e6, int e7) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(long value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(long e0, long e1, long e2, long e3) { throw null; } public static System.Runtime.Intrinsics.Vector256 Create(nint value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(nuint value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(System.Runtime.Intrinsics.Vector128 lower, System.Runtime.Intrinsics.Vector128 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(sbyte value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(sbyte value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(sbyte e0, sbyte e1, sbyte e2, sbyte e3, sbyte e4, sbyte e5, sbyte e6, sbyte e7, sbyte e8, sbyte e9, sbyte e10, sbyte e11, sbyte e12, sbyte e13, sbyte e14, sbyte e15, sbyte e16, sbyte e17, sbyte e18, sbyte e19, sbyte e20, sbyte e21, sbyte e22, sbyte e23, sbyte e24, sbyte e25, sbyte e26, sbyte e27, sbyte e28, sbyte e29, sbyte e30, sbyte e31) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(float value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(float e0, float e1, float e2, float e3, float e4, float e5, float e6, float e7) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(sbyte e0, sbyte e1, sbyte e2, sbyte e3, sbyte e4, sbyte e5, sbyte e6, sbyte e7, sbyte e8, sbyte e9, sbyte e10, sbyte e11, sbyte e12, sbyte e13, sbyte e14, sbyte e15, sbyte e16, sbyte e17, sbyte e18, sbyte e19, sbyte e20, sbyte e21, sbyte e22, sbyte e23, sbyte e24, sbyte e25, sbyte e26, sbyte e27, sbyte e28, sbyte e29, sbyte e30, sbyte e31) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(float value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Create(float e0, float e1, float e2, float e3, float e4, float e5, float e6, float e7) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(ushort value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(ushort value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(ushort e0, ushort e1, ushort e2, ushort e3, ushort e4, ushort e5, ushort e6, ushort e7, ushort e8, ushort e9, ushort e10, ushort e11, ushort e12, ushort e13, ushort e14, ushort e15) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(ushort e0, ushort e1, ushort e2, ushort e3, ushort e4, ushort e5, ushort e6, ushort e7, ushort e8, ushort e9, ushort e10, ushort e11, ushort e12, ushort e13, ushort e14, ushort e15) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(uint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(uint value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(uint e0, uint e1, uint e2, uint e3, uint e4, uint e5, uint e6, uint e7) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(uint e0, uint e1, uint e2, uint e3, uint e4, uint e5, uint e6, uint e7) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(ulong value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(ulong value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(ulong e0, ulong e1, ulong e2, ulong e3) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Create(ulong e0, ulong e1, ulong e2, ulong e3) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalar(byte value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalar(double value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalar(short value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalar(int value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalar(long value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Create(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalar(byte value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalar(double value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalar(short value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalar(int value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalar(long value) { throw null; } public static System.Runtime.Intrinsics.Vector256 CreateScalar(nint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 CreateScalar(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalar(sbyte value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalar(float value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 CreateScalar(sbyte value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalar(float value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalar(ushort value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 CreateScalar(ushort value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalar(uint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 CreateScalar(uint value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalar(ulong value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 CreateScalar(ulong value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(byte value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(double value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(short value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(int value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(long value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalar(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(byte value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(double value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(short value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(int value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(long value) { throw null; } public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(nint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(sbyte value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(float value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(sbyte value) { throw null; } - public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(float value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(ushort value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(ushort value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(uint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(uint value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(ulong value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(ulong value) { throw null; } + public static System.Runtime.Intrinsics.Vector256 CreateScalarUnsafe(nuint value) { throw null; } public static System.Runtime.Intrinsics.Vector256 Create(System.ReadOnlySpan values) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 Create(T value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 Create(T[] values) where T : struct { throw null; } @@ -437,8 +523,8 @@ public static void CopyTo(this System.Runtime.Intrinsics.Vector256 vector, public static System.Runtime.Intrinsics.Vector256 Equals(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] public static uint ExtractMostSignificantBits(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector256 Floor(System.Runtime.Intrinsics.Vector256 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Floor(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Floor(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Floor(System.Runtime.Intrinsics.Vector256 vector) { throw null; } public static T GetElement(this System.Runtime.Intrinsics.Vector256 vector, int index) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 GetLower(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector128 GetUpper(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } @@ -455,123 +541,124 @@ public static void CopyTo(this System.Runtime.Intrinsics.Vector256 vector, public static System.Runtime.Intrinsics.Vector256 LessThanOrEqual(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 LessThan(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static unsafe System.Runtime.Intrinsics.Vector256 Load(T* source) where T : unmanaged { throw null; } - [System.CLSCompliantAttribute(false)] - public static unsafe System.Runtime.Intrinsics.Vector256 LoadAligned(T* source) where T : unmanaged { throw null; } + public unsafe static System.Runtime.Intrinsics.Vector256 LoadAlignedNonTemporal(T* source) where T : unmanaged { throw null; } [System.CLSCompliantAttribute(false)] - public static unsafe System.Runtime.Intrinsics.Vector256 LoadAlignedNonTemporal(T* source) where T : unmanaged { throw null; } + public unsafe static System.Runtime.Intrinsics.Vector256 LoadAligned(T* source) where T : unmanaged { throw null; } public static System.Runtime.Intrinsics.Vector256 LoadUnsafe(ref T source) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector256 LoadUnsafe(ref T source, nuint elementOffset) where T : struct { throw null; } + [System.CLSCompliantAttribute(false)] + public unsafe static System.Runtime.Intrinsics.Vector256 Load(T* source) where T : unmanaged { throw null; } public static System.Runtime.Intrinsics.Vector256 Max(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 Min(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 Multiply(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 Multiply(System.Runtime.Intrinsics.Vector256 left, T right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 Multiply(T left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Narrow(System.Runtime.Intrinsics.Vector256 lower, System.Runtime.Intrinsics.Vector256 upper) { throw null; } public static System.Runtime.Intrinsics.Vector256 Negate(System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 OnesComplement(System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftLeft(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector256 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector256 ShiftRightLogical(System.Runtime.Intrinsics.Vector256 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector256 Shuffle(System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector256 indices) { throw null; } public static System.Runtime.Intrinsics.Vector256 Sqrt(System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static unsafe void Store(this System.Runtime.Intrinsics.Vector256 source, T* destination) where T : unmanaged { throw null; } + public unsafe static void StoreAlignedNonTemporal(this System.Runtime.Intrinsics.Vector256 source, T* destination) where T : unmanaged { } [System.CLSCompliantAttribute(false)] - public static unsafe void StoreAligned(this System.Runtime.Intrinsics.Vector256 source, T* destination) where T : unmanaged { throw null; } + public unsafe static void StoreAligned(this System.Runtime.Intrinsics.Vector256 source, T* destination) where T : unmanaged { } + public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector256 source, ref T destination) where T : struct { } [System.CLSCompliantAttribute(false)] - public static unsafe void StoreAlignedNonTemporal(this System.Runtime.Intrinsics.Vector256 source, T* destination) where T : unmanaged { throw null; } - public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector256 source, ref T destination) where T : struct { throw null; } + public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector256 source, ref T destination, nuint elementOffset) where T : struct { } [System.CLSCompliantAttribute(false)] - public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector256 source, ref T destination, nuint elementOffset) where T : struct { throw null; } + public unsafe static void Store(this System.Runtime.Intrinsics.Vector256 source, T* destination) where T : unmanaged { } public static System.Runtime.Intrinsics.Vector256 Subtract(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } public static T Sum(System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } public static T ToScalar(this System.Runtime.Intrinsics.Vector256 vector) where T : struct { throw null; } public static bool TryCopyTo(this System.Runtime.Intrinsics.Vector256 vector, System.Span destination) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } - public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } - public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } - public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector256 Lower, System.Runtime.Intrinsics.Vector256 Upper) Widen(System.Runtime.Intrinsics.Vector256 source) { throw null; } public static System.Runtime.Intrinsics.Vector256 WithElement(this System.Runtime.Intrinsics.Vector256 vector, int index, T value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 WithLower(this System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector128 value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 WithUpper(this System.Runtime.Intrinsics.Vector256 vector, System.Runtime.Intrinsics.Vector128 value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector256 Xor(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) where T : struct { throw null; } } - public readonly partial struct Vector256 : System.IEquatable> where T : struct + public readonly partial struct Vector256 : System.IEquatable>, System.Numerics.IAdditionOperators, System.Runtime.Intrinsics.Vector256, System.Runtime.Intrinsics.Vector256>, System.Numerics.IBitwiseOperators, System.Runtime.Intrinsics.Vector256, System.Runtime.Intrinsics.Vector256>, System.Numerics.IDivisionOperators, System.Runtime.Intrinsics.Vector256, System.Runtime.Intrinsics.Vector256>, System.Numerics.IEqualityOperators, System.Runtime.Intrinsics.Vector256, bool>, System.Numerics.IMultiplyOperators, System.Runtime.Intrinsics.Vector256, System.Runtime.Intrinsics.Vector256>, System.Numerics.ISubtractionOperators, System.Runtime.Intrinsics.Vector256, System.Runtime.Intrinsics.Vector256>, System.Numerics.IUnaryNegationOperators, System.Runtime.Intrinsics.Vector256>, System.Numerics.IUnaryPlusOperators, System.Runtime.Intrinsics.Vector256>, System.Runtime.Intrinsics.ISimdVector, T> where T : struct { private readonly int _dummyPrimitive; public static System.Runtime.Intrinsics.Vector256 AllBitsSet { get { throw null; } } - public static bool IsSupported { get { throw null; } } public static int Count { get { throw null; } } + public static bool IsSupported { get { throw null; } } + public T this[int index] { get { throw null; } } + static bool System.Runtime.Intrinsics.ISimdVector,T>.IsHardwareAccelerated { get { throw null; } } public static System.Runtime.Intrinsics.Vector256 Zero { get { throw null; } } public override bool Equals([System.Diagnostics.CodeAnalysis.NotNullWhenAttribute(true)] object? obj) { throw null; } public bool Equals(System.Runtime.Intrinsics.Vector256 other) { throw null; } public override int GetHashCode() { throw null; } - public T this[int index] { get { throw null; } } public static System.Runtime.Intrinsics.Vector256 operator +(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 operator &(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 operator |(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } @@ -586,6 +673,35 @@ public static void CopyTo(this System.Runtime.Intrinsics.Vector256 vector, public static System.Runtime.Intrinsics.Vector256 operator -(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } public static System.Runtime.Intrinsics.Vector256 operator -(System.Runtime.Intrinsics.Vector256 vector) { throw null; } public static System.Runtime.Intrinsics.Vector256 operator +(System.Runtime.Intrinsics.Vector256 value) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.Abs(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.ConditionalSelect(System.Runtime.Intrinsics.Vector256 condition, System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.Create(T value) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.CreateScalar(T value) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.CreateScalarUnsafe(T value) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.Equals(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.EqualsAll(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.EqualsAny(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static T System.Runtime.Intrinsics.ISimdVector, T>.GetElement(System.Runtime.Intrinsics.Vector256 vector, int index) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.GreaterThan(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanAll(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanAny(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanOrEqual(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanOrEqualAll(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanOrEqualAny(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.LessThan(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanAll(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanAny(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.LessThanOrEqual(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanOrEqualAll(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanOrEqualAny(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.LoadUnsafe(ref T source) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.LoadUnsafe(ref T source, nuint elementOffset) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.Max(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.Min(System.Runtime.Intrinsics.Vector256 left, System.Runtime.Intrinsics.Vector256 right) { throw null; } + static void System.Runtime.Intrinsics.ISimdVector, T>.StoreUnsafe(System.Runtime.Intrinsics.Vector256 vector, ref T destination) { } + static void System.Runtime.Intrinsics.ISimdVector, T>.StoreUnsafe(System.Runtime.Intrinsics.Vector256 vector, ref T destination, nuint elementOffset) { } + static T System.Runtime.Intrinsics.ISimdVector, T>.ToScalar(System.Runtime.Intrinsics.Vector256 vector) { throw null; } + static System.Runtime.Intrinsics.Vector256 System.Runtime.Intrinsics.ISimdVector, T>.WithElement(System.Runtime.Intrinsics.Vector256 vector, int index, T value) { throw null; } public override string ToString() { throw null; } } public static partial class Vector64 @@ -594,101 +710,101 @@ public static partial class Vector64 public static System.Runtime.Intrinsics.Vector64 Abs(System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 Add(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 AndNot(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector64 AsByte(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector64 AsDouble(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector64 AsInt16(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector64 AsInt32(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector64 AsInt64(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector64 AsByte(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector64 AsDouble(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector64 AsInt16(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector64 AsInt32(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector64 AsInt64(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 AsNInt(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector64 AsNUInt(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 AsSByte(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector64 AsSingle(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector64 AsSByte(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector64 AsSingle(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 AsUInt16(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector64 AsUInt16(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 AsUInt32(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector64 AsUInt32(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 AsUInt64(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } + public static System.Runtime.Intrinsics.Vector64 AsUInt64(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 As(this System.Runtime.Intrinsics.Vector64 vector) where TFrom : struct where TTo : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 BitwiseAnd(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 BitwiseOr(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector64 Ceiling(System.Runtime.Intrinsics.Vector64 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Ceiling(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Ceiling(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Ceiling(System.Runtime.Intrinsics.Vector64 vector) { throw null; } public static System.Runtime.Intrinsics.Vector64 ConditionalSelect(System.Runtime.Intrinsics.Vector64 condition, System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector64 ConvertToDouble(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ConvertToDouble(System.Runtime.Intrinsics.Vector64 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ConvertToDouble(System.Runtime.Intrinsics.Vector64 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ConvertToInt32(System.Runtime.Intrinsics.Vector64 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ConvertToInt64(System.Runtime.Intrinsics.Vector64 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ConvertToSingle(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ConvertToDouble(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ConvertToInt32(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ConvertToInt64(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ConvertToSingle(System.Runtime.Intrinsics.Vector64 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ConvertToSingle(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ConvertToSingle(System.Runtime.Intrinsics.Vector64 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ConvertToUInt32(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ConvertToUInt32(System.Runtime.Intrinsics.Vector64 vector) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ConvertToUInt64(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ConvertToUInt64(System.Runtime.Intrinsics.Vector64 vector) { throw null; } public static void CopyTo(this System.Runtime.Intrinsics.Vector64 vector, System.Span destination) where T : struct { } public static void CopyTo(this System.Runtime.Intrinsics.Vector64 vector, T[] destination) where T : struct { } public static void CopyTo(this System.Runtime.Intrinsics.Vector64 vector, T[] destination, int startIndex) where T : struct { } - public static System.Runtime.Intrinsics.Vector64 Create(byte value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Create(byte e0, byte e1, byte e2, byte e3, byte e4, byte e5, byte e6, byte e7) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Create(double value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Create(short value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Create(short e0, short e1, short e2, short e3) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Create(int value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Create(int e0, int e1) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Create(long value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(byte value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(byte e0, byte e1, byte e2, byte e3, byte e4, byte e5, byte e6, byte e7) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(double value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(short value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(short e0, short e1, short e2, short e3) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(int value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(int e0, int e1) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(long value) { throw null; } public static System.Runtime.Intrinsics.Vector64 Create(nint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Create(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(sbyte value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Create(sbyte value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(sbyte e0, sbyte e1, sbyte e2, sbyte e3, sbyte e4, sbyte e5, sbyte e6, sbyte e7) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(float value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(float e0, float e1) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Create(sbyte e0, sbyte e1, sbyte e2, sbyte e3, sbyte e4, sbyte e5, sbyte e6, sbyte e7) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Create(float value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Create(float e0, float e1) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(ushort value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Create(ushort value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(ushort e0, ushort e1, ushort e2, ushort e3) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Create(ushort e0, ushort e1, ushort e2, ushort e3) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(uint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Create(uint value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(uint e0, uint e1) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Create(uint e0, uint e1) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(ulong value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Create(ulong value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 CreateScalar(byte value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 CreateScalar(double value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 CreateScalar(short value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 CreateScalar(int value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 CreateScalar(long value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Create(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalar(byte value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalar(double value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalar(short value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalar(int value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalar(long value) { throw null; } public static System.Runtime.Intrinsics.Vector64 CreateScalar(nint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 CreateScalar(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalar(sbyte value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalar(float value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 CreateScalar(sbyte value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 CreateScalar(float value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalar(ushort value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 CreateScalar(ushort value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalar(uint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 CreateScalar(uint value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalar(ulong value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 CreateScalar(ulong value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(byte value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(short value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(int value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalar(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(byte value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(short value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(int value) { throw null; } public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(nint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(nuint value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(sbyte value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(float value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(sbyte value) { throw null; } - public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(float value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(ushort value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(ushort value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(uint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(uint value) { throw null; } + public static System.Runtime.Intrinsics.Vector64 CreateScalarUnsafe(nuint value) { throw null; } public static System.Runtime.Intrinsics.Vector64 Create(System.ReadOnlySpan values) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 Create(T value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 Create(T[] values) where T : struct { throw null; } @@ -700,8 +816,8 @@ public static void CopyTo(this System.Runtime.Intrinsics.Vector64 vector, public static System.Runtime.Intrinsics.Vector64 Equals(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] public static uint ExtractMostSignificantBits(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector64 Floor(System.Runtime.Intrinsics.Vector64 vector) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Floor(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Floor(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Floor(System.Runtime.Intrinsics.Vector64 vector) { throw null; } public static T GetElement(this System.Runtime.Intrinsics.Vector64 vector, int index) where T : struct { throw null; } public static bool GreaterThanAll(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } public static bool GreaterThanAny(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } @@ -716,88 +832,88 @@ public static void CopyTo(this System.Runtime.Intrinsics.Vector64 vector, public static System.Runtime.Intrinsics.Vector64 LessThanOrEqual(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 LessThan(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static unsafe System.Runtime.Intrinsics.Vector64 Load(T* source) where T : unmanaged { throw null; } - [System.CLSCompliantAttribute(false)] - public static unsafe System.Runtime.Intrinsics.Vector64 LoadAligned(T* source) where T : unmanaged { throw null; } + public unsafe static System.Runtime.Intrinsics.Vector64 LoadAlignedNonTemporal(T* source) where T : unmanaged { throw null; } [System.CLSCompliantAttribute(false)] - public static unsafe System.Runtime.Intrinsics.Vector64 LoadAlignedNonTemporal(T* source) where T : unmanaged { throw null; } + public unsafe static System.Runtime.Intrinsics.Vector64 LoadAligned(T* source) where T : unmanaged { throw null; } public static System.Runtime.Intrinsics.Vector64 LoadUnsafe(ref T source) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector64 LoadUnsafe(ref T source, nuint elementOffset) where T : struct { throw null; } + [System.CLSCompliantAttribute(false)] + public unsafe static System.Runtime.Intrinsics.Vector64 Load(T* source) where T : unmanaged { throw null; } public static System.Runtime.Intrinsics.Vector64 Max(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 Min(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 Multiply(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 Multiply(System.Runtime.Intrinsics.Vector64 left, T right) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 Multiply(T left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Narrow(System.Runtime.Intrinsics.Vector64 lower, System.Runtime.Intrinsics.Vector64 upper) { throw null; } public static System.Runtime.Intrinsics.Vector64 Negate(System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 OnesComplement(System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } - public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftLeft(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector64 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } - public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } [System.CLSCompliantAttribute(false)] - public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } + public static System.Runtime.Intrinsics.Vector64 ShiftRightLogical(System.Runtime.Intrinsics.Vector64 vector, int shiftCount) { throw null; } public static System.Runtime.Intrinsics.Vector64 Shuffle(System.Runtime.Intrinsics.Vector64 vector, System.Runtime.Intrinsics.Vector64 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Shuffle(System.Runtime.Intrinsics.Vector64 vector, System.Runtime.Intrinsics.Vector64 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Shuffle(System.Runtime.Intrinsics.Vector64 vector, System.Runtime.Intrinsics.Vector64 indices) { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector64 Shuffle(System.Runtime.Intrinsics.Vector64 vector, System.Runtime.Intrinsics.Vector64 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Shuffle(System.Runtime.Intrinsics.Vector64 vector, System.Runtime.Intrinsics.Vector64 indices) { throw null; } + public static System.Runtime.Intrinsics.Vector64 Shuffle(System.Runtime.Intrinsics.Vector64 vector, System.Runtime.Intrinsics.Vector64 indices) { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector64 Shuffle(System.Runtime.Intrinsics.Vector64 vector, System.Runtime.Intrinsics.Vector64 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Shuffle(System.Runtime.Intrinsics.Vector64 vector, System.Runtime.Intrinsics.Vector64 indices) { throw null; } [System.CLSCompliantAttribute(false)] public static System.Runtime.Intrinsics.Vector64 Shuffle(System.Runtime.Intrinsics.Vector64 vector, System.Runtime.Intrinsics.Vector64 indices) { throw null; } - public static System.Runtime.Intrinsics.Vector64 Shuffle(System.Runtime.Intrinsics.Vector64 vector, System.Runtime.Intrinsics.Vector64 indices) { throw null; } public static System.Runtime.Intrinsics.Vector64 Sqrt(System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static unsafe void Store(this System.Runtime.Intrinsics.Vector64 source, T* destination) where T : unmanaged { throw null; } + public unsafe static void StoreAlignedNonTemporal(this System.Runtime.Intrinsics.Vector64 source, T* destination) where T : unmanaged { } [System.CLSCompliantAttribute(false)] - public static unsafe void StoreAligned(this System.Runtime.Intrinsics.Vector64 source, T* destination) where T : unmanaged { throw null; } + public unsafe static void StoreAligned(this System.Runtime.Intrinsics.Vector64 source, T* destination) where T : unmanaged { } + public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector64 source, ref T destination) where T : struct { } [System.CLSCompliantAttribute(false)] - public static unsafe void StoreAlignedNonTemporal(this System.Runtime.Intrinsics.Vector64 source, T* destination) where T : unmanaged { throw null; } - public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector64 source, ref T destination) where T : struct { throw null; } + public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector64 source, ref T destination, nuint elementOffset) where T : struct { } [System.CLSCompliantAttribute(false)] - public static void StoreUnsafe(this System.Runtime.Intrinsics.Vector64 source, ref T destination, nuint elementOffset) where T : struct { throw null; } + public unsafe static void Store(this System.Runtime.Intrinsics.Vector64 source, T* destination) where T : unmanaged { } public static System.Runtime.Intrinsics.Vector64 Subtract(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } public static T Sum(System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } public static T ToScalar(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } @@ -805,30 +921,31 @@ public static void CopyTo(this System.Runtime.Intrinsics.Vector64 vector, public static System.Runtime.Intrinsics.Vector128 ToVector128(this System.Runtime.Intrinsics.Vector64 vector) where T : struct { throw null; } public static bool TryCopyTo(this System.Runtime.Intrinsics.Vector64 vector, System.Span destination) where T : struct { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } - public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } - public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } - public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } [System.CLSCompliantAttribute(false)] - public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } + public static (System.Runtime.Intrinsics.Vector64 Lower, System.Runtime.Intrinsics.Vector64 Upper) Widen(System.Runtime.Intrinsics.Vector64 source) { throw null; } public static System.Runtime.Intrinsics.Vector64 WithElement(this System.Runtime.Intrinsics.Vector64 vector, int index, T value) where T : struct { throw null; } public static System.Runtime.Intrinsics.Vector64 Xor(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) where T : struct { throw null; } } - public readonly partial struct Vector64 : System.IEquatable> where T : struct + public readonly partial struct Vector64 : System.IEquatable>, System.Numerics.IAdditionOperators, System.Runtime.Intrinsics.Vector64, System.Runtime.Intrinsics.Vector64>, System.Numerics.IBitwiseOperators, System.Runtime.Intrinsics.Vector64, System.Runtime.Intrinsics.Vector64>, System.Numerics.IDivisionOperators, System.Runtime.Intrinsics.Vector64, System.Runtime.Intrinsics.Vector64>, System.Numerics.IEqualityOperators, System.Runtime.Intrinsics.Vector64, bool>, System.Numerics.IMultiplyOperators, System.Runtime.Intrinsics.Vector64, System.Runtime.Intrinsics.Vector64>, System.Numerics.ISubtractionOperators, System.Runtime.Intrinsics.Vector64, System.Runtime.Intrinsics.Vector64>, System.Numerics.IUnaryNegationOperators, System.Runtime.Intrinsics.Vector64>, System.Numerics.IUnaryPlusOperators, System.Runtime.Intrinsics.Vector64>, System.Runtime.Intrinsics.ISimdVector, T> where T : struct { private readonly int _dummyPrimitive; public static System.Runtime.Intrinsics.Vector64 AllBitsSet { get { throw null; } } - public static bool IsSupported { get { throw null; } } public static int Count { get { throw null; } } + public static bool IsSupported { get { throw null; } } + public T this[int index] { get { throw null; } } + static bool System.Runtime.Intrinsics.ISimdVector,T>.IsHardwareAccelerated { get { throw null; } } public static System.Runtime.Intrinsics.Vector64 Zero { get { throw null; } } public override bool Equals([System.Diagnostics.CodeAnalysis.NotNullWhenAttribute(true)] object? obj) { throw null; } public bool Equals(System.Runtime.Intrinsics.Vector64 other) { throw null; } public override int GetHashCode() { throw null; } - public T this[int index] { get { throw null; } } public static System.Runtime.Intrinsics.Vector64 operator +(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } public static System.Runtime.Intrinsics.Vector64 operator &(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } public static System.Runtime.Intrinsics.Vector64 operator |(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } @@ -843,6 +960,35 @@ public static void CopyTo(this System.Runtime.Intrinsics.Vector64 vector, public static System.Runtime.Intrinsics.Vector64 operator -(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } public static System.Runtime.Intrinsics.Vector64 operator -(System.Runtime.Intrinsics.Vector64 vector) { throw null; } public static System.Runtime.Intrinsics.Vector64 operator +(System.Runtime.Intrinsics.Vector64 value) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.Abs(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.ConditionalSelect(System.Runtime.Intrinsics.Vector64 condition, System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.Create(T value) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.CreateScalar(T value) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.CreateScalarUnsafe(T value) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.Equals(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.EqualsAll(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.EqualsAny(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static T System.Runtime.Intrinsics.ISimdVector, T>.GetElement(System.Runtime.Intrinsics.Vector64 vector, int index) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.GreaterThan(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanAll(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanAny(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanOrEqual(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanOrEqualAll(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.GreaterThanOrEqualAny(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.LessThan(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanAll(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanAny(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.LessThanOrEqual(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanOrEqualAll(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static bool System.Runtime.Intrinsics.ISimdVector, T>.LessThanOrEqualAny(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.LoadUnsafe(ref T source) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.LoadUnsafe(ref T source, nuint elementOffset) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.Max(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.Min(System.Runtime.Intrinsics.Vector64 left, System.Runtime.Intrinsics.Vector64 right) { throw null; } + static void System.Runtime.Intrinsics.ISimdVector, T>.StoreUnsafe(System.Runtime.Intrinsics.Vector64 vector, ref T destination) { } + static void System.Runtime.Intrinsics.ISimdVector, T>.StoreUnsafe(System.Runtime.Intrinsics.Vector64 vector, ref T destination, nuint elementOffset) { } + static T System.Runtime.Intrinsics.ISimdVector, T>.ToScalar(System.Runtime.Intrinsics.Vector64 vector) { throw null; } + static System.Runtime.Intrinsics.Vector64 System.Runtime.Intrinsics.ISimdVector, T>.WithElement(System.Runtime.Intrinsics.Vector64 vector, int index, T value) { throw null; } public override string ToString() { throw null; } } } @@ -3134,7 +3280,7 @@ internal ArmBase() { } public static int LeadingZeroCount(uint value) { throw null; } public static int ReverseElementBits(int value) { throw null; } public static uint ReverseElementBits(uint value) { throw null; } - public static void Yield() { throw null; } + public static void Yield() { } public abstract partial class Arm64 { internal Arm64() { } @@ -3950,7 +4096,7 @@ internal X64() { } } [System.CLSCompliantAttribute(false)] [System.Runtime.Versioning.RequiresPreviewFeaturesAttribute("AvxVnni is in preview.")] - public abstract class AvxVnni : System.Runtime.Intrinsics.X86.Avx2 + public abstract partial class AvxVnni : System.Runtime.Intrinsics.X86.Avx2 { internal AvxVnni() { } public static new bool IsSupported { get { throw null; } } @@ -4790,21 +4936,19 @@ public abstract partial class X86Base internal X86Base() { } public static bool IsSupported { get { throw null; } } public static (int Eax, int Ebx, int Ecx, int Edx) CpuId(int functionId, int subFunctionId) { throw null; } - public static void Pause() { throw null; } + public static void Pause() { } public abstract partial class X64 { internal X64() { } public static bool IsSupported { get { throw null; } } } } - [System.CLSCompliantAttribute(false)] public abstract partial class X86Serialize : System.Runtime.Intrinsics.X86.X86Base { internal X86Serialize() { } public static new bool IsSupported { get { throw null; } } - - public static void Serialize() { throw null; } + public static void Serialize() { } public new abstract partial class X64 : System.Runtime.Intrinsics.X86.X86Base.X64 { internal X64() { }