/* 質問させて下さい。ゼロかどうかを判断するにはどうすればよいか悩んでいます。
現在は、下のようにプログラムを組んでいますが、特に SSE2 の場合遅いです。
実際のプログラムでは表示ではなく、if 文の条件式の中で使っています。
CPU は Core2Duo E6600 と Core2Quad Q9550 です。どなたか教えてください。*/
#include <smmintrin.h>
#include <stdio.h>
typedef union tagMM { long long i[2]; __m128i m; } mm_t;
const mm_t MM_FULL = {{-1,-1}};

#define IS_ZERO_SSE4(A) (_mm_testz_si128(A,MM_FULL.m)!=0)

int IS_ZERO_SSE2(const __m128i a) {
long long temp[2];
_mm_storeu_si128((__m128i*)temp,a);
return temp[0]==0&&temp[1]==0;
}

int main(void) {
mm_t zero={{0,0}}, test={{0,8}};
printf("zero SSE2:%d SSE4:%d\n",IS_ZERO_SSE2(zero.m),IS_ZERO_SSE4(zero.m));
printf("test SSE2:%d SSE4:%d\n",IS_ZERO_SSE2(test.m),IS_ZERO_SSE4(test.m));
return 0;
}