假设我有16个8位整数,我想将它们加载到__m128i使用SSE2中:
__m128i v = _mm_set_epi8(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
Run Code Online (Sandbox Code Playgroud)
我可以静态使用,_mm_set_epi8但我想动态地这样做; 值将在运行时决定.
C = userinput;
for(int i=0; i<16; i++)
{
load C*i on v at position i
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
一种方法是使用联合:
union {
__m128i v;
uint8_t a[sizeof(__m128i)];
} u;
Run Code Online (Sandbox Code Playgroud)
将值加载到数组a中,然后从v中读取SSE向量.
或者,如果您的数据已经在连续的内存中,那么只需使用_mm_load_si128(或者_mm_loadu_si128如果您不能保证16字节对齐).
| 归档时间: |
|
| 查看次数: |
5590 次 |
| 最近记录: |