私は sse の初心者で、それを見つけるのに苦労しています。xmm3 レジスターにある 4 つのパックされた float を 4 つの int に変換 ("(int) float_" のように切り捨て) する良い方法を教えてください。メモリ(「movaps oword [edx+32]、xmm3」などの保存は明確ですが、変換方法がわかりません)
1 に答える
3
正気 (および自由時間) を重視する場合は、組み込み関数を使用します。
int32_t *dest;
__m128 vf = _mm_set_ps(4.0f, 3.0f, 2.0f, 1.0f);
__m128i vi = _mm_cvttps_epi32(vf); // 4 x float -> 4 x int (with truncation)
_mm_store_epi32(dest, vi); // NB: use _mm_storeu_epi32 if `dest` not aligned
何らかの理由で asm を使用する必要がある場合、対応する命令_mm_cvttps_epi32
はcvttps2dq
.
于 2013-04-17T08:08:36.423 に答える