如何将 4 个浮点数的 ps 向量转换为 4 个双精度数并存储到 pd 数组?

How to convert a ps vector of 4 float to 4 doubles and store to a pd array?

是否可以使用 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 位 float 的 128 位存储,我需要将它们转换为 double

我无法更改 "source" pC 数组(即 double

本质上,这是your previous question的逆题。这种情况下需要先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)));
}