jweinst1
4/15/2020 - 6:48 PM

uses SSSE3 instructions to convert to absolute values.

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;
}