예제 #1
0
 public static sbyte16 nabs(sbyte16 x)
 {
     if (Ssse3.IsSsse3Supported)
     {
         return(Sse2.sub_epi8(default(v128), Ssse3.abs_epi8(x)));
     }
     else if (Sse2.IsSse2Supported)
     {
         return(Mask.BlendV(-x, x, Sse2.cmpgt_epi8(default(v128), x)));
     }
     else
     {
         return(new sbyte16((sbyte)nabs((int)x.x0), (sbyte)nabs((int)x.x1), (sbyte)nabs((int)x.x2), (sbyte)nabs((int)x.x3), (sbyte)nabs((int)x.x4), (sbyte)nabs((int)x.x5), (sbyte)nabs((int)x.x6), (sbyte)nabs((int)x.x7), (sbyte)nabs((int)x.x8), (sbyte)nabs((int)x.x9), (sbyte)nabs((int)x.x10), (sbyte)nabs((int)x.x11), (sbyte)nabs((int)x.x12), (sbyte)nabs((int)x.x13), (sbyte)nabs((int)x.x14), (sbyte)nabs((int)x.x15)));
     }
 }
예제 #2
0
 public static sbyte4 nabs(sbyte4 x)
 {
     if (Ssse3.IsSsse3Supported)
     {
         return(Sse2.sub_epi8(default(v128), Ssse3.abs_epi8(x)));
     }
     else if (Sse2.IsSse2Supported)
     {
         return(Mask.BlendV(-x, x, Sse2.cmpgt_epi8(default(v128), x)));
     }
     else
     {
         return(new sbyte4((sbyte)nabs((int)x.x), (sbyte)nabs((int)x.y), (sbyte)nabs((int)x.z), (sbyte)nabs((int)x.w)));
     }
 }
예제 #3
0
        public static sbyte16 abs(sbyte16 x)
        {
            if (Ssse3.IsSsse3Supported)
            {
                return(Ssse3.abs_epi8(x));
            }
            else if (Sse2.IsSse2Supported)
            {
                v128 mask = Sse2.cmpgt_epi8(default(v128), x);

                return((x + mask) ^ mask);
            }
            else
            {
                return(new sbyte16((sbyte)math.abs(x.x0), (sbyte)math.abs(x.x1), (sbyte)math.abs(x.x2), (sbyte)math.abs(x.x3), (sbyte)math.abs(x.x4), (sbyte)math.abs(x.x5), (sbyte)math.abs(x.x6), (sbyte)math.abs(x.x7), (sbyte)math.abs(x.x8), (sbyte)math.abs(x.x9), (sbyte)math.abs(x.x10), (sbyte)math.abs(x.x11), (sbyte)math.abs(x.x12), (sbyte)math.abs(x.x13), (sbyte)math.abs(x.x14), (sbyte)math.abs(x.x15)));
            }
        }
예제 #4
0
        public static sbyte4 abs(sbyte4 x)
        {
            if (Ssse3.IsSsse3Supported)
            {
                return(Ssse3.abs_epi8(x));
            }
            else if (Sse2.IsSse2Supported)
            {
                v128 mask = Sse2.cmpgt_epi8(default(v128), x);

                return((x + mask) ^ mask);
            }
            else
            {
                return(new sbyte4((sbyte)math.abs(x.x), (sbyte)math.abs(x.y), (sbyte)math.abs(x.z), (sbyte)math.abs(x.w)));
            }
        }