我正在尝试理解 _mm256_testc_pd
、_mm256_testz_pd
和 _mm256_testnzc_pd
内在函数,但我很难理解它们。
为了分析_mm256_testc_pd
,我确定了以下情况(a
是第一个,b
是第二个__mm256d
> 参数`):
- 如果
b
中的所有压缩 double 均 > 0,则ZF=1
、CF=1
、除外: - 如果
a
和b
中的一个 double 压缩互为 < 0,则ZF =0
。 - 如果
!a
和b
中的一个双倍压缩相互<0,则CF=0
。
换句话说,ZF=1
的值告诉我 a) b
完全是正数,或者 b) 对于 b 中的 double
不是正数,a
中有一个匹配的 double ,它是负数。 CF=1
的值告诉我,要么 c) b
完全为正,要么 d) 对于 b
中的那些 double 不是正数,!a
中有一个匹配的 double 为负数。
我的理解正确吗?我对此有点困惑。这个检查有什么意义呢?我将使用这些内在函数做什么?
最佳答案
最常见的用例是测试比较操作的结果,其中比较的结果元素全为 1 或全 0(因此测试符号位就足够了) - 这使您能够实现诸如“使用 _mm*_testz_p*
内在函数“全部相等”或“任何大于”等。
我从未发现任何其他变体的用途。
关于x86 - _mm256_testc_pd、_mm256_testz_pd、_mm256_testnzc_pd 有何用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53410744/