我试图理解_mm256_testc_pd
,_mm256_testz_pd
和_mm256_testnzc_pd
内在函数,而我很难理解它们。
为了分析_mm256_testc_pd
,我确定了以下几种情况(第一个参数是a
,第二个b
是__mm256d
):
b
中的 all 个压缩双打均大于0,则ZF=1
,CF=1
除外,a
和b
中的两个 one 都互为<0 ,则为ZF=0
。!a
和b
中分别包装的 one 互为<0 ,则CF=0
。换句话说,值ZF=1
告诉我a)b
完全为正,或者b)对于b
中那些不为正的双精度值,存在a
中匹配的双精度数为负。值CF=1
告诉我c)b
完全为正,或d)对于b
中不为正的那些双倍,{{ 1}}是负面的。
我正确理解了吗?我对此有些困惑。此检查的目的是什么?我将这些内在函数用于什么?
答案 0 :(得分:2)
最常见的用例是测试比较操作的结果,其中比较的结果元素要么全部为1要么全部为0(因此测试符号位就足够了)–这使您可以实现谓词,例如“均使用_mm*_testz_p*
内在函数。
我从未发现其他任何变体的用途。