我正在尝试在 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
根据这个:
使用仅在运行时才知道的控制掩码进行随机播放应该是完全可行的(如果不是,那么随机播放就没有太多意义了?)。Shuffle 也应该返回 a __m256i
,但 clang 似乎认为该方法没有返回任何内容。
我包括<immintrin.h>
.
我也尝试过置换,似乎同样破碎。有什么想法可以按照 Clang 中的规定进行随机播放吗?