using System.Diagnostics;
using System.Runtime.InteropServices;
namespace Unity.Burst.Intrinsics
{
    /// 
    /// Represents a 64-bit SIMD value (Arm only)
    /// 
    [StructLayout(LayoutKind.Explicit)]
    [DebuggerTypeProxy(typeof(V64DebugView))]
    public struct v64
    {
        /// 
        /// Get the 0th Byte of the vector
        /// 
        [FieldOffset(0)] public byte Byte0;
        /// 
        /// Get the 1st Byte of the vector
        /// 
        [FieldOffset(1)] public byte Byte1;
        /// 
        /// Get the 2nd Byte of the vector
        /// 
        [FieldOffset(2)] public byte Byte2;
        /// 
        /// Get the 3rd Byte of the vector
        /// 
        [FieldOffset(3)] public byte Byte3;
        /// 
        /// Get the 4th Byte of the vector
        /// 
        [FieldOffset(4)] public byte Byte4;
        /// 
        /// Get the 5th Byte of the vector
        /// 
        [FieldOffset(5)] public byte Byte5;
        /// 
        /// Get the 6th Byte of the vector
        /// 
        [FieldOffset(6)] public byte Byte6;
        /// 
        /// Get the 7th Byte of the vector
        /// 
        [FieldOffset(7)] public byte Byte7;
        /// 
        /// Get the 0th SByte of the vector
        /// 
        [FieldOffset(0)] public sbyte SByte0;
        /// 
        /// Get the 1st SByte of the vector
        /// 
        [FieldOffset(1)] public sbyte SByte1;
        /// 
        /// Get the 2nd SByte of the vector
        /// 
        [FieldOffset(2)] public sbyte SByte2;
        /// 
        /// Get the 3rd SByte of the vector
        /// 
        [FieldOffset(3)] public sbyte SByte3;
        /// 
        /// Get the 4th SByte of the vector
        /// 
        [FieldOffset(4)] public sbyte SByte4;
        /// 
        /// Get the 5th SByte of the vector
        /// 
        [FieldOffset(5)] public sbyte SByte5;
        /// 
        /// Get the 6th SByte of the vector
        /// 
        [FieldOffset(6)] public sbyte SByte6;
        /// 
        /// Get the 7th SByte of the vector
        /// 
        [FieldOffset(7)] public sbyte SByte7;
        /// 
        /// Get the 0th UShort of the vector
        /// 
        [FieldOffset(0)] public ushort UShort0;
        /// 
        /// Get the 1st UShort of the vector
        /// 
        [FieldOffset(2)] public ushort UShort1;
        /// 
        /// Get the 2nd UShort of the vector
        /// 
        [FieldOffset(4)] public ushort UShort2;
        /// 
        /// Get the 3rd UShort of the vector
        /// 
        [FieldOffset(6)] public ushort UShort3;
        /// 
        /// Get the 0th SShort of the vector
        /// 
        [FieldOffset(0)] public short SShort0;
        /// 
        /// Get the 1st SShort of the vector
        /// 
        [FieldOffset(2)] public short SShort1;
        /// 
        /// Get the 2nd SShort of the vector
        /// 
        [FieldOffset(4)] public short SShort2;
        /// 
        /// Get the 3rd SShort of the vector
        /// 
        [FieldOffset(6)] public short SShort3;
#if BURST_INTERNAL || UNITY_BURST_EXPERIMENTAL_NEON_INTRINSICS
        /// 
        /// Get the 0th f16 of the vector
        /// 
        [FieldOffset(0)] public f16 Half0;
        /// 
        /// Get the 1st f16 of the vector
        /// 
        [FieldOffset(2)] public f16 Half1;
        /// 
        /// Get the 2nd f16 of the vector
        /// 
        [FieldOffset(4)] public f16 Half2;
        /// 
        /// Get the 3rd f16 of the vector
        /// 
        [FieldOffset(6)] public f16 Half3;
#endif // BURST_INTERNAL || UNITY_BURST_EXPERIMENTAL_NEON_INTRINSICS
        /// 
        /// Get the 0th UInt of the vector
        /// 
        [FieldOffset(0)] public uint UInt0;
        /// 
        /// Get the 1st UInt of the vector
        /// 
        [FieldOffset(4)] public uint UInt1;
        /// 
        /// Get the 0th SInt of the vector
        /// 
        [FieldOffset(0)] public int SInt0;
        /// 
        /// Get the 1st SInt of the vector
        /// 
        [FieldOffset(4)] public int SInt1;
        /// 
        /// Get the 0th ULong of the vector
        /// 
        [FieldOffset(0)] public ulong ULong0;
        /// 
        /// Get the 0th SLong of the vector
        /// 
        [FieldOffset(0)] public long SLong0;
        /// 
        /// Get the 0th Float of the vector
        /// 
        [FieldOffset(0)] public float Float0;
        /// 
        /// Get the 1st Float of the vector
        /// 
        [FieldOffset(4)] public float Float1;
        /// 
        /// Get the 0th Double of the vector
        /// 
        [FieldOffset(0)] public double Double0;
        /// 
        /// Splat a single byte across the v64
        /// 
		/// Splatted byte
        public v64(byte b)
        {
            this = default(v64);
            Byte0 = Byte1 = Byte2 = Byte3 = Byte4 = Byte5 = Byte6 = Byte7 = b;
        }
        /// 
        /// Initialize the v64 with 8 bytes
        /// 
		/// byte a
		/// byte b
		/// byte c
		/// byte d
		/// byte e
		/// byte f
		/// byte g
		/// byte h
        public v64(
            byte a, byte b, byte c, byte d,
            byte e, byte f, byte g, byte h)
        {
            this = default(v64);
            Byte0 = a;
            Byte1 = b;
            Byte2 = c;
            Byte3 = d;
            Byte4 = e;
            Byte5 = f;
            Byte6 = g;
            Byte7 = h;
        }
        /// 
        /// Splat a single sbyte across the v64
        /// 
		/// Splatted sbyte
        public v64(sbyte b)
        {
            this = default(v64);
            SByte0 = SByte1 = SByte2 = SByte3 = SByte4 = SByte5 = SByte6 = SByte7 = b;
        }
        /// 
        /// Initialize the v64 with 8 sbytes
        /// 
		/// sbyte a
		/// sbyte b
		/// sbyte c
		/// sbyte d
		/// sbyte e
		/// sbyte f
		/// sbyte g
		/// sbyte h
        public v64(
            sbyte a, sbyte b, sbyte c, sbyte d,
            sbyte e, sbyte f, sbyte g, sbyte h)
        {
            this = default(v64);
            SByte0 = a;
            SByte1 = b;
            SByte2 = c;
            SByte3 = d;
            SByte4 = e;
            SByte5 = f;
            SByte6 = g;
            SByte7 = h;
        }
        /// 
        /// Splat a single short across the v64
        /// 
		/// Splatted short
        public v64(short v)
        {
            this = default(v64);
            SShort0 = SShort1 = SShort2 = SShort3 = v;
        }
        /// 
        /// Initialize the v64 with 4 shorts
        /// 
		/// short a
		/// short b
		/// short c
		/// short d
        public v64(short a, short b, short c, short d)
        {
            this = default(v64);
            SShort0 = a;
            SShort1 = b;
            SShort2 = c;
            SShort3 = d;
        }
        /// 
        /// Splat a single ushort across the v64
        /// 
		/// Splatted ushort
        public v64(ushort v)
        {
            this = default(v64);
            UShort0 = UShort1 = UShort2 = UShort3 = v;
        }
        /// 
        /// Initialize the v64 with 4 ushorts
        /// 
		/// ushort a
		/// ushort b
		/// ushort c
		/// ushort d
        public v64(ushort a, ushort b, ushort c, ushort d)
        {
            this = default(v64);
            UShort0 = a;
            UShort1 = b;
            UShort2 = c;
            UShort3 = d;
        }
#if BURST_INTERNAL || UNITY_BURST_EXPERIMENTAL_NEON_INTRINSICS
        /// 
        /// Splat a single f16 across the v64
        /// 
        /// Splatted f16
        public v64(f16 v)
        {
            this = default(v64);
            Half0 = Half1 = Half2 = Half3 = v;
        }
        /// 
        /// Initialize the v64 with 4 half's
        /// 
        /// f16 a
        /// f16 b
        /// f16 c
        /// f16 d
        public v64(f16 a, f16 b, f16 c, f16 d)
        {
            this = default(v64);
            Half0 = a;
            Half1 = b;
            Half2 = c;
            Half3 = d;
        }
#endif // BURST_INTERNAL || UNITY_BURST_EXPERIMENTAL_NEON_INTRINSICS
        /// 
        /// Splat a single int across the v64
        /// 
		/// Splatted int
        public v64(int v)
        {
            this = default(v64);
            SInt0 = SInt1 = v;
        }
        /// 
        /// Initialize the v64 with 2 ints
        /// 
		/// int a
		/// int b
        public v64(int a, int b)
        {
            this = default(v64);
            SInt0 = a;
            SInt1 = b;
        }
        /// 
        /// Splat a single uint across the v64
        /// 
		/// Splatted uint
        public v64(uint v)
        {
            this = default(v64);
            UInt0 = UInt1 = v;
        }
        /// 
        /// Initialize the v64 with 2 uints
        /// 
		/// uint a
		/// uint b
        public v64(uint a, uint b)
        {
            this = default(v64);
            UInt0 = a;
            UInt1 = b;
        }
        /// 
        /// Splat a single float across the v64
        /// 
		/// Splatted float
        public v64(float f)
        {
            this = default(v64);
            Float0 = Float1 = f;
        }
        /// 
        /// Initialize the v64 with 2 floats
        /// 
		/// float a
		/// float b
        public v64(float a, float b)
        {
            this = default(v64);
            Float0 = a;
            Float1 = b;
        }
        /// 
        /// Initialize the v64 with a double
        /// 
        /// Splatted double
        public v64(double a)
        {
            this = default(v64);
            Double0 = a;
        }
        /// 
        /// Initialize the v64 with a long
        /// 
		/// long a
        public v64(long a)
        {
            this = default(v64);
            SLong0 = a;
        }
        /// 
        /// Initialize the v64 with a ulong
        /// 
		/// ulong a
        public v64(ulong a)
        {
            this = default(v64);
            ULong0 = a;
        }
    }
#if BURST_INTERNAL || UNITY_BURST_EXPERIMENTAL_NEON_INTRINSICS
    /// 
    /// Represents a 128-bit SIMD value (Arm only)
    /// (a combination of 2 64-bit values, equivalent to Arm Neon *x2 types)
    /// 
    [StructLayout(LayoutKind.Explicit)]
    public struct v64x2
    {
        /// 
        /// Get the first 64 bits of the vector
        /// 
        [FieldOffset(0)] public v64 v64_0;
        /// 
        /// Get the second 64 bits of the vector
        /// 
        [FieldOffset(8)] public v64 v64_1;
        /// 
        /// Initialize the v64x2 with 2 v64's
        /// 
		/// First v64.
		/// Second v64.
        public v64x2(v64 v0, v64 v1)
        {
            this = default(v64x2);
            v64_0 = v0;
            v64_1 = v1;
        }
    }
    /// 
    /// Represents a 192-bit SIMD value (Arm only)
    /// (a combination of 3 64-bit values, equivalent to Arm Neon *x3 types)
    /// 
    [StructLayout(LayoutKind.Explicit)]
    public struct v64x3
    {
        /// 
        /// Get the first 64 bits of the vector
        /// 
        [FieldOffset(0)] public v64 v64_0;
        /// 
        /// Get the second 64 bits of the vector
        /// 
        [FieldOffset(8)] public v64 v64_1;
        /// 
        /// Get the third 64 bits of the vector
        /// 
        [FieldOffset(16)] public v64 v64_2;
        /// 
        /// Initialize the v64x3 with 3 v64's
        /// 
		/// First v64.
		/// Second v64.
		/// Third v64.
        public v64x3(v64 v0, v64 v1, v64 v2)
        {
            this = default(v64x3);
            v64_0 = v0;
            v64_1 = v1;
            v64_2 = v2;
        }
    }
    /// 
    /// Represents a 256-bit SIMD value (Arm only)
    /// (a combination of 4 64-bit values, equivalent to Arm Neon *x4 types)
    /// 
    [StructLayout(LayoutKind.Explicit)]
    public struct v64x4
    {
        /// 
        /// Get the first 64 bits of the vector
        /// 
        [FieldOffset(0)] public v64 v64_0;
        /// 
        /// Get the second 64 bits of the vector
        /// 
        [FieldOffset(8)] public v64 v64_1;
        /// 
        /// Get the third 64 bits of the vector
        /// 
        [FieldOffset(16)] public v64 v64_2;
        /// 
        /// Get the fourth 64 bits of the vector
        /// 
        [FieldOffset(24)] public v64 v64_3;
        /// 
        /// Initialize the v64x4 with 4 v64's
        /// 
		/// First v64.
		/// Second v64.
		/// Third v64.
		/// Fourth v64.
        public v64x4(v64 v0, v64 v1, v64 v2, v64 v3)
        {
            this = default(v64x4);
            v64_0 = v0;
            v64_1 = v1;
            v64_2 = v2;
            v64_3 = v3;
        }
    }
#endif // BURST_INTERNAL || UNITY_BURST_EXPERIMENTAL_NEON_INTRINSICS
}