我想访问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.
但我最终没有运气。
有什么想法吗?
答案 0 :(得分:2)
这有一个固有的:_mm_cvtsi128_si32。 Do 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);