When using SSE2 intrinsic functions to do bit-wise operations, one has to cast pointers from int*
to __m128i*
. Does this code break strict aliasing rule?
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
}
}
Thank you!