2014-06-18 4 views
1

_mm256_blend_pd를 사용하려고하는데 컴파일러 오류가 계속 발생합니다. 이 경우, gcc는 "마지막 인수는 4 비트 즉석이어야합니다"라는 오류가 발생합니다. 성공적으로 하드 코딩 된 값을 전달할 수 있지만 계산 된 값으로 오류가 발생합니다._mm256_blend_pd의 마지막 인수에 즉시 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; 
} 
+2

이유는 "즉각적인"이라고합니다. 컴파일 시간 상수가 필요합니다. – Mysticial

+1

@Mysticial : 솔직히 말해서 나는 그 이름이 모두 직관적이라고 생각하지 않는다. = P – Mehrdad

+0

@Mehrdad 맞습니다. 나는 내가이 용어를 당연한 것으로 여기는 걸 오랫동안 해왔다고 생각한다. :) – Mysticial

답변

2

이유 때문에 "즉각적인"이라고합니다. 컴파일 시간 상수가 필요합니다. - 신비한