public static Vector4Int64 Divide_Software(Vector4Int64Param1_3 dividend, Vector4Int64Param1_3 divisor)
 {
     return(Vector256.Create(
                X(dividend) / X(divisor),
                Y(dividend) / Y(divisor),
                Z(dividend) / Z(divisor),
                W(dividend) / W(divisor)
                ));
 }
 public static Vector4Int64 LessThanOrEqual_Software(Vector4Int64Param1_3 left, Vector4Int64Param1_3 right)
 {
     return(Vector256.Create(
                Helpers.BoolToSimdBoolInt64(Helpers.X(left) <= Helpers.X(right)),
                Helpers.BoolToSimdBoolInt64(Helpers.Y(left) <= Helpers.Y(right)),
                Helpers.BoolToSimdBoolInt64(Helpers.Z(left) <= Helpers.Z(right)),
                Helpers.BoolToSimdBoolInt64(Helpers.W(left) <= Helpers.W(right))
                ));
 }
 public static Vector4Int64 Subtract_Software(Vector4Int64Param1_3 vector, long scalar)
 {
     return(Vector256.Create(
                X(vector) - scalar,
                Y(vector) - scalar,
                Z(vector) - scalar,
                W(vector) - scalar
                ));
 }
Esempio n. 4
0
        public static Vector4Int64 Subtract(Vector4Int64Param1_3 left, Vector4Int64Param1_3 right)
        {
            if (Avx2.IsSupported)
            {
                return(Avx2.Subtract(left, right));
            }

            return(Subtract_Software(left, right));
        }
 public static Vector4Int64 Add_Software(Vector4Int64Param1_3 left, Vector4Int64Param1_3 right)
 {
     return(Vector256.Create(
                X(left) + X(right),
                Y(left) + Y(right),
                Z(left) + Z(right),
                W(left) + W(right)
                ));
 }
 public static Vector4Int64 Multiply_Software(Vector4Int64Param1_3 left, Vector4Int64Param1_3 right)
 {
     return(Vector256.Create(
                X(left) * X(right),
                Y(left) * Y(right),
                Z(left) * Z(right),
                W(left) * W(right)
                ));
 }
Esempio n. 7
0
        public static Vector4Int64 Add(Vector4Int64Param1_3 left, Vector4Int64Param1_3 right)
        {
            if (Avx2.IsSupported)
            {
                return(Avx2.Add(left, right));
            }

            return(Add_Software(left, right));
        }
Esempio n. 8
0
        public static Vector4Int64 Negate4D(Vector4Int64Param1_3 vector)
        {
            if (Avx2.IsSupported)
            {
                return(Avx2.Xor(vector, SignFlip4D.AsInt32()));
            }

            return(Negate4D_Software(vector));
        }
Esempio n. 9
0
        public static Vector4Int64 Min(Vector4Int64Param1_3 left, Vector4Int64Param1_3 right)
        {
            if (Avx2.IsSupported)
            {
                return(Avx2.Min(left, right));
            }

            return(Min_Software(left, right));
        }
 public static Vector4Int64 Multiply_Software(Vector4Int64Param1_3 left, long scalar)
 {
     return(Vector256.Create(
                X(left) * scalar,
                Y(left) * scalar,
                Z(left) * scalar,
                W(left) * scalar
                ));
 }
 public static Vector4Int64 Subtract_Software(Vector4Int64Param1_3 left, Vector4Int64Param1_3 right)
 {
     return(Vector256.Create(
                X(left) - X(right),
                Y(left) - Y(right),
                Z(left) - Z(right),
                W(left) - W(right)
                ));
 }
 public static Vector4Int64 Negate4D_Software(Vector4Int64Param1_3 vector)
 {
     return(Vector256.Create(
                -X(vector),
                -Y(vector),
                -Z(vector),
                -W(vector)
                ));
 }
 public static Vector4Int64 Divide_Software(Vector4Int64Param1_3 dividend, long scalarDivisor)
 {
     return(Vector256.Create(
                X(dividend) / scalarDivisor,
                Y(dividend) / scalarDivisor,
                Z(dividend) / scalarDivisor,
                W(dividend) / scalarDivisor
                ));
 }
 public static Vector4Int64 Min_Software(Vector4Int64Param1_3 left, Vector4Int64Param1_3 right)
 {
     return(Vector256.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 Vector4Int64 Abs_Software(Vector4Int64Param1_3 vector)
 {
     return(Vector256.Create(
                Math.Abs(X(vector)),
                Math.Abs(Y(vector)),
                Math.Abs(Z(vector)),
                Math.Abs(W(vector))
                ));
 }
 public static Vector4Int64 Sqrt_Software(Vector4Int64Param1_3 vector)
 {
     return(Vector256.Create(
                (long)MathF.Sqrt(X(vector)),
                (long)MathF.Sqrt(Y(vector)),
                (long)MathF.Sqrt(Z(vector)),
                (long)MathF.Sqrt(W(vector))
                ));
 }
 public static Vector4Int64 Clamp_Software(Vector4Int64Param1_3 vector, Vector4Int64Param1_3 low, Vector4Int64Param1_3 high)
 {
     return(Vector256.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))
                ));
 }
