1

我在 XMM 寄存器中有一堆打包的浮点数(使用 SSE 内在函数):

__m128 xmm = _mm_set_ps(4.0f, 3.0f, 2.0f, 1.0f);

我想一次性将所有这些转换为整数。我找到了一个内在函数,它可以满足我的需求(_mm_cvtps_pi16()),但它产生 4x16 位short而不是完整的int_mm_cvtps_pi32()称为产生int的内在函数,但仅适用于 中的两个较低值xmm。我可以使用它,提取值,移动东西并再次使用它,但是有没有更简单的方法?为什么没有简单的 32 位压缩浮点 -> 32 位整数指令?当然两者都适合 XMM 寄存器的同一个空间?

编辑:好的,我现在看到_mm_cvtps_pi32()返回 __m64 而不是 __m128,这意味着它在 MMX 样式的 MM... 寄存器上运行。这可以解释为什么它只返回两个整数,但现在我想知道:

  • 为 x64 编译时会遇到问题吗?据报道,那里不支持 __m64 ......
  • 当 SSE 推出时,他们为什么不扩展这条指令?

谢谢!

4

2 回答 2

4

根据这个文档:__m128d _mm_cvtps_epi32(__m128d a)生成一个cvtps2dq指令,它做你想要的。

于 2013-09-17T23:36:50.263 回答
1

使用文档(_mm_cvtps_epi32):

魔术文档。

于 2013-09-17T23:41:14.480 回答