Merge pull request #4453 from lambdageek/bug-49721
[mono.git] / mcs / class / Mono.Simd / Mono.Simd / Vector2l.cs
index 704053d04cf32617c89dbe0b098ed8c52ab99412..a08d06d14e357628c7023d96d62f28c277d7e865 100644 (file)
@@ -29,15 +29,33 @@ using System.Runtime.InteropServices;
 
 namespace Mono.Simd
 {
-       [StructLayout(LayoutKind.Sequential, Pack = 0, Size = 16)]
+       [Obsolete ("Use the types in the System.Numerics.Vectors namespace")]
+       [StructLayout(LayoutKind.Explicit, Pack = 0, Size = 16)]
        public struct Vector2l
        {
-               private long x;
-               private long y;
+               [ FieldOffset(0) ]
+               internal long x;
+               [ FieldOffset(8) ]
+               internal long y;
 
                public long X { get { return x; } set { x = value; } }
                public long Y { get { return y; } set { y = value; } }
 
+               public static Vector2l One
+               {
+                       get { return new Vector2l (1); }
+               }
+
+               public static Vector2l Zero
+               {
+                       get { return new Vector2l (0); }
+               }
+
+               public static Vector2l MinusOne
+               {
+                       get { return new Vector2l (-1); }
+               }
+
                [System.Runtime.CompilerServices.IndexerName ("Component")]
                public unsafe long this [int index]
                {
@@ -63,6 +81,12 @@ namespace Mono.Simd
                        this.y = y;
                }
 
+               public Vector2l (long l)
+               {
+                       this.x = l;
+                       this.y = l;
+               }
+
                [Acceleration (AccelMode.SSE2)]
                public static Vector2l operator + (Vector2l v1, Vector2l v2)
                {
@@ -99,36 +123,6 @@ namespace Mono.Simd
                        return new Vector2l (v1.x ^ v2.x, v1.y ^ v2.y);
                }
 
-               [Acceleration (AccelMode.SSE2)]
-               public static Vector2l UnpackLow (Vector2l v1, Vector2l v2)
-               {
-                       return new Vector2l (v1.x, v2.x);
-               }
-
-               [Acceleration (AccelMode.SSE2)]
-               public static Vector2l UnpackHigh (Vector2l v1, Vector2l v2)
-               {
-                       return new Vector2l (v1.y, v2.y);
-               }
-
-               [Acceleration (AccelMode.SSE2)]
-               public static unsafe Vector2l LogicalRightShift (Vector2l v1, int amount)
-               {
-                       return new Vector2l ((long)((ulong)(v1.x) >> amount), (long)((ulong)(v1.y) >> amount));
-               }
-
-               [Acceleration (AccelMode.SSE41)]
-               public static Vector2l CompareEqual (Vector2l v1, Vector2l v2)
-               {
-                       return new Vector2l ((long)(v1.x ==  v2.x ? -1 : 0), (long)(v1.y ==  v2.y ? -1 : 0));
-               }
-
-               [Acceleration (AccelMode.SSE42)]
-               public static Vector2l CompareGreaterThan (Vector2l v1, Vector2l v2)
-               {
-                       return new Vector2l ((long)(v1.x > v2.x ? -1 : 0), (long)(v1.y >  v2.y ? -1 : 0));
-               }
-
                [Acceleration (AccelMode.SSE1)]
                public static unsafe explicit operator Vector2d (Vector2l v)
                {
@@ -269,5 +263,10 @@ namespace Mono.Simd
                public static unsafe void PrefetchNonTemporal (Vector2l *res)
                {
                }
+               
+               public override string ToString()
+               {
+                       return "<" + x + ", " + y + ">"; 
+               }
        }
 }