Beispiel #1
0
        public static Span <uint> pack(N1 width, Span <uint> src)
        {
            Span <uint> dst = new uint[8];

            pack(width, ref src[0], ref dst[0]);
            return(dst);
        }
Beispiel #2
0
        void ShowBitSeq(N1 n, ShowLog dst)
        {
            var bits = BitSeq.bits(n);

            dst.Show($"n={n}, count={bits.Length}");
            dst.Show(RP.PageBreak120);
            root.iter(bits, s => dst.Buffer.AppendFormat("{0} ", s.Format()));
            dst.ShowBuffer();
        }
Beispiel #3
0
        public static void pack(N1 width, ref uint src, ref uint dst)
        {
            // we are going to pack 256 1-bit values, touching 1 256-bit words, using 16 bytes
            // we are going to touch 1 256-bit word
            __m256i w0 = default;

            w0 = _mm256_lddqu_si256(ref add(ref src, 0));
            w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 1));
            w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 2)), 2));
            w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 3)), 3));
            w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 4)), 4));
            w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 5)), 5));
            w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 6)), 6));
            w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 7)), 7));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 0));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 1));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 2));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 3));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 4));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 5));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 6));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 7));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 0));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 1));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 2));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 3));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 4));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 5));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 6));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 7));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 0));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 1));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 2));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 3));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 4));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 5));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 6));
            // w0 = _mm256_or_si256(w0, _mm256_slli_epi32(_mm256_lddqu_si256(ref add(ref src, 1)), 7));
            _mm256_storeu_si256(ref dst, w0);
        }
Beispiel #4
0
 public static ref ulong uint64(ref BitBlock16 src, N1 hi)
 => ref Unsafe.As <BitBlock8, ulong>(ref src.Block8x1);