public static Vector4Int32 Subtract_Software(Vector4Int32Param1_3 vector, int scalar) { return(Vector128.Create( X(vector) - scalar, Y(vector) - scalar, Z(vector) - scalar, W(vector) - scalar )); }
public static Vector4Int32 Add_Software(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { return(Vector128.Create( X(left) + X(right), Y(left) + Y(right), Z(left) + Z(right), W(left) + W(right) )); }
public static Vector4Int32 Subtract_Software(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { return(Vector128.Create( X(left) - X(right), Y(left) - Y(right), Z(left) - Z(right), W(left) - W(right) )); }
public static Vector4Int32 Min_Software(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { return(Vector128.Create( Math.Min(X(left), X(right)), Math.Min(Y(left), Y(right)), Math.Min(Z(left), Z(right)), Math.Min(W(left), W(right)) )); }
public static Vector4Int32 Negate4D_Software(Vector4Int32Param1_3 vector) { return(Vector128.Create( -X(vector), -Y(vector), -Z(vector), -W(vector) )); }
public static Vector4Int32 Abs_Software(Vector4Int32Param1_3 vector) { return(Vector128.Create( Math.Abs(X(vector)), Math.Abs(Y(vector)), Math.Abs(Z(vector)), Math.Abs(W(vector)) )); }
public static Vector4Int32 Sqrt_Software(Vector4Int32Param1_3 vector) { return(Vector128.Create( (int)MathF.Sqrt(X(vector)), (int)MathF.Sqrt(Y(vector)), (int)MathF.Sqrt(Z(vector)), (int)MathF.Sqrt(W(vector)) )); }
public static Vector4Int32 Clamp_Software(Vector4Int32Param1_3 vector, Vector4Int32Param1_3 low, Vector4Int32Param1_3 high) { return(Vector128.Create( Math.Clamp(X(vector), X(low), X(high)), Math.Clamp(Y(vector), Y(low), Y(high)), Math.Clamp(Z(vector), Z(low), Z(high)), Math.Clamp(W(vector), W(low), W(high)) )); }
public static Vector4Int32 Multiply_Software(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { return(Vector128.Create( X(left) * X(right), Y(left) * Y(right), Z(left) * Z(right), W(left) * W(right) )); }
public static Vector4Int32 Multiply_Software(Vector4Int32Param1_3 left, int scalar) { return(Vector128.Create( X(left) * scalar, Y(left) * scalar, Z(left) * scalar, W(left) * scalar )); }
public static Vector4Int32 Subtract(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { if (Sse2.IsSupported) { return(Sse2.Subtract(left, right)); } return(Subtract_Software(left, right)); }
public static Vector4Int32 Divide_Software(Vector4Int32Param1_3 dividend, Vector4Int32Param1_3 divisor) { return(Vector128.Create( X(dividend) / X(divisor), Y(dividend) / Y(divisor), Z(dividend) / Z(divisor), W(dividend) / W(divisor) )); }
public static Vector4Int32 Equality(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { if (Sse2.IsSupported) { return(Sse2.CompareEqual(left, right)); } return(Equality_Software(left, right)); }
public static Vector4Int32 Add(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { if (Sse2.IsSupported) { return(Sse2.Add(left, right)); } return(Add_Software(left, right)); }
public static Vector4Int32 Min(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { if (Sse41.IsSupported) { return(Sse41.Min(left, right)); } return(Min_Software(left, right)); }
public static Vector4Int32 Negate4D(Vector4Int32Param1_3 vector) { if (Sse2.IsSupported) { return(Sse2.Xor(vector, SignFlip4D.AsInt32())); } return(Negate4D_Software(vector)); }
public static Vector4Int32 Divide_Software(Vector4Int32Param1_3 dividend, int scalarDivisor) { return(Vector128.Create( X(dividend) / scalarDivisor, Y(dividend) / scalarDivisor, Z(dividend) / scalarDivisor, W(dividend) / scalarDivisor )); }
public static Vector4Int32 LessThan(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { if (Sse2.IsSupported) { return(Sse2.CompareLessThan(left, right)); } return(LessThan_Software(left, right)); }
public static Vector4Int32 LessThanOrEqual_Software(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { return(Vector128.Create( Helpers.BoolToSimdBoolInt32(Helpers.X(left) <= Helpers.X(right)), Helpers.BoolToSimdBoolInt32(Helpers.Y(left) <= Helpers.Y(right)), Helpers.BoolToSimdBoolInt32(Helpers.Z(left) <= Helpers.Z(right)), Helpers.BoolToSimdBoolInt32(Helpers.W(left) <= Helpers.W(right)) )); }
public static Vector4Int32 Sqrt(Vector4Int32Param1_3 vector) { #warning No direct hardware acceleration for integer sqrt; research acceleration techniques //if (Sse.IsSupported) //{ // return Sse42.Sqrt(vector); //} return(Sqrt_Software(vector)); }
public static Vector4Int32 Clamp(Vector4Int32Param1_3 vector, Vector4Int32Param1_3 low, Vector4Int32Param1_3 high) { if (Sse41.IsSupported) { Vector4Int32 temp = Sse41.Min(vector, high); return(Sse41.Max(temp, low)); } return(Clamp_Software(vector, low, high)); }
public static Vector4Int32 Divide(Vector4Int32Param1_3 dividend, Vector4Int32Param1_3 divisor) { #warning No direct hardware acceleration for integer divison; research acceleration techniques //if (Sse2.IsSupported) //{ // return Ssse3.Divide(dividend, divisor); //} return(Divide_Software(dividend, divisor)); }
public static Vector4Int32 Subtract(Vector4Int32Param1_3 vector, int scalar) { if (Sse2.IsSupported) { Vector4Int32 expand = Vector128.Create(scalar); return(Sse2.Add(vector, expand)); } return(Subtract_Software(vector, scalar)); }
public static Vector4Int32 LessThanOrEqual(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { if (Sse2.IsSupported) { Vector128 <int> mask = Vector128.Create(-1).AsInt32(); return(Sse2.Xor(Sse2.CompareGreaterThan(left, right), mask)); } return(LessThanOrEqual_Software(left, right)); }
public static Vector4Int32 Inequality(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { if (Sse2.IsSupported) { Vector128 <int> mask = Vector128.Create(-1).AsInt32(); return(Sse2.Xor(Sse2.CompareEqual(left, right), mask)); } return(Inequality_Software(left, right)); }
public static Vector4Int32 Divide(Vector4Int32Param1_3 dividend, int scalarDivisor) { #warning No direct hardware acceleration for integer divison; research acceleration techniques //if (Sse.IsSupported) //{ // Vector4Int expand = Vector128.Create(scalarDivisor); // return Sse.Divide(dividend, expand); //} return(Divide_Software(dividend, scalarDivisor)); }
public static Vector4Int32 Abs(Vector4Int32Param1_3 vector) { if (Sse41.IsSupported) { Vector4Int32 zero = Vector4Int32.Zero; zero = Sse2.Subtract(zero, vector); // This gets the inverted results of all elements return(Sse41.Max(zero, vector)); // This selects the positive values of the 2 vectors } return(Abs_Software(vector)); }
public static Vector4Int32 HorizontalAdd(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { if (Ssse3.IsSupported) { return(Ssse3.HorizontalAdd(left, right)); } // TODO can Sse be used over the software fallback? return(HorizontalAdd_Software(left, right)); }
public static Vector4Int32 Multiply(Vector4Int32Param1_3 left, Vector4Int32Param1_3 right) { if (Sse41.IsSupported) { return(Sse41.MultiplyLow(left, right)); } // TODO try accelerate with less than < Sse4.1 //else if (Sse2.IsSupported) //{ // Vector128<ulong> elem2And0 = Sse2.Multiply(left.AsUInt32(), right.AsUInt32()); //} return(Multiply_Software(left, right)); }