在MSVC上从__m128逐位转换为__m128i

时间:2012-11-29 18:06:25

标签: visual-studio sse

在Linux和Mac上,可以做到

__m128 x;
__m128i n = (__m128i)x;

此操作将x的位表示复制到n,对于实现在SSE浮点寄存器上操作的各种无分支条件操作非常有用。在MSVC 11上,它给出了

eikonal-generated.h(1228) : error C2440: 'type cast' : cannot convert from '__m128' to '__m128i'; No constructor could take the source type, or constructor overload resolution was ambiguous

Microsoft Visual Studio中的等效内容是什么?

请注意,我不是要求标准的float-to-int转换函数_mm_cvtepi32_ps,它可以进行数字上有意义的转换。

1 个答案:

答案 0 :(得分:17)

使用MSVC,您需要使用:

_mm_castsi128_ps用于从__m128i__m128

的按位投射

_mm_castps_si128用于从__m128__m128i

的按位投射

对于其他编译器(gcc,ICC, et al ),您可以使用普通的强制转换。