Lorsque l'on utilise les fonctions intrinsèques du SSE2 pour effectuer des opérations sur les bits, il faut faire passer les pointeurs de int*
a __m128i*
. Ce code enfreint-il la règle stricte de l'aliasing ?
void bit_twiddling_func(int size, int const* input, int* output) {
const __m128* x = (const __m128*)input;
const __m128* y = (const __m128*)output;
for (int i=0; i < size/4; ++i, ++x, ++y) {
__m128i x4 = _mm_load_si128(x); // load 4 integers
// do some bit twiddling
_mm_store_si128(y, x4); // store 4 integers
}
}
Merci de votre attention !