穷人是_mm_cvttpd_epi64的替代品

Wal*_*ter 5 c c++ avx avx512

AXV512DQ,我们发现_mm_cvttpd_epi64,例如在文件中avx512vldqintrin.h

static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cvttpd_epi64 (__m128d __A) {
  return (__m128i) __builtin_ia32_cvttpd2qq128_mask ((__v2df) __A,
               (__v2di) _mm_setzero_si128(),
               (__mmask8) -1);
}
Run Code Online (Sandbox Code Playgroud)

它将两个打包的64位浮点数(__m128d)转换为两个打包的64位整数(__m128i).还有_mm256_cvttpd_epi64用于将四个打包的64位浮点数(__m256d)转换为四个打包的64位整数(__m256i).

但是,很多机器都不支持AXV512DQ.所以我想知道一个穷人的最佳选择是什么.

我应该说我已经满意的解决方案仅适用于64位浮点数,可以无损转换为32位浮点数.