Skip to content

Instantly share code, notes, and snippets.

@Bigcheese
Created April 14, 2014 18:43
Show Gist options
  • Save Bigcheese/10673129 to your computer and use it in GitHub Desktop.
Save Bigcheese/10673129 to your computer and use it in GitHub Desktop.
#include <x86intrin.h>
#include <immintrin.h>
#include <avxintrin.h>
#include <avx2intrin.h>
#include <stdio.h>
#include <inttypes.h>
__m128i shift_sse2(unsigned S) {
__v8hi a8 = {1, 2, 3, 4, 5, 6, 7, 8};
__m128i shift = {S};
__m128i a = _mm_sll_epi16((__m128i)a8, shift);
a = _mm_sll_epi32(a, shift);
a = _mm_sll_epi64(a, shift);
a = _mm_slli_epi16(a, S);
a = _mm_slli_epi32(a, S);
a = _mm_slli_epi64(a, S);
a = _mm_slli_si128(a, 1);
return a;
}
__m256i shift_avx2(unsigned S) {
__v16hi a16 = {1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0};
__m128i shift = {S};
__m256i a = _mm256_sll_epi16((__m256i)a16, shift);
a = _mm256_sll_epi32(a, shift);
a = _mm256_sll_epi64(a, shift);
a = _mm256_slli_epi16(a, S);
a = _mm256_slli_epi32(a, S);
a = _mm256_slli_epi64(a, S);
a = _mm256_slli_si256(a, 1);
return a;
}
int main() {
__m128i a = shift_sse2(1);
__m256i b = shift_avx2(1);
printf("%" PRId64 ", %" PRId64 "\n", a[0], a[1]);
printf("%" PRId64 ", %" PRId64 ", %" PRId64 ", %" PRId64 "\n",
b[0], b[1], b[2], b[3]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment