45 const auto idx = _mm_set_epi8(8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7);
46 return SIMD_2x64(_mm_shuffle_epi8(m_simd, idx));
71 requires(ROT > 0 && ROT < 64)
73 if constexpr(ROT == 8) {
74 auto tab = _mm_setr_epi8(1, 2, 3, 4, 5, 6, 7, 0, 9, 10, 11, 12, 13, 14, 15, 8);
75 return SIMD_2x64(_mm_shuffle_epi8(m_simd, tab));
76 }
else if constexpr(ROT == 16) {
77 auto tab = _mm_setr_epi8(2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9);
78 return SIMD_2x64(_mm_shuffle_epi8(m_simd, tab));
79 }
else if constexpr(ROT == 24) {
80 auto tab = _mm_setr_epi8(3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10);
81 return SIMD_2x64(_mm_shuffle_epi8(m_simd, tab));
82 }
else if constexpr(ROT == 32) {
83 auto tab = _mm_setr_epi8(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 8, 9, 10, 11);
84 return SIMD_2x64(_mm_shuffle_epi8(m_simd, tab));
86 return SIMD_2x64(_mm_or_si128(_mm_srli_epi64(m_simd,
static_cast<int>(ROT)),
87 _mm_slli_epi64(m_simd,
static_cast<int>(64 - ROT))));