首页 > 解决方案 > 如何将 4 个浮点数的 ps 向量转换为 4 个双精度数并存储到 pd 数组?

问题描述

是否可以使用SSE2/SIMD__m128值 (4 float) 存储到 的数组中double

我需要从这段代码切换:

double *pC = c[voiceIndex];
__m128d v_result;

_mm_store_pd(pC, v_result);

对此:

double *pC = c[voiceIndex];
__m128 v_result_float;

_mm_store_ps(pC, v_result_float);

除了不做 4x 32 位的 128 位存储float,我需要将它们转换为double.

我无法更改“源”pC数组(即double

标签: c++type-conversionsimdsse2

解决方案


本质上,这是与您之前的问题相反的问题。在这种情况下,您需要在转换后半部分之前将高位字movhlps( ) 转换为低位字:_mm_movelh_ps

void foo(double* dest, __m128 input) 
{
    // assuming dest is nicely aligned
    _mm_store_pd(dest,   _mm_cvtps_pd(input));
    _mm_store_pd(dest+2, _mm_cvtps_pd(_mm_movehl_ps(input, input)));
}

推荐阅读