我有以下C代码:
__m128 pSrc1 = _mm_set1_ps(4.0f);
__m128 pDest;
int i;
for (i=0;i<100;i++) {
m1 = _mm_mul_ps(pSrc1, pSrc1);
m2 = _mm_mul_ps(pSrc1, pSrc1);
m3 = _mm_add_ps(m1, m2);
pDest = _mm_add_ps(m3, m3);
}
float *arrq = (float*) pDest;
Run Code Online (Sandbox Code Playgroud)
直到for循环结束的所有内容都有效.我现在要做的是将__m128类型转换回float.因为它存储了4个浮点数,我认为我很容易将其转换为浮动*.我究竟做错了什么?(这是一个测试代码,所以不要怀疑).我基本上尝试了所有可能的转换.谢谢你的帮助.
Ant*_*eru 10
您需要使用_mm_store_ps它将它重新放回浮点数.码:
// result must be 16-byte aligned
float result [4];
_mm_store_ps (result, pDest);
// If result is not 16-byte aligned, use _mm_storeu_ps
// On modern CPUs this is just as fast as _mm_store_ps if
// result is 16-byte aligned, but works in all other cases as well
_mm_storeu_ps (result, pDest);
Run Code Online (Sandbox Code Playgroud)