我试图使用_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