Example #1
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);
        }
Example #2
0
 public static __m512i Define(__m256i lo, __m256i hi)
 => new __m512i(lo, hi);