// intel avx2 __m256i right, left rotate test
//
// usage
// $ cc -O3 -mavx2 -std=c99 ./avx2_shift.c -o avx2_shift
#include <stdio.h>
#include <stdint.h>
#include <immintrin.h>
int main() {
// right rotate
{
uint64_t a = 0x00000000000000ffU;
__m256i va = _mm256_set_epi64x(a, a, a, a);
va = _mm256_xor_si256(_mm256_srli_epi64(va,8),_mm256_slli_epi64(va,(64-8)));
uint64_t bva[4];
_mm256_storeu_si256((__m256i*)&bva[0], va);
printf("0x%016llx\n", bva[0]);
printf("0x%016llx\n", bva[1]);
printf("0x%016llx\n", bva[2]);
printf("0x%016llx\n", bva[3]);
}
// left rotate
{
uint64_t a = 0xff00000000000000U;
__m256i va = _mm256_set_epi64x(a, a, a, a);
va = _mm256_xor_si256(_mm256_slli_epi64(va, 8), _mm256_srli_epi64(va, (64-8)));
uint64_t bva[4];
_mm256_storeu_si256((__m256i*)&bva[0], va);
printf("0x%016llx\n", bva[0]);
printf("0x%016llx\n", bva[1]);
printf("0x%016llx\n", bva[2]);
printf("0x%016llx\n", bva[3]);
}
return 0;
}