访问SSE寄存器变量

Accessing an SSE register variable

本文关键字:变量 寄存器 SSE 访问      更新时间:2023-10-16

我想访问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.

但我最后运气不佳。

知道吗?

这有一个内在的:_mm_cvtsi128_si32。不要将__mm128视为内存变量:这会强制溢出并防止它被放入寄存器。

你很接近,你得到了错误的优先级:

__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所指出的,不鼓励将__m128i视为内存变量。

因此,我也投票给_mm_cvtsi128_si32

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