コード例 #1
0
            private static unsafe (Vector256 <UInt32>[], int shift) ToVector(UInt32[] arr)
            {
                int first_zeros = FirstZeros(arr), digits = Digits(arr);

                Vector256 <UInt32>[] v = new Vector256 <UInt32> [(digits - first_zeros + Vector256 <UInt64> .Count - 1) / Vector256 <UInt64> .Count];

                fixed(UInt32 *p = arr)
                {
                    fixed(Vector256 <UInt32> *pv = v)
                    {
                        if ((digits - first_zeros) % Vector256 <UInt64> .Count == 0)
                        {
                            for (int i = 0, j = first_zeros; i < v.Length; i++, j += Vector256 <UInt64> .Count)
                            {
                                pv[i] = Avx2.ConvertToVector256Int64(Avx.LoadVector128(p + j)).AsUInt32();
                            }
                        }
                        else
                        {
                            int i, j;
                            for (i = 0, j = first_zeros; i < v.Length - 1; i++, j += Vector256 <UInt64> .Count)
                            {
                                pv[i] = Avx2.ConvertToVector256Int64(Avx.LoadVector128(p + j)).AsUInt32();
                            }

                            pv[i] = Avx2.ConvertToVector256Int64(Avx2.MaskLoad(p + j, Mask128.LSV((uint)(digits - j)))).AsUInt32();
                        }
                    }
                }

                return(v, first_zeros);
            }
コード例 #2
0
 ///-----------------------------------------------------------------
 public Mask128s(string name, Mask128 default_value)
     : base(name)
 {
     Resize(Mask128.MAX_SIZE);
 }
コード例 #3
0
ファイル: AutoCheckValue.cs プロジェクト: touky/Prateek
 public Mask128s(Mask128 value) : base(value.Get(0), value.Get(1))
 {
 }
コード例 #4
0
 ///---------------------------------------------------------------------
 #region Mask
 public static Mask128s Get(string name, Mask128 default_value)
 {
     return(new Mask128s(name, default_value));
 }