我如何传递一个直接的4位值到_mm256_blend_pd的最后一个参数



我试图使用_mm256_blend_pd,但我一直遇到编译器错误。在这种情况下,错误是gcc希望"最后一个参数必须是4位直接值"。我可以成功地传入一个硬编码的值,但是任何计算出来的值都会产生错误。

下面是一个人为的无用的程序,它演示了这个错误。我在使用gcc 4.6.3和gcc 4.8.3时遇到了错误。

#include <immintrin.h>
#include <stdlib.h>
int main() {
    __m256d zeroHit = {0};
    int j=rand()%3;
    int imm=(0x01);
    // This line will compile
    _mm256_store_pd(0,_mm256_blend_pd(zeroHit,*reinterpret_cast<__m256d*>(0),imm&0x0F)); 
    imm=(0x01 & (j!=0));
    // This line will produce the error
    _mm256_store_pd(0,_mm256_blend_pd(zeroHit,*reinterpret_cast<__m256d*>(0),imm&0x0F));
    return 0;
}

叫"immediate"是有原因的。它需要是一个编译时常数。——Mysticial

最新更新