访问SSE寄存器变量
Accessing an SSE register variable
我想访问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);
相关文章:
- 有没有办法强制C++编译器将变量存储在寄存器中?
- "变量":函数中函数作用域不允许初始化的自动或寄存器变量'naked'
- 是否可以在 GCC 中使用带有 C++17 的显式寄存器变量?
- 告诉编译器我希望变量始终存储在寄存器中的正确方法是什么
- 什么是有效的寄存器变量类型
- 物理寄存器和英特尔SIMD变量之间的关系
- 指向寄存器变量的指针
- 如何使优化器正确地将变量放入寄存器中
- 将EAX寄存器存储在变量中
- 如何从汇编寄存器中获取字符串并将其存储在C++中的变量中
- 是阻塞xmm/ymm寄存器的静态/静态本地SSE/AVX变量
- 为LLVM中的变量使用特定的寄存器
- 访问SSE寄存器变量
- C和C++中寄存器变量的地址
- GDB - 获取寄存器的变量名称
- 通过引用传递寄存器变量
- c++局部变量和寄存器
- 在c++中,成员变量(属性)可以驻留在寄存器中吗?
- 如何知道变量是在寄存器中,还是在堆栈上?
- 什么是寄存器缓存,它与const变量有什么关系