using Mono.Simd;
public class SimdTests {
+ public static int test_0_accessor_vecto4i () {
+ Vector4i a = new Vector4i (0x70000000, -1, 3, 4);
+
+ if (a.X != 0x70000000)
+ return 1;
+ if (a.Y != -1)
+ return 2;
+ if (a.Z != 3)
+ return 3;
+ if (a.W != 4)
+ return 4;
+
+ a.X = 11;
+ a.Y = 22;
+ a.Z = 33333344;
+ a.W = -44444444;
+
+ if (a.X != 11)
+ return 5;
+ if (a.Y != 22)
+ return 6;
+ if (a.Z != 33333344)
+ return 7;
+ if (a.W != -44444444)
+ return 8;
+ return 0;
+ }
+
+ public static int test_0_accessor_vecto4ui () {
+ Vector4ui a = new Vector4ui (0xF0000000, 0xF0000, 3, 4);
+
+ if (a.X != 0xF0000000)
+ return 1;
+ if (a.Y != 0xF0000)
+ return 2;
+ if (a.Z != 3)
+ return 3;
+ if (a.W != 4)
+ return 4;
+
+ a.X = 11;
+ a.Y = 22;
+ a.Z = 33333344;
+ a.W = 44444444;
+
+ if (a.X != 11)
+ return 5;
+ if (a.Y != 22)
+ return 6;
+ if (a.Z != 33333344)
+ return 7;
+ if (a.W != 44444444)
+ return 8;
+ return 0;
+ }
+
+ static float use_getter_with_byref (ref Vector4f a) {
+ return a.W;
+ }
+
+ public static int test_0_accessor_and_byref_var () {
+ Vector4f a = new Vector4f (1, 2, 3, 4);
+ if (use_getter_with_byref (ref a) != 4)
+ return 1;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2ul_slr () {
+ Vector2ul a = new Vector2ul (1, 6);
+
+ Vector2ul c = a >> 1;
+ if (c.X != 0)
+ return 1;
+ if (c.Y != 3)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2l_cmp_gt () {
+ Vector2l a = new Vector2l (10, 5);
+ Vector2l b = new Vector2l (-1, 5);
+
+ Vector2l c = Vector2l.CompareGreaterThan (a, b);
+
+ if (c.X != -1)
+ return 1;
+ if (c.Y != 0)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2l_cmp_eq () {
+ Vector2l a = new Vector2l (0xFF, 5);
+ Vector2l b = new Vector2l (0xFF000000FFL, 5);
+
+ Vector2l c = Vector2l.CompareEqual (a, b);
+
+ if (c.X != 0)
+ return 1;
+ if (c.Y != -1)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2l_srl () {
+ Vector2l a = new Vector2l (1, 6);
+
+ Vector2l c = Vector2l.LogicalRightShift (a, 1);
+
+ if (c.X != 0)
+ return 1;
+ if (c.Y != 3)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2l_unpack_high () {
+ Vector2l a = new Vector2l (1, 6);
+ Vector2l b = new Vector2l (3, 4);
+
+ Vector2l c = Vector2l.UnpackHigh (a, b);
+
+ if (c.X != 6)
+ return 1;
+ if (c.Y != 4)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2l_unpack_low () {
+ Vector2l a = new Vector2l (1, 6);
+ Vector2l b = new Vector2l (3, 4);
+
+ Vector2l c = Vector2l.UnpackLow (a, b);
+
+ if (c.X != 1)
+ return 1;
+ if (c.Y != 3)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2l_xor () {
+ Vector2l a = new Vector2l (1, 6);
+ Vector2l b = new Vector2l (3, 4);
+
+ Vector2l c = a ^ b;
+
+ if (c.X != 2)
+ return 1;
+ if (c.Y != 2)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2l_or () {
+ Vector2l a = new Vector2l (1, 6);
+ Vector2l b = new Vector2l (3, 4);
+
+ Vector2l c = a | b;
+
+ if (c.X != 3)
+ return 1;
+ if (c.Y != 6)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2l_and () {
+ Vector2l a = new Vector2l (1, 6);
+ Vector2l b = new Vector2l (3, 4);
+
+ Vector2l c = a & b;
+
+ if (c.X != 1)
+ return 1;
+ if (c.Y != 4)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2l_shl() {
+ Vector2l a = new Vector2l (1, 6);
+
+ Vector2l c = a << 3;
+
+ if (c.X != 8)
+ return 1;
+ if (c.Y != 48)
+ return 2;
+ return 0;
+ }
+ public static unsafe int test_0_vector2l_sub() {
+ Vector2l a = new Vector2l (1, 6);
+ Vector2l b = new Vector2l (3, 4);
+
+ Vector2l c = a - b;
+
+ if (c.X != -2)
+ return 1;
+ if (c.Y != 2)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2l_add () {
+ Vector2l a = new Vector2l (1, 2);
+ Vector2l b = new Vector2l (3, 4);
+
+ Vector2l c = a + b;
+
+ if (c.X != 4)
+ return 1;
+ if (c.Y != 6)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2d_dup () {
+ Vector2d a = new Vector2d (3, 2);
+
+ Vector2d c = Vector2d.Duplicate (a);
+
+ if (c.X != 3)
+ return 1;
+ if (c.Y != 3)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2d_cmp_eq () {
+ Vector2d a = new Vector2d (3, 2);
+ Vector2d b = new Vector2d (3, 4);
+
+ Vector4ui c = (Vector4ui)Vector2d.CompareEqual (a, b);
+
+ if (c.X != 0xFFFFFFFF)
+ return 1;
+ if (c.Y != 0xFFFFFFFF)
+ return 2;
+ if (c.Z != 0)
+ return 3;
+ if (c.W != 0)
+ return 4;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2d_unpack_low () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (4, 5);
+
+ Vector2d c = Vector2d.InterleaveLow (a, b);
+
+ if (c.X != 1)
+ return 1;
+ if (c.Y != 4)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2d_unpack_high () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (4, 5);
+
+ Vector2d c = Vector2d.InterleaveHigh (a, b);
+
+ if (c.X != 2)
+ return 1;
+ if (c.Y != 5)
+ return 2;
+ return 0;
+ }
+ public static unsafe int test_0_vector2d_addsub () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (4, 1);
+
+ Vector2d c = Vector2d.AddSub (a, b);
+
+ if (c.X != -3)
+ return 1;
+ if (c.Y != 3)
+ return 2;
+ return 0;
+ }
+ public static unsafe int test_0_vector2d_hsub () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (4, 1);
+
+ Vector2d c = Vector2d.HorizontalSub (a, b);
+
+ if (c.X != -1)
+ return 1;
+ if (c.Y != 3)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2d_hadd () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (4, 0);
+
+ Vector2d c = Vector2d.HorizontalAdd (a, b);
+
+ if (c.X != 3)
+ return 1;
+ if (c.Y != 4)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2d_min () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (4, 0);
+
+ Vector2d c = Vector2d.Min (a, b);
+
+ if (c.X != 1)
+ return 1;
+ if (c.Y != 0)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2d_max () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (4, 0);
+
+ Vector2d c = Vector2d.Max (a, b);
+
+ if (c.X != 4)
+ return 1;
+ if (c.Y != 2)
+ return 2;
+ return 0;
+ }
+
+
+ public static unsafe int test_0_vector2d_andnot () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (3, 4);
+
+ Vector4ui c = (Vector4ui)Vector2d.AndNot (a, b);
+
+ if (c.X != 0)
+ return 1;
+ if (c.Y != 1074266112)
+ return 2;
+ if (c.Z != 0)
+ return 3;
+ if (c.W != 1048576)
+ return 4;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2d_div () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (4, 5);
+
+ Vector2d c = a / b;
+
+ if (c.X != 0.25)
+ return 1;
+ if (c.Y != 0.4)
+ return 2;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2d_mul () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (3, 5);
+
+ Vector2d c = a * b;
+
+ if (c.X != 3)
+ return 1;
+ if (c.Y != 10)
+ return 2;
+ return 0;
+ }
+ public static unsafe int test_0_vector2d_sub () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (3, 5);
+
+ Vector2d c = a - b;
+
+ if (c.X != -2)
+ return 1;
+ if (c.Y != -3)
+ return 2;
+ return 0;
+ }
+ public static unsafe int test_0_vector2d_add () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (3, 4);
+
+ Vector2d c = a + b;
+
+ if (c.X != 4)
+ return 1;
+ if (c.Y != 6)
+ return 2;
+ return 0;
+ }
+ public static unsafe int test_0_vector2d_xor () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (3, 4);
+
+ Vector4ui c = (Vector4ui)(a ^ b);
+
+ if (c.X != 0)
+ return 1;
+ if (c.Y != 2146959360)
+ return 2;
+ if (c.Z != 0)
+ return 3;
+ if (c.W != 1048576)
+ return 4;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2d_or () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (3, 4);
+
+ Vector4ui c = (Vector4ui)(a | b);
+
+ if (c.X != 0)
+ return 1;
+ if (c.Y != 2146959360)
+ return 2;
+ if (c.Z != 0)
+ return 3;
+ if (c.W != 1074790400)
+ return 4;
+ return 0;
+ }
+
+ public static unsafe int test_0_vector2d_and () {
+ Vector2d a = new Vector2d (1, 2);
+ Vector2d b = new Vector2d (3, 4);
+
+ Vector4ui c = (Vector4ui)(a & b);
+
+ if (c.X != 0)
+ return 1;
+ if (c.Y != 0)
+ return 2;
+ if (c.Z != 0)
+ return 3;
+ if (c.W != 1073741824)
+ return 3;
+ return 0;
+ }
+
+ public static unsafe int test_vector8s_pack_signed_sat () {
+ Vector8s a = new Vector8s (-200, 200, 3, 0, 5, 6, 5, 4);
+ Vector8s b = new Vector8s (9, 2, 1, 2, 3, 6, 5, 6);
+
+ Vector16sb c = Vector8s.PackWithSignedSaturation (a, b);
+
+ if (c.V0 != -128)
+ return 1;
+ if (c.V1 != 127)
+ return 2;
+
+ return 0;
+ }
+
+ public static unsafe int test_vector16sb_sub_sat () {
+ Vector16sb a = new Vector16sb (100,-100,11,12,13,14,15,0,1,2,3,4,5,6,7,8);
+ Vector16sb b = new Vector16sb (-100, 100,11,12,4,5,6,7,8,9,10,11,12,13,14,15);
+
+ Vector16sb c = Vector16sb.SubtractWithSaturation (a, b);
+
+ if (c.V0 != 127)
+ return 1;
+ if (c.V1 != -128)
+ return 2;
+ if (c.V2 != 0)
+ return 3;
+ if (c.V3 != 0)
+ return 4;
+ if (c.V4 != 9)
+ return 5;
+ if (c.V5 != 9)
+ return 6;
+ if (c.V6 != 9)
+ return 7;
+ if (c.V7 != -7)
+ return 8;
+ return 0;
+ }
+
+ public static unsafe int test_vector16sb_add_sat () {
+ Vector16sb a = new Vector16sb (100,-100,11,12,13,14,15,0,1,2,3,4,5,6,7,8);
+ Vector16sb b = new Vector16sb (100, -100,11,12,4,5,6,7,8,9,10,11,12,13,14,15);
+
+ Vector16sb c = Vector16sb.AddWithSaturation (a, b);
+
+ if (c.V0 != 127)
+ return 1;
+ if (c.V1 != -128)
+ return 2;
+ if (c.V2 != 22)
+ return 3;
+ if (c.V3 != 24)
+ return 4;
+ if (c.V4 != 17)
+ return 5;
+ if (c.V5 != 19)
+ return 6;
+ if (c.V6 != 21)
+ return 7;
+ if (c.V7 != 7)
+ return 8;
+ return 0;
+ }
+
+ public static unsafe int test_vector16sb_cmp_gt () {
+ Vector16sb a = new Vector16sb (100,-100,11,12,13,14,15,0,1,2,3,4,5,6,7,8);
+ Vector16sb b = new Vector16sb (-100, 100,11,12,4,5,6,7,8,9,10,11,12,13,14,15);
+
+ Vector16sb c = Vector16sb.CompareGreaterThan (a, b);
+
+ if (c.V0 != -1)
+ return 1;
+ if (c.V1 != 0)
+ return 2;
+ if (c.V2 != 0)
+ return 3;
+ if (c.V3 != 0)
+ return 4;
+ if (c.V4 != -1)
+ return 5;
+ if (c.V5 != -1)
+ return 6;
+ if (c.V6 != -1)
+ return 7;
+ return 0;
+ }
+
+
public static int test_0_vector4ui_pack_with_sat () {
Vector4ui a = new Vector4ui (0xF0000000,0xF0000,3,4);
Vector4ui b = new Vector4ui (5,6,7,8);
public static int vector16b_sum_abs_diff () {
Vector16b a = new Vector16b (100,20,20,20,0,0,0,0,0,0,0,0,0,0, 0, 0);
- Vector16b b = new Vector16b (0, 10,10,10,0,0,0,0,0,0,0,0,0,0,10,10);
+ Vector16sb b = new Vector16sb (0, 10,10,10,0,0,0,0,0,0,0,0,0,0,10,10);
Vector8us c = Vector16b.SumOfAbsoluteDifferences (a, b);
if (c.V0 != 130)
public static int test_0_vector4ui_sar () {
Vector4ui a = new Vector4ui (0xF0000000u,20,3,40);
- Vector4ui c = Vector4ui.ShiftRightArithmetic (a, 2);
+ Vector4ui c = Vector4ui.ArithmeticRightShift (a, 2);
if (c.X != 0xFC000000)
return 1;
static int test_0_vector8us_sub_sat () {
Vector8us a = new Vector8us (0xF000,1,20,3,4,5,6,7);
Vector8us b = new Vector8us (0xFF00,4,5,6,7,8,9,10);
- Vector8us c = Vector8us.SubWithSaturation (a, b);
+ Vector8us c = Vector8us.SubtractWithSaturation (a, b);
if (c.V0 != 0)
return 1;
static int test_0_vector8us_shift_right_arithmetic () {
Vector8us a = new Vector8us (0xFF00,1,2,3,4,5,6,7);
int amt = 2;
- Vector8us c = Vector8us.ShiftRightArithmetic (a, amt);
+ Vector8us c = Vector8us.ArithmeticRightShift (a, amt);
if (c.V0 != 0xFFC0)
return 1;
return 0;
}
- static int test_0_vector16b_sar () {
- Vector16b a = new Vector16b (0xF0,20,3,40,0,0,0,0,0,0,0,0,0,0,0,0);
-
- Vector16b c = Vector16b.ShiftRightArithmetic (a, 2);
- if (c.V0 != 0xFC)
- return 1;
- if (c.V1 != 5)
- return 1;
- if (c.V2 != 0)
- return 2;
- if (c.V3 != 10)
- return 3;
- return 0;
- }
-
static int test_0_vector16b_sub_sat () {
Vector16b a = new Vector16b (100,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8);
Vector16b b = new Vector16b (200,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
- Vector16b c = Vector16b.SubWithSaturation (a, b);
+ Vector16b c = Vector16b.SubtractWithSaturation (a, b);
if (c.V0 != 0)
return 1;