首先测试下sse4.1,源代码如下
#include <stdio.h> #include <smmintrin.h> int main() { __m128i a, b; char * psA = (char * )&a; char * psB = (char * )&b; int i = 0 ; for( ; i < 16; ++i) { psA[i] = 0xcc; psB[i] = 0x33; } int sResult = _mm_testz_si128(a,b); printf("sResult == %d/n",sResult); }
编译方法
g++ -O2 -o1 -s -msse4.1 1.cpp
gdb报sigill,非法指令集,不支持sse4.1
接着测试sse3
#include <stdio.h> #include <pmmintrin.h> int main(){ __m128 a, b,c; float * psA = (float*)&a; psA[0] = 0.1f;psA[1]= 0.2f; psA[2]= 0.3f; psA[3]= 0.4f; float * psB = (float*)&b; psB[0] = 0.001f; psB[1] = 0.002f; psB[2] = 0.003f; psB[3] = 0.004f; c = _mm_addsub_ps(a,b); float * psC = (float*)&c; printf("c[0] = %f,c[1] = %f,c[2] = %f,c[3] = %f", psC[0],psC[1],psC[2],psC[3]); }
结果输出:
c[0] = 0.099000,c[1] = 0.202000,c[2] = 0.297000,c[3] = 0.404000
支持sse3
至于那个sse4a,那就真是算了,只有AMD支持,没有市场……