2014-10-12 128 views
4

我想訪問SSE變量的各個元素。那可能嗎。例如,訪問一個SSE寄存器變量

__m128i a = _mm_set_epi32(10,15,20,30); 

現在,我只想訪問第一個元素。例如在上述情況下爲30。我看到前面的例子在stackoverflow爲

int *val = (int*) &a; 

然後通過val [0]訪問。但我不想要任何中間變量。我試過類似下面的東西

int b = ((int*)a[0]) and similarly other things. 

但我最終沒有運氣。

有什麼想法?

回答

1

你接近,你得到precedence錯誤:

__m128i a = _mm_set_epi32(10,15,20,30); 
// int b = ((int*)a[0]); // [] has more precedence, wrong 
int b = ((int*)&a)[0]; // Right 
cout << b; 

編輯:作爲雷蒙德指出it is discouraged治療__m128i作爲內存變量。

因此我也投票支持_mm_cvtsi128_si32

__m128i a = _mm_set_epi32(10,15,20,30); 
std::cout << _mm_cvtsi128_si32(a);