2014-10-12 127 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);