_mm256_testc_pd,_mm256_testz_pd和_mm256_testnzc_pd有什么用途?

时间:2018-11-21 11:04:46

标签: x86 sse simd intrinsics avx

我试图理解_mm256_testc_pd_mm256_testz_pd_mm256_testnzc_pd内在函数,而我很难理解它们。

为了分析_mm256_testc_pd,我确定了以下几种情况(第一个参数是a,第二个b__mm256d):

  • 如果b中的 all 个压缩双打均大于0,则ZF=1CF=1除外,
  • 如果每个ab中的两个 one 都互为<0 ,则为ZF=0
  • 如果在两个!ab中分别包装的 one 互为<0 ,则CF=0

换句话说,值ZF=1告诉我a)b完全为正,或者b)对于b中那些不为正的双精度值,存在a中匹配的双精度数为负。值CF=1告诉我c)b完全为正,或d)对于b中不为正的那些双倍,{{ 1}}是负面的。

我正确理解了吗?我对此有些困惑。此检查的目的是什么?我将这些内在函数用于什么?

1 个答案:

答案 0 :(得分:2)

最常见的用例是测试比较操作的结果,其中比较的结果元素要么全部为1要么全部为0(因此测试符号位就足够了)–这使您可以实现谓词,例如“均使用_mm*_testz_p*内在函数。

我从未发现其他任何变体的用途。