我正在 Linux 上开发 Core i7 并使用 g++ 4.63。
我尝试了以下代码:
#include <iostream>
#include <immintrin.h>
int main() {
__m256d a = _mm256_set_pd(1,2,3,4);
__m256d z = _mm256_setzero_pd();
std::cout << _mm256_testz_pd(a,a) << std::endl;
std::cout << _mm256_testz_pd(z,z) << std::endl;
std::cout << _mm256_testz_pd(a,z) << std::endl;
}
它打印了 3 个 1。我期望其中至少有一个是 0。
我尝试使用_mm256_castpd_si256
然后_mm256_testz_si256
,它会在第一行打印 0。
为什么?