Bad*_*r99 5 c++ sse simd reinterpret-cast
是不是像
__m128 a = something;
__m128i b = reinterpret_cast<__m128i>(a);
Run Code Online (Sandbox Code Playgroud)
安全还是未定义?如果未定义,它是否至少适用于所有主要编译器(gcc、clang、msvc、icc)?我用 gcc 在我的电脑上测试过它,它可以工作,但我不确定它是否便携。我知道我可以使用_mm_castps_si128(),但是由于模板的原因,第一种方式恰好更方便。
不,它不可移植并且行为未定义;__m128float和is用于__m128i整数类型,这些不是兼容的类型。
事实上,它甚至无法在 MSVC 2017 中编译:
error C2440: 'reinterpret_cast': cannot convert from '__m128' to '__m128i'
Run Code Online (Sandbox Code Playgroud)
使用强制转换内在函数:
__m128 a = something;
__m128i b = _mm_castps_si128(a);
Run Code Online (Sandbox Code Playgroud)