有没有SSE/SSE2能够找到4位整数32位的最大/最小值的指令?我尝试搜索一些东西,但我发现只有16/8位的指令.提前致谢.
没有SSE4.1的最佳方式似乎是32位比较,然后使用该掩码进行混合:AND(mask, x) OR ANDN(mask, y).
// function max: a > b ? a : b
static inline Vec4i max(Vec4i const & a, Vec4i const & b) {
#if INSTRSET >= 5 // SSE4.1 supported
return _mm_max_epi32(a,b);
#else
__m128i greater = _mm_cmpgt_epi32(a,b);
return selectb(greater,a,b);
#endif
}
Run Code Online (Sandbox Code Playgroud)
我在github上对该库进行了一些大多数未经测试和尚未合并的更改.我的大多数变化都是对我有时间看的少数函数的重大改进(整数水平和,四字算术右移,四字乘法).(测试/反馈欢迎!)
但是很多现有代码都很好,所以我绝对建议使用那些包装类.当您在启用优化的情况下构建时,它们不会增加开销,并且它们使语法变得更加容易.例如,a+b而不是_mm_add_epi32(a,b).