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 }