uses SSSE3 instructions to convert to absolute values.
#include <immintrin.h>
#include <tmmintrin.h>
#include <stdio.h>
/**
* Uses SSSE3 to make values absolute.
*/
static void make_absolute(int* source)
{
__m128i values = _mm_loadu_si128((const __m128i*)source);
__m128i absolute = _mm_abs_epi32(values);
_mm_storeu_si128((__m128i*)source, absolute);
}
int main(int argc, char const* argv[])
{
int vals[] = {-4, -7, 8, 8};
printf("Vals before are %d %d %d %d\n", vals[0], vals[1], vals[2], vals[3]);
make_absolute(vals);
printf("Vals after are %d %d %d %d\n", vals[0], vals[1], vals[2], vals[3]);
//Vals before are -4 -7 8 8
//Vals after are 4 7 8 8
return 0;
}