1

我正在尝试在 Clang 上编译一些 AVX2 代码。但是,似乎 AVX2 的 clangs 实现不符合英特尔的内在文档。

这段代码

static inline __m256i maskCompress(const Vec4q& input, const uint8_t bitMask) {
    const int mask = maskCompressLUT4[bitMask];
#ifdef __AVX2__
    __m256i retval = _mm256_shuffle_epi32(input, mask);
    return retval;
#else ...
}

结果是:

error: cannot initialize a variable of type '__m256i' with an rvalue of type 'void'

如果尝试只是进行洗牌,我会得到:

error: index for __builtin_shufflevector must be a constant integer

根据这个:

https://software.intel.com/sites/products/documentation/doclib/iss/2013/compiler/cpp-lin/GUID-04EC3E64-539B-414D-AE0E-D2B2DDBDB401.htm

使用仅在运行时才知道的控制掩码进行随机播放应该是完全可行的(如果不是,那么随机播放就没有太多意义了?)。Shuffle 也应该返回 a __m256i,但 clang 似乎认为该方法没有返回任何内容。

我包括<immintrin.h>.

我也尝试过置换,似乎同样破碎。有什么想法可以按照 Clang 中的规定进行随机播放吗?

4

0 回答 0