Esempio n. 18
0
        public static Vector4Int64 Subtract(Vector4Int64Param1_3 vector, long scalar)
        {
            if (Avx2.IsSupported)
            {
                Vector4Int64 expand = Vector256.Create(scalar);
                return(Avx2.Add(vector, expand));
            }

            return(Subtract_Software(vector, scalar));
        }
Esempio n. 19
0
        public static Vector4Int64 Sqrt(Vector4Int64Param1_3 vector)
        {
#warning No direct hardware acceleration for longeger sqrt; research acceleration techniques
            //if (Sse.IsSupported)
            //{
            //    return Sse42.Sqrt(vector);
            //}

            return(Sqrt_Software(vector));
        }
Esempio n. 20
0
        public static Vector4Int64 Divide(Vector4Int64Param1_3 dividend, Vector4Int64Param1_3 divisor)
        {
#warning No direct hardware acceleration for longeger divison; research acceleration techniques
            //if (Avx2.IsSupported)
            //{
            //    return Ssse3.Divide(dividend, divisor);
            //}

            return(Divide_Software(dividend, divisor));
        }
Esempio n. 21
0
        public static Vector4Int64 Clamp(Vector4Int64Param1_3 vector, Vector4Int64Param1_3 low, Vector4Int64Param1_3 high)
        {
            if (Avx2.IsSupported)
            {
                Vector4Int64 temp = Avx2.Min(vector, high);
                return(Avx2.Max(temp, low));
            }

            return(Clamp_Software(vector, low, high));
        }
Esempio n. 22
0
        public static Vector4Int64 Abs(Vector4Int64Param1_3 vector)
        {
            if (Avx2.IsSupported)
            {
                Vector4Int64 zero = Vector4Int64.Zero;
                zero = Avx2.Subtract(zero, vector); // This gets the inverted results of all elements
                return(Avx2.Max(zero, vector));     // This selects the positive values of the 2 vectors
            }

            return(Abs_Software(vector));
        }
Esempio n. 23
0
        public static Vector4Int64 HorizontalAdd(Vector4Int64Param1_3 left, Vector4Int64Param1_3 right)
        {
            if (Ssse3.IsSupported)
            {
                return(Avx2.HorizontalAdd(left, right));
            }

            // TODO can Sse be used over the software fallback?

            return(HorizontalAdd_Software(left, right));
        }
Esempio n. 24
0
        public static Vector4Int64 Divide(Vector4Int64Param1_3 dividend, long scalarDivisor)
        {
#warning No direct hardware acceleration for longeger divison; research acceleration techniques
            //if (Sse.IsSupported)
            //{
            //    Vector4Int expand = Vector128.Create(scalarDivisor);
            //    return Sse.Divide(dividend, expand);
            //}

            return(Divide_Software(dividend, scalarDivisor));
        }
Esempio n. 25
0
        public static Vector4Int64 Multiply(Vector4Int64Param1_3 left, Vector4Int64Param1_3 right)
        {
            if (Avx2.IsSupported)
            {
                return(Avx2.MultiplyLow(left, right));
            }
            // TODO try accelerate with less than < Sse4.1
            //else if (Avx2.IsSupported)
            //{
            //    Vector128<ulong> elem2And0 = Avx2.Multiply(left.AsUInt32(), right.AsUInt32());
            //}

            return(Multiply_Software(left, right));
        }