繁体   English   中英

SSE:将__m128转换为float

[英]SSE: convert __m128 to float

我有以下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;

直到for循环结束的所有内容都有效。 我现在要做的是将__m128类型转换回float。 因为它存储了4个浮点数,我认为我很容易将其转换为浮动*。 我究竟做错了什么? (这是一个测试代码,所以不要怀疑)。 我基本上尝试了所有可能的转换。 谢谢你的帮助。

您需要使用_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);

如果你投射得当,我相信投射是有效的。 我没有在我面前的代码,但我很确定这对我有用:

float *arrq = reinterpret_cast<float*>(&pDest);

请注意,它使用C ++强制转换来描述您正在执行的操作,并将其地址转换为指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM