私は組み込み関数を使用して私のプログラムを最適化しています。しかし、結果を浮動小数点値と比較するために、__m128ベクトルにある4つの要素を合計したいと思います。たとえば、次の128ビットベクトルがあるとします:{a、bc、d}。a + b + c + dをeと比較するにはどうすればよいですか?eはfloatタイプです。
SSE2またはSSE3はそれを簡単に行う方法を提供しますか、それとも私を助けることができるコードスニペットがありますか?ありがとう !
私ができる最善のことはこれです:
; assumes xmm0 = [0, B, 0, A] or similar
mulps xmm0,xmm0 ; [0, B*B, 0, A*A]
xorps xmm1,xmm1
movhlps xmm1,xmm0 ; [0, 0, 0, B * B]
addps xmm0,xmm1 ; [0, 0, 0, A * A + B * B]
AとBが絶対に低いクワッドワードに含まれている必要がある場合、私が知る限り、シャッフルが必要です。これは、ペンリン以前では遅くなります(ペンリンでは、DPPSソリューションが利用可能です)。