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); }
///----------------------------------------------------------------- public Mask128s(string name, Mask128 default_value) : base(name) { Resize(Mask128.MAX_SIZE); }
public Mask128s(Mask128 value) : base(value.Get(0), value.Get(1)) { }
///--------------------------------------------------------------------- #region Mask public static Mask128s Get(string name, Mask128 default_value) { return(new Mask128s(name, default_value)); }