我试图使用clang和gcc交叉编译一个项目,但在使用_mm_max_ss
时遇到了一些奇怪的差异。
__m128 a = _mm_set_ss(std::numeric_limits<float>::quiet_NaN());
__m128 b = _mm_set_ss(2.0f);
__m128 c = _mm_max_ss(a,b);
__m128 d = _mm_max_ss(b,a);
当涉及NaN时,我期望std::max
的类型行为,但clang和gcc给出了不同的结果:
Clang: (what I expected)
c: 2.000000 0.000000 0.000000 0.000000
d: nan 0.000000 0.000000 0.000000
Gcc: (Seems to ignore order)
c: nan 0.000000 0.000000 0.000000
d: nan 0.000000 0.000000 0.000000
使用 _mm_max_ps 函数时,它表现出了期望的效果。我尝试过使用 -ffast-math 和 -fno-fast-math 参数但似乎没有影响。有什么方法可以使不同编译器之间的行为更加相似?
Godbolt 链接 在这里