我在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推出时,他们为什么不扩展此指令?

  • 谢谢!

    最佳答案

    根据this文档:__m128d _mm_cvtps_epi32(__m128d a)生成cvtps2dq指令,该指令可以执行您想要的操作。

    09-04 07:43