SIMDを使う

QtCreatorでSIMD (MMXやSSE) を使う方法です。先ずは *.proファイルに、

QMAKE_CXXFLAGS += -mmmx
QMAKE_CXXFLAGS += -msse2
QMAKE_CXXFLAGS += -msse3

と追加します。あとはソースコード側でヘッダのinclude。

#include <mmintrin.h>  // SSE
#include <emmintrin.h> // SSE2
#include <pmmintrin.h> // SSE3

あとはサンプルコードを一つ。

__m128i a,b,c;
int dst[4] __attribute__((aligned(16))) ;
int src1[4] __attribute__((aligned(16))) = {1,2,3,4};
int src2[4] __attribute__((aligned(16))) = {2,3,4,5};
a = _mm_load_si128( (__m128i*)src1 );
b = _mm_load_si128( (__m128i*)src2 );
c = _mm_add_epi32( a, b );
_mm_store_si128( (__m128i*)dst, c );

理解度はイマイチだし、使う予定は無いんですが…動きそうなのを確認しただけ。
Integer Intrinsics Using Streaming SIMD Extensions 2