swisstable-0.1.0.1: csrc/simd.c
#include <stdio.h>
#include <immintrin.h>
#include <x86intrin.h>
#include <strings.h>
int _elm_cmp_vec(char elem, char *src){
__m256i _list = _mm256_loadu_si256((__m256i*)src);
__m256i _lookup = _mm256_set1_epi8(elem);
return _mm256_movemask_epi8(_mm256_cmpeq_epi8(_list, _lookup));
}
int _load_movemask(char *src) {
return _mm256_movemask_epi8(_mm256_loadu_si256((__m256i*)src));
}
int _elm_add_movemask(char elem, char *src){
__m256i _list = _mm256_loadu_si256((__m256i*)src);
__m256i _lookup = _mm256_set1_epi8(elem);
return _mm256_movemask_epi8(_mm256_xor_si256(_list, _lookup));
}