AVX2中的按位NOT /补码

时间:2017-09-18 05:44:57

标签: c++ bit-manipulation vectorization x86-64 avx2

似乎AVX2中没有按位NOT /补的内在函数。我是否想念它,或者我们应该做_mm256_xor_si256(a, _mm256_set1_epi64x(-1LL))之类的事情?如果是后者,它是最佳的吗?装配中是否没有矢量NOT指令?

1 个答案:

答案 0 :(得分:2)

是的,唯一的SIMD按位NOT是具有全1的PXOR / XORPS,在MMX,SSE *和AVX1 / 2中。

AVX512F可以使用vpternlogd same,same,same避免使用单独的向量常量,并且可以立即使用。 (有关详细信息,请参阅我对该副本的回答与vpxordIs NOT missing from SSE, AVX?

理想情况下,您可以安排算法以避免实际上不需要某些东西。例如,使用PANDN代替PAND。或者稍后将其反转为其他内容的一部分。但如果你最终需要反转,那就是如何。

可以使用vpcmpeqd same,same,same生成全1常量。使用内在函数,让编译器通过编写_mm256_set1_epi32(-1)为您完成此操作。 (元素大小显然与set1(-1)无关,使用任何对语法有意义的算法。)