访问SSE寄存器变量

时间:2014-10-12 13:37:59

标签: c++ 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.

但我最终没有运气。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这有一个固有的:_mm_cvtsi128_si32Do not treat a __mm128 as a memory variable:这会强制泄漏,并阻止它被放入登记册。

答案 1 :(得分: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;

编辑:正如Raymond指出it is discouraged__m128i视为内存变量。

因此我也投票给_mm_cvtsi128_si32

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