using System;
using System.Diagnostics;
using System.Globalization;
using System.Numerics.Hashing;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using System.Text;
using FxResources.System.Numerics.Vectors;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: AssemblyTitle("System.Numerics.Vectors")]
[assembly: AssemblyDescription("System.Numerics.Vectors")]
[assembly: AssemblyDefaultAlias("System.Numerics.Vectors")]
[assembly: AssemblyCompany("Microsoft Corporation")]
[assembly: AssemblyProduct("Microsoft® .NET Framework")]
[assembly: AssemblyCopyright("© Microsoft Corporation. All rights reserved.")]
[assembly: AssemblyFileVersion("4.6.26515.06")]
[assembly: AssemblyInformationalVersion("4.6.26515.06 @BuiltBy: dlab-DDVSOWINAGE059 @Branch: release/2.1 @SrcCode: https://github.com/dotnet/corefx/tree/30ab651fcb4354552bd4891619a0bdd81e0ebdbf")]
[assembly: CLSCompliant(true)]
[assembly: AssemblyMetadata(".NETFrameworkAssembly", "")]
[assembly: AssemblyMetadata("Serviceable", "True")]
[assembly: AssemblyMetadata("PreferInbox", "True")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("4.1.4.0")]
[module: UnverifiableCode]
namespace FxResources.System.Numerics.Vectors
{
internal static class SR
{
}
}
namespace System
{
internal static class MathF
{
public const float PI = 3.1415927f;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float Abs(float x)
{
return Math.Abs(x);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float Acos(float x)
{
return (float)Math.Acos(x);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float Cos(float x)
{
return (float)Math.Cos(x);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float IEEERemainder(float x, float y)
{
return (float)Math.IEEERemainder(x, y);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float Pow(float x, float y)
{
return (float)Math.Pow(x, y);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float Sin(float x)
{
return (float)Math.Sin(x);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float Sqrt(float x)
{
return (float)Math.Sqrt(x);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float Tan(float x)
{
return (float)Math.Tan(x);
}
}
internal static class SR
{
private static ResourceManager s_resourceManager;
private static ResourceManager ResourceManager => s_resourceManager ?? (s_resourceManager = new ResourceManager(ResourceType));
internal static Type ResourceType { get; } = typeof(SR);
internal static string Arg_ArgumentOutOfRangeException => GetResourceString("Arg_ArgumentOutOfRangeException", null);
internal static string Arg_ElementsInSourceIsGreaterThanDestination => GetResourceString("Arg_ElementsInSourceIsGreaterThanDestination", null);
internal static string Arg_NullArgumentNullRef => GetResourceString("Arg_NullArgumentNullRef", null);
internal static string Arg_TypeNotSupported => GetResourceString("Arg_TypeNotSupported", null);
internal static string Arg_InsufficientNumberOfElements => GetResourceString("Arg_InsufficientNumberOfElements", null);
[MethodImpl(MethodImplOptions.NoInlining)]
private static bool UsingResourceKeys()
{
return false;
}
internal static string GetResourceString(string resourceKey, string defaultString)
{
string text = null;
try
{
text = ResourceManager.GetString(resourceKey);
}
catch (MissingManifestResourceException)
{
}
if (defaultString != null && resourceKey.Equals(text, StringComparison.Ordinal))
{
return defaultString;
}
return text;
}
internal static string Format(string resourceFormat, params object[] args)
{
if (args != null)
{
if (UsingResourceKeys())
{
return resourceFormat + string.Join(", ", args);
}
return string.Format(resourceFormat, args);
}
return resourceFormat;
}
internal static string Format(string resourceFormat, object p1)
{
if (UsingResourceKeys())
{
return string.Join(", ", resourceFormat, p1);
}
return string.Format(resourceFormat, p1);
}
internal static string Format(string resourceFormat, object p1, object p2)
{
if (UsingResourceKeys())
{
return string.Join(", ", resourceFormat, p1, p2);
}
return string.Format(resourceFormat, p1, p2);
}
internal static string Format(string resourceFormat, object p1, object p2, object p3)
{
if (UsingResourceKeys())
{
return string.Join(", ", resourceFormat, p1, p2, p3);
}
return string.Format(resourceFormat, p1, p2, p3);
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Field, Inherited = false)]
internal sealed class IntrinsicAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.All)]
internal class __BlockReflectionAttribute : Attribute
{
}
}
namespace System.Numerics
{
internal class ConstantHelper
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static byte GetByteWithAllBitsSet()
{
byte result = 0;
result = byte.MaxValue;
return result;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static sbyte GetSByteWithAllBitsSet()
{
sbyte result = 0;
result = -1;
return result;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ushort GetUInt16WithAllBitsSet()
{
ushort result = 0;
result = ushort.MaxValue;
return result;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static short GetInt16WithAllBitsSet()
{
short result = 0;
result = -1;
return result;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static uint GetUInt32WithAllBitsSet()
{
uint result = 0u;
result = uint.MaxValue;
return result;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int GetInt32WithAllBitsSet()
{
int result = 0;
result = -1;
return result;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ulong GetUInt64WithAllBitsSet()
{
ulong result = 0uL;
result = ulong.MaxValue;
return result;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static long GetInt64WithAllBitsSet()
{
long result = 0L;
result = -1L;
return result;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public unsafe static float GetSingleWithAllBitsSet()
{
float result = 0f;
*(int*)(&result) = -1;
return result;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public unsafe static double GetDoubleWithAllBitsSet()
{
double result = 0.0;
*(long*)(&result) = -1L;
return result;
}
}
[StructLayout(LayoutKind.Explicit)]
internal struct Register
{
[FieldOffset(0)]
internal byte byte_0;
[FieldOffset(1)]
internal byte byte_1;
[FieldOffset(2)]
internal byte byte_2;
[FieldOffset(3)]
internal byte byte_3;
[FieldOffset(4)]
internal byte byte_4;
[FieldOffset(5)]
internal byte byte_5;
[FieldOffset(6)]
internal byte byte_6;
[FieldOffset(7)]
internal byte byte_7;
[FieldOffset(8)]
internal byte byte_8;
[FieldOffset(9)]
internal byte byte_9;
[FieldOffset(10)]
internal byte byte_10;
[FieldOffset(11)]
internal byte byte_11;
[FieldOffset(12)]
internal byte byte_12;
[FieldOffset(13)]
internal byte byte_13;
[FieldOffset(14)]
internal byte byte_14;
[FieldOffset(15)]
internal byte byte_15;
[FieldOffset(0)]
internal sbyte sbyte_0;
[FieldOffset(1)]
internal sbyte sbyte_1;
[FieldOffset(2)]
internal sbyte sbyte_2;
[FieldOffset(3)]
internal sbyte sbyte_3;
[FieldOffset(4)]
internal sbyte sbyte_4;
[FieldOffset(5)]
internal sbyte sbyte_5;
[FieldOffset(6)]
internal sbyte sbyte_6;
[FieldOffset(7)]
internal sbyte sbyte_7;
[FieldOffset(8)]
internal sbyte sbyte_8;
[FieldOffset(9)]
internal sbyte sbyte_9;
[FieldOffset(10)]
internal sbyte sbyte_10;
[FieldOffset(11)]
internal sbyte sbyte_11;
[FieldOffset(12)]
internal sbyte sbyte_12;
[FieldOffset(13)]
internal sbyte sbyte_13;
[FieldOffset(14)]
internal sbyte sbyte_14;
[FieldOffset(15)]
internal sbyte sbyte_15;
[FieldOffset(0)]
internal ushort uint16_0;
[FieldOffset(2)]
internal ushort uint16_1;
[FieldOffset(4)]
internal ushort uint16_2;
[FieldOffset(6)]
internal ushort uint16_3;
[FieldOffset(8)]
internal ushort uint16_4;
[FieldOffset(10)]
internal ushort uint16_5;
[FieldOffset(12)]
internal ushort uint16_6;
[FieldOffset(14)]
internal ushort uint16_7;
[FieldOffset(0)]
internal short int16_0;
[FieldOffset(2)]
internal short int16_1;
[FieldOffset(4)]
internal short int16_2;
[FieldOffset(6)]
internal short int16_3;
[FieldOffset(8)]
internal short int16_4;
[FieldOffset(10)]
internal short int16_5;
[FieldOffset(12)]
internal short int16_6;
[FieldOffset(14)]
internal short int16_7;
[FieldOffset(0)]
internal uint uint32_0;
[FieldOffset(4)]
internal uint uint32_1;
[FieldOffset(8)]
internal uint uint32_2;
[FieldOffset(12)]
internal uint uint32_3;
[FieldOffset(0)]
internal int int32_0;
[FieldOffset(4)]
internal int int32_1;
[FieldOffset(8)]
internal int int32_2;
[FieldOffset(12)]
internal int int32_3;
[FieldOffset(0)]
internal ulong uint64_0;
[FieldOffset(8)]
internal ulong uint64_1;
[FieldOffset(0)]
internal long int64_0;
[FieldOffset(8)]
internal long int64_1;
[FieldOffset(0)]
internal float single_0;
[FieldOffset(4)]
internal float single_1;
[FieldOffset(8)]
internal float single_2;
[FieldOffset(12)]
internal float single_3;
[FieldOffset(0)]
internal double double_0;
[FieldOffset(8)]
internal double double_1;
}
[System.Runtime.CompilerServices.Intrinsic]
public struct Vector<T> : IEquatable<Vector<T>>, IFormattable where T : struct
{
private struct VectorSizeHelper
{
internal Vector<T> _placeholder;
internal byte _byte;
}
private System.Numerics.Register register;
private static readonly int s_count = InitializeCount();
private static readonly Vector<T> s_zero = default(Vector<T>);
private static readonly Vector<T> s_one = new Vector<T>(GetOneValue());
private static readonly Vector<T> s_allOnes = new Vector<T>(GetAllBitsSetValue());
public static int Count
{
[System.Runtime.CompilerServices.Intrinsic]
get
{
return s_count;
}
}
public static Vector<T> Zero
{
[System.Runtime.CompilerServices.Intrinsic]
get
{
return s_zero;
}
}
public static Vector<T> One
{
[System.Runtime.CompilerServices.Intrinsic]
get
{
return s_one;
}
}
internal static Vector<T> AllOnes => s_allOnes;
public unsafe T this[int index]
{
[System.Runtime.CompilerServices.Intrinsic]
get
{
if (index >= Count || index < 0)
{
throw new IndexOutOfRangeException(System.SR.Format(System.SR.Arg_ArgumentOutOfRangeException, index));
}
if (typeof(T) == typeof(byte))
{
fixed (byte* ptr = ®ister.byte_0)
{
return (T)(object)ptr[index];
}
}
if (typeof(T) == typeof(sbyte))
{
fixed (sbyte* ptr2 = ®ister.sbyte_0)
{
return (T)(object)ptr2[index];
}
}
if (typeof(T) == typeof(ushort))
{
fixed (ushort* ptr3 = ®ister.uint16_0)
{
return (T)(object)ptr3[index];
}
}
if (typeof(T) == typeof(short))
{
fixed (short* ptr4 = ®ister.int16_0)
{
return (T)(object)ptr4[index];
}
}
if (typeof(T) == typeof(uint))
{
fixed (uint* ptr5 = ®ister.uint32_0)
{
return (T)(object)ptr5[index];
}
}
if (typeof(T) == typeof(int))
{
fixed (int* ptr6 = ®ister.int32_0)
{
return (T)(object)ptr6[index];
}
}
if (typeof(T) == typeof(ulong))
{
fixed (ulong* ptr7 = ®ister.uint64_0)
{
return (T)(object)ptr7[index];
}
}
if (typeof(T) == typeof(long))
{
fixed (long* ptr8 = ®ister.int64_0)
{
return (T)(object)ptr8[index];
}
}
if (typeof(T) == typeof(float))
{
fixed (float* ptr9 = ®ister.single_0)
{
return (T)(object)ptr9[index];
}
}
if (typeof(T) == typeof(double))
{
fixed (double* ptr10 = ®ister.double_0)
{
return (T)(object)ptr10[index];
}
}
throw new NotSupportedException(System.SR.Arg_TypeNotSupported);
}
}
private unsafe static int InitializeCount()
{
VectorSizeHelper vectorSizeHelper = default(VectorSizeHelper);
byte* ptr = &vectorSizeHelper._placeholder.register.byte_0;
byte* ptr2 = &vectorSizeHelper._byte;
int num = (int)(ptr2 - ptr);
int num2 = -1;
if (typeof(T) == typeof(byte))
{
num2 = 1;
}
else if (typeof(T) == typeof(sbyte))
{
num2 = 1;
}
else if (typeof(T) == typeof(ushort))
{
num2 = 2;
}
else if (typeof(T) == typeof(short))
{
num2 = 2;
}
else if (typeof(T) == typeof(uint))
{
num2 = 4;
}
else if (typeof(T) == typeof(int))
{
num2 = 4;
}
else if (typeof(T) == typeof(ulong))
{
num2 = 8;
}
else if (typeof(T) == typeof(long))
{
num2 = 8;
}
else if (typeof(T) == typeof(float))
{
num2 = 4;
}
else
{
if (!(typeof(T) == typeof(double)))
{
throw new NotSupportedException(System.SR.Arg_TypeNotSupported);
}
num2 = 8;
}
return num / num2;
}
[System.Runtime.CompilerServices.Intrinsic]
public unsafe Vector(T value)
{
this = default(Vector<T>);
if (Vector.IsHardwareAccelerated)
{
if (typeof(T) == typeof(byte))
{
fixed (byte* ptr = ®ister.byte_0)
{
for (int i = 0; i < Count; i++)
{
ptr[i] = (byte)(object)value;
}
}
}
else if (typeof(T) == typeof(sbyte))
{
fixed (sbyte* ptr2 = ®ister.sbyte_0)
{
for (int j = 0; j < Count; j++)
{
ptr2[j] = (sbyte)(object)value;
}
}
}
else if (typeof(T) == typeof(ushort))
{
fixed (ushort* ptr3 = ®ister.uint16_0)
{
for (int k = 0; k < Count; k++)
{
ptr3[k] = (ushort)(object)value;
}
}
}
else if (typeof(T) == typeof(short))
{
fixed (short* ptr4 = ®ister.int16_0)
{
for (int l = 0; l < Count; l++)
{
ptr4[l] = (short)(object)value;
}
}
}
else if (typeof(T) == typeof(uint))
{
fixed (uint* ptr5 = ®ister.uint32_0)
{
for (int m = 0; m < Count; m++)
{
ptr5[m] = (uint)(object)value;
}
}
}
else if (typeof(T) == typeof(int))
{
fixed (int* ptr6 = ®ister.int32_0)
{
for (int n = 0; n < Count; n++)
{
ptr6[n] = (int)(object)value;
}
}
}
else if (typeof(T) == typeof(ulong))
{
fixed (ulong* ptr7 = ®ister.uint64_0)
{
for (int num = 0; num < Count; num++)
{
ptr7[num] = (ulong)(object)value;
}
}
}
else if (typeof(T) == typeof(long))
{
fixed (long* ptr8 = ®ister.int64_0)
{
for (int num2 = 0; num2 < Count; num2++)
{
ptr8[num2] = (long)(object)value;
}
}
}
else if (typeof(T) == typeof(float))
{
fixed (float* ptr9 = ®ister.single_0)
{
for (int num3 = 0; num3 < Count; num3++)
{
ptr9[num3] = (float)(object)value;
}
}
}
else
{
if (!(typeof(T) == typeof(double)))
{
return;
}
fixed (double* ptr10 = ®ister.double_0)
{
for (int num4 = 0; num4 < Count; num4++)
{
ptr10[num4] = (double)(object)value;
}
}
}
}
else if (typeof(T) == typeof(byte))
{
register.byte_0 = (byte)(object)value;
register.byte_1 = (byte)(object)value;
register.byte_2 = (byte)(object)value;
register.byte_3 = (byte)(object)value;
register.byte_4 = (byte)(object)value;
register.byte_5 = (byte)(object)value;
register.byte_6 = (byte)(object)value;
register.byte_7 = (byte)(object)value;
register.byte_8 = (byte)(object)value;
register.byte_9 = (byte)(object)value;
register.byte_10 = (byte)(object)value;
register.byte_11 = (byte)(object)value;
register.byte_12 = (byte)(object)value;
register.byte_13 = (byte)(object)value;
register.byte_14 = (byte)(object)value;
register.byte_15 = (byte)(object)value;
}
else if (typeof(T) == typeof(sbyte))
{
register.sbyte_0 = (sbyte)(object)value;
register.sbyte_1 = (sbyte)(object)value;
register.sbyte_2 = (sbyte)(object)value;
register.sbyte_3 = (sbyte)(object)value;
register.sbyte_4 = (sbyte)(object)value;
register.sbyte_5 = (sbyte)(object)value;
register.sbyte_6 = (sbyte)(object)value;
register.sbyte_7 = (sbyte)(object)value;
register.sbyte_8 = (sbyte)(object)value;
register.sbyte_9 = (sbyte)(object)value;
register.sbyte_10 = (sbyte)(object)value;
register.sbyte_11 = (sbyte)(object)value;
register.sbyte_12 = (sbyte)(object)value;
register.sbyte_13 = (sbyte)(object)value;
register.sbyte_14 = (sbyte)(object)value;
register.sbyte_15 = (sbyte)(object)value;
}
else if (typeof(T) == typeof(ushort))
{
register.uint16_0 = (ushort)(object)value;
register.uint16_1 = (ushort)(object)value;
register.uint16_2 = (ushort)(object)value;
register.uint16_3 = (ushort)(object)value;
register.uint16_4 = (ushort)(object)value;
register.uint16_5 = (ushort)(object)value;
register.uint16_6 = (ushort)(object)value;
register.uint16_7 = (ushort)(object)value;
}
else if (typeof(T) == typeof(short))
{
register.int16_0 = (short)(object)value;
register.int16_1 = (short)(object)value;
register.int16_2 = (short)(object)value;
register.int16_3 = (short)(object)value;
register.int16_4 = (short)(object)value;
register.int16_5 = (short)(object)value;
register.int16_6 = (short)(object)value;
register.int16_7 = (short)(object)value;
}
else if (typeof(T) == typeof(uint))
{
register.uint32_0 = (uint)(object)value;
register.uint32_1 = (uint)(object)value;
register.uint32_2 = (uint)(object)value;
register.uint32_3 = (uint)(object)value;
}
else if (typeof(T) == typeof(int))
{
register.int32_0 = (int)(object)value;
register.int32_1 = (int)(object)value;
register.int32_2 = (int)(object)value;
register.int32_3 = (int)(object)value;
}
else if (typeof(T) == typeof(ulong))
{
register.uint64_0 = (ulong)(object)value;
register.uint64_1 = (ulong)(object)value;
}
else if (typeof(T) == typeof(long))
{
register.int64_0 = (long)(object)value;
register.int64_1 = (long)(object)value;
}
else if (typeof(T) == typeof(float))
{
register.single_0 = (float)(object)value;
register.single_1 = (float)(object)value;
register.single_2 = (float)(object)value;
register.single_3 = (float)(object)value;
}
else if (typeof(T) == typeof(double))
{
register.double_0 = (double)(object)value;
register.double_1 = (double)(object)value;
}
}
[System.Runtime.CompilerServices.Intrinsic]
public Vector(T[] values)
: this(values, 0)
{
}
public unsafe Vector(T[] values, int index)
{
this = default(Vector<T>);
if (values == null)
{
throw new NullReferenceException(System.SR.Arg_NullArgumentNullRef);
}
if (index < 0 || values.Length - index < Count)
{
throw new IndexOutOfRangeException(System.SR.Format(System.SR.Arg_InsufficientNumberOfElements, Count, "values"));
}
if (Vector.IsHardwareAccelerated)
{
if (typeof(T) == typeof(byte))
{
fixed (byte* ptr = ®ister.byte_0)
{
for (int i = 0; i < Count; i++)
{
ptr[i] = (byte)(object)values[i + index];
}
}
}
else if (typeof(T) == typeof(sbyte))
{
fixed (sbyte* ptr2 = ®ister.sbyte_0)
{
for (int j = 0; j < Count; j++)
{
ptr2[j] = (sbyte)(object)values[j + index];
}
}
}
else if (typeof(T) == typeof(ushort))
{
fixed (ushort* ptr3 = ®ister.uint16_0)
{
for (int k = 0; k < Count; k++)
{
ptr3[k] = (ushort)(object)values[k + index];
}
}
}
else if (typeof(T) == typeof(short))
{
fixed (short* ptr4 = ®ister.int16_0)
{
for (int l = 0; l < Count; l++)
{
ptr4[l] = (short)(object)values[l + index];
}
}
}
else if (typeof(T) == typeof(uint))
{
fixed (uint* ptr5 = ®ister.uint32_0)
{
for (int m = 0; m < Count; m++)
{
ptr5[m] = (uint)(object)values[m + index];
}
}
}
else if (typeof(T) == typeof(int))
{
fixed (int* ptr6 = ®ister.int32_0)
{
for (int n = 0; n < Count; n++)
{
ptr6[n] = (int)(object)values[n + index];
}
}
}
else if (typeof(T) == typeof(ulong))
{
fixed (ulong* ptr7 = ®ister.uint64_0)
{
for (int num = 0; num < Count; num++)
{
ptr7[num] = (ulong)(object)values[num + index];
}
}
}
else if (typeof(T) == typeof(long))
{
fixed (long* ptr8 = ®ister.int64_0)
{
for (int num2 = 0; num2 < Count; num2++)
{
ptr8[num2] = (long)(object)values[num2 + index];
}
}
}
else if (typeof(T) == typeof(float))
{
fixed (float* ptr9 = ®ister.single_0)
{
for (int num3 = 0; num3 < Count; num3++)
{
ptr9[num3] = (float)(object)values[num3 + index];
}
}
}
else
{
if (!(typeof(T) == typeof(double)))
{
return;
}
fixed (double* ptr10 = ®ister.double_0)
{
for (int num4 = 0; num4 < Count; num4++)
{
ptr10[num4] = (double)(object)values[num4 + index];
}
}
}
}
else if (typeof(T) == typeof(byte))
{
fixed (byte* ptr11 = ®ister.byte_0)
{
*ptr11 = (byte)(object)values[index];
ptr11[1] = (byte)(object)values[1 + index];
ptr11[2] = (byte)(object)values[2 + index];
ptr11[3] = (byte)(object)values[3 + index];
ptr11[4] = (byte)(object)values[4 + index];
ptr11[5] = (byte)(object)values[5 + index];
ptr11[6] = (byte)(object)values[6 + index];
ptr11[7] = (byte)(object)values[7 + index];
ptr11[8] = (byte)(object)values[8 + index];
ptr11[9] = (byte)(object)values[9 + index];
ptr11[10] = (byte)(object)values[10 + index];
ptr11[11] = (byte)(object)values[11 + index];
ptr11[12] = (byte)(object)values[12 + index];
ptr11[13] = (byte)(object)values[13 + index];
ptr11[14] = (byte)(object)values[14 + index];
ptr11[15] = (byte)(object)values[15 + index];
}
}
else if (typeof(T) == typeof(sbyte))
{
fixed (sbyte* ptr12 = ®ister.sbyte_0)
{
*ptr12 = (sbyte)(object)values[index];
ptr12[1] = (sbyte)(object)values[1 + index];
ptr12[2] = (sbyte)(object)values[2 + index];
ptr12[3] = (sbyte)(object)values[3 + index];
ptr12[4] = (sbyte)(object)values[4 + index];
ptr12[5] = (sbyte)(object)values[5 + index];
ptr12[6] = (sbyte)(object)values[6 + index];
ptr12[7] = (sbyte)(object)values[7 + index];
ptr12[8] = (sbyte)(object)values[8 + index];
ptr12[9] = (sbyte)(object)values[9 + index];
ptr12[10] = (sbyte)(object)values[10 + index];
ptr12[11] = (sbyte)(object)values[11 + index];
ptr12[12] = (sbyte)(object)values[12 + index];
ptr12[13] = (sbyte)(object)values[13 + index];
ptr12[14] = (sbyte)(object)values[14 + index];
ptr12[15] = (sbyte)(object)values[15 + index];
}
}
else if (typeof(T) == typeof(ushort))
{
fixed (ushort* ptr13 = ®ister.uint16_0)
{
*ptr13 = (ushort)(object)values[index];
ptr13[1] = (ushort)(object)values[1 + index];
ptr13[2] = (ushort)(object)values[2 + index];
ptr13[3] = (ushort)(object)values[3 + index];
ptr13[4] = (ushort)(object)values[4 + index];
ptr13[5] = (ushort)(object)values[5 + index];
ptr13[6] = (ushort)(object)values[6 + index];
ptr13[7] = (ushort)(object)values[7 + index];
}
}
else if (typeof(T) == typeof(short))
{
fixed (short* ptr14 = ®ister.int16_0)
{
*ptr14 = (short)(object)values[index];
ptr14[1] = (short)(object)values[1 + index];
ptr14[2] = (short)(object)values[2 + index];
ptr14[3] = (short)(object)values[3 + index];
ptr14[4] = (short)(object)values[4 + index];
ptr14[5] = (short)(object)values[5 + index];
ptr14[6] = (short)(object)values[6 + index];
ptr14[7] = (short)(object)values[7 + index];
}
}
else if (typeof(T) == typeof(uint))
{
fixed (uint* ptr15 = ®ister.uint32_0)
{
*ptr15 = (uint)(object)values[index];
ptr15[1] = (uint)(object)values[1 + index];
ptr15[2] = (uint)(object)values[2 + index];
ptr15[3] = (uint)(object)values[3 + index];
}
}
else if (typeof(T) == typeof(int))
{
fixed (int* ptr16 = ®ister.int32_0)
{
*ptr16 = (int)(object)values[index];
ptr16[1] = (int)(object)values[1 + index];
ptr16[2] = (int)(object)values[2 + index];
ptr16[3] = (int)(object)values[3 + index];
}
}
else if (typeof(T) == typeof(ulong))
{
fixed (ulong* ptr17 = ®ister.uint64_0)
{
*ptr17 = (ulong)(object)values[index];
ptr17[1] = (ulong)(object)values[1 + index];
}
}
else if (typeof(T) == typeof(long))
{
fixed (long* ptr18 = ®ister.int64_0)
{
*ptr18 = (long)(object)values[index];
ptr18[1] = (long)(object)values[1 + index];
}
}
else if (typeof(T) == typeof(float))
{
fixed (float* ptr19 = ®ister.single_0)
{
*ptr19 = (float)(object)values[index];
ptr19[1] = (float)(object)values[1 + index];
ptr19[2] = (float)(object)values[2 + index];
ptr19[3] = (float)(object)values[3 + index];
}
}
else if (typeof(T) == typeof(double))
{
fixed (double* ptr20 = ®ister.double_0)
{
*ptr20 = (double)(object)values[index];
ptr20[1] = (double)(object)values[1 + index];
}
}
}
internal unsafe Vector(void* dataPointer)
: this(dataPointer, 0)
{
}
internal unsafe Vector(void* dataPointer, int offset)
{
this = default(Vector<T>);
if (typeof(T) == typeof(byte))
{
byte* ptr = (byte*)dataPointer;
ptr += offset;
fixed (byte* ptr2 = ®ister.byte_0)
{
for (int i = 0; i < Count; i++)
{
ptr2[i] = ptr[i];
}
}
return;
}
if (typeof(T) == typeof(sbyte))
{
sbyte* ptr3 = (sbyte*)dataPointer;
ptr3 += offset;
fixed (sbyte* ptr4 = ®ister.sbyte_0)
{
for (int j = 0; j < Count; j++)
{
ptr4[j] = ptr3[j];
}
}
return;
}
if (typeof(T) == typeof(ushort))
{
ushort* ptr5 = (ushort*)dataPointer;
ptr5 += offset;
fixed (ushort* ptr6 = ®ister.uint16_0)
{
for (int k = 0; k < Count; k++)
{
ptr6[k] = ptr5[k];
}
}
return;
}
if (typeof(T) == typeof(short))
{
short* ptr7 = (short*)dataPointer;
ptr7 += offset;
fixed (short* ptr8 = ®ister.int16_0)
{
for (int l = 0; l < Count; l++)
{
ptr8[l] = ptr7[l];
}
}
return;
}
if (typeof(T) == typeof(uint))
{
uint* ptr9 = (uint*)dataPointer;
ptr9 += offset;
fixed (uint* ptr10 = ®ister.uint32_0)
{
for (int m = 0; m < Count; m++)
{
ptr10[m] = ptr9[m];
}
}
return;
}
if (typeof(T) == typeof(int))
{
int* ptr11 = (int*)dataPointer;
ptr11 += offset;
fixed (int* ptr12 = ®ister.int32_0)
{
for (int n = 0; n < Count; n++)
{
ptr12[n] = ptr11[n];
}
}
return;
}
if (typeof(T) == typeof(ulong))
{
ulong* ptr13 = (ulong*)dataPointer;
ptr13 += offset;
fixed (ulong* ptr14 = ®ister.uint64_0)
{
for (int num = 0; num < Count; num++)
{
ptr14[num] = ptr13[num];
}
}
return;
}
if (typeof(T) == typeof(long))
{
long* ptr15 = (long*)dataPointer;
ptr15 += offset;
fixed (long* ptr16 = ®ister.int64_0)
{
for (int num2 = 0; num2 < Count; num2++)
{
ptr16[num2] = ptr15[num2];
}
}
return;
}
if (typeof(T) == typeof(float))
{
float* ptr17 = (float*)dataPointer;
ptr17 += offset;
fixed (float* ptr18 = ®ister.single_0)
{
for (int num3 = 0; num3 < Count; num3++)
{
ptr18[num3] = ptr17[num3];
}
}
return;
}
if (typeof(T) == typeof(double))
{
double* ptr19 = (double*)dataPointer;
ptr19 += offset;
fixed (double* ptr20 = ®ister.double_0)
{
for (int num4 = 0; num4 < Count; num4++)
{
ptr20[num4] = ptr19[num4];
}
}
return;
}
throw new NotSupportedException(System.SR.Arg_TypeNotSupported);
}
private Vector(ref System.Numerics.Register existingRegister)
{
register = existingRegister;
}
[System.Runtime.CompilerServices.Intrinsic]
public void CopyTo(T[] destination)
{
CopyTo(destination, 0);
}
[System.Runtime.CompilerServices.Intrinsic]
public unsafe void CopyTo(T[] destination, int startIndex)
{
if (destination == null)
{
throw new NullReferenceException(System.SR.Arg_NullArgumentNullRef);
}
if (startIndex < 0 || startIndex >= destination.Length)
{
throw new ArgumentOutOfRangeException("startIndex", System.SR.Format(System.SR.Arg_ArgumentOutOfRangeException, startIndex));
}
if (destination.Length - startIndex < Count)
{
throw new ArgumentException(System.SR.Format(System.SR.Arg_ElementsInSourceIsGreaterThanDestination, startIndex));
}
if (Vector.IsHardwareAccelerated)
{
if (typeof(T) == typeof(byte))
{
fixed (byte* ptr = (byte[])(object)destination)
{
for (int i = 0; i < Count; i++)
{
ptr[startIndex + i] = (byte)(object)this[i];
}
}
}
else if (typeof(T) == typeof(sbyte))
{
fixed (sbyte* ptr2 = (sbyte[])(object)destination)
{
for (int j = 0; j < Count; j++)
{
ptr2[startIndex + j] = (sbyte)(object)this[j];
}
}
}
else if (typeof(T) == typeof(ushort))
{
fixed (ushort* ptr3 = (ushort[])(object)destination)
{
for (int k = 0; k < Count; k++)
{
ptr3[startIndex + k] = (ushort)(object)this[k];
}
}
}
else if (typeof(T) == typeof(short))
{
fixed (short* ptr4 = (short[])(object)destination)
{
for (int l = 0; l < Count; l++)
{
ptr4[startIndex + l] = (short)(object)this[l];
}
}
}
else if (typeof(T) == typeof(uint))
{
fixed (uint* ptr5 = (uint[])(object)destination)
{
for (int m = 0; m < Count; m++)
{
ptr5[startIndex + m] = (uint)(object)this[m];
}
}
}
else if (typeof(T) == typeof(int))
{
fixed (int* ptr6 = (int[])(object)destination)
{
for (int n = 0; n < Count; n++)
{
ptr6[startIndex + n] = (int)(object)this[n];
}
}
}
else if (typeof(T) == typeof(ulong))
{
fixed (ulong* ptr7 = (ulong[])(object)destination)
{
for (int num = 0; num < Count; num++)
{
ptr7[startIndex + num] = (ulong)(object)this[num];
}
}
}
else if (typeof(T) == typeof(long))
{
fixed (long* ptr8 = (long[])(object)destination)
{
for (int num2 = 0; num2 < Count; num2++)
{
ptr8[startIndex + num2] = (long)(object)this[num2];
}
}
}
else if (typeof(T) == typeof(float))
{
fixed (float* ptr9 = (float[])(object)destination)
{
for (int num3 = 0; num3 < Count; num3++)
{
ptr9[startIndex + num3] = (float)(object)this[num3];
}
}
}
else
{
if (!(typeof(T) == typeof(double)))
{
return;
}
fixed (double* ptr10 = (double[])(object)destination)
{
for (int num4 = 0; num4 < Count; num4++)
{
ptr10[startIndex + num4] = (double)(object)this[num4];
}
}
}
}
else if (typeof(T) == typeof(byte))
{
fixed (byte* ptr11 = (byte[])(object)destination)
{
ptr11[startIndex] = register.byte_0;
ptr11[startIndex + 1] = register.byte_1;
ptr11[startIndex + 2] = register.byte_2;
ptr11[startIndex + 3] = register.byte_3;
ptr11[startIndex + 4] = register.byte_4;
ptr11[startIndex + 5] = register.byte_5;
ptr11[startIndex + 6] = register.byte_6;
ptr11[startIndex + 7] = register.byte_7;
ptr11[startIndex + 8] = register.byte_8;
ptr11[startIndex + 9] = register.byte_9;
ptr11[startIndex + 10] = register.byte_10;
ptr11[startIndex + 11] = register.byte_11;
ptr11[startIndex + 12] = register.byte_12;
ptr11[startIndex + 13] = register.byte_13;
ptr11[startIndex + 14] = register.byte_14;
ptr11[startIndex + 15] = register.byte_15;
}
}
else if (typeof(T) == typeof(sbyte))
{
fixed (sbyte* ptr12 = (sbyte[])(object)destination)
{
ptr12[startIndex] = register.sbyte_0;
ptr12[startIndex + 1] = register.sbyte_1;
ptr12[startIndex + 2] = register.sbyte_2;
ptr12[startIndex + 3] = register.sbyte_3;
ptr12[startIndex + 4] = register.sbyte_4;
ptr12[startIndex + 5] = register.sbyte_5;
ptr12[startIndex + 6] = register.sbyte_6;
ptr12[startIndex + 7] = register.sbyte_7;
ptr12[startIndex + 8] = register.sbyte_8;
ptr12[startIndex + 9] = register.sbyte_9;
ptr12[startIndex + 10] = register.sbyte_10;
ptr12[startIndex + 11] = register.sbyte_11;
ptr12[startIndex + 12] = register.sbyte_12;
ptr12[startIndex + 13] = register.sbyte_13;
ptr12[startIndex + 14] = register.sbyte_14;
ptr12[startIndex + 15] = register.sbyte_15;
}
}
else if (typeof(T) == typeof(ushort))
{
fixed (ushort* ptr13 = (ushort[])(object)destination)
{
ptr13[startIndex] = register.uint16_0;
ptr13[startIndex + 1] = register.uint16_1;
ptr13[startIndex + 2] = register.uint16_2;
ptr13[startIndex + 3] = register.uint16_3;
ptr13[startIndex + 4] = register.uint16_4;
ptr13[startIndex + 5] = register.uint16_5;
ptr13[startIndex + 6] = register.uint16_6;
ptr13[startIndex + 7] = register.uint16_7;
}
}
else if (typeof(T) == typeof(short))
{
fixed (short* ptr14 = (short[])(object)destination)
{
ptr14[startIndex] = register.int16_0;
ptr14[startIndex + 1] = register.int16_1;
ptr14[startIndex + 2] = register.int16_2;
ptr14[startIndex + 3] = register.int16_3;
ptr14[startIndex + 4] = register.int16_4;
ptr14[startIndex + 5] = register.int16_5;
ptr14[startIndex + 6] = register.int16_6;
ptr14[startIndex + 7] = register.int16_7;
}
}
else if (typeof(T) == typeof(uint))
{
fixed (uint* ptr15 = (uint[])(object)destination)
{
ptr15[startIndex] = register.uint32_0;
ptr15[startIndex + 1] = register.uint32_1;
ptr15[startIndex + 2] = register.uint32_2;
ptr15[startIndex + 3] = register.uint32_3;
}
}
else if (typeof(T) == typeof(int))
{
fixed (int* ptr16 = (int[])(object)destination)
{
ptr16[startIndex] = register.int32_0;
ptr16[startIndex + 1] = register.int32_1;
ptr16[startIndex + 2] = register.int32_2;
ptr16[startIndex + 3] = register.int32_3;
}
}
else if (typeof(T) == typeof(ulong))
{
fixed (ulong* ptr17 = (ulong[])(object)destination)
{
ptr17[startIndex] = register.uint64_0;
ptr17[startIndex + 1] = register.uint64_1;
}
}
else if (typeof(T) == typeof(long))
{
fixed (long* ptr18 = (long[])(object)destination)
{
ptr18[startIndex] = register.int64_0;
ptr18[startIndex + 1] = register.int64_1;
}
}
else if (typeof(T) == typeof(float))
{
fixed (float* ptr19 = (float[])(object)destination)
{
ptr19[startIndex] = register.single_0;
ptr19[startIndex + 1] = register.single_1;
ptr19[startIndex + 2] = register.single_2;
ptr19[startIndex + 3] = register.single_3;
}
}
else if (typeof(T) == typeof(double))
{
fixed (double* ptr20 = (double[])(object)destination)
{
ptr20[startIndex] = register.double_0;
ptr20[startIndex + 1] = register.double_1;
}
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj)
{
if (!(obj is Vector<T>))
{
return false;
}
return Equals((Vector<T>)obj);
}
[System.Runtime.CompilerServices.Intrinsic]
public bool Equals(Vector<T> other)
{
if (Vector.IsHardwareAccelerated)
{
for (int i = 0; i < Count; i++)
{
if (!ScalarEquals(this[i], other[i]))
{
return false;
}
}
return true;
}
if (typeof(T) == typeof(byte))
{
if (register.byte_0 == other.register.byte_0 && register.byte_1 == other.register.byte_1 && register.byte_2 == other.register.byte_2 && register.byte_3 == other.register.byte_3 && register.byte_4 == other.register.byte_4 && register.byte_5 == other.register.byte_5 && register.byte_6 == other.register.byte_6 && register.byte_7 == other.register.byte_7 && register.byte_8 == other.register.byte_8 && register.byte_9 == other.register.byte_9 && register.byte_10 == other.register.byte_10 && register.byte_11 == other.register.byte_11 && register.byte_12 == other.register.byte_12 && register.byte_13 == other.register.byte_13 && register.byte_14 == other.register.byte_14)
{
return register.byte_15 == other.register.byte_15;
}
return false;
}
if (typeof(T) == typeof(sbyte))
{
if (register.sbyte_0 == other.register.sbyte_0 && register.sbyte_1 == other.register.sbyte_1 && register.sbyte_2 == other.register.sbyte_2 && register.sbyte_3 == other.register.sbyte_3 && register.sbyte_4 == other.register.sbyte_4 && register.sbyte_5 == other.register.sbyte_5 && register.sbyte_6 == other.register.sbyte_6 && register.sbyte_7 == other.register.sbyte_7 && register.sbyte_8 == other.register.sbyte_8 && register.sbyte_9 == other.register.sbyte_9 && register.sbyte_10 == other.register.sbyte_10 && register.sbyte_11 == other.register.sbyte_11 && register.sbyte_12 == other.register.sbyte_12 && register.sbyte_13 == other.register.sbyte_13 && register.sbyte_14 == other.register.sbyte_14)
{
return register.sbyte_15 == other.register.sbyte_15;
}
return false;
}
if (typeof(T) == typeof(ushort))
{
if (register.uint16_0 == other.register.uint16_0 && register.uint16_1 == other.register.uint16_1 && register.uint16_2 == other.register.uint16_2 && register.uint16_3 == other.register.uint16_3 && register.uint16_4 == other.register.uint16_4 && register.uint16_5 == other.register.uint16_5 && register.uint16_6 == other.register.uint16_6)
{
return register.uint16_7 == other.register.uint16_7;
}
return false;
}
if (typeof(T) == typeof(short))
{
if (register.int16_0 == other.register.int16_0 && register.int16_1 == other.register.int16_1 && register.int16_2 == other.register.int16_2 && register.int16_3 == other.register.int16_3 && register.int16_4 == other.register.int16_4 && register.int16_5 == other.register.int16_5 && register.int16_6 == other.register.int16_6)
{
return register.int16_7 == other.register.int16_7;
}
return false;
}
if (typeof(T) == typeof(uint))
{
if (register.uint32_0 == other.register.uint32_0 && register.uint32_1 == other.register.uint32_1 && register.uint32_2 == other.register.uint32_2)
{
return register.uint32_3 == other.register.uint32_3;
}
return false;
}
if (typeof(T) == typeof(int))
{
if (register.int32_0 == other.register.int32_0 && register.int32_1 == other.register.int32_1 && register.int32_2 == other.register.int32_2)
{
return register.int32_3 == other.register.int32_3;
}
return false;
}
if (typeof(T) == typeof(ulong))
{
if (register.uint64_0 == other.register.uint64_0)
{
return register.uint64_1 == other.register.uint64_1;
}
return false;
}
if (typeof(T) == typeof(long))
{
if (register.int64_0 == other.register.int64_0)
{
return register.int64_1 == other.register.int64_1;
}
return false;
}
if (typeof(T) == typeof(float))
{
if (register.single_0 == other.register.single_0 && register.single_1 == other.register.single_1 && register.single_2 == other.register.single_2)
{
return register.single_3 == other.register.single_3;
}
return false;
}
if (typeof(T) == typeof(double))
{
if (register.double_0 == other.register.double_0)
{
return register.double_1 == other.register.double_1;
}
return false;
}
throw new NotSupportedException(System.SR.Arg_TypeNotSupported);
}
public override int GetHashCode()
{
int num = 0;
if (Vector.IsHardwareAccelerated)
{
if (typeof(T) == typeof(byte))
{
for (int i = 0; i < Count; i++)
{
num = HashHelpers.Combine(num, ((byte)(object)this[i]).GetHashCode());
}
return num;
}
if (typeof(T) == typeof(sbyte))
{
for (int j = 0; j < Count; j++)
{
num = HashHelpers.Combine(num, ((sbyte)(object)this[j]).GetHashCode());
}
return num;
}
if (typeof(T) == typeof(ushort))
{
for (int k = 0; k < Count; k++)
{
num = HashHelpers.Combine(num, ((ushort)(object)this[k]).GetHashCode());
}
return num;
}
if (typeof(T) == typeof(short))
{
for (int l = 0; l < Count; l++)
{
num = HashHelpers.Combine(num, ((short)(object)this[l]).GetHashCode());
}
return num;
}
if (typeof(T) == typeof(uint))
{
for (int m = 0; m < Count; m++)
{
num = HashHelpers.Combine(num, ((uint)(object)this[m]).GetHashCode());
}
return num;
}
if (typeof(T) == typeof(int))
{
for (int n = 0; n < Count; n++)
{
num = HashHelpers.Combine(num, ((int)(object)this[n]).GetHashCode());
}
return num;
}
if (typeof(T) == typeof(ulong))
{
for (int num2 = 0; num2 < Count; num2++)
{
num = HashHelpers.Combine(num, ((ulong)(object)this[num2]).GetHashCode());
}
return num;
}
if (typeof(T) == typeof(long))
{
for (int num3 = 0; num3 < Count; num3++)
{
num = HashHelpers.Combine(num, ((long)(object)this[num3]).GetHashCode());
}
return num;
}
if (typeof(T) == typeof(float))
{
for (int num4 = 0; num4 < Count; num4++)
{
num = HashHelpers.Combine(num, ((float)(object)this[num4]).GetHashCode());
}
return num;
}
if (typeof(T) == typeof(double))
{
for (int num5 = 0; num5 < Count; num5++)
{
num = HashHelpers.Combine(num, ((double)(object)this[num5]).GetHashCode());
}
return num;
}
throw new NotSupportedException(System.SR.Arg_TypeNotSupported);
}
if (typeof(T) == typeof(byte))
{
num = HashHelpers.Combine(num, register.byte_0.GetHashCode());
num = HashHelpers.Combine(num, register.byte_1.GetHashCode());
num = HashHelpers.Combine(num, register.byte_2.GetHashCode());
num = HashHelpers.Combine(num, register.byte_3.GetHashCode());
num = HashHelpers.Combine(num, register.byte_4.GetHashCode());
num = HashHelpers.Combine(num, register.byte_5.GetHashCode());
num = HashHelpers.Combine(num, register.byte_6.GetHashCode());
num = HashHelpers.Combine(num, register.byte_7.GetHashCode());
num = HashHelpers.Combine(num, register.byte_8.GetHashCode());
num = HashHelpers.Combine(num, register.byte_9.GetHashCode());
num = HashHelpers.Combine(num, register.byte_10.GetHashCode());
num = HashHelpers.Combine(num, register.byte_11.GetHashCode());
num = HashHelpers.Combine(num, register.byte_12.GetHashCode());
num = HashHelpers.Combine(num, register.byte_13.GetHashCode());
num = HashHelpers.Combine(num, register.byte_14.GetHashCode());
return HashHelpers.Combine(num, register.byte_15.GetHashCode());
}
if (typeof(T) == typeof(sbyte))
{
num = HashHelpers.Combine(num, register.sbyte_0.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_1.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_2.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_3.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_4.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_5.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_6.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_7.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_8.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_9.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_10.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_11.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_12.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_13.GetHashCode());
num = HashHelpers.Combine(num, register.sbyte_14.GetHashCode());
return HashHelpers.Combine(num, register.sbyte_15.GetHashCode());
}
if (typeof(T) == typeof(ushort))
{
num = HashHelpers.Combine(num, register.uint16_0.GetHashCode());
num = HashHelpers.Combine(num, register.uint16_1.GetHashCode());
num = HashHelpers.Combine(num, register.uint16_2.GetHashCode());
num = HashHelpers.Combine(num, register.uint16_3.GetHashCode());
num = HashHelpers.Combine(num, register.uint16_4.GetHashCode());
num = HashHelpers.Combine(num, register.uint16_5.GetHashCode());
num = HashHelpers.Combine(num, register.uint16_6.GetHashCode());
return HashHelpers.Combine(num, register.uint16_7.GetHashCode());
}
if (typeof(T) == typeof(short))
{
num = HashHelpers.Combine(num, register.int16_0.GetHashCode());
num = HashHelpers.Combine(num, register.int16_1.GetHashCode());
num = HashHelpers.Combine(num, register.int16_2.GetHashCode());
num = HashHelpers.Combine(num, register.int16_3.GetHashCode());
num = HashHelpers.Combine(num, register.int16_4.GetHashCode());
num = HashHelpers.Combine(num, register.int16_5.GetHashCode());
num = HashHelpers.Combine(num, register.int16_6.GetHashCode());
return HashHelpers.Combine(num, register.int16_7.GetHashCode());
}
if (typeof(T) == typeof(uint))
{
num = HashHelpers.Combine(num, register.uint32_0.GetHashCode());
num = HashHelpers.Combine(num, register.uint32_1.GetHashCode());
num = HashHelpers.Combine(num, register.uint32_2.GetHashCode());
return HashHelpers.Combine(num, register.uint32_3.GetHashCode());
}
if (typeof(T) == typeof(int))
{
num = HashHelpers.Combine(num, register.int32_0.GetHashCode());
num = HashHelpers.Combine(num, register.int32_1.GetHashCode());
num = HashHelpers.Combine(num, register.int32_2.GetHashCode());
return HashHelpers.Combine(num, register.int32_3.GetHashCode());
}
if (typeof(T) == typeof(ulong))
{
num = HashHelpers.Combine(num, register.uint64_0.GetHashCode());
return HashHelpers.Combine(num, register.uint64_1.GetHashCode());
}
if (typeof(T) == typeof(long))
{
num = HashHelpers.Combine(num, register.int64_0.GetHashCode());
return HashHelpers.Combine(num, register.int64_1.GetHashCode());
}
if (typeof(T) == typeof(float))
{
num = HashHelpers.Combine(num, register.single_0.GetHashCode());
num = HashHelpers.Combine(num, register.single_1.GetHashCode());
num = HashHelpers.Combine(num, register.single_2.GetHashCode());
return HashHelpers.Combine(num, register.single_3.GetHashCode());
}
if (typeof(T) == typeof(double))
{
num = HashHelpers.Combine(num, register.double_0.GetHashCode());
return HashHelpers.Combine(num, register.double_1.GetHashCode());
}
throw new NotSupportedException(System.SR.Arg_TypeNotSupported);
}
public override string ToString()
{
return ToString("G", CultureInfo.CurrentCulture);
}
public string ToString(string format)
{
return ToString(format, CultureInfo.CurrentCulture);
}
public string ToString(string format, IFormatProvider formatProvider)
{
StringBuilder stringBuilder = new StringBuilder();
string numberGroupSeparator = NumberFormatInfo.GetInstance(formatProvider).NumberGroupSeparator;
stringBuilder.Append('<');
for (int i = 0; i < Count - 1; i++)
{
stringBuilder.Append(((IFormattable)(object)this[i]).ToString(format, formatProvider));
stringBuilder.Append(numberGroupSeparator);
stringBuilder.Append(' ');
}
stringBuilder.Append(((IFormattable)(object)this[Count - 1]).ToString(format, formatProvider));
stringBuilder.Append('>');
return stringBuilder.ToString();
}
public unsafe static Vector<T>operator +(Vector<T> left, Vector<T> right)
{
if (Vector.IsHardwareAccelerated)
{
if (typeof(T) == typeof(byte))
{
byte* ptr = stackalloc byte[(int)(uint)Count];
for (int i = 0; i < Count; i++)
{
ptr[i] = (byte)(object)ScalarAdd(left[i], right[i]);
}
return new Vector<T>(ptr);
}
if (typeof(T) == typeof(sbyte))
{
sbyte* ptr2 = stackalloc sbyte[(int)(uint)Count];
for (int j = 0; j < Count; j++)
{
ptr2[j] = (sbyte)(object)ScalarAdd(left[j], right[j]);
}
return new Vector<T>(ptr2);
}
if (typeof(T) == typeof(ushort))
{
ushort* ptr3 = stackalloc ushort[Count];
for (int k = 0; k < Count; k++)
{
ptr3[k] = (ushort)(object)ScalarAdd(left[k], right[k]);
}
return new Vector<T>(ptr3);
}
if (typeof(T) == typeof(short))
{
short* ptr4 = stackalloc short[Count];
for (int l = 0; l < Count; l++)
{
ptr4[l] = (short)(object)ScalarAdd(left[l], right[l]);
}
return new Vector<T>(ptr4);
}
if (typeof(T) == typeof(uint))
{
uint* ptr5 = stackalloc uint[Count];
for (int m = 0; m < Count; m++)
{
ptr5[m] = (uint)(object)ScalarAdd(left[m], right[m]);
}
return new Vector<T>(ptr5);
}
if (typeof(T) == typeof(int))
{
int* ptr6 = stackalloc int[Count];
for (int n = 0; n < Count; n++)
{
ptr6[n] = (int)(object)ScalarAdd(left[n], right[n]);
}
return new Vector<T>(ptr6);
}
if (typeof(T) == typeof(ulong))
{
ulong* ptr7 = stackalloc ulong[Count];
for (int num = 0; num < Count; num++)
{
ptr7[num] = (ulong)(object)ScalarAdd(left[num], right[num]);
}
return new Vector<T>(ptr7);
}
if (typeof(T) == typeof(long))
{
long* ptr8 = stackalloc long[Count];
for (int num2 = 0; num2 < Count; num2++)
{
ptr8[num2] = (long)(object)ScalarAdd(left[num2], right[num2]);
}
return new Vector<T>(ptr8);
}
if (typeof(T) == typeof(float))
{
float* ptr9 = stackalloc float[Count];
for (int num3 = 0; num3 < Count; num3++)
{
ptr9[num3] = (float)(object)ScalarAdd(left[num3], right[num3]);
}
return new Vector<T>(ptr9);
}
if (typeof(T) == typeof(double))
{
double* ptr10 = stackalloc double[Count];
for (int num4 = 0; num4 < Count; num4++)
{
ptr10[num4] = (double)(object)ScalarAdd(left[num4], right[num4]);
}
return new Vector<T>(ptr10);
}
throw new NotSupportedException(System.SR.Arg_TypeNotSupported);
}
Vector<T> result = default(Vector<T>);
if (typeof(T) == typeof(byte))
{
result.register.byte_0 = (byte)(left.register.byte_0 + right.register.byte_0);
result.register.byte_1 = (byte)(left.register.byte_1 + right.register.byte_1);
result.register.byte_2 = (byte)(left.register.byte_2 + right.register.byte_2);
result.register.byte_3 = (byte)(left.register.byte_3 + right.register.byte_3);
result.register.byte_4 = (byte)(left.register.byte_4 + right.register.byte_4);
result.register.byte_5 = (byte)(left.register.byte_5 + right.register.byte_5);
result.register.byte_6 = (byte)(left.register.byte_6 + right.register.byte_6);
result.register.byte_7 = (byte)(left.register.byte_7 + right.register.byte_7);
result.register.byte_8 = (byte)(left.register.byte_8 + right.register.byte_8);
result.register.byte_9 = (byte)(left.register.byte_9 + right.register.byte_9);
result.register.byte_10 = (byte)(left.register.byte_10 + right.register.byte_10);
result.register.byte_11 = (byte)(left.register.byte_11 + right.register.byte_11);
result.register.byte_12 = (byte)(left.register.byte_12 + right.register.byte_12);
result.register.byte_13 = (byte)(left.register.byte_13 + right.register.byte_13);
result.register.byte_14 = (byte)(left.register.byte_14 + right.register.byte_14);
result.register.byte_15 = (byte)(left.register.byte_15 + right.register.byte_15);
}
else if (typeof(T) == typeof(sbyte))
{
result.register.sbyte_0 = (sbyte)(left.register.sbyte_0 + right.register.sbyte_0);
result.register.sbyte_1 = (sbyte)(left.register.sbyte_1 + right.register.sbyte_1);
result.register.sbyte_2 = (sbyte)(left.register.sbyte_2 + right.register.sbyte_2);
result.register.sbyte_3 = (sbyte)(left.register.sbyte_3 + right.register.sbyte_3);
result.register.sbyte_4 = (sbyte)(left.register.sbyte_4 + right.register.sbyte_4);
result.register.sbyte_5 = (sbyte)(left.register.sbyte_5 + right.register.sbyte_5);
result.register.sbyte_6 = (sbyte)(left.register.sbyte_6 + right.register.sbyte_6);
result.register.sbyte_7 = (sbyte)(left.register.sbyte_7 + right.register.sbyte_7);
result.register.sbyte_8 = (sbyte)(left.register.sbyte_8 + right.register.sbyte_8);
result.register.sbyte_9 = (sbyte)(left.register.sbyte_9 + right.register.sbyte_9);
result.register.sbyte_10 = (sbyte)(left.register.sbyte_10 + right.register.sbyte_10);
result.register.sbyte_11 = (sbyte)(left.register.sbyte_11 + right.register.sbyte_11);
result.register.sbyte_12 = (sbyte)(left.register.sbyte_12 + right.register.sbyte_12);
result.register.sbyte_13 = (sbyte)(left.register.sbyte_13 + right.register.sbyte_13);
result.register.sbyte_14 = (sbyte)(left.register.sbyte_14 + right.register.sbyte_14);
result.register.sbyte_15 = (sbyte)(left.register.sbyte_15 + right.register.sbyte_15);
}
else if (typeof(T) == typeof(ushort))
{
result.register.uint16_0 = (ushort)(left.register.uint16_0 + right.register.uint16_0);
result.register.uint16_1 = (ushort)(left.register.uint16_1 + right.register.uint16_1);
result.register.uint16_2 = (ushort)(left.register.uint16_2 + right.register.uint16_2);
result.register.uint16_3 = (ushort)(left.register.uint16_3 + right.register.uint16_3);
result.register.uint16_4 = (ushort)(left.register.uint16_4 + right.register.uint16_4);
result.register.uint16_5 = (ushort)(left.register.uint16_5 + right.register.uint16_5);
result.register.uint16_6 = (ushort)(left.register.uint16_6 + right.register.uint16_6);
result.register.uint16_7 = (ushort)(left.register.uint16_7 + right.register.uint16_7);
}
else if (typeof(T) == typeof(short))
{
result.register.int16_0 = (short)(left.register.int16_0 + right.register.int16_0);
result.register.int16_1 = (short)(left.register.int16_1 + right.register.int16_1);
result.register.int16_2 = (short)(left.register.int16_2 + right.register.int16_2);
result.register.int16_3 = (short)(left.register.int16_3 + right.register.int16_3);
result.register.int16_4 = (short)(left.register.int16_4 + right.register.int16_4);
result.register.int16_5 = (short)(left.register.int16_5 + right.register.int16_5);
result.register.int16_6 = (short)(left.register.int16_6 + right.register.int16_6);
result.register.int16_7 = (short)(left.register.int16_7 + right.register.int16_7);
}
else if (typeof(T) == typeof(uint))
{
result.register.uint32_0 = left.register.uint32_0 + right.register.uint32_0;
result.register.uint32_1 = left.register.uint32_1 + right.register.uint32_1;
result.register.uint32_2 = left.register.uint32_2 + right.register.uint32_2;
result.register.uint32_3 = left.register.uint32_3 + right.register.uint32_3;
}
else if (typeof(T) == typeof(int))
{
result.register.int32_0 = left.register.int32_0 + right.register.int32_0;
result.register.int32_1 = left.register.int32_1 + right.register.int32_1;
result.register.int32_2 = left.register.int32_2 + right.register.int32_2;
result.register.int32_3 = left.register.int32_3 + right.register.int32_3;
}
else if (typeof(T) == typeof(ulong))
{
result.register.uint64_0 = left.register.uint64_0 + right.register.uint64_0;
result.register.uint64_1 = left.register.uint64_1 + right.register.uint64_1;
}
else if (typeof(T) == typeof(long))
{
result.register.int64_0 = left.register.int64_0 + right.register.int64_0;
result.register.int64_1 = left.register.int64_1 + right.register.int64_1;
}
else if (typeof(T) == typeof(float))
{
result.register.single_0 = left.register.single_0 + right.register.single_0;
result.register.single_1 = left.register.single_1 + right.register.single_1;
result.register.single_2 = left.register.single_2 + right.register.single_2;
result.register.single_3 = left.register.single_3 + right.register.single_3;
}
else if (typeof(T) == typeof(double))
{
result.register.double_0 = left.register.double_0 + right.register.double_0;
result.register.double_1 = left.register.double_1 + right.register.double_1;
}
return result;
}
public unsafe static Vector<T>operator -(Vector<T> left, Vector<T> right)
{
if (Vector.IsHardwareAccelerated)
{
if (typeof(T) == typeof(byte))
{
byte* ptr = stackalloc byte[(int)(uint)Count];
for (int i = 0; i < Count; i++)
{
ptr[i] = (byte)(object)ScalarSubtract(left[i], right[i]);
}
return new Vector<T>(ptr);
}
if (typeof(T) == typeof(sbyte))
{
sbyte* ptr2 = stackalloc sbyte[(int)(uint)Count];
for (int j = 0; j < Count; j++)
{
ptr2[j] = (sbyte)(object)ScalarSubtract(left[j], right[j]);
}
return new Vector<T>(ptr2);
}
if (typeof(T) == typeof(ushort))
{
ushort* ptr3 = stackalloc ushort[Count];
for (int k = 0; k < Count; k++)
{
ptr3[k] = (ushort)(object)ScalarSubtract(left[k], right[k]);
}
return new Vector<T>(ptr3);
}
if (typeof(T) == typeof(short))
{
short* ptr4 = stackalloc short[Count];
for (int l = 0; l < Count; l++)
{
ptr4[l] = (short)(object)ScalarSubtract(left[l], right[l]);
}
return new Vector<T>(ptr4);
}
if (typeof(T) == typeof(uint))
{
uint* ptr5 = stackalloc uint[Count];
for (int m = 0; m < Count; m++)
{
ptr5[m] = (uint)(object)ScalarSubtract(left[m], right[m]);
}
return new Vector<T>(ptr5);
}
if (typeof(T) == typeof(int))
{
int* ptr6 = stackalloc int[Count];
for (int n = 0; n < Count; n++)
{
ptr6[n] = (int)(object)ScalarSubtract(left[n], right[n]);
}
return new Vector<T>(ptr6);
}
if (typeof(T) == typeof(ulong))
{
ulong* ptr7 = stackalloc ulong[Count];
for (int num = 0; num < Count; num++)
{
ptr7[num] = (ulong)(object)ScalarSubtract(left[num], right[num]);
}
return new Vector<T>(ptr7);
}
if (typeof(T) == typeof(long))
{
long* ptr8 = stackalloc long[Count];
for (int num2 = 0; num2 < Count; num2++)
{
ptr8[num2] = (long)(object)ScalarSubtract(left[num2], right[num2]);
}
return new Vector<T>(ptr8);
}
if (typeof(T) == typeof(float))
{
float* ptr9 = stackalloc float[Count];
for (int num3 = 0; num3 < Count; num3++)
{
ptr9[num3] = (float)(object)ScalarSubtract(left[num3], right[num3]);
}
return new Vector<T>(ptr9);
}
if (typeof(T) == typeof(double))
{
double* ptr10 = stackalloc double[Count];
for (int num4 = 0; num4 < Count; num4++)
{
ptr10[num4] = (double)(object)ScalarSubtract(left[num4], right[num4]);
}
return new Vector<T>(ptr10);
}
throw new NotSupportedException(System.SR.Arg_TypeNotSupported);
}
Vector<T> result = default(Vector<T>);
if (typeof(T) == typeof(byte))
{
result.register.byte_0 = (byte)(left.register.byte_0 - right.register.byte_0);
result.register.byte_1 = (byte)(left.register.byte_1 - right.register.byte_1);
result.register.byte_2 = (byte)(left.register.byte_2 - right.register.byte_2);
result.register.byte_3 = (byte)(left.register.byte_3 - right.register.byte_3);
result.register.byte_4 = (byte)(left.register.byte_4 - right.register.byte_4);
result.register.byte_5 = (byte)(left.register.byte_5 - right.register.byte_5);
result.register.byte_6 = (byte)(left.register.byte_6 - right.register.byte_6);
result.register.byte_7 = (byte)(left.register.byte_7 - right.register.byte_7);
result.register.byte_8 = (byte)(left.register.byte_8 - right.register.byte_8);
result.register.byte_9 = (byte)(left.register.byte_9 - right.register.byte_9);
result.register.byte_10 = (byte)(left.register.byte_10 - right.register.byte_10);
result.register.byte_11 = (byte)(left.register.byte_11 - right.register.byte_11);
result.register.byte_12 = (byte)(left.register.byte_12 - right.register.byte_12);
result.register.byte_13 = (byte)(left.register.byte_13 - right.register.byte_13);
result.register.byte_14 = (byte)(left.register.byte_14 - right.register.byte_14);
result.register.byte_15 = (byte)(left.register.byte_15 - right.register.byte_15);
}
else if (typeof(T) == typeof(sbyte))
{
result.register.sbyte_0 = (sbyte)(left.register.sbyte_0 - right.register.sbyte_0);
result.register.sbyte_1 = (sbyte)(left.register.sbyte_1 - right.register.sbyte_1);
result.register.sbyte_2 = (sbyte)(left.register.sbyte_2 - right.register.sbyte_2);
result.register.sbyte_3 = (sbyte)(left.register.sbyte_3 - right.register.sbyte_3);
result.register.sbyte_4 = (sbyte)(left.register.sbyte_4 - right.register.sbyte_4);
result.register.sbyte_5 = (sbyte)(left.register.sbyte_5 - right.register.sbyte_5);
result.register.sbyte_6 = (sbyte)(left.register.sbyte_6 - right.register.sbyte_6);
result.register.sbyte_7 = (sbyte)(left.register.sbyte_7 - right.register.sbyte_7);
result.register.sbyte_8 = (sbyte)(left.register.sbyte_8 - right.register.sbyte_8);
result.register.sbyte_9 = (sbyte)(left.register.sbyte_9 - right.register.sbyte_9);
result.register.sbyte_10 = (sbyte)(left.register.sbyte_10 - right.register.sbyte_10);
result.register.sbyte_11 = (sbyte)(left.register.sbyte_11 - right.register.sbyte_11);
result.register.sbyte_12 = (sbyte)(left.register.sbyte_12 - right.register.sbyte_12);
result.register.sbyte_13 = (sbyte)(left.register.sbyte_13 - right.register.sbyte_13);
result.register.sbyte_14 = (sbyte)(left.register.sbyte_14 - right.register.sbyte_14);
result.register.sbyte_15 = (sbyte)(left.register.sbyte_15 - right.register.sbyte_15);
}
else if (typeof(T) == typeof(ushort))
{
result.register.uint16_0 = (ushort)(left.register.uint16_0 - right.register.uint16_0);
result.register.uint16_1 = (ushort)(left.register.uint16_1 - right.register.uint16_1);
result.register.uint16_2 = (ushort)(left.register.uint16_2 - right.register.uint16_2);
result.register.uint16_3 = (ushort)(left.register.uint16_3 - right.register.uint16_3);
result.register.uint16_4 = (ushort)(left.register.uint16_4 - right.register.uint16_4);
result.register.uint16_5 = (ushort)(left.register.uint16_5 - right.register.uint16_5);
result.register.uint16_6 = (ushort)(left.register.uint16_6 - right.register.uint16_6);
result.register.uint16_7 = (ushort)(left.register.uint16_7 - right.register.uint16_7);
}
else if (typeof(T) == typeof(short))
{
result.register.int16_0 = (short)(left.register.int16_0 - right.register.int16_0);
result.register.int16_1 = (short)(left.register.int16_1 - right.register.int16_1);
result.register.int16_2 = (short)(left.register.int16_2 - right.register.int16_2);
result.register.int16_3 = (short)(left.register.int16_3 - right.register.int16_3);
result.register.int16_4 = (short)(left.register.int16_4 - right.register.int16_4);
result.register.int16_5 = (short)(left.register.int16_5 - right.register.int16_5);
result.register.int16_6 = (short)(left.register.int16_6 - right.register.int16_6);
result.register.int16_7 = (short)(left.register.int16_7 - right.register.int16_7);
}
else if (typeof(T) == typeof(uint))
{
result.register.uint32_0 = left.register.uint32_0 - right.register.uint32_0;
result.register.uint32_1 = left.register.uint32_1 - right.register.uint32_1;
result.register.uint32_2 = left.register.uint32_2 - right.register.uint32_2;
result.register.uint32_3 = left.register.uint32_3 - right.register.uint32_3;
}
else if (typeof(T) == typeof(int))
{
result.register.int32_0 = left.register.int32_0 - right.register.int32_0;
result.register.int32_1 = left.register.int32_1 - right.register.int32_1;
result.register.int32_2 = left.register.int32_2 - right.register.int32_2;
result.register.int32_3 = left.register.int32_3 - right.register.int32_3;
}
else if (typeof(T) == typeof(ulong))
{
result.register.uint64_0 = left.register.uint64_0 - right.register.uint64_0;
result.register.uint64_1 = left.register.uint64_1 - right.register.uint64_1;
}
else if (typeof(T) == typeof(long))
{
result.register.int64_0 = left.register.int64_0 - right.register.int64_0;
result.register.int64_1 = left.register.int64_1 - right.register.int64_1;
}
else if (typeof(T) == typeof(float))
{
result.register.single_0 = left.register.single_0 - right.register.single_0;
result.register.single_1 = left.register.single_1 - right.register.single_1;
result.register.single_2 = left.register.single_2 - right.register.single_2;
result.register.single_3 = left.register.single_3 - right.register.single_3;
}
else if (typeof(T) == typeof(double))
{
result.register.double_0 = left.register.double_0 - right.register.double_0;
result.register.double_1 = left.register.double_1 - right.register.double_1;
}
return result;
}
public unsafe static Vector<T>operator *(Vector<T> left, Vector<T> right)
{
if (Vector.IsHardwareAccelerated)
{
if (typeof(T) == typeof(byte))
{
byte* ptr = stackalloc byte[(int)(uint)Count];
for (int i = 0; i < Count; i++)
{
ptr[i] = (byte)(object)ScalarMultiply(left[i], right[i]);
}
return new Vector<T>(ptr);
}
if (typeof(T) == typeof(sbyte))
{
sbyte* ptr2 = stackalloc sbyte[(int)(uint)Count];
for (int j = 0; j < Count; j++)
{
ptr2[j] = (sbyte)(object)ScalarMultiply(left[j], right[j]);
}
return new Vector<T>(ptr2);
}
if (typeof(T) == typeof(ushort))
{
ushort* ptr3 = stackalloc ushort[Count];
for (int k = 0; k < Count; k++)
{
ptr3[k] = (ushort)(object)ScalarMultiply(left[k], right[k]);
}
return new Vector<T>(ptr3);
}
if (typeof(T) == typeof(short))
{
short* ptr4 = stackalloc short[Count];
for (int l = 0; l < Count; l++)
{
ptr4[l] = (short)(object)ScalarMultiply(left[l], right[l]);
}
return new Vector<T>(ptr4);
}
if (typeof(T) == typeof(uint))
{
uint* ptr5 = stackalloc uint[Count];
for (int m = 0; m < Count; m++)
{
ptr5[m] = (uint)(object)ScalarMultiply(left[m], right[m]);
}
return new Vector<T>(ptr5);
}
if (typeof(T) == typeof(int))
{
int* ptr6 = stackalloc int[Count];
for (int n = 0; n < Count; n++)
{
ptr6[n] = (int)(object)ScalarMultiply(left[n], right[n]);
}
return new Vector<T>(ptr6);
}
if (typeof(T) == typeof(ulong))
{
ulong* ptr7 = stackalloc ulong[Count];
for (int num = 0; num < Count; num++)
{
ptr7[num] = (ulong)(object)ScalarMultiply(left[num], right[num]);
}
return new Vector<T>(ptr7);
}
if (typeof(T) == typeof(long))
{
long* ptr8 = stackalloc long[Count];
for (int num2 = 0; num2 < Count; num2++)
{
ptr8[num2] = (long)(object)ScalarMultiply(left[num2], right[num2]);
}
return new Vector<T>(ptr8);
}
if (typeof(T) == typeof(float))
{
float* ptr9 = stackalloc float[Count];
for (int num3 = 0; num3 < Count; num3++)
{
ptr9[num3] = (float)(object)ScalarMultiply(left[num3], right[num3]);
}
return new Vector<T>(ptr9);
}
if (typeof(T) == typeof(double))
{
double* ptr10 = stackalloc double[Count];
for (int num4 = 0; num4 < Count; num4++)
{
ptr10[num4] = (double)(object)ScalarMultiply(left[num4], right[num4]);
}
return new Vector<T>(ptr10);
}
throw new NotSupportedException(System.SR.Arg_TypeNotSupported);
}
Vector<T> result = default(Vector<T>);
if (typeof(T) == typeof(byte))
{
result.register.byte_0 = (byte)(left.register.byte_0 * right.register.byte_0);
result.register.byte_1 = (byte)(left.register.byte_1 * right.register.byte_1);
result.register.byte_2 = (byte)(left.register.byte_2 * right.register.byte_2);
result.register.byte_3 = (byte)(left.register.byte_3 * right.register.byte_3);
result.register.byte_4 = (byte)(left.register.byte_4 * right.register.byte_4);
result.register.byte_5 = (byte)(left.register.byte_5 * right.register.byte_5);
result.register.byte_6 = (byte)(left.register.byte_6 * right.register.byte_6);
result.register.byte_7 = (byte)(left.register.byte_7 * right.register.byte_7);
result.register.byte_8 = (byte)(left.register.byte_8 * right.register.byte_8);
result.register.byte_9 = (byte)(left.register.byte_9 * right.register.byte_9);
result.register.byte_10 = (byte)(left.register.byte_10 * right.register.byte_10);
result.register.byte_11 = (byte)(left.register.byte_11 * right.register.byte_11);
result.register.byte_12 = (byte)(left.register.byte_12 * right.register.byte_12);
result.register.byte_13 = (byte)(left.register.byte_13 * right.register.byte_13);
result.register.byte_14 = (byte)(left.register.byte_14 * right.register.byte_14);
result.register.byte_15 = (byte)(left.register.byte_15 * right.register.byte_15);
}
else if (typeof(T) == typeof(sbyte))
{
result.register.sbyte_0 = (sbyte)(left.register.sbyte_0 * right.register.sbyte_0);
result.register.sbyte_1 = (sbyte)(left.register.sbyte_1 * right.register.sbyte_1);
result.register.sbyte_2 = (sbyte)(left.register.sbyte_2 * right.register.sbyte_2);
result.register.sbyte_3 = (sbyte)(left.register.sbyte_3 * right.register.sbyte_3);
result.register.sbyte_4 = (sbyte)(left.register.sbyte_4 * right.register.sbyte_4);
result.register.sbyte_5 = (sbyte)(left.register.sbyte_5 * right.register.sbyte_5);
result.register.sbyte_6 = (sbyte)(left.register.sbyte_6 * right.register.sbyte_6);
result.register.sbyte_7 = (sbyte)(left.register.sbyte_7 * right.register.sbyte_7);
result.register.sbyte_8 = (sbyte)(left.register.sbyte_8 * right.register.sbyte_8);
result.register.sbyte_9 = (sbyte)(left.register.sbyte_9 * right.register.sbyte_9);
result.register.sbyte_10 = (sbyte)(left.register.sbyte_10 * right.register.sbyte_10);
result.register.sbyte_11 = (sbyte)(left.register.sbyte_11 * right.register.sbyte_11);
result.register.sbyte_12 = (sbyte)(left.register.sbyte_12 * right.register.sbyte_12);
result.register.sbyte_13 = (sbyte)(left.register.sbyte_13 * right.register.sbyte_13);
result.register.sbyte_14 = (sbyte)(left.register.sbyte_14 * right.register.sbyte_14);
result.register.sbyte_15 = (sbyte)(left.register.sbyte_15 * right.register.sbyte_15);
}
else if (typeof(T) == typeof(ushort))
{
result.register.uint16_0 = (ushort)(left.register.uint16_0 * right.register.uint16_0);
result.register.uint16_1 = (ushort)(left.register.uint16_1 * right.register.uint16_1);
result.register.uint16_2 = (ushort)(left.register.uint16_2 * right.register.uint16_2);
result.register.uint16_3 = (ushort)(left.register.uint16_3 * right.register.uint16_3);
result.register.uint16_4 = (ushort)(left.register.uint16_4 * right.register.uint16_4);
result.register.uint16_5 = (ushort)(left.register.uint16_5 * right.register.uint16_5);
result.register.uint16_6 = (ushort)(left.register.uint16_6 * right.register.uint16_6);
result.register.uint16_7 = (ushort)(left.register.uint16_7 * right.register.uint16_7);
}
else if (typeof(T) == typeof(short))
{
result.register.int16_0 = (short)(left.register.int16_0 * right.register.int16_0);
result.register.int16_1 = (short)(left.register.int16_1 * right.register.int16_1);
result.register.int16_2 = (short)(left.register.int16_2 * right.register.int16_2);
result.register.int16_3 = (short)(left.register.int16_3 * right.register.int16_3);
result.register.int16_4 = (short)(left.register.int16_4 * right.register.int16_4);
result.register.int16_5 = (short)(left.register.int16_5 * right.register.int16_5);
result.register.int16_6 = (short)(left.register.int16_6 * right.register.int16_6);
result.register.int16_7 = (short)(left.register.int16_7 * right.register.int16_7);
}
else if (typeof(T) == typeof(uint))
{
result.register.uint32_0 = left.register.uint32_0 * right.register.uint32_0;
result.register.uint32_1 = left.register.uint32_1 * right.register.uint32_1;
result.register.uint32_2 = left.register.uint32_2 * right.register.uint32_2;
result.register.uint32_3 = left.register.uint32_3 * right.register.uint32_3;
}
else if (typeof(T) == typeof(int))
{
result.register.int32_0 = left.register.int32_0 * right.register.int32_0;
result.register.int32_1 = left.register.int32_1 * right.register.int32_1;
result.register.int32_2 = left.register.int32_2 * right.register.int32_2;
result.register.int32_3 = left.register.int32_3 * right.register.int32_3;
}
else if (typeof(T) == typeof(ulong))
{
result.register.uint64_0 = left.register.uint64_0 * right.register.uint64_0;
result.register.uint64_1 = left.register.uint64_1 * right.register.uint64_1;
}
else if (typeof(T) == typeof(long))
{
result.register.int64_0 = left.register.int64_0 * right.register.int64_0;
result.register.int64_1 = left.register.int64_1 * right.register.int64_1;
}
else if (typeof(T) == typeof(float))
{
result.register.single_0 = left.register.single_0 * right.register.single_0;
result.register.single_1 = left.register.single_1 * right.register.single_1;
result.register.single_2 = left.register.single_2 * right.register.single_2;
result.register.single_3 = left.register.single_3 * right.register.single_3;
}
else if (typeof(T) == typeof(double))
{
result.register.double_0 = left.register.double_0 * right.register.double_0;
result.register.double_1 = left.register.double_1 * right.register.double_1;
}
return result;
}
public static Vector<T>operator *(Vector<T> value, T factor)
{
if (Vector.IsHardwareAccelerated)
{
return new Vector<T>(factor) * value;
}
Vector<T> result = default(Vector<T>);
if (typeof(T) == typeof(byte))
{
result.register.byte_0 = (byte)(value.register.byte_0 * (byte)(object)factor);
result.register.byte_1 = (byte)(value.register.byte_1 * (byte)(object)factor);
result.register.byte_2 = (byte)(value.register.byte_2 * (byte)(object)factor);
result.register.byte_3 = (byte)(value.register.byte_3 * (byte)(object)factor);
result.register.byte_4 = (byte)(value.register.byte_4 * (byte)(object)factor);
result.register.byte_5 = (byte)(value.register.byte_5 * (byte)(object)factor);
result.register.byte_6 = (byte)(value.register.byte_6 * (byte)(object)factor);
result.register.byte_7 = (byte)(value.register.byte_7 * (byte)(object)factor);
result.register.byte_8 = (byte)(value.register.byte_8 * (byte)(object)factor);
result.register.byte_9 = (byte)(value.register.byte_9 * (byte)(object)factor);
result.register.byte_10 = (byte)(value.register.byte_10 * (byte)(object)factor);
result.register.byte_11 = (byte)(value.register.byte_11 * (byte)(object)factor);
result.register.byte_12 = (byte)(value.register.byte_12 * (byte)(object)factor);
result.register.byte_13 = (byte)(value.register.byte_13 * (byte)(object)factor);
result.register.byte_14 = (byte)(value.register.byte_14 * (byte)(object)factor);
result.register.byte_15 = (byte)(value.register.byte_15 * (byte)(object)factor);
}
else if (typeof(T) == typeof(sbyte))
{
result.register.sbyte_0 = (sbyte)(value.register.sbyte_0 * (sbyte)(object)factor);
result.register.sbyte_1 = (sbyte)(value.register.sbyte_1 * (sbyte)(object)factor);
result.register.sbyte_2 = (sbyte)(value.register.sbyte_2 * (sbyte)(object)factor);
result.register.sbyte_3 = (sbyte)(value.register.sbyte_3 * (sbyte)(object)factor);
result.register.sbyte_4 = (sbyte)(value.register.sbyte_4 * (sbyte)(object)factor);
result.register.sbyte_5 = (sbyte)(value.register.sbyte_5 * (sbyte)(object)factor);
result.register.sbyte_6 = (sbyte)(value.register.sbyte_6 * (sbyte)(object)factor);
result.register.sbyte_7 = (sbyte)(value.register.sbyte_7 * (sbyte)(object)factor);
result.register.sbyte_8 = (sbyte)(value.register.sbyte_8 * (sbyte)(object)factor);
result.register.sbyte_9 = (sbyte)(value.register.sbyte_9 * (sbyte)(object)factor);
result.register.sbyte_10 = (sbyte)(value.register.sbyte_10 * (sbyte)(object)factor);
result.register.sbyte_11 = (sbyte)(value.register.sbyte_11 * (sbyte)(object)factor);
result.register.sbyte_12 = (sbyte)(value.register.sbyte_12 * (sbyte)(object)factor);
result.register.sbyte_13 = (sbyte)(value.register.sbyte_13 * (sbyte)(object)factor);
result.register.sbyte_14 = (sbyte)(value.register.sbyte_14 * (sbyte)(object)factor);
result.register.sbyte_15 = (sbyte)(value.register.sbyte_15 * (sbyte)(object)factor);
}
else if (typeof(T) == typeof(ushort))
{
result.register.uint16_0 = (ushort)(value.register.uint16_0 * (ushort)(object)factor);
result.register.uint16_1 = (ushort)(value.register.uint16_1 * (ushort)(object)factor);
result.register.uint16_2 = (ushort)(value.register.uint16_2 * (ushort)(object)factor);
result.register.uint16_3 = (ushort)(value.register.uint16_3 * (ushort)(object)factor);
result.register.uint16_4 = (ushort)(value.register.uint16_4 * (ushort)(object)factor);
result.register.uint16_5 = (ushort)(value.register.uint16_5 * (ushort)(object)factor);
result.register.uint16_6 = (ushort)(value.register.uint16_6 * (ushort)(object)factor);
result.register.uint16_7 = (ushort)(value.register.uint16_7 * (ushort)(object)factor);
}
else if (typeof(T) == typeof(short))
{
result.register.int16_0 = (short)(value.register.int16_0 * (short)(object)factor);
result.register.int16_1 = (short)(value.register.int16_1 * (short)(object)factor);
result.register.int16_2 = (short)(value.register.int16_2 * (short)(object)factor);
result.register.int16_3 = (short)(value.register.int16_3 * (short)(object)factor);
result.register.int16_4 = (short)(value.register.int16_4 * (short)(object)factor);
result.register.int16_5 = (short)(value.register.int16_5 * (short)(object)factor);
result.register.int16_6 = (short)(value.register.int16_6 * (short)(object)factor);
result.register.int16_7 = (short)(value.register.int16_7 * (short)(object)factor);
}
else if (typeof(T) == typeof(uint))
{
result.register.uint32_0 = value.register.uint32_0 * (uint)(object)factor;
result.register.uint32_1 = value.register.uint32_1 * (uint)(object)factor;
result.register.uint32_2 = value.register.uint32_2 * (uint)(object)factor;
result.register.uint32_3 = value.register.uint32_3 * (uint)(object)factor;
}
else if (typeof(T) == typeof(int))
{
result.register.int32_0 = value.register.int32_0 * (int)(object)factor;
result.register.int32_1 = value.register.int32_1 * (int)(object)factor;
result.register.int32_2 = value.register.int32_2 * (int)(object)factor;
result.register.int32_3 = value.register.int32_3 * (int)(object)factor;
}
else if (typeof(T) == typeof(ulong))
{
result.register.uint64_0 = value.register.uint64_0 * (ulong)(object)factor;
result.register.uint64_1 = value.register.uint64_1 * (ulong)(object)factor;
}
else if (typeof(T) == typeof(long))
{
result.register.int64_0 = value.register.int64_0 * (long)(object)factor;
result.register.int64_1 = value.register.int64_1 * (long)(object)factor;
}
else if (typeof(T) == typeof(float))
{
result.register.single_0 = value.register.single_0 * (float)(object)factor;
result.register.single_1 = value.register.single_1 * (float)(object)factor;
result.register.single_2 = value.register.single_2 * (float)(object)factor;
result.register.single_3 = value.register.single_3 * (float)(object)factor;
}
else if (typeof(T) == typeof(double))
{
result.register.double_0 = value.register.double_0 * (double)(object)factor;
result.register.double_1 = value.register.double_1 * (double)(object)factor;
}
return result;
}
public static Vector<T>operator *(T factor, Vector<T> value)
{
if (Vector.IsHardwareAccelerated)
{
return new Vector<T>(factor) * value;
}
Vector<T> result = default(Vector<T>);
if (typeof(T) == typeof(byte))
{
result.register.byte_0 = (byte)(value.register.byte_0 * (byte)(object)factor);
result.register.byte_1 = (byte)(value.register.byte_1 * (byte)(object)factor);
result.register.byte_2 = (byte)(value.register.byte_2 * (byte)(object)factor);
result.register.byte_3 = (byte)(value.register.byte_3 * (byte)(object)factor);
result.register.byte_4 = (byte)(value.register.byte_4 * (byte)(object)factor);
result.register.byte_5 = (byte)(value.register.byte_5 * (byte)(object)factor);
result.register.byte_6 = (byte)(value.register.byte_6 * (byte)(object)factor);
result.register.byte_7 = (byte)(value.register.byte_7 * (byte)(object)factor);
result.register.byte_8 = (byte)(value.register.byte_8 * (byte)(object)factor);
result.register.byte_9 = (byte)(value.register.byte_9 * (byte)(object)factor);
result.register.byte_10 = (byte)(value.register.byte_10 * (byte)(object)factor);
result.register.byte_11 = (byte)(value.register.byte_11 * (byte)(object)factor);
result.register.byte_12 = (byte)(value.register.byte_12 * (byte)(object)factor);
result.register.byte_13 = (byte)(value.register.byte_13 * (byte)(object)factor);
result.register.byte_14 = (byte)(value.register.byte_14 * (byte)(object)factor);
result.register.byte_15 = (byte)(value.register.byte_15 * (byte)(object)factor);
}
else if (typeof(T) == typeof(sbyte))
{
result.register.sbyte_0 = (sbyte)(value.register.sbyte_0 * (sbyte)(object)factor);
result.register.sbyte_1 = (sbyte)(value.register.sbyte_1 * (sbyte)(object)factor);
result.register.sbyte_2 = (sbyte)(value.register.sbyte_2 * (sbyte)(object)factor);
result.register.sbyte_3 = (sbyte)(value.register.sbyte_3 * (sbyte)(object)factor);
result.register.sbyte_4 = (sbyte)(value.register.sbyte_4 * (sbyte)(object)factor);
result.register.sbyte_5 = (sbyte)(value.register.sbyte_5 * (sbyte)(object)factor);
result.register.sbyte_6 = (sbyte)(value.register.sbyte_6 * (sbyte)(object)factor);
result.register.sbyte_7 = (sbyte)(value.register.sbyte_7 * (sbyte)(object)factor);
result.register.sbyte_8 = (sbyte)(value.register.sbyte_8 * (sbyte)(object)factor);
result.register.sbyte_9 = (sbyte)(value.register.sbyte_9 * (sbyte)(object)factor);
result.register.sbyte_10 = (sbyte)(value.register.sbyte_10 * (sbyte)(object)factor);
result.register.sbyte_11 = (sbyte)(value.register.sbyte_11 * (sbyte)(object)factor);
result.register.sbyte_12 = (sbyte)(value.register.sbyte_12 * (sbyte)(object)factor);
result.register.sbyte_13 = (sbyte)(value.register.sbyte_13 * (sbyte)(object)factor);
result.register.sbyte_14 = (sbyte)(value.register.sbyte_14 * (sbyte)(object)factor);
result.register.sbyte_15 = (sbyte)(value.register.sbyte_15 * (sbyte)(object)factor);
}
else if (typeof(T) == typeof(ushort))
{
result.register.uint16_0 = (ushort)(value.register.uint16_0 * (ushort)(object)factor);
result.register.uint16_1 = (ushort)(value.register.uint16_1 * (ushort)(object)factor);
result.register.uint16_2 = (ushort)(value.register.uint16_2 * (ushort)(object)factor);
result.register.uint16_3 = (ushort)(value.register.uint16_3 * (ushort)(object)factor);
result.register.uint16_4 = (ushort)(value.register.uint16_4 * (ushort)(object)factor);
result.register.uint16_5 = (ushort)(value.register.uint16_5 * (ushort)(object)factor);
result.register.uint16_6 = (ushort)(value.register.uint16_6 * (ushort)(object)factor);
result.register.uint16_7 = (ushort)(value.register.uint16_7 * (ushort)(object)factor);
}
else if (typeof(T) == typeof(short))
{
result.register.int16_0 = (short)(value.register.int16_0 * (short)(object)factor);
result.register.int16_1 = (short)(value.register.int16_1 * (short)(object)factor);
result.register.int16_2 = (short)(value.register.int16_2 * (short)(object)factor);
result.register.int16_3 = (short)(value.register.int16_3 * (short)(object)factor);
result.register.int16_4 = (short)(value.register.int16_4 * (short)(object)factor);
result.register.int16_5 = (short)(value.register.int16_5 * (short)(object)factor);
result.register.int16_6 = (short)(value.register.int16_6 * (short)(object)factor);
result.register.int16_7 = (short)(value.register.int16_7 * (short)(object)factor);
}
else if (typeof(T) == typeof(uint))
{
result.register.uint32_0 = value.register.uint32_0 * (uint)(object)factor;
result.register.uint32_1 = value.register.uint32_1 * (uint)(object)factor;
result.register.uint32_2 = value.register.uint32_2 * (uint)(object)factor;
result.register.uint32_3 = value.register.uint32_3 * (uint)(object)factor;
}
else if (typeof(T) == typeof(int))
{
result.register.int32_0 = value.register.int32_0 * (int)(object)factor;
result.register.int32_1 = value.register.int32_1 * (int)(object)factor;
result.register.int32_2 = value.register.int32_2 * (int)(object)factor;
result.register.int32_3 = value.register.int32_3 * (int)(object)factor;
}
else if (typeof(T) == typeof(ulong))
{
result.register.uint64_0 = value.register.uint64_0 * (ulong)(object)factor;
result.register.uint64_1 = value.register.uint64_1 * (ulong)(object)factor;
}
else if (typeof(T) == typeof(long))
{
result.register.int64_0 = value.register.int64_0 * (long)(object)factor;
result.register.int64_1 = value.register.int64_1 * (long)(object)factor;
}
else if (typeof(T) == typeof(float))
{
result.register.single_0 = value.register.single_0 * (float)(object)factor;
result.register.single_1 = value.register.single_1 * (float)(object)factor;
result.register.single_2 = value.register.single_2 * (float)(object)factor;
result.register.single_3 = value.register.single_3 * (float)(object)factor;
}
else if (typeof(T) == typeof(double))
{
result.register.double_0 = value.register.double_0 * (double)(object)factor;
result.register.double_1 = value.register.double_1 * (double)(object)factor;
}
return result;
}
public unsafe static Vector<T>operator /(Vector<T> left, Vector<T> right)
{
if (Vector.IsHardwareAccelerated)
{
if (typeof(T) == typeof(byte))
{
byte* ptr = stackalloc byte[(int)(uint)Count];
for (int i = 0; i < Count; i++)
{
ptr[i] = (byte)(object)ScalarDivide(left[i], right[i]);
}
return new Vector<T>(ptr);
}
if (typeof(T) == typeof(sbyte))
{
sbyte* ptr2 = stackalloc sbyte[(int)(uint)Count];
for (int j = 0; j < Count; j++)
{
ptr2[j] = (sbyte)(object)ScalarDivide(left[j], right[j]);
}
return new Vector<T>(ptr2);
}
if (typeof(T) == typeof(ushort))
{
ushort* ptr3 = stackalloc ushort[Count];
for (int k = 0; k < Count; k++)
{
ptr3[k] = (ushort)(object)ScalarDivide(left[k], right[k]);
}
return new Vector<T>(ptr3);
}
if (typeof(T) == typeof(short))
{
short* ptr4 = stackalloc short[Count];
for (int l = 0; l < Count; l++)
{
ptr4[l] = (short)(object)ScalarDivide(left[l], right[l]);
}
return new Vector<T>(ptr4);
}
if (typeof(T) == typeof(uint))
{
uint* ptr5 = stackalloc uint[Count];
for (int m = 0; m < Count; m++)
{
ptr5[m] = (uint)(object)ScalarDivide(left[m], right[m]);
}
return new Vector<T>(ptr5);
}
if (typeof(T) == typeof(int))
{
int* ptr6 = stackalloc int[Count];
for (int n = 0; n < Count; n++)
{
ptr6[n] = (int)(object)ScalarDivide(left[n], right[n]);
}
return new Vector<T>(ptr6);
}
if (typeof(T) == typeof(ulong))
{
ulong* ptr7 = stackalloc ulong[Count];
for (int num = 0; num < Count; num++)
{
ptr7[num] = (ulong)(object)ScalarDivide(left[num], right[num]);
}
return new Vector<T>(ptr7);
}
if (typeof(T) == typeof(long))
{
long* ptr8 = stackalloc long[Count];
for (int num2 = 0; num2 < Count; num2++)
{
ptr8[num2] = (long)(object)ScalarDivide(left[num2], right[num2]);
}
return new Vector<T>(ptr8);
}
if (typeof(T) == typeof(float))
{
float* ptr9 = stackalloc float[Count];
for (int num3 = 0; num3 < Count; num3++)
{
ptr9[num3] = (float)(object)ScalarDivide(left[num3], right[num3]);
}
return new Vector<T>(ptr9);
}
if (typeof(T) == typeof(double))
{
double* ptr10 = stackalloc double[Count];
for (int num4 = 0; num4 < Count; num4++)
{
ptr10[num4] = (double)(object)ScalarDivide(left[num4], right[num4]);
}
return new Vector<T>(ptr10);
}
throw new NotSupportedException(System.SR.Arg_TypeNotSupported);
}
Vector<T> result = default(Vector<T>);
if (typeof(T) == typeof(byte))
{
result.register.byte_0 = (byte)(left.register.byte_0 / right.register.byte_0);
result.register.byte_1 = (byte)(left.register.byte_1 / right.register.byte_1);
result.register.byte_2 = (byte)(left.register.byte_2 / right.register.byte_2);
result.register.byte_3 = (byte)(left.register.byte_3 / right.register.byte_3);
result.register.byte_4 = (byte)(left.register.byte_4 / right.register.byte_4);
result.register.byte_5 = (byte)(left.register.byte_5 / right.register.byte_5);
result.register.byte_6 = (byte)(left.register.byte_6 / right.register.byte_6);
result.register.byte_7 = (byte)(left.register.byte_7 / right.register.byte_7);
result.register.byte_8 = (byte)(left.register.byte_8 / right.register.byte_8);
result.register.byte_9 = (byte)(left.register.byte_9 / right.register.byte_9);
result.register.byte_10 = (byte)(left.register.byte_10 / right.register.byte_10);
result.register.byte_11 = (byte)(left.register.byte_11 / right.register.byte_11);
result.register.byte_12 = (byte)(left.register.byte_12 / right.register.byte_12);
result.register.byte_13 = (byte)(left.register.byte_13 / right.register.byte_13);
result.register.byte_14 = (byte)(left.register.byte_14 / right.register.byte_14);
result.register.byte_15 = (byte)(left.register.byte_15 / right.register.byte_15);
}
else if (typeof(T) == typeof(sbyte))
{
result.register.sbyte_0 = (sbyte)(left.register.sbyte_0 / right.register.sbyte_0);
result.register.sbyte_1 = (sbyte)(left.register.sbyte_1 / right.register.sbyte_1);
result.register.sbyte_2 = (sbyte)(left.register.sbyte_2 / right.register.sbyte_2);
result.register.sbyte_3 = (sbyte)(left.register.sbyte_3 / right.register.sbyte_3);
result.register.sbyte_4 = (sbyte)(left.register.sbyte_4 / right.register.sbyte_4);
result.register.sbyte_5 = (sbyte)(left.register.sbyte_5 / right.register.sbyte_5);
result.register.sbyte_6 = (sbyte)(left.register.sbyte_6 / right.register.sbyte_6);
result.register.sbyte_7 = (sbyte)(left.register.sbyte_7 / right.register.sbyte_7);
result.register.sbyte_8 = (sbyte)(left.register.sbyte_8 / right.register.sbyte_8);
result.register.sbyte_9 = (sbyte)(left.register.sbyte_9 / right.register.sbyte_9);
result.register.sbyte_10 = (sbyte)(left.register.sbyte_10 / right.register.sbyte_10);
result.register.sbyte_11 = (sbyte)(left.register.sbyte_11 / right.register.sbyte_11);
result.register.sbyte_12 = (sbyte)(left.register.sbyte_12 / right.register.sbyte_12);
result.register.sbyte_13 = (sbyte)(left.register.sbyte_13 / right.register.sbyte_13);
result.register.sbyte_14 = (sbyte)(left.register.sbyte_14 / right.register.sbyte_14);
result.register.sbyte_15 = (sbyte)(left.register.sbyte_15 / right.register.sbyte_15);
}
else if (typeof(T) == typeof(ushort))
{
result.register.uint16_0 = (ushort)(left.register.uint16_0 / right.register.uint16_0);
result.register.uint16_1 = (ushort)(left.register.uint16_1 / right.register.uint16_1);
result.register.uint16_2 = (ushort)(left.register.uint16_2 / right.register.uint16_2);
result.register.uint16_3 = (ushort)(left.register.uint16_3 / right.register.uint16_3);
result.register.uint16_4 = (ushort)(left.register.uint16_4 / right.register.uint16_4);
result.register.uint16_5 = (ushort)(left.register.uint16_5 / right.register.uint16_5);
result.register.uint16_6 = (ushort)(left.register.uint16_6 / right.register.uint16_6);
result.register.uint16_7 = (ushort)(left.register.uint16_7 / right.register.uint16_7);
}
else if (typeof(T) == typeof(short))
{
result.register.int16_0 = (short)(left.register.int16_0 / right.register.int16_0);
result.register.int16_1 = (short)(left.register.int16_1 / right.register.int16_1);
result.register.int16_2 = (short)(left.register.int16_2 / right.register.int16_2);
result.register.int16_3 = (short)(left.register.int16_3 / right.register.int16_3);
result.register.int16_4 = (short)(left.register.int16_4 / right.register.int16_4);
result.register.int16_5 = (short)(left.register.int16_5 / right.register.int16_5);
result.register.int16_6 = (short)(left.register.int16_6 / right.register.int16_6);
result.register.int16_7 = (short)(left.register.int16_7 / right.register.int16_7);
}
else if (typeof(T) == typeof(uint))
{
result.register.uint32_0 = left.register.uint32_0 / right.register.uint32_0;
result.register.uint32_1 = left.register.uint32_1 / right.register.uint32_1;
result.register.uint32_2 = left.register.uint32_2 / right.register.uint32_2;
result.register.uint32_3 = left.register.uint32_3 / right.register.uint32_3;
}
else if (typeof(T) == typeof(int))
{
result.register.int32_0 = left.register.int32_0 / right.register.int32_0;
result.register.int32_1 = left.register.int32_1 / right.register.int32_1;
result.register.int32_2 = left.register.int32_2 / right.register.int32_2;
result.register.int32_3 = left.register.int32_3 / right.register.int32_3;
}
else if (typeof(T) == typeof(ulong))
{
result.register.uint64_0 = left.register.uint64_0 / right.register.uint64_0;
result.register.uint64_1 = left.register.uint64_1 / right.register.uint64_1;
}
else if (typeof(T) == typeof(long))
{
result.register.int64_0 = left.register.int64_0 / right.register.int64_0;
result.register.int64_1 = left.register.int64_1 / right.register.int64_1;
}
else if (typeof(T) == typeof(float))
{
result.register.single_0 = left.register.single_0 / right.register.single_0;
result.register.single_1 = left.register.single_1 / right.register.single_1;
result.register.single_2 = left.register.single_2 / right.register.single_2;
result.register.single_3 = left.register.single_3 / right.register.single_3;
}
else if (typeof(T) == typeof(double))
{
result.register.double_0 = left.register.double_0 / right.register.double_0;
result.register.double_1 = left.register.double_1 / right.register.double_1;
}
return result;
}
public static Vector<T>operator -(Vector<T> value)
{
return Zero - value;
}
[System.Runtime.CompilerServices.Intrinsic]
public unsafe static Vector<T>operator &(Vector<T> left, Vector<T> right)
{
Vector<T> result = default(Vector<T>);
if (Vector.IsHardwareAccelerated)
{
long* ptr = &result.register.int64_0;
long* ptr2 = &left.register.int64_0;
long* ptr3 = &right.register.int64_0;
for (int i = 0; i < Vector<long>.Count; i++)
{
ptr[i] = ptr2[i] & ptr3[i];
}
}
else
{
result.register.int64_0 = left.register.int64_0 & right.register.int64_0;
result.register.int64_1 = left.register.int64_1 & right.register.int64_1;
}
return result;
}
[System.Runtime.CompilerServices.Intrinsic]
public unsafe static Vector<T>operator |(Vector<T> left, Vector<T> right)
{
Vector<T> result = default(Vector<T>);
if (Vector.IsHardwareAccelerated)
{
long* ptr = &result.register.int64_0;
long* ptr2 = &left.register.int64_0;
long* ptr3 = &right.register.int64_0;
for (int i = 0; i < Vector<long>.Count; i++)
{
ptr[i] = ptr2[i] | ptr3[i];
}
}
else
{
result.register.int64_0 = left.register.int64_0 | right.register.int64_0;
result.register.int64_1 = left.register.int64_1 | right.register.int64_1;
}
return result;
}
[System.Runtime.CompilerServices.Intrinsic]
public unsafe static Vector<T>operator ^(Vector<T> left, Vector<T> right)
{
Vector<T> result = default(Vector<T>);
if (Vector.IsHardwareAccelerated)
{
long* ptr = &result.register.int64_0;
long* ptr2 = &left.register.int64_0;
long* ptr3 = &right.register.int64_0;
for (int i = 0; i < Vector<long>.Count; i++)
{
ptr[i] = ptr2[i] ^ ptr3[i];
}
}
else
{
result.register.int64_0 = left.register.int64_0 ^ right.register.int64_0;
result.register.int64_1 = left.register.int64_1 ^ right.register.int64_1;
}
return result;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vector<T>operator ~(Vector<T> value)
{
return s_allOnes ^ value;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator ==(Vector<T> left, Vector<T> right)
{
return left.Equals(right);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator !=(Vector<T> left, Vector<T> right)
{
return !(left == right);
}
[System.Runtime.CompilerServices.Intrinsic]
public static explicit operator Vector<byte>(Vector<T> value)
{
return new Vector<byte>(ref value.register);
}
[CLSCompliant(false)]
[System.Runtime.CompilerServices.Intrinsic]
public static explicit operator Vector<sbyte>(Vector<T> value)
{
return new Vector<sbyte>(ref value.register);
}
[CLSCompliant(false)]
[System.Runtime.CompilerServices.Intrinsic]
public static explicit operator Vector<ushort>(Vector<T> value)
{
return new Vector<ushort>(ref value.register);
}
[System.Runtime.CompilerServices.Intrinsic]
public static explicit operator Vector<short>(Vector<T> value)
{
return new Vector<short>(ref value.register);
}
[CLSCompliant(false)]
[System.Runtime.CompilerServices.Intrinsic]
public static explicit operator Vector<uint>(Vector<T> value)
{
return new Vector<uint>(ref value.register);
}
[System.Runtime.CompilerServices.Intrinsic]
public static explicit operator Vector<int>(Vector<T> value)
{
return new Vector<int>(ref value.register);
}
[CLSCompliant(false)]
[System.Runtime.CompilerServices.Intrinsic]
public static explicit operator Vector<ulong>(Vector<T> value)
{
return new Vector<ulong>(ref value.register);
}
[System.Runtime.CompilerServices.Intrinsic]
public static explicit operator Vector<long>(Vector<T> value)
{
return new Vector<long>(ref value.register);
}
[System.Runtime.CompilerServices.Intrinsic]
public static explicit operator Vector<float>(Vector<T> value)
{
return new Vector<float>(ref value.register);
}
[System.Runtime.CompilerServices.Intrinsic]
public static explicit operator Vector<double>(Vector<T> value)
{
return new Vector<double>(ref value.register);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[System.Runtime.CompilerServices.Intrinsic]
internal unsafe static Vector<T> Equals(Vector<T> left, Vector<T> right)
{
if (Vector.IsHardwareAccelerated)
{
if (typeof(T) == typeof(byte))
{
byte* ptr = stackalloc byte[(int)(uint)Count];
fo