在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,它可以进行数字上有意义的转换。
答案 0 :(得分:17)
使用MSVC,您需要使用:
_mm_castsi128_ps用于从__m128i
到__m128
和
_mm_castps_si128用于从__m128
到__m128i
对于其他编译器(gcc,ICC, et al ),您可以使用普通的强制转换。